diff --git a/api/.codemodsignore b/api/.codemodsignore deleted file mode 100644 index 52900c05968..00000000000 --- a/api/.codemodsignore +++ /dev/null @@ -1,2 +0,0 @@ -node_modules -codemods/ diff --git a/api/.depcheckrc b/api/.depcheckrc index 95d3bf788af..e584121ca09 100644 --- a/api/.depcheckrc +++ b/api/.depcheckrc @@ -1,12 +1,20 @@ ignores: [ + '@babel/plugin-syntax-import-assertions', 'bookshelf-validate', - 'mocha-junit-reporter', 'eslint-plugin-mocha', 'eslint-plugin-yml', + 'hapi-swagger', + 'hapi-sentry', 'jscodeshift', + 'mocha-junit-reporter', + 'pg-connection-string', 'pino-pretty', ] + +# @babel/plugin-syntax-import-assertions is used by eslint +# see https://github.com/babel/babel/blob/main/packages/babel-plugin-syntax-import-assertions/README.md + # "bookshelf-validate" is used in ./lib/infrastructure/bookshelf.js # code => bookshelf.plugin('bookshelf-validate', # see https://github.com/kripod/bookshelf-validate#configuration @@ -23,6 +31,17 @@ ignores: # code => plugins: - yaml # see https://github.com/ota-meshi/eslint-plugin-yml#book-usage +# "hapi-sentry" is used in ./lib/infrastructure/plugins/sentry.js +# see https://github.com/hydra-newmedia/hapi-sentry + +# "hapi-swagger" is used in ./lib/application/authentication/index.js +# see https://github.com/hapi-swagger/hapi-swagger + +# @babel/plugin-syntax-import-assertions is used by eslint +# see https://github.com/babel/babel/blob/main/packages/babel-plugin-syntax-import-assertions/README.md + # "pino-pretty" is used in ../lib/infrastructure/logger.js # code => target: 'pino-pretty' # see https://github.com/pinojs/pino-pretty#programmatic-integration + +# "pg-connection-string" is used in api/tests/acceptance/database/configuration.cjs diff --git a/api/.eslintignore b/api/.eslintignore index 6e2affd079f..5be701dfcbd 100644 --- a/api/.eslintignore +++ b/api/.eslintignore @@ -1,4 +1,4 @@ # https://eslint.org/docs/user-guide/configuring#eslintignore # .file are implicitly ignored, unless explicitly specified here node_modules/ -codemods/ +nyc.config.js diff --git a/api/.eslintrc.yaml b/api/.eslintrc.yaml index 62ed23c07ba..c3caaaeb990 100644 --- a/api/.eslintrc.yaml +++ b/api/.eslintrc.yaml @@ -4,11 +4,18 @@ extends: - 'plugin:mocha/recommended' - 'plugin:prettier/recommended' - 'plugin:chai-expect/recommended' + - 'plugin:node/recommended-module' + - 'plugin:import/recommended' + parserOptions: ecmaVersion: 2020 requireConfigFile: false + babelOptions: + parserOpts: + plugins: + - importAssertions -parser: "@babel/eslint-parser" +parser: '@babel/eslint-parser' globals: include: true @@ -41,3 +48,16 @@ rules: # Refer to scripts/_template.js for reliable alternatives to process.exit() node/no-process-exit: error unicorn/no-empty-file: error + node/no-unpublished-import: + - error + - allowModules: + - chai + - flush-write-stream + - form-data + - mockdate + - nock + - proxyquire + - sinon + - split2 + - stream-to-promise + - pino-pretty diff --git a/api/codemods/migrate-cjs-to-esm/package-lock.json b/api/codemods/migrate-cjs-to-esm/package-lock.json deleted file mode 100644 index dbe44a940af..00000000000 --- a/api/codemods/migrate-cjs-to-esm/package-lock.json +++ /dev/null @@ -1,8823 +0,0 @@ -{ - "name": "migrate-cjs-to-esm", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "migrate-cjs-to-esm", - "dependencies": { - "jscodeshift": "^0.14.0" - }, - "devDependencies": { - "@types/jscodeshift": "^0.11.6", - "jest": "^29.4.3" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", - "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - }, - "node_modules/@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", - "dependencies": { - "@babel/types": "^7.21.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "peer": true, - "dependencies": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", - "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz", - "integrity": "sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "peer": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - }, - "peerDependencies": { - "@babel/core": "^7.4.0-0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "peer": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", - "dependencies": { - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "dependencies": { - "@babel/types": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "peer": true, - "dependencies": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", - "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.13.0" - } - }, - "node_modules/@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "peer": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.12.0" - } - }, - "node_modules/@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "peer": true, - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "peer": true, - "dependencies": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", - "peer": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "peer": true, - "dependencies": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-flow-strip-types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz", - "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-flow": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-for-of": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "peer": true, - "dependencies": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", - "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", - "dependencies": { - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "peer": true, - "dependencies": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "peer": true, - "dependencies": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-parameters": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", - "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", - "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.9" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "peer": true, - "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", - "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-flow-strip-types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "peer": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/preset-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", - "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-transform-typescript": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.21.0.tgz", - "integrity": "sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==", - "dependencies": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/register/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@babel/register/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@babel/register/node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "peer": true - }, - "node_modules/@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "peer": true, - "dependencies": { - "regenerator-runtime": "^0.13.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", - "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.2", - "@babel/types": "^7.21.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", - "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.3.tgz", - "integrity": "sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==", - "dev": true, - "dependencies": { - "@jest/types": "^29.4.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.3.tgz", - "integrity": "sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.4.3", - "@jest/reporters": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.4.3", - "jest-config": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-resolve-dependencies": "^29.4.3", - "jest-runner": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", - "jest-watcher": "^29.4.3", - "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz", - "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "jest-mock": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==", - "dev": true, - "dependencies": { - "expect": "^29.4.3", - "jest-snapshot": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz", - "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz", - "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.4.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.3.tgz", - "integrity": "sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/expect": "^29.4.3", - "@jest/types": "^29.4.3", - "jest-mock": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.3.tgz", - "integrity": "sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", - "@jridgewell/trace-mapping": "^0.3.15", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", - "jest-worker": "^29.4.3", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.25.16" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.3.tgz", - "integrity": "sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.3.tgz", - "integrity": "sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.4.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.3.tgz", - "integrity": "sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.4.3", - "@jridgewell/trace-mapping": "^0.3.15", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.25.23", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz", - "integrity": "sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^2.0.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.3.0" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/jscodeshift": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/@types/jscodeshift/-/jscodeshift-0.11.6.tgz", - "integrity": "sha512-3lJ4DajWkk4MZ1F7q+1C7jE0z0xOtbu0VU/Kg3wdPq2DUvJjySSlu3B5Q/bICrTxugLhONBO7inRUWsymOID/A==", - "dev": true, - "dependencies": { - "ast-types": "^0.14.1", - "recast": "^0.20.3" - } - }, - "node_modules/@types/node": { - "version": "18.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", - "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "dev": true, - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.3.tgz", - "integrity": "sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.4.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.4.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz", - "integrity": "sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "peer": true, - "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "peer": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "peer": true, - "dependencies": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz", - "integrity": "sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.4.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001457", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", - "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "node_modules/core-js-compat": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.28.0.tgz", - "integrity": "sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==", - "peer": true, - "dependencies": { - "browserslist": "^4.21.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deepmerge": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.302", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.302.tgz", - "integrity": "sha512-Uk7C+7aPBryUR1Fwvk9VmipBcN9fVsqBO57jV2ZjTm+IZ6BMNqu7EDVEg2HxCNufk6QcWlFsBkhQyQroB2VWKw==" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.4.3", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "engines": { - "node": ">=4" - } - }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/find-cache-dir/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flow-parser": { - "version": "0.200.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.200.0.tgz", - "integrity": "sha512-01eYYVlCEO2p6JexhTbMbDNPeDKQZV++SJbaHE/HzypTkV83oJmsJQVjVCGD8FYWiQ3ha9ALD/AHwsFhPwnZJA==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "engines": { - "node": ">=4" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dependencies": { - "isobject": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.3.tgz", - "integrity": "sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==", - "dev": true, - "dependencies": { - "@jest/core": "^29.4.3", - "@jest/types": "^29.4.3", - "import-local": "^3.0.2", - "jest-cli": "^29.4.3" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.3.tgz", - "integrity": "sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.3.tgz", - "integrity": "sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/expect": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", - "p-limit": "^3.1.0", - "pretty-format": "^29.4.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.3.tgz", - "integrity": "sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==", - "dev": true, - "dependencies": { - "@jest/core": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.3.tgz", - "integrity": "sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.4.3", - "@jest/types": "^29.4.3", - "babel-jest": "^29.4.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.4.3", - "jest-environment-node": "^29.4.3", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-runner": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.4.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", - "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.3.tgz", - "integrity": "sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==", - "dev": true, - "dependencies": { - "@jest/types": "^29.4.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.4.3", - "pretty-format": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz", - "integrity": "sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.3.tgz", - "integrity": "sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.4.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", - "jest-worker": "^29.4.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.3.tgz", - "integrity": "sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz", - "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", - "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz", - "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.4.3", - "@types/node": "*", - "jest-util": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.3.tgz", - "integrity": "sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.3.tgz", - "integrity": "sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.3.tgz", - "integrity": "sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.4.3", - "@jest/environment": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-leak-detector": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-util": "^29.4.3", - "jest-watcher": "^29.4.3", - "jest-worker": "^29.4.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.3.tgz", - "integrity": "sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.4.3", - "@jest/fake-timers": "^29.4.3", - "@jest/globals": "^29.4.3", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz", - "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.4.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.4.3", - "jest-get-type": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", - "natural-compare": "^1.4.0", - "pretty-format": "^29.4.3", - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/jest-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", - "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", - "dev": true, - "dependencies": { - "@jest/types": "^29.4.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.3.tgz", - "integrity": "sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==", - "dev": true, - "dependencies": { - "@jest/types": "^29.4.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.3.tgz", - "integrity": "sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.4.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", - "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.4.3", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", - "dependencies": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "bin": { - "jscodeshift": "bin/jscodeshift.js" - }, - "peerDependencies": { - "@babel/preset-env": "^7.1.6" - } - }, - "node_modules/jscodeshift/node_modules/ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", - "dependencies": { - "tslib": "^2.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jscodeshift/node_modules/recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", - "dependencies": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/jscodeshift/node_modules/write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "peer": true - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node_modules/node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "dependencies": { - "minimatch": "^3.0.2" - }, - "engines": { - "node": ">= 0.10.5" - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "engines": { - "node": ">=6" - } - }, - "node_modules/pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/recast": { - "version": "0.20.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", - "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", - "dev": true, - "dependencies": { - "ast-types": "0.14.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - }, - "engines": { - "node": ">= 4" - } - }, - "node_modules/regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "peer": true - }, - "node_modules/regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "peer": true, - "dependencies": { - "regenerate": "^1.4.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "peer": true - }, - "node_modules/regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "peer": true, - "dependencies": { - "@babel/runtime": "^7.8.4" - } - }, - "node_modules/regexpu-core": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz", - "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==", - "peer": true, - "dependencies": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "peer": true, - "dependencies": { - "jsesc": "~0.5.0" - }, - "bin": { - "regjsparser": "bin/parser" - } - }, - "node_modules/regjsparser/node_modules/jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "peer": true, - "bin": { - "jsesc": "bin/jsesc" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", - "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "dependencies": { - "kind-of": "^6.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "dependencies": { - "rimraf": "~2.6.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "peer": true, - "dependencies": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "peer": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "node_modules/yargs": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.0.tgz", - "integrity": "sha512-dwqOPg5trmrre9+v8SUo2q/hAwyKoVfu8OC1xPHKJGNdxAvPl4sKxL4vBnh3bQz/ZvvGAFeA5H3ou2kcOY8sQQ==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "requires": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "requires": { - "@babel/highlight": "^7.18.6" - } - }, - "@babel/compat-data": { - "version": "7.20.14", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.14.tgz", - "integrity": "sha512-0YpKHD6ImkWMEINCyDAD0HLLUH/lPCefG8ld9it8DJB2wnApraKuhgYTvTY1z7UFIfBTGy5LwncZ+5HWWGbhFw==" - }, - "@babel/core": { - "version": "7.20.12", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz", - "integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==", - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.20.7", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helpers": "^7.20.7", - "@babel/parser": "^7.20.7", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.12", - "@babel/types": "^7.20.7", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==" - } - } - }, - "@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", - "requires": { - "@babel/types": "^7.21.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "dependencies": { - "@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - } - } - }, - "@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", - "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", - "peer": true, - "requires": { - "@babel/helper-explode-assignable-expression": "^7.18.6", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - } - }, - "@babel/helper-create-class-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.0.tgz", - "integrity": "sha512-Q8wNiMIdwsv5la5SPxNYzzkPnjgC0Sy0i7jLkVOCdllu/xcVNkr3TeZzbHBJrj+XXRqzX5uCyCoV9eu6xUG7KQ==", - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-member-expression-to-functions": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/helper-split-export-declaration": "^7.18.6" - } - }, - "@babel/helper-create-regexp-features-plugin": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.0.tgz", - "integrity": "sha512-N+LaFW/auRSWdx7SHD/HiARwXQju1vXTW4fKr4u5SgBUTm51OKEjKgj+cs00ggW3kEvNqwErnlwuq7Y3xBe4eg==", - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "regexpu-core": "^5.3.1" - } - }, - "@babel/helper-define-polyfill-provider": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", - "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", - "peer": true, - "requires": { - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-plugin-utils": "^7.16.7", - "debug": "^4.1.1", - "lodash.debounce": "^4.0.8", - "resolve": "^1.14.2", - "semver": "^6.1.2" - } - }, - "@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" - }, - "@babel/helper-explode-assignable-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", - "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", - "peer": true, - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "requires": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-member-expression-to-functions": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", - "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", - "requires": { - "@babel/types": "^7.21.0" - } - }, - "@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" - } - }, - "@babel/helper-optimise-call-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", - "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==" - }, - "@babel/helper-remap-async-to-generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", - "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-wrap-function": "^7.18.9", - "@babel/types": "^7.18.9" - } - }, - "@babel/helper-replace-supers": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", - "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-member-expression-to-functions": "^7.20.7", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "requires": { - "@babel/types": "^7.20.2" - } - }, - "@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", - "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", - "requires": { - "@babel/types": "^7.20.0" - } - }, - "@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "requires": { - "@babel/types": "^7.18.6" - } - }, - "@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==" - }, - "@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - }, - "@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==" - }, - "@babel/helper-wrap-function": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", - "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", - "peer": true, - "requires": { - "@babel/helper-function-name": "^7.19.0", - "@babel/template": "^7.18.10", - "@babel/traverse": "^7.20.5", - "@babel/types": "^7.20.5" - } - }, - "@babel/helpers": { - "version": "7.20.13", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.13.tgz", - "integrity": "sha512-nzJ0DWCL3gB5RCXbUO3KIMMsBY2Eqbx8mBpKGE/02PgyRQFcPQLbkQ1vyy596mZLaP+dAfD+R4ckASzNVmW3jg==", - "requires": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.20.13", - "@babel/types": "^7.20.7" - } - }, - "@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "requires": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", - "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==" - }, - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz", - "integrity": "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.20.7.tgz", - "integrity": "sha512-sbr9+wNE5aXMBBFBICk01tt7sBf2Oc9ikRFEcem/ZORup9IMUdNhW7/wVLEbbtlWOsEubJet46mHAL2C8+2jKQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-proposal-optional-chaining": "^7.20.7" - } - }, - "@babel/plugin-proposal-async-generator-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", - "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", - "peer": true, - "requires": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9", - "@babel/plugin-syntax-async-generators": "^7.8.4" - } - }, - "@babel/plugin-proposal-class-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", - "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-class-static-block": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.21.0.tgz", - "integrity": "sha512-XP5G9MWNUskFuP30IfFSEFB0Z6HzLIUcjYM4bYOPHXl7eiJ9HFv8tWj6TXTN5QODiEhDZAeI4hLok2iHFFV4hw==", - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-class-static-block": "^7.14.5" - } - }, - "@babel/plugin-proposal-dynamic-import": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.18.6.tgz", - "integrity": "sha512-1auuwmK+Rz13SJj36R+jqFPMJWyKEDd7lLSdOj4oJK0UTgGueSAtkrCvz9ewmgyU/P941Rv2fQwZJN8s6QruXw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-dynamic-import": "^7.8.3" - } - }, - "@babel/plugin-proposal-export-namespace-from": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.18.9.tgz", - "integrity": "sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3" - } - }, - "@babel/plugin-proposal-json-strings": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", - "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-json-strings": "^7.8.3" - } - }, - "@babel/plugin-proposal-logical-assignment-operators": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.20.7.tgz", - "integrity": "sha512-y7C7cZgpMIjWlKE5T7eJwp+tnRYM89HmRvWM5EQuB5BoHEONjmQ8lSNmBUwOyy/GFRsohJED51YBF79hE1djug==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" - } - }, - "@babel/plugin-proposal-nullish-coalescing-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.18.6.tgz", - "integrity": "sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" - } - }, - "@babel/plugin-proposal-numeric-separator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.18.6.tgz", - "integrity": "sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-numeric-separator": "^7.10.4" - } - }, - "@babel/plugin-proposal-object-rest-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", - "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", - "peer": true, - "requires": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-transform-parameters": "^7.20.7" - } - }, - "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", - "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" - } - }, - "@babel/plugin-proposal-optional-chaining": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.21.0.tgz", - "integrity": "sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", - "@babel/plugin-syntax-optional-chaining": "^7.8.3" - } - }, - "@babel/plugin-proposal-private-methods": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.18.6.tgz", - "integrity": "sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==", - "peer": true, - "requires": { - "@babel/helper-create-class-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0.tgz", - "integrity": "sha512-ha4zfehbJjc5MmXBlHec1igel5TJXXLDDRbuJ4+XT2TJcyD9/V1919BA8gMvsdHcNMBy4WBUBiRb3nw/EQUtBw==", - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5" - } - }, - "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", - "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "requires": { - "@babel/helper-plugin-utils": "^7.12.13" - } - }, - "@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-dynamic-import": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", - "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-export-namespace-from": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", - "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.8.3" - } - }, - "@babel/plugin-syntax-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.18.6.tgz", - "integrity": "sha512-LUbR+KNTBWCUAqRG9ex5Gnzu2IOkt8jRJbHHXFT9q+L9zm7M/QQbEqXyw1n1pohYvOyWC8CjeyjrSaIwiYjK7A==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-import-assertions": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", - "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "requires": { - "@babel/helper-plugin-utils": "^7.10.4" - } - }, - "@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "requires": { - "@babel/helper-plugin-utils": "^7.8.0" - } - }, - "@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "requires": { - "@babel/helper-plugin-utils": "^7.14.5" - } - }, - "@babel/plugin-syntax-typescript": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.20.0.tgz", - "integrity": "sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.19.0" - } - }, - "@babel/plugin-transform-arrow-functions": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", - "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-async-to-generator": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", - "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", - "peer": true, - "requires": { - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-remap-async-to-generator": "^7.18.9" - } - }, - "@babel/plugin-transform-block-scoped-functions": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", - "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-block-scoping": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", - "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-classes": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", - "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", - "peer": true, - "requires": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-optimise-call-expression": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-replace-supers": "^7.20.7", - "@babel/helper-split-export-declaration": "^7.18.6", - "globals": "^11.1.0" - } - }, - "@babel/plugin-transform-computed-properties": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", - "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/template": "^7.20.7" - } - }, - "@babel/plugin-transform-destructuring": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.20.7.tgz", - "integrity": "sha512-Xwg403sRrZb81IVB79ZPqNQME23yhugYVqgTxAhT99h485F4f+GMELFhhOsscDUB7HCswepKeCKLn/GZvUKoBA==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-dotall-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", - "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-duplicate-keys": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", - "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-exponentiation-operator": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", - "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", - "peer": true, - "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-flow-strip-types": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.21.0.tgz", - "integrity": "sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-flow": "^7.18.6" - } - }, - "@babel/plugin-transform-for-of": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", - "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", - "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", - "peer": true, - "requires": { - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", - "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-member-expression-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz", - "integrity": "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-modules-amd": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", - "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", - "peer": true, - "requires": { - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-commonjs": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", - "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", - "requires": { - "@babel/helper-module-transforms": "^7.21.2", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-simple-access": "^7.20.2" - } - }, - "@babel/plugin-transform-modules-systemjs": { - "version": "7.20.11", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", - "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", - "peer": true, - "requires": { - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-module-transforms": "^7.20.11", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-identifier": "^7.19.1" - } - }, - "@babel/plugin-transform-modules-umd": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", - "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", - "peer": true, - "requires": { - "@babel/helper-module-transforms": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", - "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.20.5", - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-new-target": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", - "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-object-super": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", - "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-replace-supers": "^7.18.6" - } - }, - "@babel/plugin-transform-parameters": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.20.7.tgz", - "integrity": "sha512-WiWBIkeHKVOSYPO0pWkxGPfKeWrCJyD3NJ53+Lrp/QMSZbsVPovrVl2aWZ19D/LTVnaDv5Ap7GJ/B2CTOZdrfA==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2" - } - }, - "@babel/plugin-transform-property-literals": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz", - "integrity": "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-regenerator": { - "version": "7.20.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", - "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "regenerator-transform": "^0.15.1" - } - }, - "@babel/plugin-transform-reserved-words": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz", - "integrity": "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-shorthand-properties": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", - "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-spread": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", - "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" - } - }, - "@babel/plugin-transform-sticky-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", - "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/plugin-transform-template-literals": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", - "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typeof-symbol": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", - "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.21.0.tgz", - "integrity": "sha512-xo///XTPp3mDzTtrqXoBlK9eiAYW3wv9JXglcn/u1bi60RW11dEUxIgA8cbnDhutS1zacjMRmAwxE0gMklLnZg==", - "requires": { - "@babel/helper-create-class-features-plugin": "^7.21.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-typescript": "^7.20.0" - } - }, - "@babel/plugin-transform-unicode-escapes": { - "version": "7.18.10", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.18.10.tgz", - "integrity": "sha512-kKAdAI+YzPgGY/ftStBFXTI1LZFju38rYThnfMykS+IXy8BVx+res7s2fxf1l8I35DV2T97ezo6+SGrXz6B3iQ==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.18.9" - } - }, - "@babel/plugin-transform-unicode-regex": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", - "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", - "peer": true, - "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.18.6", - "@babel/helper-plugin-utils": "^7.18.6" - } - }, - "@babel/preset-env": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.20.2.tgz", - "integrity": "sha512-1G0efQEWR1EHkKvKHqbG+IN/QdgwfByUpM5V5QroDzGV2t3S/WXNQd693cHiHTlCFMpr9B6FkPFXDA2lQcKoDg==", - "peer": true, - "requires": { - "@babel/compat-data": "^7.20.1", - "@babel/helper-compilation-targets": "^7.20.0", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.18.6", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-async-generator-functions": "^7.20.1", - "@babel/plugin-proposal-class-properties": "^7.18.6", - "@babel/plugin-proposal-class-static-block": "^7.18.6", - "@babel/plugin-proposal-dynamic-import": "^7.18.6", - "@babel/plugin-proposal-export-namespace-from": "^7.18.9", - "@babel/plugin-proposal-json-strings": "^7.18.6", - "@babel/plugin-proposal-logical-assignment-operators": "^7.18.9", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.18.6", - "@babel/plugin-proposal-numeric-separator": "^7.18.6", - "@babel/plugin-proposal-object-rest-spread": "^7.20.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.18.6", - "@babel/plugin-proposal-optional-chaining": "^7.18.9", - "@babel/plugin-proposal-private-methods": "^7.18.6", - "@babel/plugin-proposal-private-property-in-object": "^7.18.6", - "@babel/plugin-proposal-unicode-property-regex": "^7.18.6", - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-dynamic-import": "^7.8.3", - "@babel/plugin-syntax-export-namespace-from": "^7.8.3", - "@babel/plugin-syntax-import-assertions": "^7.20.0", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5", - "@babel/plugin-transform-arrow-functions": "^7.18.6", - "@babel/plugin-transform-async-to-generator": "^7.18.6", - "@babel/plugin-transform-block-scoped-functions": "^7.18.6", - "@babel/plugin-transform-block-scoping": "^7.20.2", - "@babel/plugin-transform-classes": "^7.20.2", - "@babel/plugin-transform-computed-properties": "^7.18.9", - "@babel/plugin-transform-destructuring": "^7.20.2", - "@babel/plugin-transform-dotall-regex": "^7.18.6", - "@babel/plugin-transform-duplicate-keys": "^7.18.9", - "@babel/plugin-transform-exponentiation-operator": "^7.18.6", - "@babel/plugin-transform-for-of": "^7.18.8", - "@babel/plugin-transform-function-name": "^7.18.9", - "@babel/plugin-transform-literals": "^7.18.9", - "@babel/plugin-transform-member-expression-literals": "^7.18.6", - "@babel/plugin-transform-modules-amd": "^7.19.6", - "@babel/plugin-transform-modules-commonjs": "^7.19.6", - "@babel/plugin-transform-modules-systemjs": "^7.19.6", - "@babel/plugin-transform-modules-umd": "^7.18.6", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.19.1", - "@babel/plugin-transform-new-target": "^7.18.6", - "@babel/plugin-transform-object-super": "^7.18.6", - "@babel/plugin-transform-parameters": "^7.20.1", - "@babel/plugin-transform-property-literals": "^7.18.6", - "@babel/plugin-transform-regenerator": "^7.18.6", - "@babel/plugin-transform-reserved-words": "^7.18.6", - "@babel/plugin-transform-shorthand-properties": "^7.18.6", - "@babel/plugin-transform-spread": "^7.19.0", - "@babel/plugin-transform-sticky-regex": "^7.18.6", - "@babel/plugin-transform-template-literals": "^7.18.9", - "@babel/plugin-transform-typeof-symbol": "^7.18.9", - "@babel/plugin-transform-unicode-escapes": "^7.18.10", - "@babel/plugin-transform-unicode-regex": "^7.18.6", - "@babel/preset-modules": "^0.1.5", - "@babel/types": "^7.20.2", - "babel-plugin-polyfill-corejs2": "^0.3.3", - "babel-plugin-polyfill-corejs3": "^0.6.0", - "babel-plugin-polyfill-regenerator": "^0.4.1", - "core-js-compat": "^3.25.1", - "semver": "^6.3.0" - } - }, - "@babel/preset-flow": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.18.6.tgz", - "integrity": "sha512-E7BDhL64W6OUqpuyHnSroLnqyRTcG6ZdOBl1OKI/QK/HJfplqK/S3sq1Cckx7oTodJ5yOXyfw7rEADJ6UjoQDQ==", - "requires": { - "@babel/helper-plugin-utils": "^7.18.6", - "@babel/helper-validator-option": "^7.18.6", - "@babel/plugin-transform-flow-strip-types": "^7.18.6" - } - }, - "@babel/preset-modules": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz", - "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==", - "peer": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", - "@babel/plugin-transform-dotall-regex": "^7.4.4", - "@babel/types": "^7.4.4", - "esutils": "^2.0.2" - } - }, - "@babel/preset-typescript": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.21.0.tgz", - "integrity": "sha512-myc9mpoVA5m1rF8K8DgLEatOYFDpwC+RkMkjZ0Du6uI62YvDe8uxIEYVs/VCdSJ097nlALiU/yBC7//3nI+hNg==", - "requires": { - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/helper-validator-option": "^7.21.0", - "@babel/plugin-transform-typescript": "^7.21.0" - } - }, - "@babel/register": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.21.0.tgz", - "integrity": "sha512-9nKsPmYDi5DidAqJaQooxIhsLJiNMkGr8ypQ8Uic7cIox7UCDsM7HuUGxdGT7mSDTYbqzIdsOWzfBton/YJrMw==", - "requires": { - "clone-deep": "^4.0.1", - "find-cache-dir": "^2.0.0", - "make-dir": "^2.1.0", - "pirates": "^4.0.5", - "source-map-support": "^0.5.16" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - } - } - }, - "@babel/regjsgen": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", - "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", - "peer": true - }, - "@babel/runtime": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", - "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", - "peer": true, - "requires": { - "regenerator-runtime": "^0.13.11" - } - }, - "@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - } - }, - "@babel/traverse": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", - "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", - "requires": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.2", - "@babel/types": "^7.21.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", - "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", - "requires": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - } - }, - "@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - } - }, - "@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true - }, - "@jest/console": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.4.3.tgz", - "integrity": "sha512-W/o/34+wQuXlgqlPYTansOSiBnuxrTv61dEVkA6HNmpcgHLUjfaUbdqt6oVvOzaawwo9IdW9QOtMgQ1ScSZC4A==", - "dev": true, - "requires": { - "@jest/types": "^29.4.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", - "slash": "^3.0.0" - } - }, - "@jest/core": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.4.3.tgz", - "integrity": "sha512-56QvBq60fS4SPZCuM7T+7scNrkGIe7Mr6PVIXUpu48ouvRaWOFqRPV91eifvFM0ay2HmfswXiGf97NGUN5KofQ==", - "dev": true, - "requires": { - "@jest/console": "^29.4.3", - "@jest/reporters": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.4.3", - "jest-config": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-resolve-dependencies": "^29.4.3", - "jest-runner": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", - "jest-watcher": "^29.4.3", - "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "@jest/environment": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.4.3.tgz", - "integrity": "sha512-dq5S6408IxIa+lr54zeqce+QgI+CJT4nmmA+1yzFgtcsGK8c/EyiUb9XQOgz3BMKrRDfKseeOaxj2eO8LlD3lA==", - "dev": true, - "requires": { - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "jest-mock": "^29.4.3" - } - }, - "@jest/expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-iktRU/YsxEtumI9zsPctYUk7ptpC+AVLLk1Ax3AsA4g1C+8OOnKDkIQBDHtD5hA/+VtgMd5AWI5gNlcAlt2vxQ==", - "dev": true, - "requires": { - "expect": "^29.4.3", - "jest-snapshot": "^29.4.3" - } - }, - "@jest/expect-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.4.3.tgz", - "integrity": "sha512-/6JWbkxHOP8EoS8jeeTd9dTfc9Uawi+43oLKHfp6zzux3U2hqOOVnV3ai4RpDYHOccL6g+5nrxpoc8DmJxtXVQ==", - "dev": true, - "requires": { - "jest-get-type": "^29.4.3" - } - }, - "@jest/fake-timers": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.3.tgz", - "integrity": "sha512-4Hote2MGcCTWSD2gwl0dwbCpBRHhE6olYEuTj8FMowdg3oQWNKr2YuxenPQYZ7+PfqPY1k98wKDU4Z+Hvd4Tiw==", - "dev": true, - "requires": { - "@jest/types": "^29.4.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" - } - }, - "@jest/globals": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.4.3.tgz", - "integrity": "sha512-8BQ/5EzfOLG7AaMcDh7yFCbfRLtsc+09E1RQmRBI4D6QQk4m6NSK/MXo+3bJrBN0yU8A2/VIcqhvsOLFmziioA==", - "dev": true, - "requires": { - "@jest/environment": "^29.4.3", - "@jest/expect": "^29.4.3", - "@jest/types": "^29.4.3", - "jest-mock": "^29.4.3" - } - }, - "@jest/reporters": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.4.3.tgz", - "integrity": "sha512-sr2I7BmOjJhyqj9ANC6CTLsL4emMoka7HkQpcoMRlhCbQJjz2zsRzw0BDPiPyEFDXAbxKgGFYuQZiSJ1Y6YoTg==", - "dev": true, - "requires": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", - "@jridgewell/trace-mapping": "^0.3.15", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", - "jest-worker": "^29.4.3", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - } - }, - "@jest/schemas": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.3.tgz", - "integrity": "sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==", - "dev": true, - "requires": { - "@sinclair/typebox": "^0.25.16" - } - }, - "@jest/source-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.4.3.tgz", - "integrity": "sha512-qyt/mb6rLyd9j1jUts4EQncvS6Yy3PM9HghnNv86QBlV+zdL2inCdK1tuVlL+J+lpiw2BI67qXOrX3UurBqQ1w==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.15", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - } - }, - "@jest/test-result": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.4.3.tgz", - "integrity": "sha512-Oi4u9NfBolMq9MASPwuWTlC5WvmNRwI4S8YrQg5R5Gi47DYlBe3sh7ILTqi/LGrK1XUE4XY9KZcQJTH1WJCLLA==", - "dev": true, - "requires": { - "@jest/console": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - } - }, - "@jest/test-sequencer": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.4.3.tgz", - "integrity": "sha512-yi/t2nES4GB4G0mjLc0RInCq/cNr9dNwJxcGg8sslajua5Kb4kmozAc+qPLzplhBgfw1vLItbjyHzUN92UXicw==", - "dev": true, - "requires": { - "@jest/test-result": "^29.4.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", - "slash": "^3.0.0" - } - }, - "@jest/transform": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.4.3.tgz", - "integrity": "sha512-8u0+fBGWolDshsFgPQJESkDa72da/EVwvL+II0trN2DR66wMwiQ9/CihaGfHdlLGFzbBZwMykFtxuwFdZqlKwg==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.4.3", - "@jridgewell/trace-mapping": "^0.3.15", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - } - }, - "@jest/types": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.4.3.tgz", - "integrity": "sha512-bPYfw8V65v17m2Od1cv44FH+SiKW7w2Xu7trhcdTLUmSv85rfKsP+qXSjO4KGJr4dtPSzl/gvslZBXctf1qGEA==", - "dev": true, - "requires": { - "@jest/schemas": "^29.4.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - } - }, - "@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "requires": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" - }, - "@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "requires": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "@sinclair/typebox": { - "version": "0.25.23", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.23.tgz", - "integrity": "sha512-VEB8ygeP42CFLWyAJhN5OklpxUliqdNEUcXb4xZ/CINqtYGTjL5ukluKdKzQ0iWdUxyQ7B0539PAUhHKrCNWSQ==", - "dev": true - }, - "@sinonjs/commons": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz", - "integrity": "sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==", - "dev": true, - "requires": { - "type-detect": "4.0.8" - } - }, - "@sinonjs/fake-timers": { - "version": "10.0.2", - "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz", - "integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==", - "dev": true, - "requires": { - "@sinonjs/commons": "^2.0.0" - } - }, - "@types/babel__core": { - "version": "7.20.0", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.0.tgz", - "integrity": "sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==", - "dev": true, - "requires": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "requires": { - "@babel/types": "^7.0.0" - } - }, - "@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "requires": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "@types/babel__traverse": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.18.3.tgz", - "integrity": "sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w==", - "dev": true, - "requires": { - "@babel/types": "^7.3.0" - } - }, - "@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "requires": { - "@types/istanbul-lib-coverage": "*" - } - }, - "@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "requires": { - "@types/istanbul-lib-report": "*" - } - }, - "@types/jscodeshift": { - "version": "0.11.6", - "resolved": "https://registry.npmjs.org/@types/jscodeshift/-/jscodeshift-0.11.6.tgz", - "integrity": "sha512-3lJ4DajWkk4MZ1F7q+1C7jE0z0xOtbu0VU/Kg3wdPq2DUvJjySSlu3B5Q/bICrTxugLhONBO7inRUWsymOID/A==", - "dev": true, - "requires": { - "ast-types": "^0.14.1", - "recast": "^0.20.3" - } - }, - "@types/node": { - "version": "18.14.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.0.tgz", - "integrity": "sha512-5EWrvLmglK+imbCJY0+INViFWUHg1AHel1sq4ZVSfdcNqGy9Edv3UB9IIzzg+xPaUcAgZYcfVs2fBcwDeZzU0A==", - "dev": true - }, - "@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, - "@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "@types/yargs": { - "version": "17.0.22", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", - "integrity": "sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "ast-types": { - "version": "0.14.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.14.2.tgz", - "integrity": "sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==", - "dev": true, - "requires": { - "tslib": "^2.0.1" - } - }, - "babel-core": { - "version": "7.0.0-bridge.0", - "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-7.0.0-bridge.0.tgz", - "integrity": "sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==", - "requires": {} - }, - "babel-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.4.3.tgz", - "integrity": "sha512-o45Wyn32svZE+LnMVWv/Z4x0SwtLbh4FyGcYtR20kIWd+rdrDZ9Fzq8Ml3MYLD+mZvEdzCjZsCnYZ2jpJyQ+Nw==", - "dev": true, - "requires": { - "@jest/transform": "^29.4.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.4.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - } - }, - "babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - } - }, - "babel-plugin-jest-hoist": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.4.3.tgz", - "integrity": "sha512-mB6q2q3oahKphy5V7CpnNqZOCkxxZ9aokf1eh82Dy3jQmg4xvM1tGrh5y6BQUJh4a3Pj9+eLfwvAZ7VNKg7H8Q==", - "dev": true, - "requires": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - } - }, - "babel-plugin-polyfill-corejs2": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", - "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", - "peer": true, - "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-define-polyfill-provider": "^0.3.3", - "semver": "^6.1.1" - } - }, - "babel-plugin-polyfill-corejs3": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", - "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", - "peer": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3", - "core-js-compat": "^3.25.1" - } - }, - "babel-plugin-polyfill-regenerator": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", - "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", - "peer": true, - "requires": { - "@babel/helper-define-polyfill-provider": "^0.3.3" - } - }, - "babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "requires": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - } - }, - "babel-preset-jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.4.3.tgz", - "integrity": "sha512-gWx6COtSuma6n9bw+8/F+2PCXrIgxV/D1TJFnp6OyBK2cxPWg0K9p/sriNYeifKjpUkMViWQ09DSWtzJQRETsw==", - "dev": true, - "requires": { - "babel-plugin-jest-hoist": "^29.4.3", - "babel-preset-current-node-syntax": "^1.0.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, - "browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "requires": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - } - }, - "bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "requires": { - "node-int64": "^0.4.0" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "caniuse-lite": { - "version": "1.0.30001457", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001457.tgz", - "integrity": "sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true - }, - "ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true - }, - "cjs-module-lexer": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz", - "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "clone-deep": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", - "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", - "requires": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - } - }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true - }, - "collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "convert-source-map": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", - "dev": true - }, - "core-js-compat": { - "version": "3.28.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.28.0.tgz", - "integrity": "sha512-myzPgE7QodMg4nnd3K1TDoES/nADRStM8Gpz0D6nhkwbmwEnE0ZGJgoWsvQ722FR8D7xS0n0LV556RcEicjTyg==", - "peer": true, - "requires": { - "browserslist": "^4.21.5" - } - }, - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "deepmerge": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.0.tgz", - "integrity": "sha512-z2wJZXrmeHdvYJp/Ux55wIjqo81G5Bp4c+oELTW+7ar6SogWHajt5a9gO3s3IDaGSAXjDk0vlQKN3rms8ab3og==", - "dev": true - }, - "detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true - }, - "diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true - }, - "electron-to-chromium": { - "version": "1.4.302", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.302.tgz", - "integrity": "sha512-Uk7C+7aPBryUR1Fwvk9VmipBcN9fVsqBO57jV2ZjTm+IZ6BMNqu7EDVEg2HxCNufk6QcWlFsBkhQyQroB2VWKw==" - }, - "emittery": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" - }, - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "peer": true - }, - "execa": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", - "dev": true, - "requires": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - } - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true - }, - "expect": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.4.3.tgz", - "integrity": "sha512-uC05+Q7eXECFpgDrHdXA4k2rpMyStAYPItEDLyQDo5Ta7fVkJnNA/4zh/OIVkVVNZ1oOK1PipQoyNjuZ6sz6Dg==", - "dev": true, - "requires": { - "@jest/expect-utils": "^29.4.3", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3" - } - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "requires": { - "bser": "2.1.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-cache-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-2.1.0.tgz", - "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", - "requires": { - "commondir": "^1.0.1", - "make-dir": "^2.0.0", - "pkg-dir": "^3.0.0" - }, - "dependencies": { - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==" - }, - "pkg-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", - "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", - "requires": { - "find-up": "^3.0.0" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "flow-parser": { - "version": "0.200.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.200.0.tgz", - "integrity": "sha512-01eYYVlCEO2p6JexhTbMbDNPeDKQZV++SJbaHE/HzypTkV83oJmsJQVjVCGD8FYWiQ3ha9ALD/AHwsFhPwnZJA==" - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true - }, - "get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "human-signals": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", - "dev": true - }, - "import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "requires": { - "isobject": "^3.0.1" - } - }, - "is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==" - }, - "istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true - }, - "istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "requires": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - } - }, - "istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "requires": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - } - }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - } - }, - "istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "requires": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - } - }, - "jest": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.4.3.tgz", - "integrity": "sha512-XvK65feuEFGZT8OO0fB/QAQS+LGHvQpaadkH5p47/j3Ocqq3xf2pK9R+G0GzgfuhXVxEv76qCOOcMb5efLk6PA==", - "dev": true, - "requires": { - "@jest/core": "^29.4.3", - "@jest/types": "^29.4.3", - "import-local": "^3.0.2", - "jest-cli": "^29.4.3" - } - }, - "jest-changed-files": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.4.3.tgz", - "integrity": "sha512-Vn5cLuWuwmi2GNNbokPOEcvrXGSGrqVnPEZV7rC6P7ck07Dyw9RFnvWglnupSh+hGys0ajGtw/bc2ZgweljQoQ==", - "dev": true, - "requires": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - } - }, - "jest-circus": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.4.3.tgz", - "integrity": "sha512-Vw/bVvcexmdJ7MLmgdT3ZjkJ3LKu8IlpefYokxiqoZy6OCQ2VAm6Vk3t/qHiAGUXbdbJKJWnc8gH3ypTbB/OBw==", - "dev": true, - "requires": { - "@jest/environment": "^29.4.3", - "@jest/expect": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", - "p-limit": "^3.1.0", - "pretty-format": "^29.4.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-cli": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.4.3.tgz", - "integrity": "sha512-PiiAPuFNfWWolCE6t3ZrDXQc6OsAuM3/tVW0u27UWc1KE+n/HSn5dSE6B2juqN7WP+PP0jAcnKtGmI4u8GMYCg==", - "dev": true, - "requires": { - "@jest/core": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - } - }, - "jest-config": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.4.3.tgz", - "integrity": "sha512-eCIpqhGnIjdUCXGtLhz4gdDoxKSWXKjzNcc5r+0S1GKOp2fwOipx5mRcwa9GB/ArsxJ1jlj2lmlD9bZAsBxaWQ==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.4.3", - "@jest/types": "^29.4.3", - "babel-jest": "^29.4.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.4.3", - "jest-environment-node": "^29.4.3", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-runner": "^29.4.3", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.4.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - } - }, - "jest-diff": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.4.3.tgz", - "integrity": "sha512-YB+ocenx7FZ3T5O9lMVMeLYV4265socJKtkwgk/6YUz/VsEzYDkiMuMhWzZmxm3wDRQvayJu/PjkjjSkjoHsCA==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" - } - }, - "jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "requires": { - "detect-newline": "^3.0.0" - } - }, - "jest-each": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.4.3.tgz", - "integrity": "sha512-1ElHNAnKcbJb/b+L+7j0/w7bDvljw4gTv1wL9fYOczeJrbTbkMGQ5iQPFJ3eFQH19VPTx1IyfePdqSpePKss7Q==", - "dev": true, - "requires": { - "@jest/types": "^29.4.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.4.3", - "pretty-format": "^29.4.3" - } - }, - "jest-environment-node": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.4.3.tgz", - "integrity": "sha512-gAiEnSKF104fsGDXNkwk49jD/0N0Bqu2K9+aMQXA6avzsA9H3Fiv1PW2D+gzbOSR705bWd2wJZRFEFpV0tXISg==", - "dev": true, - "requires": { - "@jest/environment": "^29.4.3", - "@jest/fake-timers": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "jest-mock": "^29.4.3", - "jest-util": "^29.4.3" - } - }, - "jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true - }, - "jest-haste-map": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.4.3.tgz", - "integrity": "sha512-eZIgAS8tvm5IZMtKlR8Y+feEOMfo2pSQkmNbufdbMzMSn9nitgGxF1waM/+LbryO3OkMcKS98SUb+j/cQxp/vQ==", - "dev": true, - "requires": { - "@jest/types": "^29.4.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "fsevents": "^2.3.2", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.4.3", - "jest-worker": "^29.4.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - } - }, - "jest-leak-detector": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.4.3.tgz", - "integrity": "sha512-9yw4VC1v2NspMMeV3daQ1yXPNxMgCzwq9BocCwYrRgXe4uaEJPAN0ZK37nFBhcy3cUwEVstFecFLaTHpF7NiGA==", - "dev": true, - "requires": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" - } - }, - "jest-matcher-utils": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.4.3.tgz", - "integrity": "sha512-TTciiXEONycZ03h6R6pYiZlSkvYgT0l8aa49z/DLSGYjex4orMUcafuLXYyyEDWB1RKglq00jzwY00Ei7yFNVg==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "jest-diff": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.4.3" - } - }, - "jest-message-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.3.tgz", - "integrity": "sha512-1Y8Zd4ZCN7o/QnWdMmT76If8LuDv23Z1DRovBj/vcSFNlGCJGoO8D1nJDw1AdyAGUk0myDLFGN5RbNeJyCRGCw==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.4.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.4.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - } - }, - "jest-mock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.3.tgz", - "integrity": "sha512-LjFgMg+xed9BdkPMyIJh+r3KeHt1klXPJYBULXVVAkbTaaKjPX1o1uVCAZADMEp/kOxGTwy/Ot8XbvgItOrHEg==", - "dev": true, - "requires": { - "@jest/types": "^29.4.3", - "@types/node": "*", - "jest-util": "^29.4.3" - } - }, - "jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "requires": {} - }, - "jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true - }, - "jest-resolve": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.4.3.tgz", - "integrity": "sha512-GPokE1tzguRyT7dkxBim4wSx6E45S3bOQ7ZdKEG+Qj0Oac9+6AwJPCk0TZh5Vu0xzeX4afpb+eDmgbmZFFwpOw==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.4.3", - "jest-validate": "^29.4.3", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - } - }, - "jest-resolve-dependencies": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.4.3.tgz", - "integrity": "sha512-uvKMZAQ3nmXLH7O8WAOhS5l0iWyT3WmnJBdmIHiV5tBbdaDZ1wqtNX04FONGoaFvSOSHBJxnwAVnSn1WHdGVaw==", - "dev": true, - "requires": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.4.3" - } - }, - "jest-runner": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.4.3.tgz", - "integrity": "sha512-GWPTEiGmtHZv1KKeWlTX9SIFuK19uLXlRQU43ceOQ2hIfA5yPEJC7AMkvFKpdCHx6pNEdOD+2+8zbniEi3v3gA==", - "dev": true, - "requires": { - "@jest/console": "^29.4.3", - "@jest/environment": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-leak-detector": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-runtime": "^29.4.3", - "jest-util": "^29.4.3", - "jest-watcher": "^29.4.3", - "jest-worker": "^29.4.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - } - }, - "jest-runtime": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.4.3.tgz", - "integrity": "sha512-F5bHvxSH+LvLV24vVB3L8K467dt3y3dio6V3W89dUz9nzvTpqd/HcT9zfYKL2aZPvD63vQFgLvaUX/UpUhrP6Q==", - "dev": true, - "requires": { - "@jest/environment": "^29.4.3", - "@jest/fake-timers": "^29.4.3", - "@jest/globals": "^29.4.3", - "@jest/source-map": "^29.4.3", - "@jest/test-result": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-mock": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.4.3", - "jest-snapshot": "^29.4.3", - "jest-util": "^29.4.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - } - }, - "jest-snapshot": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.4.3.tgz", - "integrity": "sha512-NGlsqL0jLPDW91dz304QTM/SNO99lpcSYYAjNiX0Ou+sSGgkanKBcSjCfp/pqmiiO1nQaOyLp6XQddAzRcx3Xw==", - "dev": true, - "requires": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/traverse": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.4.3", - "@jest/transform": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/babel__traverse": "^7.0.6", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.4.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.4.3", - "jest-get-type": "^29.4.3", - "jest-haste-map": "^29.4.3", - "jest-matcher-utils": "^29.4.3", - "jest-message-util": "^29.4.3", - "jest-util": "^29.4.3", - "natural-compare": "^1.4.0", - "pretty-format": "^29.4.3", - "semver": "^7.3.5" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } - }, - "jest-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.4.3.tgz", - "integrity": "sha512-ToSGORAz4SSSoqxDSylWX8JzkOQR7zoBtNRsA7e+1WUX5F8jrOwaNpuh1YfJHJKDHXLHmObv5eOjejUd+/Ws+Q==", - "dev": true, - "requires": { - "@jest/types": "^29.4.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - } - }, - "jest-validate": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.4.3.tgz", - "integrity": "sha512-J3u5v7aPQoXPzaar6GndAVhdQcZr/3osWSgTeKg5v574I9ybX/dTyH0AJFb5XgXIB7faVhf+rS7t4p3lL9qFaw==", - "dev": true, - "requires": { - "@jest/types": "^29.4.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.4.3" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - } - } - }, - "jest-watcher": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.4.3.tgz", - "integrity": "sha512-zwlXH3DN3iksoIZNk73etl1HzKyi5FuQdYLnkQKm5BW4n8HpoG59xSwpVdFrnh60iRRaRBGw0gcymIxjJENPcA==", - "dev": true, - "requires": { - "@jest/test-result": "^29.4.3", - "@jest/types": "^29.4.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.4.3", - "string-length": "^4.0.1" - } - }, - "jest-worker": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.4.3.tgz", - "integrity": "sha512-GLHN/GTAAMEy5BFdvpUfzr9Dr80zQqBrh0fz1mtRMe05hqP45+HfQltu7oTBfduD0UeZs09d+maFtFYAXFWvAA==", - "dev": true, - "requires": { - "@types/node": "*", - "jest-util": "^29.4.3", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "dependencies": { - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jscodeshift": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.14.0.tgz", - "integrity": "sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==", - "requires": { - "@babel/core": "^7.13.16", - "@babel/parser": "^7.13.16", - "@babel/plugin-proposal-class-properties": "^7.13.0", - "@babel/plugin-proposal-nullish-coalescing-operator": "^7.13.8", - "@babel/plugin-proposal-optional-chaining": "^7.13.12", - "@babel/plugin-transform-modules-commonjs": "^7.13.8", - "@babel/preset-flow": "^7.13.13", - "@babel/preset-typescript": "^7.13.0", - "@babel/register": "^7.13.16", - "babel-core": "^7.0.0-bridge.0", - "chalk": "^4.1.2", - "flow-parser": "0.*", - "graceful-fs": "^4.2.4", - "micromatch": "^4.0.4", - "neo-async": "^2.5.0", - "node-dir": "^0.1.17", - "recast": "^0.21.0", - "temp": "^0.8.4", - "write-file-atomic": "^2.3.0" - }, - "dependencies": { - "ast-types": { - "version": "0.15.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.15.2.tgz", - "integrity": "sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==", - "requires": { - "tslib": "^2.0.1" - } - }, - "recast": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.21.5.tgz", - "integrity": "sha512-hjMmLaUXAm1hIuTqOdeYObMslq/q+Xff6QE3Y2P+uoHAg2nmVlLBps2hzh1UJDdMtDTMXOFewK6ky51JQIeECg==", - "requires": { - "ast-types": "0.15.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - } - }, - "write-file-atomic": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", - "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", - "requires": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - } - } - }, - "jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" - }, - "json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" - }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" - }, - "kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true - }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "peer": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "requires": { - "yallist": "^3.0.2" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "requires": { - "tmpl": "1.0.5" - } - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" - }, - "node-dir": { - "version": "0.1.17", - "resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz", - "integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==", - "requires": { - "minimatch": "^3.0.2" - } - }, - "node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==" - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", - "dev": true, - "requires": { - "path-key": "^3.0.0" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - }, - "dependencies": { - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - } - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" - }, - "parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" - }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==" - }, - "pirates": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", - "integrity": "sha512-8V9+HQPupnaXMA23c5hvl69zXvTwTzyAYasnkb0Tts4XvO4CliqONMOnvlq26rkhLC3nWDFBJf73LU1e1VZLaQ==" - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "pretty-format": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", - "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", - "dev": true, - "requires": { - "@jest/schemas": "^29.4.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true - } - } - }, - "prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "requires": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - } - }, - "react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "recast": { - "version": "0.20.5", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.20.5.tgz", - "integrity": "sha512-E5qICoPoNL4yU0H0NoBDntNB0Q5oMSNh9usFctYniLBluTthi3RsQVBXIJNbApOlvSwW/RGxIuokPcAc59J5fQ==", - "dev": true, - "requires": { - "ast-types": "0.14.2", - "esprima": "~4.0.0", - "source-map": "~0.6.1", - "tslib": "^2.0.1" - } - }, - "regenerate": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", - "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", - "peer": true - }, - "regenerate-unicode-properties": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", - "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", - "peer": true, - "requires": { - "regenerate": "^1.4.2" - } - }, - "regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", - "peer": true - }, - "regenerator-transform": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", - "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", - "peer": true, - "requires": { - "@babel/runtime": "^7.8.4" - } - }, - "regexpu-core": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.1.tgz", - "integrity": "sha512-nCOzW2V/X15XpLsK2rlgdwrysrBq+AauCn+omItIz4R1pIcmeot5zvjdmOBRLzEH/CkC6IxMJVmxDe3QcMuNVQ==", - "peer": true, - "requires": { - "@babel/regjsgen": "^0.8.0", - "regenerate": "^1.4.2", - "regenerate-unicode-properties": "^10.1.0", - "regjsparser": "^0.9.1", - "unicode-match-property-ecmascript": "^2.0.0", - "unicode-match-property-value-ecmascript": "^2.1.0" - } - }, - "regjsparser": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", - "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", - "peer": true, - "requires": { - "jsesc": "~0.5.0" - }, - "dependencies": { - "jsesc": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", - "peer": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "requires": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - } - }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - } - }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true - }, - "resolve.exports": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.0.tgz", - "integrity": "sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "requires": { - "glob": "^7.1.3" - } - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "shallow-clone": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", - "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", - "requires": { - "kind-of": "^6.0.2" - } - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - }, - "source-map-support": { - "version": "0.5.13", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", - "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - } - }, - "string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "requires": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true - }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" - }, - "temp": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/temp/-/temp-0.8.4.tgz", - "integrity": "sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg==", - "requires": { - "rimraf": "~2.6.2" - } - }, - "test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "requires": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - } - }, - "tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } - }, - "tslib": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", - "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "unicode-canonical-property-names-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", - "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", - "peer": true - }, - "unicode-match-property-ecmascript": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", - "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", - "peer": true, - "requires": { - "unicode-canonical-property-names-ecmascript": "^2.0.0", - "unicode-property-aliases-ecmascript": "^2.0.0" - } - }, - "unicode-match-property-value-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", - "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", - "peer": true - }, - "unicode-property-aliases-ecmascript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", - "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", - "peer": true - }, - "update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - } - }, - "v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "dependencies": { - "convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - } - } - }, - "walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "requires": { - "makeerror": "1.0.12" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, - "write-file-atomic": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", - "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" - }, - "yargs": { - "version": "17.7.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.0.tgz", - "integrity": "sha512-dwqOPg5trmrre9+v8SUo2q/hAwyKoVfu8OC1xPHKJGNdxAvPl4sKxL4vBnh3bQz/ZvvGAFeA5H3ou2kcOY8sQQ==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - } - } -} diff --git a/api/codemods/migrate-cjs-to-esm/package.json b/api/codemods/migrate-cjs-to-esm/package.json deleted file mode 100644 index 92e6aa2e4a9..00000000000 --- a/api/codemods/migrate-cjs-to-esm/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "migrate-cjs-to-esm", - "type": "commonjs", - "scripts": { - "test": "jest" - }, - "devDependencies": { - "@types/jscodeshift": "^0.11.6", - "jest": "^29.4.3" - }, - "dependencies": { - "jscodeshift": "^0.14.0" - } -} diff --git a/api/codemods/migrate-cjs-to-esm/transforms/execute.js b/api/codemods/migrate-cjs-to-esm/transforms/execute.js deleted file mode 100644 index 681f5637148..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/execute.js +++ /dev/null @@ -1,17 +0,0 @@ -// eslint-disable-next-line eslint-comments/disable-enable-pair -/* eslint-disable no-undef */ -const codemods = []; - -const transformScripts = (fileInfo, api, options) => { - return codemods.reduce((input, script) => { - return script( - { - source: input, - }, - api, - options - ); - }, fileInfo.source); -}; - -module.exports = transformScripts; diff --git a/api/codemods/migrate-cjs-to-esm/transforms/prepare.js b/api/codemods/migrate-cjs-to-esm/transforms/prepare.js deleted file mode 100644 index ca1746734ef..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/prepare.js +++ /dev/null @@ -1,19 +0,0 @@ -// eslint-disable-next-line eslint-comments/disable-enable-pair -/* eslint-disable no-undef */ -const codemods = [ - require('./src/add-file-extension-to-import'), -]; - -const transformScripts = (fileInfo, api, options) => { - return codemods.reduce((input, script) => { - return script( - { - source: input, - }, - api, - options - ); - }, fileInfo.source); -}; - -module.exports = transformScripts; diff --git a/api/codemods/migrate-cjs-to-esm/transforms/src/add-file-extension-to-import.js b/api/codemods/migrate-cjs-to-esm/transforms/src/add-file-extension-to-import.js deleted file mode 100644 index 47b477924b7..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/src/add-file-extension-to-import.js +++ /dev/null @@ -1,33 +0,0 @@ -// eslint-disable-next-line eslint-comments/disable-enable-pair -/* eslint-disable no-undef */ -const util = require('util'); - -function transformer(file, api, _options) { - const j = api.jscodeshift; - - // ------------------------------------------------------------------ SEARCH - const nodes = j(file.source) - .find(j.CallExpression, { - callee: { - type: 'Identifier', - name: 'require', - }, - }) - .filter((path) => { - return ( - path.node.arguments[0].value.startsWith('.') && - !path.node.arguments[0].value.endsWith('.js') && - !path.node.arguments[0].value.endsWith('.json') - ); - }); - - // ----------------------------------------------------------------- REPLACE - return nodes - .replaceWith((path) => { - const sourcePath = path.node.arguments.pop(); - return j.callExpression(j.identifier('require'), [j.literal(`${sourcePath.value}.js`)]); - }) - .toSource({ quote: 'single' }); -} - -module.exports = transformer; diff --git a/api/codemods/migrate-cjs-to-esm/transforms/src/utils/filters.js b/api/codemods/migrate-cjs-to-esm/transforms/src/utils/filters.js deleted file mode 100644 index 6a1a8b94d9f..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/src/utils/filters.js +++ /dev/null @@ -1,7 +0,0 @@ -const j = require('jscodeshift'); - -const isTopNode = (path) => j.Program.check(path.parent.value); - -const isNotTopNode = (path) => !j.Program.check(path.parent.value); - -module.exports = { isTopNode, isNotTopNode }; diff --git a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/add-file-extension-to-import-on-local-file.input.js b/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/add-file-extension-to-import-on-local-file.input.js deleted file mode 100644 index b4685947eac..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/add-file-extension-to-import-on-local-file.input.js +++ /dev/null @@ -1,2 +0,0 @@ -const { foo } = require('./bar'); -const { fooz } = require('../baz'); diff --git a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/add-file-extension-to-import-on-local-file.output.js b/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/add-file-extension-to-import-on-local-file.output.js deleted file mode 100644 index 46f3d4c1e62..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/add-file-extension-to-import-on-local-file.output.js +++ /dev/null @@ -1,2 +0,0 @@ -const { foo } = require('./bar.js'); -const { fooz } = require('../baz.js'); diff --git a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-if-it-already-exists.input.js b/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-if-it-already-exists.input.js deleted file mode 100644 index 52e2ac95737..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-if-it-already-exists.input.js +++ /dev/null @@ -1,3 +0,0 @@ -const bar = require('./bar.js'); -const packageJson = require('./package.json'); -const translations = require('./translation/en.json'); diff --git a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-if-it-already-exists.output.js b/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-if-it-already-exists.output.js deleted file mode 100644 index 52e2ac95737..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-if-it-already-exists.output.js +++ /dev/null @@ -1,3 +0,0 @@ -const bar = require('./bar.js'); -const packageJson = require('./package.json'); -const translations = require('./translation/en.json'); diff --git a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-esm-file.input.js b/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-esm-file.input.js deleted file mode 100644 index bee419c512a..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-esm-file.input.js +++ /dev/null @@ -1 +0,0 @@ -import { foo } from 'bar'; diff --git a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-esm-file.output.js b/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-esm-file.output.js deleted file mode 100644 index bee419c512a..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-esm-file.output.js +++ /dev/null @@ -1 +0,0 @@ -import { foo } from 'bar'; diff --git a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-import-on-fs-root-local-file.input.js b/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-import-on-fs-root-local-file.input.js deleted file mode 100644 index 8e663b3005f..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-import-on-fs-root-local-file.input.js +++ /dev/null @@ -1 +0,0 @@ -const { foobar } = require('/bar'); diff --git a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-import-on-fs-root-local-file.output.js b/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-import-on-fs-root-local-file.output.js deleted file mode 100644 index 8e663b3005f..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-import-on-fs-root-local-file.output.js +++ /dev/null @@ -1 +0,0 @@ -const { foobar } = require('/bar'); diff --git a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-import-on-library.input.js b/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-import-on-library.input.js deleted file mode 100644 index 60b900fba8d..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-import-on-library.input.js +++ /dev/null @@ -1 +0,0 @@ -const { foo } = require('bar'); diff --git a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-import-on-library.output.js b/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-import-on-library.output.js deleted file mode 100644 index 60b900fba8d..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testfixtures__/add-file-extension-to-import/do-not-add-file-extension-to-import-on-library.output.js +++ /dev/null @@ -1 +0,0 @@ -const { foo } = require('bar'); diff --git a/api/codemods/migrate-cjs-to-esm/transforms/tests/__tests__/add-file-extension-to-import-test.js b/api/codemods/migrate-cjs-to-esm/transforms/tests/__tests__/add-file-extension-to-import-test.js deleted file mode 100644 index e6b98534f11..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/tests/__tests__/add-file-extension-to-import-test.js +++ /dev/null @@ -1,2 +0,0 @@ -const { defineTests } = require('../__testutils__/defineTests'); -defineTests(__dirname, 'add-file-extension-to-import'); diff --git a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testutils__/defineTests.js b/api/codemods/migrate-cjs-to-esm/transforms/tests/__testutils__/defineTests.js deleted file mode 100644 index 0c4cf622bc5..00000000000 --- a/api/codemods/migrate-cjs-to-esm/transforms/tests/__testutils__/defineTests.js +++ /dev/null @@ -1,26 +0,0 @@ -const { defineTest } = require('jscodeshift/dist/testUtils'); -const fs = require('fs'); -const path = require('path'); - -module.exports = { - defineTests(dirName, transformName) { - const inputFileSuffixRegex = /\.input\.js$/i; - const testFileNames = fs - .readdirSync(path.resolve(dirName, '../__testfixtures__', transformName)) - .filter((fileName) => inputFileSuffixRegex.test(fileName)) - .map((fileName) => fileName.replace(inputFileSuffixRegex, '')); - - const transformPath = `../src/${transformName}`; - - testFileNames.forEach((testFileName) => { - defineTest( - dirName, - transformPath, - { - silent: true, - }, - `${transformName}/${testFileName}` - ); - }); - }, -}; diff --git a/api/db/batch-processing.js b/api/db/batch-processing.js index 07de6b6b267..2a8d387120e 100644 --- a/api/db/batch-processing.js +++ b/api/db/batch-processing.js @@ -1,5 +1,5 @@ const BATCH_SIZE = 10; -const logger = require('../lib/infrastructure/logger'); +import { logger } from '../lib/infrastructure/logger.js'; function batch(knex, elementsToUpdate, treatment) { function _innerTreatment(knex, remainingElementsToUpdate, countOfBatches, batchesDone) { @@ -32,6 +32,4 @@ function batch(knex, elementsToUpdate, treatment) { return Promise.resolve().then(() => _innerTreatment(knex, elementsToUpdate, numberOfTotalBatches, 0)); } -module.exports = { - batch, -}; +export { batch }; diff --git a/api/db/constants.js b/api/db/constants.js index 729f828ae82..b2f41c04078 100644 --- a/api/db/constants.js +++ b/api/db/constants.js @@ -16,4 +16,6 @@ const keys = { PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_EXPERT: 'PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_EXPERT', }; -module.exports.badges = { keys }; +const badges = { keys }; + +export { badges }; diff --git a/api/db/database-builder/database-buffer.js b/api/db/database-builder/database-buffer.js index eeccae9c901..ee0d2bdb632 100644 --- a/api/db/database-builder/database-buffer.js +++ b/api/db/database-builder/database-buffer.js @@ -1,6 +1,5 @@ const INITIAL_ID = 100000; - -module.exports = { +const databaseBuffer = { objectsToInsert: [], nextId: INITIAL_ID, @@ -18,3 +17,5 @@ module.exports = { this.objectsToInsert = []; }, }; + +export { databaseBuffer }; diff --git a/api/db/database-builder/database-builder.js b/api/db/database-builder/database-builder.js index 480ca2b458f..5c68e7e9e09 100644 --- a/api/db/database-builder/database-builder.js +++ b/api/db/database-builder/database-builder.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); -const factory = require('./factory/index'); -const databaseBuffer = require('./database-buffer'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import * as factory from './factory/index.js'; +import { databaseBuffer } from './database-buffer.js'; -module.exports = class DatabaseBuilder { +class DatabaseBuilder { constructor({ knex, emptyFirst = true }) { this.knex = knex; this.databaseBuffer = databaseBuffer; @@ -178,4 +178,6 @@ module.exports = class DatabaseBuilder { table.isDirty = false; }); } -}; +} + +export { DatabaseBuilder }; diff --git a/api/db/database-builder/factory/build-account-recovery-demand.js b/api/db/database-builder/factory/build-account-recovery-demand.js index 4c0303fa510..306cb3a5e0a 100644 --- a/api/db/database-builder/factory/build-account-recovery-demand.js +++ b/api/db/database-builder/factory/build-account-recovery-demand.js @@ -1,8 +1,8 @@ -const databaseBuffer = require('../database-buffer'); -const buildOrganizationLearner = require('./build-organization-learner'); -const buildUser = require('./build-user'); +import { databaseBuffer } from '../database-buffer.js'; +import { buildOrganizationLearner } from './build-organization-learner.js'; +import { buildUser } from './build-user.js'; -module.exports = function buildAccountRecoveryDemand({ +const buildAccountRecoveryDemand = function ({ id = databaseBuffer.getNextId(), userId, firstName, @@ -62,3 +62,5 @@ module.exports = function buildAccountRecoveryDemand({ updatedAt, }; }; + +export { buildAccountRecoveryDemand }; diff --git a/api/db/database-builder/factory/build-answer.js b/api/db/database-builder/factory/build-answer.js index a2c2993cc0f..4722aa32e69 100644 --- a/api/db/database-builder/factory/build-answer.js +++ b/api/db/database-builder/factory/build-answer.js @@ -1,8 +1,8 @@ -const buildAssessment = require('./build-assessment'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildAssessment } from './build-assessment.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildAnswer({ +const buildAnswer = function ({ id = databaseBuffer.getNextId(), value = 'Some value for answer', result = 'Some result for answer', @@ -33,3 +33,5 @@ module.exports = function buildAnswer({ values, }); }; + +export { buildAnswer }; diff --git a/api/db/database-builder/factory/build-answered-not-completed-certification-assessment.js b/api/db/database-builder/factory/build-answered-not-completed-certification-assessment.js index 8ba36f104d3..38ad35586f9 100644 --- a/api/db/database-builder/factory/build-answered-not-completed-certification-assessment.js +++ b/api/db/database-builder/factory/build-answered-not-completed-certification-assessment.js @@ -1,10 +1,10 @@ -const buildCertificationCourse = require('./build-certification-course'); -const buildAssessment = require('./build-assessment'); -const Assessment = require('../../../lib/domain/models/Assessment'); -const buildCertificationChallenge = require('./build-certification-challenge'); -const buildAnswer = require('./build-answer'); +import { buildCertificationCourse } from './build-certification-course.js'; +import { buildAssessment } from './build-assessment.js'; +import { Assessment } from '../../../lib/domain/models/Assessment.js'; +import { buildCertificationChallenge } from './build-certification-challenge.js'; +import { buildAnswer } from './build-answer.js'; -module.exports = function buildAnsweredNotCompletedCertificationAssessment({ +const buildAnsweredNotCompletedCertificationAssessment = function ({ certifiableUserId, competenceIdSkillIdPairs, limitDate, @@ -29,3 +29,5 @@ module.exports = function buildAnsweredNotCompletedCertificationAssessment({ return certificationAssessment; }; + +export { buildAnsweredNotCompletedCertificationAssessment }; diff --git a/api/db/database-builder/factory/build-assessment-campaign-for-skills.js b/api/db/database-builder/factory/build-assessment-campaign-for-skills.js index 11a21232e46..3ff746d2217 100644 --- a/api/db/database-builder/factory/build-assessment-campaign-for-skills.js +++ b/api/db/database-builder/factory/build-assessment-campaign-for-skills.js @@ -1,11 +1,13 @@ -const buildCampaign = require('./build-campaign'); -const buildCampaignSkill = require('./build-campaign-skill'); -const CampaignTypes = require('../../../lib/domain/models/CampaignTypes'); +import { buildCampaign } from './build-campaign.js'; +import { buildCampaignSkill } from './build-campaign-skill.js'; +import { CampaignTypes } from '../../../lib/domain/models/CampaignTypes.js'; -module.exports = function buildAssessmentCampaignForSkills(attributes, skillSet) { +const buildAssessmentCampaignForSkills = function (attributes, skillSet) { attributes.type = CampaignTypes.ASSESSMENT; const campaign = buildCampaign(attributes); skillSet.forEach((skill) => buildCampaignSkill({ campaignId: campaign.id, skillId: skill.id })); return campaign; }; + +export { buildAssessmentCampaignForSkills }; diff --git a/api/db/database-builder/factory/build-assessment-campaign.js b/api/db/database-builder/factory/build-assessment-campaign.js index 4bebd179b63..47b68b66b48 100644 --- a/api/db/database-builder/factory/build-assessment-campaign.js +++ b/api/db/database-builder/factory/build-assessment-campaign.js @@ -1,8 +1,10 @@ -const buildAssessmentCampaignForSkills = require('./build-assessment-campaign-for-skills'); -const CampaignTypes = require('../../../lib/domain/models/CampaignTypes'); +import { buildAssessmentCampaignForSkills } from './build-assessment-campaign-for-skills.js'; +import { CampaignTypes } from '../../../lib/domain/models/CampaignTypes.js'; -module.exports = function buildAssessmentCampaign(attributes, skills = [{ id: 'skill', name: 'skillName' }]) { +const buildAssessmentCampaign = function (attributes, skills = [{ id: 'skill', name: 'skillName' }]) { attributes.type = CampaignTypes.ASSESSMENT; return buildAssessmentCampaignForSkills(attributes, skills); }; + +export { buildAssessmentCampaign }; diff --git a/api/db/database-builder/factory/build-assessment-from-participation.js b/api/db/database-builder/factory/build-assessment-from-participation.js index 771fddb87d3..348578327dd 100644 --- a/api/db/database-builder/factory/build-assessment-from-participation.js +++ b/api/db/database-builder/factory/build-assessment-from-participation.js @@ -1,9 +1,9 @@ -const buildAssessment = require('./build-assessment'); -const buildUser = require('./build-user'); -const buildCampaignParticipation = require('./build-campaign-participation'); -const buildOrganizationLearner = require('./build-organization-learner'); +import { buildAssessment } from './build-assessment.js'; +import { buildUser } from './build-user.js'; +import { buildCampaignParticipation } from './build-campaign-participation.js'; +import { buildOrganizationLearner } from './build-organization-learner.js'; -module.exports = function buildAssessmentFromParticipation(campaignParticipation, organizationLearner, user) { +const buildAssessmentFromParticipation = function (campaignParticipation, organizationLearner, user) { const userId = buildUser(user).id; const organizationLearnerId = buildOrganizationLearner(organizationLearner).id; const campaignParticipationId = buildCampaignParticipation({ @@ -14,3 +14,5 @@ module.exports = function buildAssessmentFromParticipation(campaignParticipation return buildAssessment({ userId, campaignParticipationId }); }; + +export { buildAssessmentFromParticipation }; diff --git a/api/db/database-builder/factory/build-assessment-result.js b/api/db/database-builder/factory/build-assessment-result.js index c554a0cc1d0..69848dc19fa 100644 --- a/api/db/database-builder/factory/build-assessment-result.js +++ b/api/db/database-builder/factory/build-assessment-result.js @@ -1,9 +1,9 @@ -const buildAssessment = require('./build-assessment'); -const buildCertificationCourseLastAssessmentResult = require('./build-certification-course-last-assessment-result'); -const buildUser = require('./build-user'); -const databaseBuffer = require('../database-buffer'); -const AssessmentResult = require('../../../lib/domain/models/AssessmentResult'); -const _ = require('lodash'); +import { buildAssessment } from './build-assessment.js'; +import { buildCertificationCourseLastAssessmentResult } from './build-certification-course-last-assessment-result.js'; +import { buildUser } from './build-user.js'; +import { databaseBuffer } from '../database-buffer.js'; +import { AssessmentResult } from '../../../lib/domain/models/AssessmentResult.js'; +import _ from 'lodash'; function buildAssessmentResult({ id = databaseBuffer.getNextId(), @@ -43,7 +43,7 @@ function buildAssessmentResult({ }); } -module.exports = buildAssessmentResult; +export { buildAssessmentResult }; buildAssessmentResult.last = function ({ certificationCourseId, diff --git a/api/db/database-builder/factory/build-assessment.js b/api/db/database-builder/factory/build-assessment.js index 5f4b70aa621..ccd91704384 100644 --- a/api/db/database-builder/factory/build-assessment.js +++ b/api/db/database-builder/factory/build-assessment.js @@ -1,10 +1,10 @@ -const buildCertificationCourse = require('./build-certification-course'); -const buildUser = require('./build-user'); -const databaseBuffer = require('../database-buffer'); -const Assessment = require('../../../lib/domain/models/Assessment'); -const _ = require('lodash'); +import { buildCertificationCourse } from './build-certification-course.js'; +import { buildUser } from './build-user.js'; +import { databaseBuffer } from '../database-buffer.js'; +import { Assessment } from '../../../lib/domain/models/Assessment.js'; +import _ from 'lodash'; -module.exports = function buildAssessment({ +const buildAssessment = function ({ id = databaseBuffer.getNextId(), courseId = 'recDefaultCourseId', certificationCourseId, @@ -53,3 +53,5 @@ module.exports = function buildAssessment({ values, }); }; + +export { buildAssessment }; diff --git a/api/db/database-builder/factory/build-authentication-method.js b/api/db/database-builder/factory/build-authentication-method.js index e3585df77e1..48c7471613e 100644 --- a/api/db/database-builder/factory/build-authentication-method.js +++ b/api/db/database-builder/factory/build-authentication-method.js @@ -1,9 +1,10 @@ -const isUndefined = require('lodash/isUndefined'); -const databaseBuffer = require('../database-buffer'); -const buildUser = require('./build-user'); -const AuthenticationMethod = require('../../../lib/domain/models/AuthenticationMethod'); -const OidcIdentityProviders = require('../../../lib/domain/constants/oidc-identity-providers'); -const encrypt = require('../../../lib/domain/services/encryption-service'); +import lodash from 'lodash'; +const { isUndefined } = lodash; +import { databaseBuffer } from '../database-buffer.js'; +import { buildUser } from './build-user.js'; +import { AuthenticationMethod } from '../../../lib/domain/models/AuthenticationMethod.js'; +import * as OidcIdentityProviders from '../../../lib/domain/constants/oidc-identity-providers.js'; +import * as encrypt from '../../../lib/domain/services/encryption-service.js'; const buildAuthenticationMethod = {}; @@ -166,4 +167,4 @@ buildAuthenticationMethod.withIdentityProvider = function ({ }); }; -module.exports = buildAuthenticationMethod; +export { buildAuthenticationMethod }; diff --git a/api/db/database-builder/factory/build-badge-acquisition.js b/api/db/database-builder/factory/build-badge-acquisition.js index f5a59b8adc1..31bb8b1505a 100644 --- a/api/db/database-builder/factory/build-badge-acquisition.js +++ b/api/db/database-builder/factory/build-badge-acquisition.js @@ -1,7 +1,7 @@ -const databaseBuffer = require('../database-buffer'); -const buildCampaignParticipation = require('./build-campaign-participation'); +import { databaseBuffer } from '../database-buffer.js'; +import { buildCampaignParticipation } from './build-campaign-participation.js'; -module.exports = function buildBadgeAcquisition({ +const buildBadgeAcquisition = function ({ id = databaseBuffer.getNextId(), badgeId, userId, @@ -19,3 +19,5 @@ module.exports = function buildBadgeAcquisition({ }, }); }; + +export { buildBadgeAcquisition }; diff --git a/api/db/database-builder/factory/build-badge-criterion.js b/api/db/database-builder/factory/build-badge-criterion.js index f79e4d3c018..188e4d1048c 100644 --- a/api/db/database-builder/factory/build-badge-criterion.js +++ b/api/db/database-builder/factory/build-badge-criterion.js @@ -1,5 +1,5 @@ -const BadgeCriterion = require('../../../lib/domain/models/BadgeCriterion'); -const databaseBuffer = require('../database-buffer'); +import { BadgeCriterion } from '../../../lib/domain/models/BadgeCriterion.js'; +import { databaseBuffer } from '../database-buffer.js'; const buildBadgeCriterion = function ({ id = databaseBuffer.getNextId(), @@ -60,4 +60,4 @@ buildBadgeCriterion.scopeCappedTubes = function ({ id, threshold, badgeId, cappe }); }; -module.exports = buildBadgeCriterion; +export { buildBadgeCriterion }; diff --git a/api/db/database-builder/factory/build-badge.js b/api/db/database-builder/factory/build-badge.js index d46485b5377..c88420c56b6 100644 --- a/api/db/database-builder/factory/build-badge.js +++ b/api/db/database-builder/factory/build-badge.js @@ -1,6 +1,6 @@ -const databaseBuffer = require('../database-buffer'); -const buildTargetProfile = require('./build-target-profile'); -const _ = require('lodash'); +import { databaseBuffer } from '../database-buffer.js'; +import { buildTargetProfile } from './build-target-profile.js'; +import _ from 'lodash'; function buildBadge({ id = databaseBuffer.getNextId(), @@ -78,4 +78,4 @@ buildBadge.notCertifiable = function ({ }); }; -module.exports = buildBadge; +export { buildBadge }; diff --git a/api/db/database-builder/factory/build-campaign-participation-elements-for-overview.js b/api/db/database-builder/factory/build-campaign-participation-elements-for-overview.js index 9f05a41516b..0abc35fc1ec 100644 --- a/api/db/database-builder/factory/build-campaign-participation-elements-for-overview.js +++ b/api/db/database-builder/factory/build-campaign-participation-elements-for-overview.js @@ -1,10 +1,10 @@ -const Assessment = require('../../../lib/domain/models/Assessment'); -const buildAssessment = require('./build-assessment'); -const buildOrganization = require('./build-organization'); -const buildCampaignParticipation = require('./build-campaign-participation'); -const buildCampaign = require('./build-campaign'); +import { Assessment } from '../../../lib/domain/models/Assessment.js'; +import { buildAssessment } from './build-assessment.js'; +import { buildOrganization } from './build-organization.js'; +import { buildCampaignParticipation } from './build-campaign-participation.js'; +import { buildCampaign } from './build-campaign.js'; -module.exports = function buildCampaignParticipationElementsForOverview({ +const buildCampaignParticipationElementsForOverview = function ({ userId, index, lastAssessmentState, @@ -52,3 +52,5 @@ module.exports = function buildCampaignParticipationElementsForOverview({ organization, }; }; + +export { buildCampaignParticipationElementsForOverview }; diff --git a/api/db/database-builder/factory/build-campaign-participation-with-organization-learner.js b/api/db/database-builder/factory/build-campaign-participation-with-organization-learner.js index 9b935f220c4..bf8a2166f94 100644 --- a/api/db/database-builder/factory/build-campaign-participation-with-organization-learner.js +++ b/api/db/database-builder/factory/build-campaign-participation-with-organization-learner.js @@ -1,8 +1,12 @@ -const buildAssessment = require('./build-assessment'); -const buildCampaignParticipation = require('./build-campaign-participation'); -const buildOrganizationLearnerWithUser = require('./build-organization-learner-with-user'); +import { buildAssessment } from './build-assessment.js'; +import { buildCampaignParticipation } from './build-campaign-participation.js'; +import { buildOrganizationLearnerWithUser } from './build-organization-learner-with-user.js'; -module.exports = (organizationLearner, campaignParticipation, withAssessment) => { +const buildCampaignParticipationWithOrganizationLearner = ( + organizationLearner, + campaignParticipation, + withAssessment +) => { const { userId, id: organizationLearnerId } = buildOrganizationLearnerWithUser(organizationLearner); const campaignParticipationCreated = buildCampaignParticipation({ userId, @@ -14,3 +18,5 @@ module.exports = (organizationLearner, campaignParticipation, withAssessment) => } return campaignParticipationCreated; }; + +export { buildCampaignParticipationWithOrganizationLearner }; diff --git a/api/db/database-builder/factory/build-campaign-participation-with-user.js b/api/db/database-builder/factory/build-campaign-participation-with-user.js index 89e938a057f..90822925e4e 100644 --- a/api/db/database-builder/factory/build-campaign-participation-with-user.js +++ b/api/db/database-builder/factory/build-campaign-participation-with-user.js @@ -1,8 +1,8 @@ -const buildAssessment = require('./build-assessment'); -const buildCampaignParticipation = require('./build-campaign-participation'); -const buildUser = require('./build-user'); +import { buildAssessment } from './build-assessment.js'; +import { buildCampaignParticipation } from './build-campaign-participation.js'; +import { buildUser } from './build-user.js'; -module.exports = (user, campaignParticipation, withAssessment) => { +const buildCampaignParticipationWithUser = (user, campaignParticipation, withAssessment) => { const { id: userId } = buildUser(user); const campaignParticipationCreated = buildCampaignParticipation({ userId, ...campaignParticipation }); if (withAssessment) { @@ -10,3 +10,5 @@ module.exports = (user, campaignParticipation, withAssessment) => { } return campaignParticipationCreated; }; + +export { buildCampaignParticipationWithUser }; diff --git a/api/db/database-builder/factory/build-campaign-participation.js b/api/db/database-builder/factory/build-campaign-participation.js index f9d6fde2ac7..97462e38f8f 100644 --- a/api/db/database-builder/factory/build-campaign-participation.js +++ b/api/db/database-builder/factory/build-campaign-participation.js @@ -1,13 +1,13 @@ -const buildCampaign = require('./build-campaign'); -const buildUser = require('./build-user'); -const buildOrganizationLearner = require('./build-organization-learner'); -const databaseBuffer = require('../database-buffer'); -const CampaignParticipationStatuses = require('../../../lib/domain/models/CampaignParticipationStatuses'); -const _ = require('lodash'); +import { buildCampaign } from './build-campaign.js'; +import { buildUser } from './build-user.js'; +import { buildOrganizationLearner } from './build-organization-learner.js'; +import { databaseBuffer } from '../database-buffer.js'; +import { CampaignParticipationStatuses } from '../../../lib/domain/models/CampaignParticipationStatuses.js'; +import _ from 'lodash'; const { SHARED } = CampaignParticipationStatuses; -module.exports = function buildCampaignParticipation({ +const buildCampaignParticipation = function ({ id = databaseBuffer.getNextId(), campaignId, createdAt = new Date('2020-01-01'), @@ -70,3 +70,5 @@ module.exports = function buildCampaignParticipation({ isCertifiable, }; }; + +export { buildCampaignParticipation }; diff --git a/api/db/database-builder/factory/build-campaign-skill.js b/api/db/database-builder/factory/build-campaign-skill.js index c755036c49e..1a74d52d08e 100644 --- a/api/db/database-builder/factory/build-campaign-skill.js +++ b/api/db/database-builder/factory/build-campaign-skill.js @@ -1,8 +1,8 @@ -const buildCampaign = require('./build-campaign'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildCampaign } from './build-campaign.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildCampaignSkill({ campaignId, skillId = 'recSKI456' } = {}) { +const buildCampaignSkill = function ({ campaignId, skillId = 'recSKI456' } = {}) { campaignId = _.isUndefined(campaignId) ? buildCampaign().id : campaignId; const values = { @@ -14,3 +14,5 @@ module.exports = function buildCampaignSkill({ campaignId, skillId = 'recSKI456' values, }); }; + +export { buildCampaignSkill }; diff --git a/api/db/database-builder/factory/build-campaign.js b/api/db/database-builder/factory/build-campaign.js index 09e1dea19a1..d6decc4cded 100644 --- a/api/db/database-builder/factory/build-campaign.js +++ b/api/db/database-builder/factory/build-campaign.js @@ -1,12 +1,12 @@ -const buildOrganization = require('./build-organization'); -const buildTargetProfile = require('./build-target-profile'); -const buildUser = require('./build-user'); -const CampaignTypes = require('../../../lib/domain/models/CampaignTypes'); -const Assessment = require('../../../lib/domain/models/Assessment'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildOrganization } from './build-organization.js'; +import { buildTargetProfile } from './build-target-profile.js'; +import { buildUser } from './build-user.js'; +import { CampaignTypes } from '../../../lib/domain/models/CampaignTypes.js'; +import { Assessment } from '../../../lib/domain/models/Assessment.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildCampaign({ +const buildCampaign = function ({ id = databaseBuffer.getNextId(), name = 'Name', code, @@ -72,3 +72,5 @@ module.exports = function buildCampaign({ values, }); }; + +export { buildCampaign }; diff --git a/api/db/database-builder/factory/build-certifiable-user.js b/api/db/database-builder/factory/build-certifiable-user.js index c2d975952a5..5d814fe2e64 100644 --- a/api/db/database-builder/factory/build-certifiable-user.js +++ b/api/db/database-builder/factory/build-certifiable-user.js @@ -1,9 +1,9 @@ -const buildUser = require('./build-user'); -const buildAssessment = require('./build-assessment'); -const buildAnswer = require('./build-answer'); -const buildKnowledgeElement = require('./build-knowledge-element'); +import { buildUser } from './build-user.js'; +import { buildAssessment } from './build-assessment.js'; +import { buildAnswer } from './build-answer.js'; +import { buildKnowledgeElement } from './build-knowledge-element.js'; -module.exports = function buildCertifiableUser({ competencesAssociatedSkillsAndChallenges, limitDate }) { +const buildCertifiableUser = function ({ competencesAssociatedSkillsAndChallenges, limitDate }) { const certifiableUser = buildUser(); const assessmentId = buildAssessment({ userId: certifiableUser.id }).id; const commonUserIdAssessmentIdAndEarnedPixForAllKEs = { userId: certifiableUser.id, assessmentId, earnedPix: 4 }; @@ -20,3 +20,5 @@ module.exports = function buildCertifiableUser({ competencesAssociatedSkillsAndC return certifiableUser; }; + +export { buildCertifiableUser }; diff --git a/api/db/database-builder/factory/build-certification-candidate.js b/api/db/database-builder/factory/build-certification-candidate.js index 50fad4dd7e5..c2cf6bed909 100644 --- a/api/db/database-builder/factory/build-certification-candidate.js +++ b/api/db/database-builder/factory/build-certification-candidate.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const buildSession = require('./build-session'); -const buildUser = require('./build-user'); -const databaseBuffer = require('../database-buffer'); +import _ from 'lodash'; +import { buildSession } from './build-session.js'; +import { buildUser } from './build-user.js'; +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildCertificationCandidate({ +const buildCertificationCandidate = function ({ id = databaseBuffer.getNextId(), firstName = 'first-name', lastName = 'last-name', @@ -82,3 +82,5 @@ module.exports = function buildCertificationCandidate({ prepaymentCode, }; }; + +export { buildCertificationCandidate }; diff --git a/api/db/database-builder/factory/build-certification-center-invitation.js b/api/db/database-builder/factory/build-certification-center-invitation.js index ebf39a299d5..82d8fa17ae1 100644 --- a/api/db/database-builder/factory/build-certification-center-invitation.js +++ b/api/db/database-builder/factory/build-certification-center-invitation.js @@ -1,8 +1,8 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; const TABLE_NAME = 'certification-center-invitations'; -module.exports = function buildCertificationCenterInvitation({ +const buildCertificationCenterInvitation = function ({ id = databaseBuffer.getNextId(), certificationCenterId, email = 'anemail@example.net', @@ -26,3 +26,5 @@ module.exports = function buildCertificationCenterInvitation({ values, }); }; + +export { buildCertificationCenterInvitation }; diff --git a/api/db/database-builder/factory/build-certification-center-membership.js b/api/db/database-builder/factory/build-certification-center-membership.js index 6d991c404d6..1ab9c912a97 100644 --- a/api/db/database-builder/factory/build-certification-center-membership.js +++ b/api/db/database-builder/factory/build-certification-center-membership.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const databaseBuffer = require('../database-buffer'); -const buildCertificationCenter = require('./build-certification-center'); -const buildUser = require('./build-user'); +import _ from 'lodash'; +import { databaseBuffer } from '../database-buffer.js'; +import { buildCertificationCenter } from './build-certification-center.js'; +import { buildUser } from './build-user.js'; -module.exports = function buildCertificationCenterMembership({ +const buildCertificationCenterMembership = function ({ id = databaseBuffer.getNextId(), userId, updatedByUserId, @@ -29,3 +29,5 @@ module.exports = function buildCertificationCenterMembership({ values, }); }; + +export { buildCertificationCenterMembership }; diff --git a/api/db/database-builder/factory/build-certification-center.js b/api/db/database-builder/factory/build-certification-center.js index c3a388170b7..437c6c2aeef 100644 --- a/api/db/database-builder/factory/build-certification-center.js +++ b/api/db/database-builder/factory/build-certification-center.js @@ -1,6 +1,6 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildCertificationCenter({ +const buildCertificationCenter = function ({ id = databaseBuffer.getNextId(), name = 'some name', type = 'SUP', @@ -21,3 +21,5 @@ module.exports = function buildCertificationCenter({ values, }); }; + +export { buildCertificationCenter }; diff --git a/api/db/database-builder/factory/build-certification-challenge.js b/api/db/database-builder/factory/build-certification-challenge.js index 05fa872365f..b18b068f008 100644 --- a/api/db/database-builder/factory/build-certification-challenge.js +++ b/api/db/database-builder/factory/build-certification-challenge.js @@ -1,8 +1,8 @@ -const buildCertificationCourse = require('./build-certification-course'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildCertificationCourse } from './build-certification-course.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildCertificationChallenge({ +const buildCertificationChallenge = function ({ id = databaseBuffer.getNextId(), associatedSkillName = '@twi8', associatedSkillId = 'recSKIL123', @@ -35,3 +35,5 @@ module.exports = function buildCertificationChallenge({ values, }); }; + +export { buildCertificationChallenge }; diff --git a/api/db/database-builder/factory/build-certification-course-last-assessment-result.js b/api/db/database-builder/factory/build-certification-course-last-assessment-result.js index 1291d523855..213eb474e2d 100644 --- a/api/db/database-builder/factory/build-certification-course-last-assessment-result.js +++ b/api/db/database-builder/factory/build-certification-course-last-assessment-result.js @@ -1,9 +1,6 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildCertificationCourseLastAssessmentResult({ - certificationCourseId, - lastAssessmentResultId, -} = {}) { +const buildCertificationCourseLastAssessmentResult = function ({ certificationCourseId, lastAssessmentResultId } = {}) { const values = { certificationCourseId, lastAssessmentResultId, @@ -13,3 +10,5 @@ module.exports = function buildCertificationCourseLastAssessmentResult({ values, }); }; + +export { buildCertificationCourseLastAssessmentResult }; diff --git a/api/db/database-builder/factory/build-certification-course.js b/api/db/database-builder/factory/build-certification-course.js index 387085c73fd..1fb3f7a782a 100644 --- a/api/db/database-builder/factory/build-certification-course.js +++ b/api/db/database-builder/factory/build-certification-course.js @@ -1,9 +1,9 @@ -const buildSession = require('./build-session'); -const buildUser = require('./build-user'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildSession } from './build-session.js'; +import { buildUser } from './build-user.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildCertificationCourse({ +const buildCertificationCourse = function ({ id = databaseBuffer.getNextId(), lastName = 'last-name', firstName = 'first-name', @@ -64,3 +64,5 @@ module.exports = function buildCertificationCourse({ values, }); }; + +export { buildCertificationCourse }; diff --git a/api/db/database-builder/factory/build-certification-cpf-city.js b/api/db/database-builder/factory/build-certification-cpf-city.js index 5f5ad13ba50..57f089af738 100644 --- a/api/db/database-builder/factory/build-certification-cpf-city.js +++ b/api/db/database-builder/factory/build-certification-cpf-city.js @@ -1,6 +1,6 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildCertificationCpfCity({ +const buildCertificationCpfCity = function ({ id = databaseBuffer.getNextId(), name = 'PARIS 19', postalCode = '75019', @@ -20,3 +20,5 @@ module.exports = function buildCertificationCpfCity({ values, }); }; + +export { buildCertificationCpfCity }; diff --git a/api/db/database-builder/factory/build-certification-cpf-country.js b/api/db/database-builder/factory/build-certification-cpf-country.js index d1ddadfa1d0..a5e7981c787 100644 --- a/api/db/database-builder/factory/build-certification-cpf-country.js +++ b/api/db/database-builder/factory/build-certification-cpf-country.js @@ -1,7 +1,7 @@ -const databaseBuffer = require('../database-buffer'); -const { normalizeAndSortChars } = require('../../../lib/infrastructure/utils/string-utils'); +import { databaseBuffer } from '../database-buffer.js'; +import { normalizeAndSortChars } from '../../../lib/infrastructure/utils/string-utils.js'; -module.exports = function buildCertificationCpfCountry({ +const buildCertificationCpfCountry = function ({ id = databaseBuffer.getNextId(), code = '99123', commonName = 'FILÉKISTANIE', @@ -22,3 +22,5 @@ module.exports = function buildCertificationCpfCountry({ values, }); }; + +export { buildCertificationCpfCountry }; diff --git a/api/db/database-builder/factory/build-certification-issue-report.js b/api/db/database-builder/factory/build-certification-issue-report.js index 090083b9f10..fce4e3bd059 100644 --- a/api/db/database-builder/factory/build-certification-issue-report.js +++ b/api/db/database-builder/factory/build-certification-issue-report.js @@ -1,9 +1,9 @@ -const buildCertificationCourse = require('./build-certification-course'); -const buildIssueReportCategory = require('./build-issue-report-category'); -const _ = require('lodash'); -const databaseBuffer = require('../database-buffer'); +import { buildCertificationCourse } from './build-certification-course.js'; +import { buildIssueReportCategory } from './build-issue-report-category.js'; +import _ from 'lodash'; +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildCertificationIssueReport({ +const buildCertificationIssueReport = function ({ id = databaseBuffer.getNextId(), certificationCourseId, categoryId, @@ -35,3 +35,5 @@ module.exports = function buildCertificationIssueReport({ values, }); }; + +export { buildCertificationIssueReport }; diff --git a/api/db/database-builder/factory/build-certification-report.js b/api/db/database-builder/factory/build-certification-report.js index 3aa278f3aa2..e57ed01c634 100644 --- a/api/db/database-builder/factory/build-certification-report.js +++ b/api/db/database-builder/factory/build-certification-report.js @@ -1,8 +1,8 @@ -const buildCertificationCourse = require('./build-certification-course'); -const CertificationReport = require('../../../lib/domain/models/CertificationReport'); -const _ = require('lodash'); +import { buildCertificationCourse } from './build-certification-course.js'; +import { CertificationReport } from '../../../lib/domain/models/CertificationReport.js'; +import _ from 'lodash'; -module.exports = function buildCertificationReport({ +const buildCertificationReport = function ({ firstName = 'Bobby', lastName = 'Lapointe', isCompleted = true, @@ -28,3 +28,5 @@ module.exports = function buildCertificationReport({ }; return values; }; + +export { buildCertificationReport }; diff --git a/api/db/database-builder/factory/build-competence-evaluation.js b/api/db/database-builder/factory/build-competence-evaluation.js index 0435e43c3e9..9a0ed8a03f0 100644 --- a/api/db/database-builder/factory/build-competence-evaluation.js +++ b/api/db/database-builder/factory/build-competence-evaluation.js @@ -1,10 +1,10 @@ -const buildAssessment = require('./build-assessment'); -const buildUser = require('./build-user'); -const databaseBuffer = require('../database-buffer'); -const CompetenceEvaluation = require('../../../lib/domain/models/CompetenceEvaluation'); -const _ = require('lodash'); +import { buildAssessment } from './build-assessment.js'; +import { buildUser } from './build-user.js'; +import { databaseBuffer } from '../database-buffer.js'; +import { CompetenceEvaluation } from '../../../lib/domain/models/CompetenceEvaluation.js'; +import _ from 'lodash'; -module.exports = function buildCompetenceEvaluation({ +const buildCompetenceEvaluation = function ({ id = databaseBuffer.getNextId(), assessmentId, competenceId = 'recABC123', @@ -31,3 +31,5 @@ module.exports = function buildCompetenceEvaluation({ values, }); }; + +export { buildCompetenceEvaluation }; diff --git a/api/db/database-builder/factory/build-competence-mark.js b/api/db/database-builder/factory/build-competence-mark.js index aabfd3ce2b4..fd100615716 100644 --- a/api/db/database-builder/factory/build-competence-mark.js +++ b/api/db/database-builder/factory/build-competence-mark.js @@ -1,8 +1,8 @@ -const buildAssessmentResult = require('./build-assessment-result'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildAssessmentResult } from './build-assessment-result.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildCompetenceMark({ +const buildCompetenceMark = function ({ id = databaseBuffer.getNextId(), level = 5, score = 42, @@ -29,3 +29,5 @@ module.exports = function buildCompetenceMark({ values, }); }; + +export { buildCompetenceMark }; diff --git a/api/db/database-builder/factory/build-complementary-certification-badge.js b/api/db/database-builder/factory/build-complementary-certification-badge.js index e92d3d6d93f..220f85ad194 100644 --- a/api/db/database-builder/factory/build-complementary-certification-badge.js +++ b/api/db/database-builder/factory/build-complementary-certification-badge.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const buildBadge = require('./build-badge'); -const buildComplementaryCertification = require('./build-complementary-certification'); -const databaseBuffer = require('../database-buffer'); +import _ from 'lodash'; +import { buildBadge } from './build-badge.js'; +import { buildComplementaryCertification } from './build-complementary-certification.js'; +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildComplementaryCertificationBadge({ +const buildComplementaryCertificationBadge = function ({ id = databaseBuffer.getNextId(), level = 1, complementaryCertificationId, @@ -37,3 +37,5 @@ module.exports = function buildComplementaryCertificationBadge({ values, }); }; + +export { buildComplementaryCertificationBadge }; diff --git a/api/db/database-builder/factory/build-complementary-certification-course-result.js b/api/db/database-builder/factory/build-complementary-certification-course-result.js index 33298a6d073..b69049a6409 100644 --- a/api/db/database-builder/factory/build-complementary-certification-course-result.js +++ b/api/db/database-builder/factory/build-complementary-certification-course-result.js @@ -1,11 +1,11 @@ -const databaseBuffer = require('../database-buffer'); -const buildComplementaryCertificationCourse = require('./build-complementary-certification-course'); -const buildComplementaryCertification = require('./build-complementary-certification'); -const buildCertificationCourse = require('./build-certification-course'); -const _ = require('lodash'); -const ComplementaryCertificationCourseResult = require('../../../lib/domain/models/ComplementaryCertificationCourseResult'); +import { databaseBuffer } from '../database-buffer.js'; +import { buildComplementaryCertificationCourse } from './build-complementary-certification-course.js'; +import { buildComplementaryCertification } from './build-complementary-certification.js'; +import { buildCertificationCourse } from './build-certification-course.js'; +import _ from 'lodash'; +import { ComplementaryCertificationCourseResult } from '../../../lib/domain/models/ComplementaryCertificationCourseResult.js'; -module.exports = function buildComplementaryCertificationCourseResult({ +const buildComplementaryCertificationCourseResult = function ({ complementaryCertificationCourseId, partnerKey, source = ComplementaryCertificationCourseResult.sources.PIX, @@ -20,6 +20,8 @@ module.exports = function buildComplementaryCertificationCourseResult({ }); }; +export { buildComplementaryCertificationCourseResult }; + function _buildComplementaryCertificationCourse() { const { id: complementaryCertificationId } = buildComplementaryCertification(); const { id: certificationCourseId } = buildCertificationCourse(); diff --git a/api/db/database-builder/factory/build-complementary-certification-course.js b/api/db/database-builder/factory/build-complementary-certification-course.js index c2ecfab9706..6f2128f72ba 100644 --- a/api/db/database-builder/factory/build-complementary-certification-course.js +++ b/api/db/database-builder/factory/build-complementary-certification-course.js @@ -1,8 +1,8 @@ -const buildComplementaryCertification = require('./build-complementary-certification'); -const buildComplementaryCertificationBadge = require('./build-complementary-certification-badge'); -const databaseBuffer = require('../database-buffer'); +import { buildComplementaryCertification } from './build-complementary-certification.js'; +import { buildComplementaryCertificationBadge } from './build-complementary-certification-badge.js'; +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildComplementaryCertificationCourse({ +const buildComplementaryCertificationCourse = function ({ id = databaseBuffer.getNextId(), complementaryCertificationId, certificationCourseId, @@ -28,3 +28,5 @@ module.exports = function buildComplementaryCertificationCourse({ values, }); }; + +export { buildComplementaryCertificationCourse }; diff --git a/api/db/database-builder/factory/build-complementary-certification-habilitation.js b/api/db/database-builder/factory/build-complementary-certification-habilitation.js index b5f34f88ec5..9d54f664f81 100644 --- a/api/db/database-builder/factory/build-complementary-certification-habilitation.js +++ b/api/db/database-builder/factory/build-complementary-certification-habilitation.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const buildCertificationCenter = require('./build-certification-center'); -const buildComplementaryCertification = require('./build-complementary-certification'); -const databaseBuffer = require('../database-buffer'); +import _ from 'lodash'; +import { buildCertificationCenter } from './build-certification-center.js'; +import { buildComplementaryCertification } from './build-complementary-certification.js'; +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildComplementaryCertificationHabilitation({ +const buildComplementaryCertificationHabilitation = function ({ id = databaseBuffer.getNextId(), certificationCenterId, complementaryCertificationId, @@ -25,3 +25,5 @@ module.exports = function buildComplementaryCertificationHabilitation({ values, }); }; + +export { buildComplementaryCertificationHabilitation }; diff --git a/api/db/database-builder/factory/build-complementary-certification-subscription.js b/api/db/database-builder/factory/build-complementary-certification-subscription.js index e0bbacc6a33..b5e8b2f2e2a 100644 --- a/api/db/database-builder/factory/build-complementary-certification-subscription.js +++ b/api/db/database-builder/factory/build-complementary-certification-subscription.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const buildCertificationCandidate = require('./build-certification-candidate'); -const buildComplementaryCertification = require('./build-complementary-certification'); -const databaseBuffer = require('../database-buffer'); +import _ from 'lodash'; +import { buildCertificationCandidate } from './build-certification-candidate.js'; +import { buildComplementaryCertification } from './build-complementary-certification.js'; +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildComplementaryCertificationSubscription({ +const buildComplementaryCertificationSubscription = function ({ certificationCandidateId, complementaryCertificationId, createdAt = new Date('2020-01-01'), @@ -25,3 +25,5 @@ module.exports = function buildComplementaryCertificationSubscription({ values, }); }; + +export { buildComplementaryCertificationSubscription }; diff --git a/api/db/database-builder/factory/build-complementary-certification.js b/api/db/database-builder/factory/build-complementary-certification.js index f96f353c009..651a18c0fae 100644 --- a/api/db/database-builder/factory/build-complementary-certification.js +++ b/api/db/database-builder/factory/build-complementary-certification.js @@ -1,5 +1,5 @@ -const ComplementaryCertification = require('../../../lib/domain/models/ComplementaryCertification'); -const databaseBuffer = require('../database-buffer'); +import { ComplementaryCertification } from '../../../lib/domain/models/ComplementaryCertification.js'; +import { databaseBuffer } from '../database-buffer.js'; function buildComplementaryCertification({ id = databaseBuffer.getNextId(), @@ -50,4 +50,4 @@ buildComplementaryCertification.clea = function ({ }); }; -module.exports = buildComplementaryCertification; +export { buildComplementaryCertification }; diff --git a/api/db/database-builder/factory/build-correct-answer-and-knowledge-element.js b/api/db/database-builder/factory/build-correct-answer-and-knowledge-element.js index 639dc161f9f..c16199178dc 100644 --- a/api/db/database-builder/factory/build-correct-answer-and-knowledge-element.js +++ b/api/db/database-builder/factory/build-correct-answer-and-knowledge-element.js @@ -1,6 +1,6 @@ -const buildAssessment = require('./build-assessment'); -const buildAnswer = require('./build-answer'); -const buildKnowledgeElement = require('./build-knowledge-element'); +import { buildAssessment } from './build-assessment.js'; +import { buildAnswer } from './build-answer.js'; +import { buildKnowledgeElement } from './build-knowledge-element.js'; const buildCorrectAnswerAndKnowledgeElement = async function ({ userId, @@ -26,4 +26,4 @@ const buildCorrectAnswerAndKnowledgeElement = async function ({ }); }; -module.exports = buildCorrectAnswerAndKnowledgeElement; +export { buildCorrectAnswerAndKnowledgeElement }; diff --git a/api/db/database-builder/factory/build-correct-answers-and-knowledge-elements-for-learning-content.js b/api/db/database-builder/factory/build-correct-answers-and-knowledge-elements-for-learning-content.js index 1aaf5d38334..e07bb2feb60 100644 --- a/api/db/database-builder/factory/build-correct-answers-and-knowledge-elements-for-learning-content.js +++ b/api/db/database-builder/factory/build-correct-answers-and-knowledge-elements-for-learning-content.js @@ -1,5 +1,5 @@ -const buildCorrectAnswerAndKnowledgeElement = require('./build-correct-answer-and-knowledge-element'); -const _ = require('lodash'); +import { buildCorrectAnswerAndKnowledgeElement } from './build-correct-answer-and-knowledge-element.js'; +import _ from 'lodash'; const buildCorrectAnswersAndKnowledgeElementsForLearningContent = function ({ learningContent, @@ -57,4 +57,4 @@ buildCorrectAnswersAndKnowledgeElementsForLearningContent.fromAreas = function ( }); }; -module.exports = buildCorrectAnswersAndKnowledgeElementsForLearningContent; +export { buildCorrectAnswersAndKnowledgeElementsForLearningContent }; diff --git a/api/db/database-builder/factory/build-data-protection-officer.js b/api/db/database-builder/factory/build-data-protection-officer.js index eab1755200e..db5f1e4d624 100644 --- a/api/db/database-builder/factory/build-data-protection-officer.js +++ b/api/db/database-builder/factory/build-data-protection-officer.js @@ -1,4 +1,4 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; const TABLE_NAME = 'data-protection-officers'; @@ -52,7 +52,7 @@ function buildOrganizationDataProtectionOfficer({ }); } -module.exports = { - withCertificationCenterId: buildCertificationCenterDataProtectionOfficer, - withOrganizationId: buildOrganizationDataProtectionOfficer, +export { + buildCertificationCenterDataProtectionOfficer as withCertificationCenterId, + buildOrganizationDataProtectionOfficer as withOrganizationId, }; diff --git a/api/db/database-builder/factory/build-feature.js b/api/db/database-builder/factory/build-feature.js index 6f678f50c09..f5dee6959f4 100644 --- a/api/db/database-builder/factory/build-feature.js +++ b/api/db/database-builder/factory/build-feature.js @@ -1,4 +1,4 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; const buildFeature = function buildFeature({ id = databaseBuffer.getNextId(), key, description } = {}) { const values = { @@ -13,4 +13,4 @@ const buildFeature = function buildFeature({ id = databaseBuffer.getNextId(), ke }); }; -module.exports = buildFeature; +export { buildFeature }; diff --git a/api/db/database-builder/factory/build-finalized-session.js b/api/db/database-builder/factory/build-finalized-session.js index 8c10b2de523..4f5964f2aa7 100644 --- a/api/db/database-builder/factory/build-finalized-session.js +++ b/api/db/database-builder/factory/build-finalized-session.js @@ -1,6 +1,6 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildFinalizedSession({ +const buildFinalizedSession = function ({ sessionId = databaseBuffer.getNextId(), certificationCenterName = 'Centre de certif PIX', finalizedAt = new Date('2020-01-01'), @@ -26,3 +26,5 @@ module.exports = function buildFinalizedSession({ values, }); }; + +export { buildFinalizedSession }; diff --git a/api/db/database-builder/factory/build-flash-assessment-result.js b/api/db/database-builder/factory/build-flash-assessment-result.js index 1ee2160ca8e..7a25cd15e08 100644 --- a/api/db/database-builder/factory/build-flash-assessment-result.js +++ b/api/db/database-builder/factory/build-flash-assessment-result.js @@ -1,7 +1,7 @@ -const databaseBuffer = require('../database-buffer'); -const buildAnswer = require('./build-answer'); +import { databaseBuffer } from '../database-buffer.js'; +import { buildAnswer } from './build-answer.js'; -module.exports = function buildFlashAssessmentResult({ +const buildFlashAssessmentResult = function ({ id = databaseBuffer.getNextId(), answerId, assessmentId, @@ -21,3 +21,5 @@ module.exports = function buildFlashAssessmentResult({ }, }); }; + +export { buildFlashAssessmentResult }; diff --git a/api/db/database-builder/factory/build-issue-report-category.js b/api/db/database-builder/factory/build-issue-report-category.js index f93589d4758..196b15c8283 100644 --- a/api/db/database-builder/factory/build-issue-report-category.js +++ b/api/db/database-builder/factory/build-issue-report-category.js @@ -1,6 +1,6 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildIssueReportCategory({ +const buildIssueReportCategory = function ({ id = databaseBuffer.getNextId(), name = 'Some problem', isDeprecated = false, @@ -19,3 +19,5 @@ module.exports = function buildIssueReportCategory({ values, }); }; + +export { buildIssueReportCategory }; diff --git a/api/db/database-builder/factory/build-knowledge-element-snapshot.js b/api/db/database-builder/factory/build-knowledge-element-snapshot.js index e1cdfbf8d97..76263471078 100644 --- a/api/db/database-builder/factory/build-knowledge-element-snapshot.js +++ b/api/db/database-builder/factory/build-knowledge-element-snapshot.js @@ -1,9 +1,9 @@ -const buildKnowledgeElement = require('./build-knowledge-element'); -const buildUser = require('./build-user'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildKnowledgeElement } from './build-knowledge-element.js'; +import { buildUser } from './build-user.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildKnowledgeElementSnapshot({ +const buildKnowledgeElementSnapshot = function ({ id = databaseBuffer.getNextId(), userId, snappedAt = new Date('2020-01-01'), @@ -30,3 +30,5 @@ module.exports = function buildKnowledgeElementSnapshot({ values, }); }; + +export { buildKnowledgeElementSnapshot }; diff --git a/api/db/database-builder/factory/build-knowledge-element.js b/api/db/database-builder/factory/build-knowledge-element.js index c105e3a457d..e067c0c99fc 100644 --- a/api/db/database-builder/factory/build-knowledge-element.js +++ b/api/db/database-builder/factory/build-knowledge-element.js @@ -1,11 +1,11 @@ -const buildAnswer = require('./build-answer'); -const buildAssessment = require('./build-assessment'); -const buildUser = require('./build-user'); -const databaseBuffer = require('../database-buffer'); -const KnowledgeElement = require('../../../lib/domain/models/KnowledgeElement'); -const _ = require('lodash'); +import { buildAnswer } from './build-answer.js'; +import { buildAssessment } from './build-assessment.js'; +import { buildUser } from './build-user.js'; +import { databaseBuffer } from '../database-buffer.js'; +import { KnowledgeElement } from '../../../lib/domain/models/KnowledgeElement.js'; +import _ from 'lodash'; -module.exports = function buildKnowledgeElement({ +const buildKnowledgeElement = function ({ id = databaseBuffer.getNextId(), source = KnowledgeElement.SourceType.DIRECT, status = KnowledgeElement.StatusType.VALIDATED, @@ -39,3 +39,5 @@ module.exports = function buildKnowledgeElement({ values, }); }; + +export { buildKnowledgeElement }; diff --git a/api/db/database-builder/factory/build-membership.js b/api/db/database-builder/factory/build-membership.js index 49b2d1aa961..0c6761f39f5 100644 --- a/api/db/database-builder/factory/build-membership.js +++ b/api/db/database-builder/factory/build-membership.js @@ -1,10 +1,10 @@ -const databaseBuffer = require('../database-buffer'); -const buildUser = require('./build-user'); -const buildOrganization = require('./build-organization'); -const Membership = require('../../../lib/domain/models/Membership'); -const _ = require('lodash'); +import { databaseBuffer } from '../database-buffer.js'; +import { buildUser } from './build-user.js'; +import { buildOrganization } from './build-organization.js'; +import { Membership } from '../../../lib/domain/models/Membership.js'; +import _ from 'lodash'; -module.exports = function buildMembership({ +const buildMembership = function ({ id = databaseBuffer.getNextId(), organizationRole = Membership.roles.MEMBER, organizationId, @@ -30,3 +30,5 @@ module.exports = function buildMembership({ values, }); }; + +export { buildMembership }; diff --git a/api/db/database-builder/factory/build-organization-feature.js b/api/db/database-builder/factory/build-organization-feature.js index 5f3b87a0d56..59063b5164c 100644 --- a/api/db/database-builder/factory/build-organization-feature.js +++ b/api/db/database-builder/factory/build-organization-feature.js @@ -1,4 +1,4 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; const buildOrganizationFeature = function buildOrganizationFeature({ id = databaseBuffer.getNextId(), @@ -17,4 +17,4 @@ const buildOrganizationFeature = function buildOrganizationFeature({ }); }; -module.exports = buildOrganizationFeature; +export { buildOrganizationFeature }; diff --git a/api/db/database-builder/factory/build-organization-invitation.js b/api/db/database-builder/factory/build-organization-invitation.js index 2d644cd006e..472dc7e2985 100644 --- a/api/db/database-builder/factory/build-organization-invitation.js +++ b/api/db/database-builder/factory/build-organization-invitation.js @@ -1,9 +1,9 @@ -const databaseBuffer = require('../database-buffer'); -const buildOrganization = require('./build-organization'); -const OrganizationInvitation = require('../../../lib/domain/models/OrganizationInvitation'); -const _ = require('lodash'); +import { databaseBuffer } from '../database-buffer.js'; +import { buildOrganization } from './build-organization.js'; +import { OrganizationInvitation } from '../../../lib/domain/models/OrganizationInvitation.js'; +import _ from 'lodash'; -module.exports = function buildOrganizationInvitation({ +const buildOrganizationInvitation = function ({ id = databaseBuffer.getNextId(), organizationId, email = 'some.mail@example.net', @@ -30,3 +30,5 @@ module.exports = function buildOrganizationInvitation({ values, }); }; + +export { buildOrganizationInvitation }; diff --git a/api/db/database-builder/factory/build-organization-learner-with-user.js b/api/db/database-builder/factory/build-organization-learner-with-user.js index 164c6a092b8..c2127b5a4e3 100644 --- a/api/db/database-builder/factory/build-organization-learner-with-user.js +++ b/api/db/database-builder/factory/build-organization-learner-with-user.js @@ -1,9 +1,9 @@ -const buildOrganization = require('./build-organization'); -const buildUser = require('./build-user'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildOrganization } from './build-organization.js'; +import { buildUser } from './build-user.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildOrganizationLearnerWithUser({ +const buildOrganizationLearnerWithUser = function ({ id = databaseBuffer.getNextId(), firstName = 'first-name', preferredLastName = 'pref-last-name', @@ -56,3 +56,5 @@ module.exports = function buildOrganizationLearnerWithUser({ values, }); }; + +export { buildOrganizationLearnerWithUser }; diff --git a/api/db/database-builder/factory/build-organization-learner.js b/api/db/database-builder/factory/build-organization-learner.js index f535b90068b..74df7efb744 100644 --- a/api/db/database-builder/factory/build-organization-learner.js +++ b/api/db/database-builder/factory/build-organization-learner.js @@ -1,9 +1,9 @@ -const buildOrganization = require('./build-organization'); -const buildUser = require('./build-user'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildOrganization } from './build-organization.js'; +import { buildUser } from './build-user.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildOrganizationLearner({ +const buildOrganizationLearner = function ({ id = databaseBuffer.getNextId(), firstName = 'first-name', preferredLastName = 'pref-last-name', @@ -74,3 +74,5 @@ module.exports = function buildOrganizationLearner({ values, }); }; + +export { buildOrganizationLearner }; diff --git a/api/db/database-builder/factory/build-organization-place.js b/api/db/database-builder/factory/build-organization-place.js index 1b2a6760c97..49b3c5ab4a2 100644 --- a/api/db/database-builder/factory/build-organization-place.js +++ b/api/db/database-builder/factory/build-organization-place.js @@ -1,6 +1,6 @@ -const databaseBuffer = require('../database-buffer'); -const buildOrganization = require('./build-organization'); -const buildUser = require('./build-user'); +import { databaseBuffer } from '../database-buffer.js'; +import { buildOrganization } from './build-organization.js'; +import { buildUser } from './build-user.js'; const buildOrganizationPlace = function buildOrganizationPlace({ id = databaseBuffer.getNextId(), @@ -38,4 +38,4 @@ const buildOrganizationPlace = function buildOrganizationPlace({ }); }; -module.exports = buildOrganizationPlace; +export { buildOrganizationPlace }; diff --git a/api/db/database-builder/factory/build-organization-tag.js b/api/db/database-builder/factory/build-organization-tag.js index 40bd4ebf875..124d0dc7b0b 100644 --- a/api/db/database-builder/factory/build-organization-tag.js +++ b/api/db/database-builder/factory/build-organization-tag.js @@ -1,9 +1,9 @@ -const databaseBuffer = require('../database-buffer'); -const buildOrganization = require('./build-organization'); -const buildTag = require('./build-tag'); -const _ = require('lodash'); +import { databaseBuffer } from '../database-buffer.js'; +import { buildOrganization } from './build-organization.js'; +import { buildTag } from './build-tag.js'; +import _ from 'lodash'; -module.exports = function buildOrganizationTag({ id = databaseBuffer.getNextId(), organizationId, tagId } = {}) { +const buildOrganizationTag = function ({ id = databaseBuffer.getNextId(), organizationId, tagId } = {}) { tagId = _.isUndefined(tagId) ? buildTag().id : tagId; organizationId = _.isUndefined(organizationId) ? buildOrganization().id : organizationId; @@ -17,3 +17,5 @@ module.exports = function buildOrganizationTag({ id = databaseBuffer.getNextId() values, }); }; + +export { buildOrganizationTag }; diff --git a/api/db/database-builder/factory/build-organization.js b/api/db/database-builder/factory/build-organization.js index d53d200a8bb..6f8a56106d0 100644 --- a/api/db/database-builder/factory/build-organization.js +++ b/api/db/database-builder/factory/build-organization.js @@ -1,4 +1,4 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; const buildOrganization = function buildOrganization({ id = databaseBuffer.getNextId(), @@ -49,4 +49,4 @@ const buildOrganization = function buildOrganization({ }); }; -module.exports = buildOrganization; +export { buildOrganization }; diff --git a/api/db/database-builder/factory/build-pix-admin-role.js b/api/db/database-builder/factory/build-pix-admin-role.js index 202d21f5d02..017eb964f2c 100644 --- a/api/db/database-builder/factory/build-pix-admin-role.js +++ b/api/db/database-builder/factory/build-pix-admin-role.js @@ -1,6 +1,6 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildPixAdminRole({ +const buildPixAdminRole = function ({ id = databaseBuffer.getNextId(), userId, role, @@ -13,3 +13,5 @@ module.exports = function buildPixAdminRole({ values: { id, userId, role, createdAt, updatedAt, disabledAt }, }); }; + +export { buildPixAdminRole }; diff --git a/api/db/database-builder/factory/build-reset-password-demand.js b/api/db/database-builder/factory/build-reset-password-demand.js index 69e689e5c2c..387a426dc6d 100644 --- a/api/db/database-builder/factory/build-reset-password-demand.js +++ b/api/db/database-builder/factory/build-reset-password-demand.js @@ -1,6 +1,6 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildResetPasswordDemand({ +const buildResetPasswordDemand = function ({ id = databaseBuffer.getNextId(), email = 'example@example.net', temporaryKey = 'ABCD12345', @@ -17,3 +17,5 @@ module.exports = function buildResetPasswordDemand({ values, }); }; + +export { buildResetPasswordDemand }; diff --git a/api/db/database-builder/factory/build-session.js b/api/db/database-builder/factory/build-session.js index 7a49571ff04..2d3e42fa437 100644 --- a/api/db/database-builder/factory/build-session.js +++ b/api/db/database-builder/factory/build-session.js @@ -1,8 +1,8 @@ -const buildCertificationCenter = require('./build-certification-center'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildCertificationCenter } from './build-certification-center.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildSession({ +const buildSession = function ({ id = databaseBuffer.getNextId(), accessCode = 'FMKP39', address = '3 rue des églantines', @@ -60,3 +60,5 @@ module.exports = function buildSession({ values, }); }; + +export { buildSession }; diff --git a/api/db/database-builder/factory/build-skill-set.js b/api/db/database-builder/factory/build-skill-set.js index abf56495714..6c2d911a25e 100644 --- a/api/db/database-builder/factory/build-skill-set.js +++ b/api/db/database-builder/factory/build-skill-set.js @@ -1,12 +1,7 @@ -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildSkillSet({ - id = databaseBuffer.getNextId(), - name = 'name', - skillIds = [], - badgeId, -} = {}) { +const buildSkillSet = function ({ id = databaseBuffer.getNextId(), name = 'name', skillIds = [], badgeId } = {}) { if (_.isEmpty(skillIds)) { skillIds = ['recABC123', 'recDEF456']; } @@ -23,3 +18,5 @@ module.exports = function buildSkillSet({ values, }); }; + +export { buildSkillSet }; diff --git a/api/db/database-builder/factory/build-stage.js b/api/db/database-builder/factory/build-stage.js index a0c7bf34ae5..350e42014f2 100644 --- a/api/db/database-builder/factory/build-stage.js +++ b/api/db/database-builder/factory/build-stage.js @@ -1,6 +1,6 @@ -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); -const buildTargetProfile = require('./build-target-profile'); +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; +import { buildTargetProfile } from './build-target-profile.js'; function buildStage({ id = databaseBuffer.getNextId(), @@ -96,4 +96,4 @@ buildStage.firstSkill = function ({ }); }; -module.exports = buildStage; +export { buildStage }; diff --git a/api/db/database-builder/factory/build-supervisor-access.js b/api/db/database-builder/factory/build-supervisor-access.js index 60e388ec178..9abfdfd1607 100644 --- a/api/db/database-builder/factory/build-supervisor-access.js +++ b/api/db/database-builder/factory/build-supervisor-access.js @@ -1,9 +1,9 @@ -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); -const buildUser = require('./build-user'); -const buildSession = require('./build-session'); +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; +import { buildUser } from './build-user.js'; +import { buildSession } from './build-session.js'; -module.exports = function buildSupervisorAccess({ +const buildSupervisorAccess = function ({ id = databaseBuffer.getNextId(), sessionId, userId, @@ -22,3 +22,5 @@ module.exports = function buildSupervisorAccess({ values, }); }; + +export { buildSupervisorAccess }; diff --git a/api/db/database-builder/factory/build-tag.js b/api/db/database-builder/factory/build-tag.js index 0855aa95335..49174712295 100644 --- a/api/db/database-builder/factory/build-tag.js +++ b/api/db/database-builder/factory/build-tag.js @@ -1,6 +1,6 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildTag({ id = databaseBuffer.getNextId(), name = 'Tag' } = {}) { +const buildTag = function ({ id = databaseBuffer.getNextId(), name = 'Tag' } = {}) { const values = { id, name, @@ -10,3 +10,5 @@ module.exports = function buildTag({ id = databaseBuffer.getNextId(), name = 'Ta values, }); }; + +export { buildTag }; diff --git a/api/db/database-builder/factory/build-target-profile-share.js b/api/db/database-builder/factory/build-target-profile-share.js index 099e80d82d8..f0bfebbf383 100644 --- a/api/db/database-builder/factory/build-target-profile-share.js +++ b/api/db/database-builder/factory/build-target-profile-share.js @@ -1,9 +1,9 @@ -const buildOrganization = require('./build-organization'); -const buildTargetProfile = require('./build-target-profile'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildOrganization } from './build-organization.js'; +import { buildTargetProfile } from './build-target-profile.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildTargetProfileShare({ +const buildTargetProfileShare = function ({ id = databaseBuffer.getNextId(), targetProfileId, organizationId, @@ -23,3 +23,5 @@ module.exports = function buildTargetProfileShare({ values, }); }; + +export { buildTargetProfileShare }; diff --git a/api/db/database-builder/factory/build-target-profile-skill.js b/api/db/database-builder/factory/build-target-profile-skill.js index c2d38f710b2..e0c328848e4 100644 --- a/api/db/database-builder/factory/build-target-profile-skill.js +++ b/api/db/database-builder/factory/build-target-profile-skill.js @@ -1,8 +1,8 @@ -const buildTargetProfile = require('./build-target-profile'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildTargetProfile } from './build-target-profile.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildTargetProfileSkill({ +const buildTargetProfileSkill = function ({ id = databaseBuffer.getNextId(), targetProfileId, skillId = 'recSKI456', @@ -19,3 +19,5 @@ module.exports = function buildTargetProfileSkill({ values, }); }; + +export { buildTargetProfileSkill }; diff --git a/api/db/database-builder/factory/build-target-profile-training.js b/api/db/database-builder/factory/build-target-profile-training.js index 138b9a39294..aece2bd3de5 100644 --- a/api/db/database-builder/factory/build-target-profile-training.js +++ b/api/db/database-builder/factory/build-target-profile-training.js @@ -1,10 +1,6 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildTargetProfileTraining({ - id = databaseBuffer.getNextId(), - trainingId, - targetProfileId, -} = {}) { +const buildTargetProfileTraining = function ({ id = databaseBuffer.getNextId(), trainingId, targetProfileId } = {}) { const values = { id, trainingId, @@ -15,3 +11,5 @@ module.exports = function buildTargetProfileTraining({ values, }); }; + +export { buildTargetProfileTraining }; diff --git a/api/db/database-builder/factory/build-target-profile-tube.js b/api/db/database-builder/factory/build-target-profile-tube.js index 0d4e2f68f7c..d90d815d968 100644 --- a/api/db/database-builder/factory/build-target-profile-tube.js +++ b/api/db/database-builder/factory/build-target-profile-tube.js @@ -1,7 +1,7 @@ -const buildTargetProfile = require('./build-target-profile'); -const databaseBuffer = require('../database-buffer'); +import { buildTargetProfile } from './build-target-profile.js'; +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildTargetProfileTube({ +const buildTargetProfileTube = function ({ id = databaseBuffer.getNextId(), targetProfileId = buildTargetProfile().id, tubeId = 'tubeId1', @@ -18,3 +18,5 @@ module.exports = function buildTargetProfileTube({ values, }); }; + +export { buildTargetProfileTube }; diff --git a/api/db/database-builder/factory/build-target-profile.js b/api/db/database-builder/factory/build-target-profile.js index 0f31833eb27..a91d5b1de55 100644 --- a/api/db/database-builder/factory/build-target-profile.js +++ b/api/db/database-builder/factory/build-target-profile.js @@ -1,8 +1,8 @@ -const buildOrganization = require('./build-organization'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildOrganization } from './build-organization.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; -module.exports = function buildTargetProfile({ +const buildTargetProfile = function ({ id = databaseBuffer.getNextId(), name = 'Remplir un tableur', imageUrl = 'https://images.pix.fr/profil-cible/Illu_GEN.svg', @@ -37,3 +37,5 @@ module.exports = function buildTargetProfile({ values, }); }; + +export { buildTargetProfile }; diff --git a/api/db/database-builder/factory/build-training-trigger-tube.js b/api/db/database-builder/factory/build-training-trigger-tube.js index 56b036f29f6..714117f6440 100644 --- a/api/db/database-builder/factory/build-training-trigger-tube.js +++ b/api/db/database-builder/factory/build-training-trigger-tube.js @@ -1,7 +1,7 @@ -const buildTrainingTrigger = require('./build-training-trigger'); -const databaseBuffer = require('../database-buffer'); +import { buildTrainingTrigger } from './build-training-trigger.js'; +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildTrainingTriggerTube({ +const buildTrainingTriggerTube = function ({ id = databaseBuffer.getNextId(), trainingTriggerId = buildTrainingTrigger().id, tubeId = 'tubeId1', @@ -18,3 +18,5 @@ module.exports = function buildTrainingTriggerTube({ values, }); }; + +export { buildTrainingTriggerTube }; diff --git a/api/db/database-builder/factory/build-training-trigger.js b/api/db/database-builder/factory/build-training-trigger.js index ac3f4710760..8c46bb02a6b 100644 --- a/api/db/database-builder/factory/build-training-trigger.js +++ b/api/db/database-builder/factory/build-training-trigger.js @@ -1,7 +1,7 @@ -const buildTraining = require('./build-training'); -const databaseBuffer = require('../database-buffer'); +import { buildTraining } from './build-training.js'; +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildTrainingTrigger({ +const buildTrainingTrigger = function ({ id = databaseBuffer.getNextId(), trainingId = buildTraining().id, threshold = 80, @@ -22,3 +22,5 @@ module.exports = function buildTrainingTrigger({ values, }); }; + +export { buildTrainingTrigger }; diff --git a/api/db/database-builder/factory/build-training.js b/api/db/database-builder/factory/build-training.js index f3ea438d22e..5c4fd5f49be 100644 --- a/api/db/database-builder/factory/build-training.js +++ b/api/db/database-builder/factory/build-training.js @@ -1,4 +1,4 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; function buildTraining({ id = databaseBuffer.getNextId(), @@ -30,4 +30,4 @@ function buildTraining({ }); } -module.exports = buildTraining; +export { buildTraining }; diff --git a/api/db/database-builder/factory/build-tutorial-evaluation.js b/api/db/database-builder/factory/build-tutorial-evaluation.js index ec605d83900..86c8a415173 100644 --- a/api/db/database-builder/factory/build-tutorial-evaluation.js +++ b/api/db/database-builder/factory/build-tutorial-evaluation.js @@ -1,6 +1,6 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildTutorialEvaluation({ +const buildTutorialEvaluation = function ({ id = databaseBuffer.getNextId(), tutorialId, userId, @@ -18,3 +18,5 @@ module.exports = function buildTutorialEvaluation({ }, }); }; + +export { buildTutorialEvaluation }; diff --git a/api/db/database-builder/factory/build-user-login.js b/api/db/database-builder/factory/build-user-login.js index 64e34e7a372..d6baa8c8025 100644 --- a/api/db/database-builder/factory/build-user-login.js +++ b/api/db/database-builder/factory/build-user-login.js @@ -1,5 +1,5 @@ -const databaseBuffer = require('../database-buffer'); -const buildUser = require('./build-user'); +import { databaseBuffer } from '../database-buffer.js'; +import { buildUser } from './build-user.js'; function buildUserLogin({ id = databaseBuffer.getNextId(), @@ -28,4 +28,4 @@ function buildUserLogin({ values, }); } -module.exports = buildUserLogin; +export { buildUserLogin }; diff --git a/api/db/database-builder/factory/build-user-orga-settings.js b/api/db/database-builder/factory/build-user-orga-settings.js index 8137d1cf7e1..86d4f9e262f 100644 --- a/api/db/database-builder/factory/build-user-orga-settings.js +++ b/api/db/database-builder/factory/build-user-orga-settings.js @@ -1,13 +1,9 @@ -const databaseBuffer = require('../database-buffer'); -const buildUser = require('./build-user'); -const buildOrganization = require('./build-organization'); -const _ = require('lodash'); +import { databaseBuffer } from '../database-buffer.js'; +import { buildUser } from './build-user.js'; +import { buildOrganization } from './build-organization.js'; +import _ from 'lodash'; -module.exports = function buildUserOrgaSettings({ - id = databaseBuffer.getNextId(), - currentOrganizationId, - userId, -} = {}) { +const buildUserOrgaSettings = function ({ id = databaseBuffer.getNextId(), currentOrganizationId, userId } = {}) { userId = _.isUndefined(userId) ? buildUser().id : userId; currentOrganizationId = _.isUndefined(currentOrganizationId) ? buildOrganization().id : currentOrganizationId; @@ -21,3 +17,5 @@ module.exports = function buildUserOrgaSettings({ values, }); }; + +export { buildUserOrgaSettings }; diff --git a/api/db/database-builder/factory/build-user-recommended-training.js b/api/db/database-builder/factory/build-user-recommended-training.js index a3205b4887b..09386137351 100644 --- a/api/db/database-builder/factory/build-user-recommended-training.js +++ b/api/db/database-builder/factory/build-user-recommended-training.js @@ -1,6 +1,6 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildUserRecommendedTraining({ +const buildUserRecommendedTraining = function ({ id = databaseBuffer.getNextId(), userId, trainingId, @@ -13,3 +13,5 @@ module.exports = function buildUserRecommendedTraining({ values: { id, userId, trainingId, campaignParticipationId, createdAt, updatedAt }, }); }; + +export { buildUserRecommendedTraining }; diff --git a/api/db/database-builder/factory/build-user-saved-tutorial.js b/api/db/database-builder/factory/build-user-saved-tutorial.js index c72816a9532..42a4a7b8135 100644 --- a/api/db/database-builder/factory/build-user-saved-tutorial.js +++ b/api/db/database-builder/factory/build-user-saved-tutorial.js @@ -1,6 +1,6 @@ -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; -module.exports = function buildUserSavedTutorial({ +const buildUserSavedTutorial = function ({ id = databaseBuffer.getNextId(), tutorialId, userId, @@ -12,3 +12,5 @@ module.exports = function buildUserSavedTutorial({ values: { id, userId, tutorialId, skillId, createdAt }, }); }; + +export { buildUserSavedTutorial }; diff --git a/api/db/database-builder/factory/build-user.js b/api/db/database-builder/factory/build-user.js index f35dfafd8c6..3ec3c241ff8 100644 --- a/api/db/database-builder/factory/build-user.js +++ b/api/db/database-builder/factory/build-user.js @@ -1,21 +1,21 @@ -const isNil = require('lodash/isNil'); -const isUndefined = require('lodash/isUndefined'); +import lodash from 'lodash'; +const { isUndefined, isNil } = lodash; -const databaseBuffer = require('../database-buffer'); +import { databaseBuffer } from '../database-buffer.js'; +import { AuthenticationMethod } from '../../../lib/domain/models/AuthenticationMethod.js'; +import { Membership } from '../../../lib/domain/models/Membership.js'; -const AuthenticationMethod = require('../../../lib/domain/models/AuthenticationMethod'); -const Membership = require('../../../lib/domain/models/Membership'); +import * as encrypt from '../../../lib/domain/services/encryption-service.js'; -const encrypt = require('../../../lib/domain/services/encryption-service'); +import { buildPixAdminRole } from './build-pix-admin-role.js'; +import { buildOrganization } from './build-organization.js'; +import { buildMembership } from './build-membership.js'; +import { buildCertificationCenter } from './build-certification-center.js'; +import { buildCertificationCenterMembership } from './build-certification-center-membership.js'; +import { DEFAULT_PASSWORD } from '../../seeds/data/users-builder.js'; +import { PIX_ADMIN } from '../../../lib/domain/constants.js'; -const buildPixAdminRole = require('./build-pix-admin-role'); -const buildOrganization = require('./build-organization'); -const buildMembership = require('./build-membership'); -const buildCertificationCenter = require('./build-certification-center'); -const buildCertificationCenterMembership = require('./build-certification-center-membership'); - -const { DEFAULT_PASSWORD } = require('../../seeds/data/users-builder'); -const { ROLES } = require('../../../lib/domain/constants').PIX_ADMIN; +const { ROLES } = PIX_ADMIN; function _buildPixAuthenticationMethod({ id = databaseBuffer.getNextId(), @@ -402,4 +402,4 @@ buildUser.withCertificationCenterMembership = function buildUserWithCertificatio return user; }; -module.exports = buildUser; +export { buildUser }; diff --git a/api/db/database-builder/factory/campaign-participation-overview-factory.js b/api/db/database-builder/factory/campaign-participation-overview-factory.js index 64a05da6614..c1bd7eb009a 100644 --- a/api/db/database-builder/factory/campaign-participation-overview-factory.js +++ b/api/db/database-builder/factory/campaign-participation-overview-factory.js @@ -1,169 +1,169 @@ -const buildAssessment = require('./build-assessment'); -const buildCampaign = require('./build-campaign'); -const buildCampaignParticipation = require('./build-campaign-participation'); -const buildCampaignSkill = require('./build-campaign-skill'); -const buildUser = require('./build-user'); -const Assessment = require('../../../lib/domain/models/Assessment'); -const CampaignParticipationStatuses = require('../../../lib/domain/models/CampaignParticipationStatuses'); +import { buildAssessment } from './build-assessment.js'; +import { buildCampaign } from './build-campaign.js'; +import { buildCampaignParticipation } from './build-campaign-participation.js'; +import { buildCampaignSkill } from './build-campaign-skill.js'; +import { buildUser } from './build-user.js'; +import { Assessment } from '../../../lib/domain/models/Assessment.js'; +import { CampaignParticipationStatuses } from '../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED, SHARED, TO_SHARE } = CampaignParticipationStatuses; -module.exports = { - build({ +const build = function ({ + userId, + createdAt, + sharedAt, + assessmentCreatedAt, + assessmentState, + campaignId, + deletedAt, + deletedBy, + id, +} = {}) { + const status = assessmentState === Assessment.states.COMPLETED ? TO_SHARE : STARTED; + + const campaignParticipation = buildCampaignParticipation({ userId, - createdAt, - sharedAt, - assessmentCreatedAt, - assessmentState, campaignId, + createdAt: createdAt, + sharedAt: sharedAt, + status: sharedAt ? SHARED : status, deletedAt, deletedBy, + }); + + buildAssessment({ id, - } = {}) { - const status = assessmentState === Assessment.states.COMPLETED ? TO_SHARE : STARTED; - - const campaignParticipation = buildCampaignParticipation({ - userId, - campaignId, - createdAt: createdAt, - sharedAt: sharedAt, - status: sharedAt ? SHARED : status, - deletedAt, - deletedBy, - }); - - buildAssessment({ - id, - userId, - campaignParticipationId: campaignParticipation.id, - state: assessmentState, - createdAt: assessmentCreatedAt, - }); - - return campaignParticipation; - }, - - buildOnGoing({ userId, createdAt, assessmentCreatedAt, campaignSkills } = {}) { - const campaign = buildCampaign(); - campaignSkills.forEach((skill) => buildCampaignSkill({ campaignId: campaign.id, skillId: skill })); - - const campaignParticipation = buildCampaignParticipation({ - userId, - createdAt: createdAt, - sharedAt: null, - status: STARTED, - campaignId: campaign.id, - }); - - buildAssessment({ - userId, - campaignParticipationId: campaignParticipation.id, - state: Assessment.states.STARTED, - createdAt: assessmentCreatedAt, - }); - - return campaignParticipation; - }, - - buildToShare({ userId, createdAt, assessmentCreatedAt, campaignSkills } = {}) { - const campaign = buildCampaign(); - campaignSkills.forEach((skill) => buildCampaignSkill({ campaignId: campaign.id, skillId: skill })); - - const campaignParticipation = buildCampaignParticipation({ - userId, - createdAt: createdAt, - sharedAt: null, - status: TO_SHARE, - campaignId: campaign.id, - }); - - buildAssessment({ - userId, - campaignParticipationId: campaignParticipation.id, - state: Assessment.states.COMPLETED, - createdAt: assessmentCreatedAt, - }); - - return campaignParticipation; - }, - - buildEnded({ userId, createdAt, sharedAt, assessmentCreatedAt, campaignSkills } = {}) { - const campaign = buildCampaign(); - campaignSkills.forEach((skill) => buildCampaignSkill({ campaignId: campaign.id, skillId: skill })); - - const campaignParticipation = buildCampaignParticipation({ - userId, - createdAt: createdAt, - sharedAt: sharedAt || createdAt, - campaignId: campaign.id, - }); - - buildAssessment({ - userId, - campaignParticipationId: campaignParticipation.id, - state: Assessment.states.COMPLETED, - createdAt: assessmentCreatedAt, - }); - - return campaignParticipation; - }, - - buildArchived({ userId, - createdAt, - sharedAt, - assessmentCreatedAt, - campaignArchivedAt = new Date('1998-07-01'), - campaignSkills, - } = {}) { - const campaign = buildCampaign({ archivedAt: campaignArchivedAt }); - campaignSkills.forEach((skill) => buildCampaignSkill({ campaignId: campaign.id, skillId: skill })); - - const campaignParticipation = buildCampaignParticipation({ - userId, - campaignId: campaign.id, - createdAt: createdAt, - sharedAt: sharedAt || createdAt, - status: STARTED, - }); - - buildAssessment({ - userId, - campaignParticipationId: campaignParticipation.id, - createdAt: assessmentCreatedAt, - }); - - return campaignParticipation; - }, - - buildDeleted({ + campaignParticipationId: campaignParticipation.id, + state: assessmentState, + createdAt: assessmentCreatedAt, + }); + + return campaignParticipation; +}; + +const buildOnGoing = function ({ userId, createdAt, assessmentCreatedAt, campaignSkills } = {}) { + const campaign = buildCampaign(); + campaignSkills.forEach((skill) => buildCampaignSkill({ campaignId: campaign.id, skillId: skill })); + + const campaignParticipation = buildCampaignParticipation({ + userId, + createdAt: createdAt, + sharedAt: null, + status: STARTED, + campaignId: campaign.id, + }); + + buildAssessment({ userId, - createdAt, - sharedAt, - assessmentCreatedAt, - deletedAt = new Date('1998-07-01'), - deletedBy = buildUser().id, - campaignSkills, - } = {}) { - const campaign = buildCampaign(); - campaignSkills.forEach((skill) => buildCampaignSkill({ campaignId: campaign.id, skillId: skill })); - - const campaignParticipation = buildCampaignParticipation({ - userId, - campaignId: campaign.id, - createdAt: createdAt, - sharedAt: sharedAt || createdAt, - deletedAt, - deletedBy, - status: STARTED, - }); - - buildAssessment({ - userId, - campaignParticipationId: campaignParticipation.id, - createdAt: assessmentCreatedAt, - }); - - return campaignParticipation; - }, + campaignParticipationId: campaignParticipation.id, + state: Assessment.states.STARTED, + createdAt: assessmentCreatedAt, + }); + + return campaignParticipation; }; + +const buildToShare = function ({ userId, createdAt, assessmentCreatedAt, campaignSkills } = {}) { + const campaign = buildCampaign(); + campaignSkills.forEach((skill) => buildCampaignSkill({ campaignId: campaign.id, skillId: skill })); + + const campaignParticipation = buildCampaignParticipation({ + userId, + createdAt: createdAt, + sharedAt: null, + status: TO_SHARE, + campaignId: campaign.id, + }); + + buildAssessment({ + userId, + campaignParticipationId: campaignParticipation.id, + state: Assessment.states.COMPLETED, + createdAt: assessmentCreatedAt, + }); + + return campaignParticipation; +}; + +const buildEnded = function ({ userId, createdAt, sharedAt, assessmentCreatedAt, campaignSkills } = {}) { + const campaign = buildCampaign(); + campaignSkills.forEach((skill) => buildCampaignSkill({ campaignId: campaign.id, skillId: skill })); + + const campaignParticipation = buildCampaignParticipation({ + userId, + createdAt: createdAt, + sharedAt: sharedAt || createdAt, + campaignId: campaign.id, + }); + + buildAssessment({ + userId, + campaignParticipationId: campaignParticipation.id, + state: Assessment.states.COMPLETED, + createdAt: assessmentCreatedAt, + }); + + return campaignParticipation; +}; + +const buildArchived = function ({ + userId, + createdAt, + sharedAt, + assessmentCreatedAt, + campaignArchivedAt = new Date('1998-07-01'), + campaignSkills, +} = {}) { + const campaign = buildCampaign({ archivedAt: campaignArchivedAt }); + campaignSkills.forEach((skill) => buildCampaignSkill({ campaignId: campaign.id, skillId: skill })); + + const campaignParticipation = buildCampaignParticipation({ + userId, + campaignId: campaign.id, + createdAt: createdAt, + sharedAt: sharedAt || createdAt, + status: STARTED, + }); + + buildAssessment({ + userId, + campaignParticipationId: campaignParticipation.id, + createdAt: assessmentCreatedAt, + }); + + return campaignParticipation; +}; + +const buildDeleted = function ({ + userId, + createdAt, + sharedAt, + assessmentCreatedAt, + deletedAt = new Date('1998-07-01'), + deletedBy = buildUser().id, + campaignSkills, +} = {}) { + const campaign = buildCampaign(); + campaignSkills.forEach((skill) => buildCampaignSkill({ campaignId: campaign.id, skillId: skill })); + + const campaignParticipation = buildCampaignParticipation({ + userId, + campaignId: campaign.id, + createdAt: createdAt, + sharedAt: sharedAt || createdAt, + deletedAt, + deletedBy, + status: STARTED, + }); + + buildAssessment({ + userId, + campaignParticipationId: campaignParticipation.id, + createdAt: assessmentCreatedAt, + }); + + return campaignParticipation; +}; + +export { build, buildOnGoing, buildToShare, buildEnded, buildArchived, buildDeleted }; diff --git a/api/db/database-builder/factory/index.js b/api/db/database-builder/factory/index.js index 76dfe30cf53..0830bf47793 100644 --- a/api/db/database-builder/factory/index.js +++ b/api/db/database-builder/factory/index.js @@ -1,84 +1,84 @@ -const buildAccountRecoveryDemand = require('./build-account-recovery-demand'); -const buildAnswer = require('./build-answer'); -const buildAnsweredNotCompletedCertificationAssessment = require('./build-answered-not-completed-certification-assessment'); -const buildAssessment = require('./build-assessment'); -const buildAssessmentFromParticipation = require('./build-assessment-from-participation'); -const buildAssessmentResult = require('./build-assessment-result'); -const buildAuthenticationMethod = require('./build-authentication-method'); -const buildBadge = require('./build-badge'); -const buildBadgeAcquisition = require('./build-badge-acquisition'); -const buildBadgeCriterion = require('./build-badge-criterion'); -const buildSkillSet = require('./build-skill-set'); -const buildCampaign = require('./build-campaign'); -const buildCampaignSkill = require('./build-campaign-skill'); -const buildAssessmentCampaign = require('./build-assessment-campaign'); -const buildAssessmentCampaignForSkills = require('./build-assessment-campaign-for-skills'); -const buildCampaignParticipation = require('./build-campaign-participation'); -const buildCampaignParticipationElementsForOverview = require('./build-campaign-participation-elements-for-overview'); -const buildCampaignParticipationWithOrganizationLearner = require('./build-campaign-participation-with-organization-learner'); -const buildCampaignParticipationWithUser = require('./build-campaign-participation-with-user'); -const buildCertifiableUser = require('./build-certifiable-user'); -const buildCertificationCandidate = require('./build-certification-candidate'); -const buildCertificationCenter = require('./build-certification-center'); -const buildCertificationCenterInvitation = require('./build-certification-center-invitation'); -const buildCertificationCenterMembership = require('./build-certification-center-membership'); -const buildCertificationChallenge = require('./build-certification-challenge'); -const buildComplementaryCertificationCourseResult = require('./build-complementary-certification-course-result'); -const buildCertificationCourse = require('./build-certification-course'); -const buildCertificationCourseLastAssessmentResult = require('./build-certification-course-last-assessment-result'); -const buildCertificationCpfCity = require('./build-certification-cpf-city'); -const buildCertificationIssueReport = require('./build-certification-issue-report'); -const buildCertificationReport = require('./build-certification-report'); -const buildCertificationCpfCountry = require('./build-certification-cpf-country'); -const buildCompetenceEvaluation = require('./build-competence-evaluation'); -const buildCompetenceMark = require('./build-competence-mark'); -const buildComplementaryCertification = require('./build-complementary-certification'); -const buildComplementaryCertificationCourse = require('./build-complementary-certification-course'); -const buildComplementaryCertificationBadge = require('./build-complementary-certification-badge'); -const buildComplementaryCertificationHabilitation = require('./build-complementary-certification-habilitation'); -const buildComplementaryCertificationSubscription = require('./build-complementary-certification-subscription'); -const buildCorrectAnswersAndKnowledgeElementsForLearningContent = require('./build-correct-answers-and-knowledge-elements-for-learning-content'); -const buildCorrectAnswerAndKnowledgeElement = require('./build-correct-answer-and-knowledge-element'); -const buildDataProtectionOfficer = require('./build-data-protection-officer'); -const buildFinalizedSession = require('./build-finalized-session'); -const buildFlashAssessmentResult = require('./build-flash-assessment-result'); -const buildIssueReportCategory = require('./build-issue-report-category'); -const buildKnowledgeElement = require('./build-knowledge-element'); -const buildKnowledgeElementSnapshot = require('./build-knowledge-element-snapshot'); -const buildMembership = require('./build-membership'); -const buildOrganization = require('./build-organization'); -const buildFeature = require('./build-feature'); -const buildOrganizationFeature = require('./build-organization-feature'); -const buildOrganizationPlace = require('./build-organization-place'); -const buildOrganizationInvitation = require('./build-organization-invitation'); -const buildOrganizationLearner = require('./build-organization-learner'); -const buildOrganizationLearnerWithUser = require('./build-organization-learner-with-user'); -const buildOrganizationTag = require('./build-organization-tag'); -const buildPixAdminRole = require('./build-pix-admin-role'); -const buildResetPasswordDemand = require('./build-reset-password-demand'); -const buildSession = require('./build-session'); -const buildStage = require('./build-stage'); -const buildSupervisorAccess = require('./build-supervisor-access'); -const buildTag = require('./build-tag'); -const buildTargetProfile = require('./build-target-profile'); -const buildTargetProfileSkill = require('./build-target-profile-skill'); -const buildTargetProfileShare = require('./build-target-profile-share'); -const buildTargetProfileTraining = require('./build-target-profile-training'); -const buildTargetProfileTube = require('./build-target-profile-tube'); -const buildTraining = require('./build-training'); -const buildTrainingTrigger = require('./build-training-trigger'); -const buildTrainingTriggerTube = require('./build-training-trigger-tube'); -const buildTutorialEvaluation = require('./build-tutorial-evaluation'); -const buildUser = require('./build-user'); -const buildUserLogin = require('./build-user-login'); -const buildUserOrgaSettings = require('./build-user-orga-settings'); -const buildUserSavedTutorial = require('./build-user-saved-tutorial'); -const buildUserRecommendedTraining = require('./build-user-recommended-training'); -const campaignParticipationOverviewFactory = require('./campaign-participation-overview-factory'); -const knowledgeElementSnapshotFactory = require('./knowledge-elements-snapshot-factory'); -const poleEmploiSendingFactory = require('./pole-emploi-sending-factory'); +import { buildAccountRecoveryDemand } from './build-account-recovery-demand.js'; +import { buildAnswer } from './build-answer.js'; +import { buildAnsweredNotCompletedCertificationAssessment } from './build-answered-not-completed-certification-assessment.js'; +import { buildAssessment } from './build-assessment.js'; +import { buildAssessmentFromParticipation } from './build-assessment-from-participation.js'; +import { buildAssessmentResult } from './build-assessment-result.js'; +import { buildAuthenticationMethod } from './build-authentication-method.js'; +import { buildBadge } from './build-badge.js'; +import { buildBadgeAcquisition } from './build-badge-acquisition.js'; +import { buildBadgeCriterion } from './build-badge-criterion.js'; +import { buildSkillSet } from './build-skill-set.js'; +import { buildCampaign } from './build-campaign.js'; +import { buildCampaignSkill } from './build-campaign-skill.js'; +import { buildAssessmentCampaign } from './build-assessment-campaign.js'; +import { buildAssessmentCampaignForSkills } from './build-assessment-campaign-for-skills.js'; +import { buildCampaignParticipation } from './build-campaign-participation.js'; +import { buildCampaignParticipationElementsForOverview } from './build-campaign-participation-elements-for-overview.js'; +import { buildCampaignParticipationWithOrganizationLearner } from './build-campaign-participation-with-organization-learner.js'; +import { buildCampaignParticipationWithUser } from './build-campaign-participation-with-user.js'; +import { buildCertifiableUser } from './build-certifiable-user.js'; +import { buildCertificationCandidate } from './build-certification-candidate.js'; +import { buildCertificationCenter } from './build-certification-center.js'; +import { buildCertificationCenterInvitation } from './build-certification-center-invitation.js'; +import { buildCertificationCenterMembership } from './build-certification-center-membership.js'; +import { buildCertificationChallenge } from './build-certification-challenge.js'; +import { buildComplementaryCertificationCourseResult } from './build-complementary-certification-course-result.js'; +import { buildCertificationCourse } from './build-certification-course.js'; +import { buildCertificationCourseLastAssessmentResult } from './build-certification-course-last-assessment-result.js'; +import { buildCertificationCpfCity } from './build-certification-cpf-city.js'; +import { buildCertificationIssueReport } from './build-certification-issue-report.js'; +import { buildCertificationReport } from './build-certification-report.js'; +import { buildCertificationCpfCountry } from './build-certification-cpf-country.js'; +import { buildCompetenceEvaluation } from './build-competence-evaluation.js'; +import { buildCompetenceMark } from './build-competence-mark.js'; +import { buildComplementaryCertification } from './build-complementary-certification.js'; +import { buildComplementaryCertificationCourse } from './build-complementary-certification-course.js'; +import { buildComplementaryCertificationBadge } from './build-complementary-certification-badge.js'; +import { buildComplementaryCertificationHabilitation } from './build-complementary-certification-habilitation.js'; +import { buildComplementaryCertificationSubscription } from './build-complementary-certification-subscription.js'; +import { buildCorrectAnswersAndKnowledgeElementsForLearningContent } from './build-correct-answers-and-knowledge-elements-for-learning-content.js'; +import { buildCorrectAnswerAndKnowledgeElement } from './build-correct-answer-and-knowledge-element.js'; +import * as buildDataProtectionOfficer from './build-data-protection-officer.js'; +import { buildFinalizedSession } from './build-finalized-session.js'; +import { buildFlashAssessmentResult } from './build-flash-assessment-result.js'; +import { buildIssueReportCategory } from './build-issue-report-category.js'; +import { buildKnowledgeElement } from './build-knowledge-element.js'; +import { buildKnowledgeElementSnapshot } from './build-knowledge-element-snapshot.js'; +import { buildMembership } from './build-membership.js'; +import { buildOrganization } from './build-organization.js'; +import { buildFeature } from './build-feature.js'; +import { buildOrganizationFeature } from './build-organization-feature.js'; +import { buildOrganizationPlace } from './build-organization-place.js'; +import { buildOrganizationInvitation } from './build-organization-invitation.js'; +import { buildOrganizationLearner } from './build-organization-learner.js'; +import { buildOrganizationLearnerWithUser } from './build-organization-learner-with-user.js'; +import { buildOrganizationTag } from './build-organization-tag.js'; +import { buildPixAdminRole } from './build-pix-admin-role.js'; +import { buildResetPasswordDemand } from './build-reset-password-demand.js'; +import { buildSession } from './build-session.js'; +import { buildStage } from './build-stage.js'; +import { buildSupervisorAccess } from './build-supervisor-access.js'; +import { buildTag } from './build-tag.js'; +import { buildTargetProfile } from './build-target-profile.js'; +import { buildTargetProfileSkill } from './build-target-profile-skill.js'; +import { buildTargetProfileShare } from './build-target-profile-share.js'; +import { buildTargetProfileTraining } from './build-target-profile-training.js'; +import { buildTargetProfileTube } from './build-target-profile-tube.js'; +import { buildTraining } from './build-training.js'; +import { buildTrainingTrigger } from './build-training-trigger.js'; +import { buildTrainingTriggerTube } from './build-training-trigger-tube.js'; +import { buildTutorialEvaluation } from './build-tutorial-evaluation.js'; +import { buildUser } from './build-user.js'; +import { buildUserLogin } from './build-user-login.js'; +import { buildUserOrgaSettings } from './build-user-orga-settings.js'; +import { buildUserSavedTutorial } from './build-user-saved-tutorial.js'; +import { buildUserRecommendedTraining } from './build-user-recommended-training.js'; +import * as campaignParticipationOverviewFactory from './campaign-participation-overview-factory.js'; +import * as knowledgeElementSnapshotFactory from './knowledge-elements-snapshot-factory.js'; +import * as poleEmploiSendingFactory from './pole-emploi-sending-factory.js'; -module.exports = { +export { buildAccountRecoveryDemand, buildAnswer, buildAnsweredNotCompletedCertificationAssessment, diff --git a/api/db/database-builder/factory/knowledge-elements-snapshot-factory.js b/api/db/database-builder/factory/knowledge-elements-snapshot-factory.js index 64629ef3e7c..581ff123a21 100644 --- a/api/db/database-builder/factory/knowledge-elements-snapshot-factory.js +++ b/api/db/database-builder/factory/knowledge-elements-snapshot-factory.js @@ -1,5 +1,5 @@ -const buildKnowledgeElement = require('./build-knowledge-element'); -const databaseBuffer = require('../database-buffer'); +import { buildKnowledgeElement } from './build-knowledge-element.js'; +import { databaseBuffer } from '../database-buffer.js'; function buildSnapshot({ id, userId, snappedAt, knowledgeElementsAttributes }) { const knowledgeElements = knowledgeElementsAttributes.map((attributes) => buildKnowledgeElement(attributes)); @@ -17,6 +17,4 @@ function buildSnapshot({ id, userId, snappedAt, knowledgeElementsAttributes }) { }); } -module.exports = { - buildSnapshot, -}; +export { buildSnapshot }; diff --git a/api/db/database-builder/factory/pole-emploi-sending-factory.js b/api/db/database-builder/factory/pole-emploi-sending-factory.js index 5bf25d794bc..2ac2dfe5476 100644 --- a/api/db/database-builder/factory/pole-emploi-sending-factory.js +++ b/api/db/database-builder/factory/pole-emploi-sending-factory.js @@ -1,8 +1,8 @@ -const buildCampaignParticipation = require('./build-campaign-participation'); -const buildUser = require('./build-user'); -const buildAuthenticationMethod = require('./build-authentication-method'); -const databaseBuffer = require('../database-buffer'); -const _ = require('lodash'); +import { buildCampaignParticipation } from './build-campaign-participation.js'; +import { buildUser } from './build-user.js'; +import { buildAuthenticationMethod } from './build-authentication-method.js'; +import { databaseBuffer } from '../database-buffer.js'; +import _ from 'lodash'; function build({ id = databaseBuffer.getNextId(), @@ -39,7 +39,4 @@ function buildWithUser(sendingAttributes, externalIdentifier) { return build({ ...sendingAttributes, campaignParticipationId }); } -module.exports = { - build, - buildWithUser, -}; +export { build, buildWithUser }; diff --git a/api/db/knex-database-connection.js b/api/db/knex-database-connection.js index d7da8952a84..45ad891ef17 100644 --- a/api/db/knex-database-connection.js +++ b/api/db/knex-database-connection.js @@ -1,9 +1,18 @@ -const types = require('pg').types; -const { get } = require('lodash'); -const logger = require('../lib/infrastructure/logger'); -const monitoringTools = require('../lib/infrastructure/monitoring-tools'); -const { logging } = require('../lib/config'); -const { performance } = require('perf_hooks'); +import pg from 'pg'; + +const types = pg.types; +import _ from 'lodash'; + +const { get } = _; +import { logger } from '../lib/infrastructure/logger.js'; +import { monitoringTools } from '../lib/infrastructure/monitoring-tools.js'; +import { config } from '../lib/config.js'; +import perf_hooks from 'perf_hooks'; + +const { performance } = perf_hooks; + +import Knex from 'knex'; +import QueryBuilder from 'knex/lib/query/querybuilder.js'; /* By default, node-postgres casts a DATE value (PostgreSQL type) as a Date Object (JS type). But, when dealing with dates with no time (such as birthdate for example), we want to @@ -23,18 +32,16 @@ Links : */ types.setTypeParser(types.builtins.INT8, (value) => parseInt(value)); -const _ = require('lodash'); +import * as knexConfigs from './knexfile.js'; -const knexConfigs = require('./knexfile'); -const { environment } = require('../lib/config'); +const { logging, environment } = config; +const knexConfig = knexConfigs.default[environment]; +const configuredKnex = Knex(knexConfig); /* QueryBuilder Extension */ -const Knex = require('knex'); -const QueryBuilder = require('knex/lib/query/querybuilder'); - try { Knex.QueryBuilder.extend('whereInArray', function (column, values) { - return this.where(column, knex.raw('any(?)', [values])); + return this.where(column, configuredKnex.raw('any(?)', [values])); }); } catch (e) { if (e.message !== "Can't extend QueryBuilder with existing method ('whereInArray').") { @@ -43,9 +50,6 @@ try { } /* -------------------- */ -const knexConfig = knexConfigs[environment]; -const knex = require('knex')(knexConfig); - const originalToSQL = QueryBuilder.prototype.toSQL; QueryBuilder.prototype.toSQL = function () { const ret = originalToSQL.apply(this); @@ -55,14 +59,14 @@ QueryBuilder.prototype.toSQL = function () { return ret; }; -knex.on('query', function (data) { +configuredKnex.on('query', function (data) { if (logging.enableKnexPerformanceMonitoring) { const queryId = data.__knexQueryUid; monitoringTools.setInContext(`knexQueryStartTimes.${queryId}`, performance.now()); } }); -knex.on('query-response', function (response, data) { +configuredKnex.on('query-response', function (response, data) { monitoringTools.incrementInContext('metrics.knexQueryCount'); if (logging.enableKnexPerformanceMonitoring) { const queryStartedTime = monitoringTools.getInContext(`knexQueryStartTimes.${data.__knexQueryUid}`); @@ -74,10 +78,10 @@ knex.on('query-response', function (response, data) { }); async function disconnect() { - return knex.destroy(); + return configuredKnex.destroy(); } -const _databaseName = knex.client.database(); +const _databaseName = configuredKnex.client.database(); const _dbSpecificQueries = { listTablesQuery: @@ -88,7 +92,7 @@ const _dbSpecificQueries = { async function listAllTableNames() { const bindings = [_databaseName]; - const resultSet = await knex.raw( + const resultSet = await configuredKnex.raw( 'SELECT table_name FROM information_schema.tables WHERE table_schema = current_schema() AND table_catalog = ?', bindings ); @@ -110,11 +114,7 @@ async function emptyAllTables() { const query = _dbSpecificQueries.emptyTableQuery; // eslint-disable-next-line knex/avoid-injections - return knex.raw(`${query}${tables}`); + return configuredKnex.raw(`${query}${tables}`); } -module.exports = { - knex, - disconnect, - emptyAllTables, -}; +export { configuredKnex as knex, disconnect, emptyAllTables }; diff --git a/api/db/knexfile.js b/api/db/knexfile.js index bd9c5488a72..95350db1c69 100644 --- a/api/db/knexfile.js +++ b/api/db/knexfile.js @@ -1,4 +1,7 @@ -require('dotenv').config({ path: `${__dirname}/../.env` }); +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +import * as dotenv from 'dotenv'; +dotenv.config({ path: `${__dirname}/../.env` }); function localPostgresEnv(databaseUrl, knexAsyncStacktraceEnabled) { return { @@ -18,8 +21,7 @@ function localPostgresEnv(databaseUrl, knexAsyncStacktraceEnabled) { asyncStackTraces: knexAsyncStacktraceEnabled !== 'false', }; } - -module.exports = { +const environments = { development: localPostgresEnv(process.env.DATABASE_URL, process.env.KNEX_ASYNC_STACKTRACE_ENABLED), test: localPostgresEnv(process.env.TEST_DATABASE_URL, process.env.KNEX_ASYNC_STACKTRACE_ENABLED), @@ -41,3 +43,5 @@ module.exports = { asyncStackTraces: process.env.KNEX_ASYNC_STACKTRACE_ENABLED !== 'false', }, }; + +export default environments; diff --git a/api/db/migrations/20160927153108_create_users.js b/api/db/migrations/20160927153108_create_users.js index 037e367faf1..09802305d3c 100644 --- a/api/db/migrations/20160927153108_create_users.js +++ b/api/db/migrations/20160927153108_create_users.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'users'; -exports.up = (knex) => { +const up = function (knex) { function table(t) { t.increments().primary(); t.string('firstName').notNullable(); @@ -15,6 +15,8 @@ exports.up = (knex) => { return knex.schema.createTable(TABLE_NAME, table); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20160929164549_create_assessments.js b/api/db/migrations/20160929164549_create_assessments.js index d2c7901d261..f9d2bbb0cfb 100644 --- a/api/db/migrations/20160929164549_create_assessments.js +++ b/api/db/migrations/20160929164549_create_assessments.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'assessments'; -exports.up = (knex) => { +const up = function (knex) { function table(t) { t.increments().primary(); t.string('courseId'); @@ -13,6 +13,8 @@ exports.up = (knex) => { return knex.schema.createTable(TABLE_NAME, table); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20160929172038_create_answers.js b/api/db/migrations/20160929172038_create_answers.js index 89d7c2dc851..0026e2df90d 100644 --- a/api/db/migrations/20160929172038_create_answers.js +++ b/api/db/migrations/20160929172038_create_answers.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'answers'; -exports.up = (knex) => { +const up = function (knex) { function table(t) { t.increments().primary(); t.text('value').notNull(); @@ -14,6 +14,8 @@ exports.up = (knex) => { return knex.schema.createTable(TABLE_NAME, table); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20161221143039_create_scenarios.js b/api/db/migrations/20161221143039_create_scenarios.js index 0d816eba632..d35a23469d0 100644 --- a/api/db/migrations/20161221143039_create_scenarios.js +++ b/api/db/migrations/20161221143039_create_scenarios.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'scenarios'; -exports.up = function (knex) { +const up = function (knex) { function table(t) { t.increments().primary(); t.string('courseId').notNull(); @@ -13,6 +13,8 @@ exports.up = function (knex) { return knex.schema.createTable(TABLE_NAME, table); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20170105153948_update_answers_timeout.js b/api/db/migrations/20170105153948_update_answers_timeout.js index 8108bcc7302..f8e5e2211fb 100644 --- a/api/db/migrations/20170105153948_update_answers_timeout.js +++ b/api/db/migrations/20170105153948_update_answers_timeout.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'answers'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.integer('timeout'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('timeout'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20170125155825_followers.js b/api/db/migrations/20170125155825_followers.js index 54bba81ab96..ec0fdf54b32 100644 --- a/api/db/migrations/20170125155825_followers.js +++ b/api/db/migrations/20170125155825_followers.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'followers'; -exports.up = (knex) => { +const up = function (knex) { function table(t) { t.increments().primary(); t.string('email').unique().notNullable(); @@ -11,6 +11,8 @@ exports.up = (knex) => { return knex.schema.createTable(TABLE_NAME, table); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20170207091544_create_feedbacks.js b/api/db/migrations/20170207091544_create_feedbacks.js index bf2c2ec8fb4..dad510b9c5b 100644 --- a/api/db/migrations/20170207091544_create_feedbacks.js +++ b/api/db/migrations/20170207091544_create_feedbacks.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'feedbacks'; -exports.up = (knex) => { +const up = function (knex) { function table(t) { t.increments().primary(); t.string('email'); @@ -14,6 +14,8 @@ exports.up = (knex) => { return knex.schema.createTable(TABLE_NAME, table); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20170306151003_update_answers.js b/api/db/migrations/20170306151003_update_answers.js index 2691c197346..6497d972e0a 100644 --- a/api/db/migrations/20170306151003_update_answers.js +++ b/api/db/migrations/20170306151003_update_answers.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'answers'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, (t) => { t.text('value').alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, (t) => { t.text('string').alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20170329112753_add_elapsedTime_to_answers.js b/api/db/migrations/20170329112753_add_elapsedTime_to_answers.js index f4a2c00652a..cc97221ccd6 100644 --- a/api/db/migrations/20170329112753_add_elapsedTime_to_answers.js +++ b/api/db/migrations/20170329112753_add_elapsedTime_to_answers.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'answers'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.integer('elapsedTime'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('elapsedTime'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20170329153349_update_answers--add_column_result_details.js b/api/db/migrations/20170329153349_update_answers--add_column_result_details.js index f884f37a4b4..d92d5a3d29f 100644 --- a/api/db/migrations/20170329153349_update_answers--add_column_result_details.js +++ b/api/db/migrations/20170329153349_update_answers--add_column_result_details.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'answers'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.text('resultDetails'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('resultDetails'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20170418114929_remove_login_from_users.js b/api/db/migrations/20170418114929_remove_login_from_users.js index 48f9380b8e5..11276efb208 100644 --- a/api/db/migrations/20170418114929_remove_login_from_users.js +++ b/api/db/migrations/20170418114929_remove_login_from_users.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'users'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('login'); table.boolean('cgu'); @@ -8,9 +8,11 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.string('login').defaultTo('').notNullable(); table.dropColumn('cgu'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20170703105035_create_link_between_user_and_assessment.js b/api/db/migrations/20170703105035_create_link_between_user_and_assessment.js index dadb9681871..a24ebde2b0b 100644 --- a/api/db/migrations/20170703105035_create_link_between_user_and_assessment.js +++ b/api/db/migrations/20170703105035_create_link_between_user_and_assessment.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'assessments'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.bigInteger('userId').index().references('users.id'); table.dropColumn('userName'); @@ -8,10 +8,12 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('userId'); table.string('userName').notNull(); table.string('userEmail').notNull(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20170703163243_update_assessment_with_level_and_score.js b/api/db/migrations/20170703163243_update_assessment_with_level_and_score.js index e6f65130b54..e97c644e9bb 100644 --- a/api/db/migrations/20170703163243_update_assessment_with_level_and_score.js +++ b/api/db/migrations/20170703163243_update_assessment_with_level_and_score.js @@ -1,15 +1,17 @@ const TABLE_NAME = 'assessments'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.integer('estimatedLevel'); table.integer('pixScore'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('estimatedLevel'); table.dropColumn('pixScore'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20170724181108_creating_organizations.js b/api/db/migrations/20170724181108_creating_organizations.js index 451b41c5c0e..d21310bab6d 100644 --- a/api/db/migrations/20170724181108_creating_organizations.js +++ b/api/db/migrations/20170724181108_creating_organizations.js @@ -1,4 +1,4 @@ -exports.up = function (knex) { +const up = function (knex) { function table(table) { table.increments().primary(); table.string('email').notNullable(); @@ -12,6 +12,8 @@ exports.up = function (knex) { return knex.schema.createTable('organizations', table); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable('organizations'); }; + +export { up, down }; diff --git a/api/db/migrations/20170728141316_add_code_to_organization.js b/api/db/migrations/20170728141316_add_code_to_organization.js index 6c514c2a5b8..3864c4d197f 100644 --- a/api/db/migrations/20170728141316_add_code_to_organization.js +++ b/api/db/migrations/20170728141316_add_code_to_organization.js @@ -1,11 +1,13 @@ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table('organizations', function (table) { table.string('code', 6).default('').notNullable(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table('organizations', (table) => { table.dropColumn('code'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20170818115953_snapshots.js b/api/db/migrations/20170818115953_snapshots.js index ffb2c64d09c..d3aaf0b46bb 100644 --- a/api/db/migrations/20170818115953_snapshots.js +++ b/api/db/migrations/20170818115953_snapshots.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'snapshots'; -exports.up = function (knex) { +const up = function (knex) { function table(t) { t.increments().primary(); t.bigInteger('organizationId').unsigned().references('organizations.id'); @@ -14,6 +14,8 @@ exports.up = function (knex) { return knex.schema.createTable(TABLE_NAME, table); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20170829165045_add_completion_percentage_to_snapshot.js b/api/db/migrations/20170829165045_add_completion_percentage_to_snapshot.js index f3daf708b11..bcd7a8db4d7 100644 --- a/api/db/migrations/20170829165045_add_completion_percentage_to_snapshot.js +++ b/api/db/migrations/20170829165045_add_completion_percentage_to_snapshot.js @@ -1,11 +1,13 @@ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table('snapshots', function (table) { table.string('completionPercentage', 6); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table('snapshots', (table) => { table.dropColumn('completionPercentage'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20170919181249_reset-password-demands.js b/api/db/migrations/20170919181249_reset-password-demands.js index f80a1f24c43..b8c0b10aec5 100644 --- a/api/db/migrations/20170919181249_reset-password-demands.js +++ b/api/db/migrations/20170919181249_reset-password-demands.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'reset-password-demands'; -exports.up = function (knex) { +const up = function (knex) { function table(t) { t.increments().primary(); t.string('email').index(); @@ -13,6 +13,8 @@ exports.up = function (knex) { return knex.schema.createTable(TABLE_NAME, table); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20171005222803_update_snapshots_add_student_and_campaign_code.js b/api/db/migrations/20171005222803_update_snapshots_add_student_and_campaign_code.js index 5badb753e2a..f0aac4f7b89 100644 --- a/api/db/migrations/20171005222803_update_snapshots_add_student_and_campaign_code.js +++ b/api/db/migrations/20171005222803_update_snapshots_add_student_and_campaign_code.js @@ -1,13 +1,15 @@ -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table('snapshots', (table) => { table.string('studentCode'); table.string('campaignCode'); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table('snapshots', (table) => { table.dropColumn('studentCode'); table.dropColumn('campaignCode'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20171023183134_skills.js b/api/db/migrations/20171023183134_skills.js index fd137445c5b..a0837f65734 100644 --- a/api/db/migrations/20171023183134_skills.js +++ b/api/db/migrations/20171023183134_skills.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'skills'; -exports.up = function (knex) { +const up = function (knex) { function table(t) { t.increments().primary(); t.integer('assessmentId').unsigned().references('assessments.id').index(); @@ -13,6 +13,8 @@ exports.up = function (knex) { return knex.schema.createTable(TABLE_NAME, table); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20171113101130_certification-courses.js b/api/db/migrations/20171113101130_certification-courses.js index 49f42453ef0..f280b182aa2 100644 --- a/api/db/migrations/20171113101130_certification-courses.js +++ b/api/db/migrations/20171113101130_certification-courses.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'certification-courses'; -exports.up = function (knex) { +const up = function (knex) { function table(t) { t.increments().primary(); t.dateTime('createdAt').notNullable().defaultTo(knex.fn.now()); @@ -10,6 +10,8 @@ exports.up = function (knex) { return knex.schema.createTable(TABLE_NAME, table); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20171113101244_certification-challenges.js b/api/db/migrations/20171113101244_certification-challenges.js index 13640bbcefa..3aa12165e6c 100644 --- a/api/db/migrations/20171113101244_certification-challenges.js +++ b/api/db/migrations/20171113101244_certification-challenges.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'certification-challenges'; -exports.up = function (knex) { +const up = function (knex) { function table(t) { t.increments().primary(); t.string('challengeId'); @@ -14,6 +14,8 @@ exports.up = function (knex) { return knex.schema.createTable(TABLE_NAME, table); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20171113103608_add_type_to_assessments.js b/api/db/migrations/20171113103608_add_type_to_assessments.js index 6eefcc4ee24..77248644515 100644 --- a/api/db/migrations/20171113103608_add_type_to_assessments.js +++ b/api/db/migrations/20171113103608_add_type_to_assessments.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'assessments'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.string('type'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('type'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20171204102525_add_userId_to_certification_course.js b/api/db/migrations/20171204102525_add_userId_to_certification_course.js index e4cad531141..e91eab83567 100644 --- a/api/db/migrations/20171204102525_add_userId_to_certification_course.js +++ b/api/db/migrations/20171204102525_add_userId_to_certification_course.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-courses'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.integer('userId').references('users.id').index(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('userId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20171212144653_add_status_to_certification_course.js b/api/db/migrations/20171212144653_add_status_to_certification_course.js index 076a663302f..a0631d77e4b 100644 --- a/api/db/migrations/20171212144653_add_status_to_certification_course.js +++ b/api/db/migrations/20171212144653_add_status_to_certification_course.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-courses'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.string('status'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('status'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180103152804_add_completed_time_to_certification_course.js b/api/db/migrations/20180103152804_add_completed_time_to_certification_course.js index fca3ffc30b1..217f748f5d3 100644 --- a/api/db/migrations/20180103152804_add_completed_time_to_certification_course.js +++ b/api/db/migrations/20180103152804_add_completed_time_to_certification_course.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-courses'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dateTime('completedAt'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('completedAt'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180109174844_create_mark_table.js b/api/db/migrations/20180109174844_create_mark_table.js index f626716992d..949b81b1335 100644 --- a/api/db/migrations/20180109174844_create_mark_table.js +++ b/api/db/migrations/20180109174844_create_mark_table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'marks'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('level').unsigned(); @@ -11,6 +11,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20180116161332_modify_column_completedPercentage_to_tests_finished_in_snapshots.js b/api/db/migrations/20180116161332_modify_column_completedPercentage_to_tests_finished_in_snapshots.js index 1650e79c474..5960aa49981 100644 --- a/api/db/migrations/20180116161332_modify_column_completedPercentage_to_tests_finished_in_snapshots.js +++ b/api/db/migrations/20180116161332_modify_column_completedPercentage_to_tests_finished_in_snapshots.js @@ -3,7 +3,7 @@ const NUMBER_OF_COMPETENCES = 16; const MULTIPLICATOR_PERCENTAGE_TO_COMPETENCES = NUMBER_OF_COMPETENCES / 100; const MULTIPLICATOR_COMPETENCES_TO_PERCENTAGE = 100 / NUMBER_OF_COMPETENCES; -exports.up = function (knex) { +const up = function (knex) { return knex.schema .table(TABLE_NAME, function (table) { table.integer('testsFinished'); @@ -24,7 +24,7 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema .table(TABLE_NAME, function (table) { table.integer('completionPercentage'); @@ -44,3 +44,5 @@ exports.down = function (knex) { }); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180131153634_create_sessions_table.js b/api/db/migrations/20180131153634_create_sessions_table.js index 8405cc65e4e..ea8d9311d36 100644 --- a/api/db/migrations/20180131153634_create_sessions_table.js +++ b/api/db/migrations/20180131153634_create_sessions_table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'sessions'; -exports.up = (knex) => { +const up = function (knex) { function table(t) { t.increments().primary(); t.text('certificationCenter').notNullable(); @@ -16,6 +16,8 @@ exports.up = (knex) => { return knex.schema.createTable(TABLE_NAME, table); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20180212111049_delete_scenario_table.js b/api/db/migrations/20180212111049_delete_scenario_table.js index 9028d76e677..acb2d7c742d 100644 --- a/api/db/migrations/20180212111049_delete_scenario_table.js +++ b/api/db/migrations/20180212111049_delete_scenario_table.js @@ -1,10 +1,10 @@ const TABLE_NAME = 'scenarios'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; -exports.down = function (knex) { +const down = function (knex) { function table(t) { t.increments().primary(); t.string('courseId').notNull(); @@ -16,3 +16,5 @@ exports.down = function (knex) { return knex.schema.createTable(TABLE_NAME, table); }; + +export { up, down }; diff --git a/api/db/migrations/20180216153505_add_user_details_and_rejection_reason_to_certification_courses.js b/api/db/migrations/20180216153505_add_user_details_and_rejection_reason_to_certification_courses.js index 937b2b047f6..754c4c8dfdf 100644 --- a/api/db/migrations/20180216153505_add_user_details_and_rejection_reason_to_certification_courses.js +++ b/api/db/migrations/20180216153505_add_user_details_and_rejection_reason_to_certification_courses.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'certification-courses'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.string('firstName'); table.string('lastName'); @@ -10,7 +10,7 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropTable('firstName'); table.dropTable('lastName'); @@ -19,3 +19,5 @@ exports.down = function (knex) { table.dropTable('rejectionReason'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180219191550_create_pix_roles.js b/api/db/migrations/20180219191550_create_pix_roles.js index 4bb0bfbb1cd..eea84745231 100644 --- a/api/db/migrations/20180219191550_create_pix_roles.js +++ b/api/db/migrations/20180219191550_create_pix_roles.js @@ -1,4 +1,4 @@ -exports.up = (knex) => { +const up = function (knex) { return knex.schema .createTable('pix_roles', (table) => { table.increments('id').primary(); @@ -18,8 +18,10 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable('pix_roles').then(() => { return knex.schema.dropTable('users_pix_roles'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180306151846_add_type_to_all_assessments.js b/api/db/migrations/20180306151846_add_type_to_all_assessments.js index 1863faa8a5f..38aeb829577 100644 --- a/api/db/migrations/20180306151846_add_type_to_all_assessments.js +++ b/api/db/migrations/20180306151846_add_type_to_all_assessments.js @@ -1,4 +1,4 @@ -const { batch } = require('../batch-processing'); +import { batch } from '../batch-processing.js'; const TABLE_NAME_ASSESSMENTS = 'assessments'; const TABLE_NAME_CERTIFICATIONS = 'certification-courses'; const LIST_COMPETENCES_PLACEMENT = [ @@ -24,7 +24,7 @@ const TYPE_CERTIFICATION = 'CERTIFICATION'; const TYPE_DEMO = 'DEMO'; const TYPE_PREVIEW = 'PREVIEW'; -exports.up = function (knex) { +const up = function (knex) { // XXX : Modify PREVIEW assessments return knex(TABLE_NAME_ASSESSMENTS) .select('id', 'courseId', 'type') @@ -83,6 +83,8 @@ exports.up = function (knex) { }); }; -exports.down = function () { +const down = function () { return; }; + +export { up, down }; diff --git a/api/db/migrations/20180306164441_remove-score-and-level-for-bugged-assessments.js b/api/db/migrations/20180306164441_remove-score-and-level-for-bugged-assessments.js index c56cd3eb583..06933e07af2 100644 --- a/api/db/migrations/20180306164441_remove-score-and-level-for-bugged-assessments.js +++ b/api/db/migrations/20180306164441_remove-score-and-level-for-bugged-assessments.js @@ -1,8 +1,8 @@ -const { batch } = require('../batch-processing'); +import { batch } from '../batch-processing.js'; const TABLE_NAME_ASSESSMENTS = 'assessments'; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME_ASSESSMENTS) .select('id', 'estimatedLevel', 'pixScore', 'type') .where('type', '=', 'PLACEMENT') @@ -20,6 +20,8 @@ exports.up = function (knex) { }); }; -exports.down = function () { +const down = function () { return; }; + +export { up, down }; diff --git a/api/db/migrations/20180315164634_add-column-access-code-on-sessions.js b/api/db/migrations/20180315164634_add-column-access-code-on-sessions.js index f93862f1801..00f7b2ba894 100644 --- a/api/db/migrations/20180315164634_add-column-access-code-on-sessions.js +++ b/api/db/migrations/20180315164634_add-column-access-code-on-sessions.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'sessions'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.string('accessCode'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('accessCode'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180315164647_add-column-session-id-on-certifications.js b/api/db/migrations/20180315164647_add-column-session-id-on-certifications.js index c2ececf623b..098487c559d 100644 --- a/api/db/migrations/20180315164647_add-column-session-id-on-certifications.js +++ b/api/db/migrations/20180315164647_add-column-session-id-on-certifications.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-courses'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.integer('sessionId').references('sessions.id').index(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.integer('sessionId').references('sessions.id').index(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180329113849_add-indexes-on-many-tables.js b/api/db/migrations/20180329113849_add-indexes-on-many-tables.js index 59cfb1d2c9b..3b0657c36e4 100644 --- a/api/db/migrations/20180329113849_add-indexes-on-many-tables.js +++ b/api/db/migrations/20180329113849_add-indexes-on-many-tables.js @@ -1,4 +1,4 @@ -const Promise = require('bluebird'); +import Promise from 'bluebird'; const indexes = { answers: ['assessmentId'], @@ -8,7 +8,8 @@ const indexes = { marks: ['assessmentId'], snapshots: ['organizationId'], }; -exports.up = function (knex) { + +const up = function (knex) { const promises = Object.keys(indexes).map((tableForIndexes) => { return knex.schema.table(tableForIndexes, (table) => { indexes[tableForIndexes].forEach((column) => table.index(column)); @@ -17,7 +18,7 @@ exports.up = function (knex) { return Promise.all(promises); }; -exports.down = function (knex) { +const down = function (knex) { const promises = Object.keys(indexes).map((tableForIndexes) => { return knex.schema.table(tableForIndexes, (table) => { indexes[tableForIndexes].forEach((column) => table.dropIndex(column)); @@ -25,3 +26,5 @@ exports.down = function (knex) { }); return Promise.all(promises); }; + +export { up, down }; diff --git a/api/db/migrations/20180405100236_move_status_from_certification_to_assessment.js b/api/db/migrations/20180405100236_move_status_from_certification_to_assessment.js index 07b3d8e9c2f..05e3c4ea0c5 100644 --- a/api/db/migrations/20180405100236_move_status_from_certification_to_assessment.js +++ b/api/db/migrations/20180405100236_move_status_from_certification_to_assessment.js @@ -1,9 +1,9 @@ -const { batch } = require('../batch-processing'); +import { batch } from '../batch-processing.js'; const TABLE_NAME_CERTIFICATION = 'certification-courses'; const TABLE_NAME_ASSESSMENTS = 'assessments'; -exports.up = function (knex) { +const up = function (knex) { return ( knex.schema // Add Column @@ -42,7 +42,7 @@ exports.up = function (knex) { ); }; -exports.down = function (knex) { +const down = function (knex) { // Add Column return knex.schema .table(TABLE_NAME_CERTIFICATION, function (table) { @@ -68,3 +68,5 @@ exports.down = function (knex) { }); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180405100345_create_assessment_results_table.js b/api/db/migrations/20180405100345_create_assessment_results_table.js index 0cc00d69b69..c0e07a9b36d 100644 --- a/api/db/migrations/20180405100345_create_assessment_results_table.js +++ b/api/db/migrations/20180405100345_create_assessment_results_table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'assessment-results'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.dateTime('createdAt').notNullable().defaultTo(knex.fn.now()); @@ -17,6 +17,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20180405100452_migrate_assessments_info_to_assessment_results.js b/api/db/migrations/20180405100452_migrate_assessments_info_to_assessment_results.js index d00a0bab628..6e635dca951 100644 --- a/api/db/migrations/20180405100452_migrate_assessments_info_to_assessment_results.js +++ b/api/db/migrations/20180405100452_migrate_assessments_info_to_assessment_results.js @@ -1,9 +1,9 @@ -const { batch } = require('../batch-processing'); +import { batch } from '../batch-processing.js'; const TABLE_NAME_ASSESSMENT_RESULT = 'assessment-results'; const TABLE_NAME_ASSESSMENTS = 'assessments'; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME_ASSESSMENTS) .select('id', 'type', 'createdAt', 'pixScore', 'estimatedLevel') .where('state', '!=', 'started') @@ -28,7 +28,7 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema .table(TABLE_NAME_ASSESSMENTS, function (table) { table.integer('pixScore'); @@ -47,3 +47,5 @@ exports.down = function (knex) { return knex(TABLE_NAME_ASSESSMENT_RESULT).delete(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180405100530_link_marks_to_assessment_results.js b/api/db/migrations/20180405100530_link_marks_to_assessment_results.js index 7379475e465..c88221d298f 100644 --- a/api/db/migrations/20180405100530_link_marks_to_assessment_results.js +++ b/api/db/migrations/20180405100530_link_marks_to_assessment_results.js @@ -1,9 +1,9 @@ -const { batch } = require('../batch-processing'); +import { batch } from '../batch-processing.js'; const TABLE_NAME_ASSESSMENT_RESULTS = 'assessment-results'; const TABLE_NAME_MARKS = 'marks'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema .table(TABLE_NAME_MARKS, function (table) { table.integer('assessmentResultId').unsigned(); @@ -22,8 +22,10 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME_MARKS, function (table) { table.dropColumn('assessmentResultId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180405100632_create_table_competences-marks.js b/api/db/migrations/20180405100632_create_table_competences-marks.js index d58d4a604a1..2427677bb24 100644 --- a/api/db/migrations/20180405100632_create_table_competences-marks.js +++ b/api/db/migrations/20180405100632_create_table_competences-marks.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'competence-marks'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('level'); @@ -13,6 +13,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20180405100655_migrate_old_marks_in_competence-marks.js b/api/db/migrations/20180405100655_migrate_old_marks_in_competence-marks.js index cdc0d3c4658..e00f58cba2b 100644 --- a/api/db/migrations/20180405100655_migrate_old_marks_in_competence-marks.js +++ b/api/db/migrations/20180405100655_migrate_old_marks_in_competence-marks.js @@ -1,10 +1,10 @@ -const { batch } = require('../batch-processing'); +import { batch } from '../batch-processing.js'; const TABLE_NAME_MARKS = 'marks'; const TABLE_NAME_COMPETENCE_MARKS = 'competence-marks'; const TABLE_NAME_ASSESSMENT_RESULTS = 'assessment-results'; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME_MARKS) .select('id', 'level', 'score', 'area_code', 'competence_code', 'assessmentResultId') .then((allMarks) => { @@ -21,7 +21,7 @@ exports.up = function (knex) { .then(() => knex.schema.dropTable(TABLE_NAME_MARKS)); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema .createTable(TABLE_NAME_MARKS, (t) => { t.increments().primary(); @@ -55,3 +55,5 @@ exports.down = function (knex) { }); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180409172412_add_external_id_to_certification.js b/api/db/migrations/20180409172412_add_external_id_to_certification.js index 13f800c43b3..442f5ed58b5 100644 --- a/api/db/migrations/20180409172412_add_external_id_to_certification.js +++ b/api/db/migrations/20180409172412_add_external_id_to_certification.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-courses'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('externalId'); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('externalId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180425171813_add_isPublished_to_certifications.js b/api/db/migrations/20180425171813_add_isPublished_to_certifications.js index 3b4a8a4e769..662f2e29aab 100644 --- a/api/db/migrations/20180425171813_add_isPublished_to_certifications.js +++ b/api/db/migrations/20180425171813_add_isPublished_to_certifications.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-courses'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean('isPublished').notNullable().defaultTo(false); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('isPublished'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180528152339_create_table_organizations_roles.js b/api/db/migrations/20180528152339_create_table_organizations_roles.js index 6b1b82fbf00..b8a9de1e587 100644 --- a/api/db/migrations/20180528152339_create_table_organizations_roles.js +++ b/api/db/migrations/20180528152339_create_table_organizations_roles.js @@ -1,7 +1,7 @@ const ORGANIZATION_ROLES_TABLE = 'organization-roles'; const ORGANIZATIONS_ACCESSES_TABLE = 'organizations-accesses'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema .createTable(ORGANIZATION_ROLES_TABLE, (table) => { table.increments('id').primary(); @@ -21,8 +21,10 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(ORGANIZATIONS_ACCESSES_TABLE).then(() => { return knex.schema.dropTable(ORGANIZATION_ROLES_TABLE); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180620161732_create_campaigns.js b/api/db/migrations/20180620161732_create_campaigns.js index 0ed9a4e4e8f..babd4782a3d 100644 --- a/api/db/migrations/20180620161732_create_campaigns.js +++ b/api/db/migrations/20180620161732_create_campaigns.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'campaigns'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.string('name').notNullable(); @@ -11,6 +11,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20180711173105_create_knowledge-elements.js b/api/db/migrations/20180711173105_create_knowledge-elements.js index df6755438a4..924c8a52bf1 100644 --- a/api/db/migrations/20180711173105_create_knowledge-elements.js +++ b/api/db/migrations/20180711173105_create_knowledge-elements.js @@ -1,6 +1,6 @@ const KNOWLEDGE_ELEMENTS_TABLE_NAME = 'knowledge-elements'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(KNOWLEDGE_ELEMENTS_TABLE_NAME, (table) => { table.increments('id').primary(); table.string('source'); @@ -13,6 +13,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(KNOWLEDGE_ELEMENTS_TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20180730120109_create_campaign_participations_table.js b/api/db/migrations/20180730120109_create_campaign_participations_table.js index 355eaceafd5..938606870b0 100644 --- a/api/db/migrations/20180730120109_create_campaign_participations_table.js +++ b/api/db/migrations/20180730120109_create_campaign_participations_table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'campaign-participations'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('campaignId').unsigned().references('campaigns.id').index(); @@ -9,6 +9,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20180731102046_create_target_profiles_table.js b/api/db/migrations/20180731102046_create_target_profiles_table.js index 89192dfe06d..7943ec281c8 100644 --- a/api/db/migrations/20180731102046_create_target_profiles_table.js +++ b/api/db/migrations/20180731102046_create_target_profiles_table.js @@ -2,7 +2,7 @@ const TABLE_NAME_TARGET_PROFILES = 'target-profiles'; const TABLE_NAME_TARGET_PROFILES_SKILLS = 'target-profiles_skills'; const TABLE_NAME_CAMPAIGNS = 'campaigns'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema .createTable(TABLE_NAME_TARGET_PROFILES, (t) => { t.increments().primary(); @@ -25,7 +25,7 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema .table(TABLE_NAME_CAMPAIGNS, function (table) { table.dropColumn('targetProfileId'); @@ -37,3 +37,5 @@ exports.down = function (knex) { return knex.schema.dropTable(TABLE_NAME_TARGET_PROFILES); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180823170636_add_column_id_pix_in_campaigns.js b/api/db/migrations/20180823170636_add_column_id_pix_in_campaigns.js index 42d3e2a51f6..059f027bf4f 100644 --- a/api/db/migrations/20180823170636_add_column_id_pix_in_campaigns.js +++ b/api/db/migrations/20180823170636_add_column_id_pix_in_campaigns.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'campaigns'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('idPixLabel'); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('idPixLabel'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180823173827_add-skill-id-to-certification-challenge.js b/api/db/migrations/20180823173827_add-skill-id-to-certification-challenge.js index 4b600e2dce6..d117b8b5a07 100644 --- a/api/db/migrations/20180823173827_add-skill-id-to-certification-challenge.js +++ b/api/db/migrations/20180823173827_add-skill-id-to-certification-challenge.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-challenges'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('associatedSkillId'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('associatedSkillId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180827141001_add_isShared_to_campaign_participations_table.js b/api/db/migrations/20180827141001_add_isShared_to_campaign_participations_table.js index cf0b43c73e7..1b3e8287c30 100644 --- a/api/db/migrations/20180827141001_add_isShared_to_campaign_participations_table.js +++ b/api/db/migrations/20180827141001_add_isShared_to_campaign_participations_table.js @@ -1,15 +1,17 @@ const TABLE_NAME = 'campaign-participations'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean('isShared').notNullable().defaultTo(false); table.dateTime('sharedAt'); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('isShared'); table.dropColumn('sharedAt'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180921125008_add-column-user-id-in-campaign-participation.js b/api/db/migrations/20180921125008_add-column-user-id-in-campaign-participation.js index 605532446e9..0392725e897 100644 --- a/api/db/migrations/20180921125008_add-column-user-id-in-campaign-participation.js +++ b/api/db/migrations/20180921125008_add-column-user-id-in-campaign-participation.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'campaign-participations'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.integer('userId').unsigned().references('users.id').index(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('userId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20180927153712_add_participant_external_id_to_campaign_participation.js b/api/db/migrations/20180927153712_add_participant_external_id_to_campaign_participation.js index 34d0b6bed6c..871f012e752 100644 --- a/api/db/migrations/20180927153712_add_participant_external_id_to_campaign_participation.js +++ b/api/db/migrations/20180927153712_add_participant_external_id_to_campaign_participation.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'campaign-participations'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('participantExternalId'); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('participantExternalId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20181001172308_create_target_profile_shares.js b/api/db/migrations/20181001172308_create_target_profile_shares.js index 22a3241c97b..db49aa8bea7 100644 --- a/api/db/migrations/20181001172308_create_target_profile_shares.js +++ b/api/db/migrations/20181001172308_create_target_profile_shares.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'target-profile-shares'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('targetProfileId').unsigned().references('target-profiles.id').index(); @@ -9,6 +9,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20181002192146_add_pix_orga_tos_to_user.js b/api/db/migrations/20181002192146_add_pix_orga_tos_to_user.js index 673ef3108f3..bc1cb4b967f 100644 --- a/api/db/migrations/20181002192146_add_pix_orga_tos_to_user.js +++ b/api/db/migrations/20181002192146_add_pix_orga_tos_to_user.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'users'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean('pixOrgaTermsOfServiceAccepted').defaultTo(false); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('pixOrgaTermsOfServiceAccepted'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20181010091446_update_organizations_remove_column_email.js b/api/db/migrations/20181010091446_update_organizations_remove_column_email.js index 179404f43a0..d86789e4e82 100644 --- a/api/db/migrations/20181010091446_update_organizations_remove_column_email.js +++ b/api/db/migrations/20181010091446_update_organizations_remove_column_email.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'organizations'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('email'); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('email'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20181015115708_add_title_to_campaign.js b/api/db/migrations/20181015115708_add_title_to_campaign.js index 1365191ddf0..e93dbbfa321 100644 --- a/api/db/migrations/20181015115708_add_title_to_campaign.js +++ b/api/db/migrations/20181015115708_add_title_to_campaign.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'campaigns'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('title'); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('title'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20181017163633_delete-followers.js b/api/db/migrations/20181017163633_delete-followers.js index e25847f5ffc..56919ab1efa 100644 --- a/api/db/migrations/20181017163633_delete-followers.js +++ b/api/db/migrations/20181017163633_delete-followers.js @@ -1,10 +1,10 @@ const TABLE_NAME = 'followers'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; -exports.down = (knex) => { +const down = function (knex) { function table(t) { t.increments().primary(); t.string('email').unique().notNullable(); @@ -14,3 +14,5 @@ exports.down = (knex) => { return knex.schema.createTable(TABLE_NAME, table); }; + +export { up, down }; diff --git a/api/db/migrations/20181023231845_update_organizations_add_column_logourl.js b/api/db/migrations/20181023231845_update_organizations_add_column_logourl.js index b857af39034..166b8980ead 100644 --- a/api/db/migrations/20181023231845_update_organizations_add_column_logourl.js +++ b/api/db/migrations/20181023231845_update_organizations_add_column_logourl.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'organizations'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.text('logoUrl'); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.drop('logoUrl'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20181030141633_add_custom_landing_page_text_to_campaign.js b/api/db/migrations/20181030141633_add_custom_landing_page_text_to_campaign.js index 5c23bc3086d..a87d39ed0ce 100644 --- a/api/db/migrations/20181030141633_add_custom_landing_page_text_to_campaign.js +++ b/api/db/migrations/20181030141633_add_custom_landing_page_text_to_campaign.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'campaigns'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.text('customLandingPageText'); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('customLandingPageText'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20181031151955_rename-organization-accesses-into-memberships.js b/api/db/migrations/20181031151955_rename-organization-accesses-into-memberships.js index d52c3179bd6..585664e5039 100644 --- a/api/db/migrations/20181031151955_rename-organization-accesses-into-memberships.js +++ b/api/db/migrations/20181031151955_rename-organization-accesses-into-memberships.js @@ -1,9 +1,11 @@ const TABLE_NAME = 'organizations-accesses'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.renameTable(TABLE_NAME, 'memberships'); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.renameTable('memberships', TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20181113161140_add_samlId_to_user.js b/api/db/migrations/20181113161140_add_samlId_to_user.js index d215b88a739..fbb1c6ffdb0 100644 --- a/api/db/migrations/20181113161140_add_samlId_to_user.js +++ b/api/db/migrations/20181113161140_add_samlId_to_user.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'users'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('samlId').unique(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('samlId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20181121105953_make_users_email_nullable.js b/api/db/migrations/20181121105953_make_users_email_nullable.js index 7c1e7006c6c..f23d1d5efe6 100644 --- a/api/db/migrations/20181121105953_make_users_email_nullable.js +++ b/api/db/migrations/20181121105953_make_users_email_nullable.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'users'; -exports.up = async (knex) => { +const up = async function (knex) { // SQLite does not support altering columns, so we do not try to alter // the column if it is already nullable, and we have modified the column // creation in the original migration to create it as nullable. @@ -13,8 +13,10 @@ exports.up = async (knex) => { } }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.string('email').notNullable().alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20181128103517_add_column_create_at_to_knowledge_elements.js b/api/db/migrations/20181128103517_add_column_create_at_to_knowledge_elements.js index 689ab6ef6ed..f156875234c 100644 --- a/api/db/migrations/20181128103517_add_column_create_at_to_knowledge_elements.js +++ b/api/db/migrations/20181128103517_add_column_create_at_to_knowledge_elements.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'knowledge-elements'; -exports.up = async (knex) => { +const up = async function (knex) { const info = await knex(TABLE_NAME).columnInfo(); if (!info.createdAt) { return knex.schema @@ -13,8 +13,10 @@ exports.up = async (knex) => { } }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('createdAt'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20181128135852_add_pix_certif_tos_to_user.js b/api/db/migrations/20181128135852_add_pix_certif_tos_to_user.js index 2d652be9841..f9e278ebe05 100644 --- a/api/db/migrations/20181128135852_add_pix_certif_tos_to_user.js +++ b/api/db/migrations/20181128135852_add_pix_certif_tos_to_user.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'users'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean('pixCertifTermsOfServiceAccepted').defaultTo(false); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('pixCertifTermsOfServiceAccepted'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20181210154610_delete_column_email_from_feedbacks.js b/api/db/migrations/20181210154610_delete_column_email_from_feedbacks.js index fe3eed4759d..32083509382 100644 --- a/api/db/migrations/20181210154610_delete_column_email_from_feedbacks.js +++ b/api/db/migrations/20181210154610_delete_column_email_from_feedbacks.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'feedbacks'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('email'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('email'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190115155237_create_certification_center_table.js b/api/db/migrations/20190115155237_create_certification_center_table.js index 4208704f6e0..f34f8c131e4 100644 --- a/api/db/migrations/20190115155237_create_certification_center_table.js +++ b/api/db/migrations/20190115155237_create_certification_center_table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'certification-centers'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.string('name').notNullable(); @@ -8,6 +8,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20190116013637_update_memberships_add_foreign_key.js b/api/db/migrations/20190116013637_update_memberships_add_foreign_key.js index 9a02b7f6e08..44274ab37c1 100644 --- a/api/db/migrations/20190116013637_update_memberships_add_foreign_key.js +++ b/api/db/migrations/20190116013637_update_memberships_add_foreign_key.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'memberships'; -exports.up = async (knex) => { +const up = async function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.unique(['userId', 'organizationId']); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropUnique(['userId', 'organizationId']); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190117115615_create_certification_center_memberships_table.js b/api/db/migrations/20190117115615_create_certification_center_memberships_table.js index b0c307a5f5e..3459ea3bd4e 100644 --- a/api/db/migrations/20190117115615_create_certification_center_memberships_table.js +++ b/api/db/migrations/20190117115615_create_certification_center_memberships_table.js @@ -1,6 +1,6 @@ const CERTIFICATION_CENTER_MEMBERSHIPS = 'certification-center-memberships'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(CERTIFICATION_CENTER_MEMBERSHIPS, (t) => { t.increments('id').primary(); t.bigInteger('userId').references('users.id').index(); @@ -10,6 +10,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(CERTIFICATION_CENTER_MEMBERSHIPS); }; + +export { up, down }; diff --git a/api/db/migrations/20190117170302_add_certificationCenterId_to_sessions.js b/api/db/migrations/20190117170302_add_certificationCenterId_to_sessions.js index a1144a78973..6f7f331aa6a 100644 --- a/api/db/migrations/20190117170302_add_certificationCenterId_to_sessions.js +++ b/api/db/migrations/20190117170302_add_certificationCenterId_to_sessions.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'sessions'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.integer('certificationCenterId').references('certification-centers.id').index(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('certificationCenterId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190205153549_update_pix-score_column_in_knowledge_element_table.js b/api/db/migrations/20190205153549_update_pix-score_column_in_knowledge_element_table.js index 0e8267b0487..8813df4914c 100644 --- a/api/db/migrations/20190205153549_update_pix-score_column_in_knowledge_element_table.js +++ b/api/db/migrations/20190205153549_update_pix-score_column_in_knowledge_element_table.js @@ -1,36 +1,15 @@ const TABLE_NAME = 'knowledge-elements'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, (t) => { t.float('earnedPix').notNullable().defaultTo(0); }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, (t) => { t.dropColumn('earnedPix'); }); }; -/* Generating the skill value table: - -require('dotenv').config(); -const airtable = require('./lib/infrastructure/airtable.js'); -const _ = require('lodash'); - -async function getPixValues() { - const acquis = await airtable.findRecords('Acquis'); // [ Acquis { … }, … ] - const byValue = _.groupBy(acquis, 'fields.PixValue'); // { "0": [ Acquis { … }, … ], … } - const idsByValue = _(byValue) - .toPairs() // [ [ "0", [ Acquis { … }, … ] ], … ] - .reject([0, "0"]) // [ [ "4.0", [ Acquis { … }, … ] ], … ] - .sortBy(0) // [ [ "0.5", [ Acquis { … }, … ] ], … ] - .map(([value, acquis]) => ` "${value}": ${JSON.stringify(_.map(acquis, 'id').sort())},`) - // [ '"0.5": ["recAvcedefz", …]' ] - .value(); - console.log(`const acquisByValue = {\n${idsByValue.join('\n')}\n};`); -} - -getPixValues().then(()=>{process.exit(0)}); - -*/ +export { up, down }; diff --git a/api/db/migrations/20190206150018_delete_skills_table.js b/api/db/migrations/20190206150018_delete_skills_table.js index 52d9128332a..602ff3b196b 100644 --- a/api/db/migrations/20190206150018_delete_skills_table.js +++ b/api/db/migrations/20190206150018_delete_skills_table.js @@ -1,10 +1,10 @@ const TABLE_NAME = 'skills'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; -exports.down = (knex) => { +const down = function (knex) { function table(t) { t.increments().primary(); t.integer('assessmentId').unsigned().references('assessments.id').index(); @@ -16,3 +16,5 @@ exports.down = (knex) => { return knex.schema.createTable(TABLE_NAME, table); }; + +export { up, down }; diff --git a/api/db/migrations/20190301111215_add_column_user_id_to_knowledge_elements.js b/api/db/migrations/20190301111215_add_column_user_id_to_knowledge_elements.js index bf431512d8b..fba131345ce 100644 --- a/api/db/migrations/20190301111215_add_column_user_id_to_knowledge_elements.js +++ b/api/db/migrations/20190301111215_add_column_user_id_to_knowledge_elements.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'knowledge-elements'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.integer('userId').references('users.id').index(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('userId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190301111229_add_column_competence_to_knowlege_elements.js b/api/db/migrations/20190301111229_add_column_competence_to_knowlege_elements.js index f2d6efb0ac7..488ca05265f 100644 --- a/api/db/migrations/20190301111229_add_column_competence_to_knowlege_elements.js +++ b/api/db/migrations/20190301111229_add_column_competence_to_knowlege_elements.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'knowledge-elements'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('competenceId').index(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('competenceId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190301152021_remove_pix_score_column_of_knowledge_elements.js b/api/db/migrations/20190301152021_remove_pix_score_column_of_knowledge_elements.js index 574d99e0373..df35ab95e43 100644 --- a/api/db/migrations/20190301152021_remove_pix_score_column_of_knowledge_elements.js +++ b/api/db/migrations/20190301152021_remove_pix_score_column_of_knowledge_elements.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'knowledge-elements'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('pixScore'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('pixScore'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190405155259_create_competence_evaluations_table.js b/api/db/migrations/20190405155259_create_competence_evaluations_table.js index 5b964b98bc6..312a53dd6fc 100644 --- a/api/db/migrations/20190405155259_create_competence_evaluations_table.js +++ b/api/db/migrations/20190405155259_create_competence_evaluations_table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'competence-evaluations'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('assessmentId').unsigned().references('assessments.id').index(); @@ -11,6 +11,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20190503173617_add_courseId_index_to_assessments_table.js b/api/db/migrations/20190503173617_add_courseId_index_to_assessments_table.js index da880f287e5..9cef08b2677 100644 --- a/api/db/migrations/20190503173617_add_courseId_index_to_assessments_table.js +++ b/api/db/migrations/20190503173617_add_courseId_index_to_assessments_table.js @@ -1,7 +1,9 @@ -exports.up = (knex) => { +const up = function (knex) { return knex.raw('CREATE INDEX "assessment_courseid_index" ON assessments ("courseId");'); }; -exports.down = (knex) => { +const down = function (knex) { return knex.raw('DROP INDEX "assessment_courseid_index";'); }; + +export { up, down }; diff --git a/api/db/migrations/20190520161908_add_status_to_competence_evaluations.js b/api/db/migrations/20190520161908_add_status_to_competence_evaluations.js index 365a28f3686..07c017f482b 100644 --- a/api/db/migrations/20190520161908_add_status_to_competence_evaluations.js +++ b/api/db/migrations/20190520161908_add_status_to_competence_evaluations.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'competence-evaluations'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('status'); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('status'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190529124405_add_column_competence_id_in_assessments.js b/api/db/migrations/20190529124405_add_column_competence_id_in_assessments.js index 7b86e3d5d4d..120fb6473e5 100644 --- a/api/db/migrations/20190529124405_add_column_competence_id_in_assessments.js +++ b/api/db/migrations/20190529124405_add_column_competence_id_in_assessments.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'assessments'; -exports.up = async function (knex) { +const up = async function (knex) { const info = await knex(TABLE_NAME).columnInfo(); if (!info.competenceId) { await knex.schema.table(TABLE_NAME, (t) => t.string('competenceId').index()); @@ -12,8 +12,10 @@ exports.up = async function (knex) { } }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (t) => { t.dropColumn('competenceId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190606125500_add_is-v2-certification_column_in_certification-course.js b/api/db/migrations/20190606125500_add_is-v2-certification_column_in_certification-course.js index b85ca3b0714..338426b108c 100644 --- a/api/db/migrations/20190606125500_add_is-v2-certification_column_in_certification-course.js +++ b/api/db/migrations/20190606125500_add_is-v2-certification_column_in_certification-course.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-courses'; const COLUMN_NAME = 'isV2Certification'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).notNullable().defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190621155332_create_member_organization_role.js b/api/db/migrations/20190621155332_create_member_organization_role.js index 800ad528f87..b9d33828691 100644 --- a/api/db/migrations/20190621155332_create_member_organization_role.js +++ b/api/db/migrations/20190621155332_create_member_organization_role.js @@ -1,9 +1,11 @@ const TABLE_NAME = 'organization-roles'; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME).insert({ id: 2, name: 'MEMBER' }); }; -exports.down = function (knex) { +const down = function (knex) { return knex(TABLE_NAME).where('name', 'MEMBER').delete(); }; + +export { up, down }; diff --git a/api/db/migrations/20190626111900_add_campaign_participation_unique_constraint_on_user_and_campaign.js b/api/db/migrations/20190626111900_add_campaign_participation_unique_constraint_on_user_and_campaign.js index 3ed45db30fc..c133123566f 100644 --- a/api/db/migrations/20190626111900_add_campaign_participation_unique_constraint_on_user_and_campaign.js +++ b/api/db/migrations/20190626111900_add_campaign_participation_unique_constraint_on_user_and_campaign.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'campaign-participations'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw(` DELETE FROM "campaign-participations" WHERE id IN ( @@ -18,8 +18,10 @@ exports.up = async function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropUnique(['campaignId', 'userId']); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190627154044_create_certification_candidates_table.js b/api/db/migrations/20190627154044_create_certification_candidates_table.js index 9617fcbb5a2..811f6cfc1b1 100644 --- a/api/db/migrations/20190627154044_create_certification_candidates_table.js +++ b/api/db/migrations/20190627154044_create_certification_candidates_table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'certification-candidates'; -exports.up = async (knex) => { +const up = async function (knex) { await knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.string('firstName').notNullable(); @@ -14,6 +14,8 @@ exports.up = async (knex) => { }); }; -exports.down = async (knex) => { +const down = async function (knex) { await knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20190701102247_remove_organizationRoleId_column.js b/api/db/migrations/20190701102247_remove_organizationRoleId_column.js index fc4b9947c93..ec777082767 100644 --- a/api/db/migrations/20190701102247_remove_organizationRoleId_column.js +++ b/api/db/migrations/20190701102247_remove_organizationRoleId_column.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'memberships'; -exports.up = async function (knex) { +const up = async function (knex) { const info = await knex(TABLE_NAME).columnInfo(); if (info.organizationRoleId) { await knex.schema.alterTable(TABLE_NAME, (table) => { @@ -13,7 +13,7 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.alterTable(TABLE_NAME, (table) => { table.bigInteger('organizationRoleId').references('organization-roles.id').index(); table.dropColumn('organizationRole'); @@ -26,3 +26,5 @@ exports.down = async function (knex) { 'ADMIN', ]); }; + +export { up, down }; diff --git a/api/db/migrations/20190702111254_remove_organization_roles_table.js b/api/db/migrations/20190702111254_remove_organization_roles_table.js index ce14668774b..e525cdfb7ec 100644 --- a/api/db/migrations/20190702111254_remove_organization_roles_table.js +++ b/api/db/migrations/20190702111254_remove_organization_roles_table.js @@ -1,10 +1,10 @@ const TABLE_NAME = 'organization-roles'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema .createTable(TABLE_NAME, (table) => { table.increments('id').primary(); @@ -16,3 +16,5 @@ exports.down = function (knex) { return knex.batchInsert(TABLE_NAME, roles); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190703140740_add_MEMBER_role_to_memberships.js b/api/db/migrations/20190703140740_add_MEMBER_role_to_memberships.js index d7965288c47..91a32358303 100644 --- a/api/db/migrations/20190703140740_add_MEMBER_role_to_memberships.js +++ b/api/db/migrations/20190703140740_add_MEMBER_role_to_memberships.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'memberships'; -exports.up = async function (knex) { +const up = async function (knex) { // eslint-disable-next-line knex/avoid-injections await knex.raw(` WITH newroles AS ( @@ -13,9 +13,10 @@ exports.up = async function (knex) { `); }; -// Rollback, make every membership an MEMBER -exports.down = function (knex) { +const down = function (knex) { return knex(TABLE_NAME).update({ organizationRole: 'MEMBER', }); }; + +export { up, down }; diff --git a/api/db/migrations/20190705112020_add_column_had-seen-new-profile-info_to_user.js b/api/db/migrations/20190705112020_add_column_had-seen-new-profile-info_to_user.js index 6acb6f73153..ff3221d6fbe 100644 --- a/api/db/migrations/20190705112020_add_column_had-seen-new-profile-info_to_user.js +++ b/api/db/migrations/20190705112020_add_column_had-seen-new-profile-info_to_user.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'hasSeenNewProfileInfo'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190709160455_add_column_to_remember_migration_to_user.js b/api/db/migrations/20190709160455_add_column_to_remember_migration_to_user.js index 7238db6664e..cfd65df6667 100644 --- a/api/db/migrations/20190709160455_add_column_to_remember_migration_to_user.js +++ b/api/db/migrations/20190709160455_add_column_to_remember_migration_to_user.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'users'; const COLUMN_NAME_PROFILEV2 = 'isProfileV2'; const COLUMN_NAME_PROFILEV2_DATE = 'migratedAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME_PROFILEV2).notNullable().defaultTo(false); table.dateTime(COLUMN_NAME_PROFILEV2_DATE).nullable(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME_PROFILEV2); table.dropColumn(COLUMN_NAME_PROFILEV2_DATE); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190719152419_add_column_externalId_to_organizations.js b/api/db/migrations/20190719152419_add_column_externalId_to_organizations.js index 8b347a5e24c..f346106511d 100644 --- a/api/db/migrations/20190719152419_add_column_externalId_to_organizations.js +++ b/api/db/migrations/20190719152419_add_column_externalId_to_organizations.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'externalId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME).index(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190729162546_create_table_students.js b/api/db/migrations/20190729162546_create_table_students.js index 268edbca96f..afbb2301b43 100644 --- a/api/db/migrations/20190729162546_create_table_students.js +++ b/api/db/migrations/20190729162546_create_table_students.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'students'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('userId').unsigned().references('users.id').index(); @@ -13,6 +13,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20190730172148_add_column_has-seen-assessment-instructions_to_user.js b/api/db/migrations/20190730172148_add_column_has-seen-assessment-instructions_to_user.js index 5df42493967..80b7ddb5898 100644 --- a/api/db/migrations/20190730172148_add_column_has-seen-assessment-instructions_to_user.js +++ b/api/db/migrations/20190730172148_add_column_has-seen-assessment-instructions_to_user.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'hasSeenAssessmentInstructions'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190730175015_add_column_isManagingStudents_to_organizations.js b/api/db/migrations/20190730175015_add_column_isManagingStudents_to_organizations.js index 4541868de12..72afe6ee049 100644 --- a/api/db/migrations/20190730175015_add_column_isManagingStudents_to_organizations.js +++ b/api/db/migrations/20190730175015_add_column_isManagingStudents_to_organizations.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'isManagingStudents'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190820092603_add_several_attributes_to_student.js b/api/db/migrations/20190820092603_add_several_attributes_to_student.js index 057cd61f7f1..c749108d441 100644 --- a/api/db/migrations/20190820092603_add_several_attributes_to_student.js +++ b/api/db/migrations/20190820092603_add_several_attributes_to_student.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'students'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('preferredLastName'); table.string('middleName'); @@ -16,7 +16,7 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('preferredLastName'); table.dropColumn('middleName'); @@ -31,3 +31,5 @@ exports.down = function (knex) { table.dropColumn('division'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190822152123_add_column_category_and_answer_to_feedback_form.js b/api/db/migrations/20190822152123_add_column_category_and_answer_to_feedback_form.js index 44d485b3a3b..27824d6bfd9 100644 --- a/api/db/migrations/20190822152123_add_column_category_and_answer_to_feedback_form.js +++ b/api/db/migrations/20190822152123_add_column_category_and_answer_to_feedback_form.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'feedbacks'; const COLUMN_CATEGORY = 'category'; const COLUMN_ANSWER = 'answer'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_CATEGORY); table.string(COLUMN_ANSWER); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_CATEGORY); table.dropColumn(COLUMN_ANSWER); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190826131512_add_column_isImproving_to_Assessments.js b/api/db/migrations/20190826131512_add_column_isImproving_to_Assessments.js index a2f2c318887..9854879d5a6 100644 --- a/api/db/migrations/20190826131512_add_column_isImproving_to_Assessments.js +++ b/api/db/migrations/20190826131512_add_column_isImproving_to_Assessments.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'assessments'; const COLUMN_NAME = 'isImproving'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190826140605_add_column_campaign_participation_id_in_assessments.js b/api/db/migrations/20190826140605_add_column_campaign_participation_id_in_assessments.js index 7a176a6d345..8d51db43dbe 100644 --- a/api/db/migrations/20190826140605_add_column_campaign_participation_id_in_assessments.js +++ b/api/db/migrations/20190826140605_add_column_campaign_participation_id_in_assessments.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'assessments'; -exports.up = async function (knex) { +const up = async function (knex) { const info = await knex(TABLE_NAME).columnInfo(); if (!info.campaignParticipationId) { await knex.schema.table(TABLE_NAME, (t) => @@ -14,8 +14,10 @@ exports.up = async function (knex) { } }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (t) => { t.dropColumn('campaignParticipationId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190904140605_remove_column_assessment_id_in_campaign_participation.js b/api/db/migrations/20190904140605_remove_column_assessment_id_in_campaign_participation.js index 2c7b48cfde8..038af1c5abb 100644 --- a/api/db/migrations/20190904140605_remove_column_assessment_id_in_campaign_participation.js +++ b/api/db/migrations/20190904140605_remove_column_assessment_id_in_campaign_participation.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'campaign-participations'; -exports.up = async function (knex) { +const up = async function (knex) { const info = await knex(TABLE_NAME).columnInfo(); if (info.assessmentId) { await knex.schema.alterTable(TABLE_NAME, (table) => { @@ -8,10 +8,13 @@ exports.up = async function (knex) { }); } }; -exports.down = async function (knex) { + +const down = async function (knex) { await knex.schema.table(TABLE_NAME, (t) => t.integer('assessmentId').unsigned().references('assessments.id').index()); await knex.raw(` UPDATE "campaign-participations" SET "assessmentId" = (SELECT id FROM "assessments" WHERE "campaign-participations".id = assessments."campaignParticipationId" ORDER BY "assessments"."createdAt" desc limit 1) `); }; + +export { up, down }; diff --git a/api/db/migrations/20190905120343_alter_table_assessments_column_user_id_from_bigint_to_integer.js b/api/db/migrations/20190905120343_alter_table_assessments_column_user_id_from_bigint_to_integer.js index 76902f08cd4..98ea979ae17 100644 --- a/api/db/migrations/20190905120343_alter_table_assessments_column_user_id_from_bigint_to_integer.js +++ b/api/db/migrations/20190905120343_alter_table_assessments_column_user_id_from_bigint_to_integer.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'assessments'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.integer('userId').unsigned().alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.bigInteger('userId').alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190906090933_alter_table_certification_center_memberships_column_user_id_from_bigint_to_integer.js b/api/db/migrations/20190906090933_alter_table_certification_center_memberships_column_user_id_from_bigint_to_integer.js index c65930ec1b0..42e5b793e9f 100644 --- a/api/db/migrations/20190906090933_alter_table_certification_center_memberships_column_user_id_from_bigint_to_integer.js +++ b/api/db/migrations/20190906090933_alter_table_certification_center_memberships_column_user_id_from_bigint_to_integer.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-center-memberships'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.integer('userId').unsigned().alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.bigInteger('userId').alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190906094217_alter_table_certification_center_memberships_column_certification_center_id_from_bigint_to_integer.js b/api/db/migrations/20190906094217_alter_table_certification_center_memberships_column_certification_center_id_from_bigint_to_integer.js index e72be059d77..8d20d382c41 100644 --- a/api/db/migrations/20190906094217_alter_table_certification_center_memberships_column_certification_center_id_from_bigint_to_integer.js +++ b/api/db/migrations/20190906094217_alter_table_certification_center_memberships_column_certification_center_id_from_bigint_to_integer.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-center-memberships'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.integer('certificationCenterId').unsigned().alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.bigInteger('certificationCenterId').alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190906100845_alter_table_certification_challenges_column_course_id_from_bigint_to_integer.js b/api/db/migrations/20190906100845_alter_table_certification_challenges_column_course_id_from_bigint_to_integer.js index 77c6bcceca5..de3ae22324b 100644 --- a/api/db/migrations/20190906100845_alter_table_certification_challenges_column_course_id_from_bigint_to_integer.js +++ b/api/db/migrations/20190906100845_alter_table_certification_challenges_column_course_id_from_bigint_to_integer.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-challenges'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.integer('courseId').unsigned().alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.bigInteger('courseId').unsigned().alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190906101419_alter_table_memberships_column_user_id_from_bigint_to_integer.js b/api/db/migrations/20190906101419_alter_table_memberships_column_user_id_from_bigint_to_integer.js index eb223041d0c..06a14d7b885 100644 --- a/api/db/migrations/20190906101419_alter_table_memberships_column_user_id_from_bigint_to_integer.js +++ b/api/db/migrations/20190906101419_alter_table_memberships_column_user_id_from_bigint_to_integer.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'memberships'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.integer('userId').unsigned().alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.bigInteger('userId').alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190906101520_alter_table_memberships_column_organization_id_from_bigint_to_integer.js b/api/db/migrations/20190906101520_alter_table_memberships_column_organization_id_from_bigint_to_integer.js index c3b2e23fb09..7662aec4206 100644 --- a/api/db/migrations/20190906101520_alter_table_memberships_column_organization_id_from_bigint_to_integer.js +++ b/api/db/migrations/20190906101520_alter_table_memberships_column_organization_id_from_bigint_to_integer.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'memberships'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.integer('organizationId').unsigned().alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.bigInteger('organizationId').alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190906101739_alter_table_organizations_column_user_id_from_bigint_to_integer.js b/api/db/migrations/20190906101739_alter_table_organizations_column_user_id_from_bigint_to_integer.js index f2ed3aa4522..9ae8b98b423 100644 --- a/api/db/migrations/20190906101739_alter_table_organizations_column_user_id_from_bigint_to_integer.js +++ b/api/db/migrations/20190906101739_alter_table_organizations_column_user_id_from_bigint_to_integer.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'organizations'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.integer('userId').unsigned().alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.bigInteger('userId').alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190906101930_alter_table_snapshots_column_user_id_from_bigint_to_integer.js b/api/db/migrations/20190906101930_alter_table_snapshots_column_user_id_from_bigint_to_integer.js index 07a543b865a..30b6f257224 100644 --- a/api/db/migrations/20190906101930_alter_table_snapshots_column_user_id_from_bigint_to_integer.js +++ b/api/db/migrations/20190906101930_alter_table_snapshots_column_user_id_from_bigint_to_integer.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'snapshots'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.integer('userId').unsigned().alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.bigInteger('userId').unsigned().alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190906102015_alter_table_snapshots_column_organization_id_from_bigint_to_integer.js b/api/db/migrations/20190906102015_alter_table_snapshots_column_organization_id_from_bigint_to_integer.js index b1907f4b2a6..8bd5ca901d0 100644 --- a/api/db/migrations/20190906102015_alter_table_snapshots_column_organization_id_from_bigint_to_integer.js +++ b/api/db/migrations/20190906102015_alter_table_snapshots_column_organization_id_from_bigint_to_integer.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'snapshots'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.integer('organizationId').unsigned().alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.bigInteger('organizationId').unsigned().alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190906102158_alter_table_users_pix_roles_column_user_id_from_bigint_to_integer.js b/api/db/migrations/20190906102158_alter_table_users_pix_roles_column_user_id_from_bigint_to_integer.js index f786f79243d..db257feabfb 100644 --- a/api/db/migrations/20190906102158_alter_table_users_pix_roles_column_user_id_from_bigint_to_integer.js +++ b/api/db/migrations/20190906102158_alter_table_users_pix_roles_column_user_id_from_bigint_to_integer.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'users_pix_roles'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.integer('user_id').unsigned().alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.bigInteger('user_id').alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190906102335_alter_table_users_pix_roles_column_pix_role_id_from_bigint_to_integer.js b/api/db/migrations/20190906102335_alter_table_users_pix_roles_column_pix_role_id_from_bigint_to_integer.js index 6345c4387ca..9ff58171874 100644 --- a/api/db/migrations/20190906102335_alter_table_users_pix_roles_column_pix_role_id_from_bigint_to_integer.js +++ b/api/db/migrations/20190906102335_alter_table_users_pix_roles_column_pix_role_id_from_bigint_to_integer.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'users_pix_roles'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.integer('pix_role_id').unsigned().alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.bigInteger('pix_role_id').alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190910165023_create_organization_invitations_table.js b/api/db/migrations/20190910165023_create_organization_invitations_table.js index 4b08aac9e94..cc4971bcf78 100644 --- a/api/db/migrations/20190910165023_create_organization_invitations_table.js +++ b/api/db/migrations/20190910165023_create_organization_invitations_table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'organization-invitations'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (table) => { table.increments('id').primary(); table.integer('organizationId').unsigned().references('organizations.id').index(); @@ -11,6 +11,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20190918105231_add_column_provinceCode_to_organizations.js b/api/db/migrations/20190918105231_add_column_provinceCode_to_organizations.js index a0d5d981138..2753e34520d 100644 --- a/api/db/migrations/20190918105231_add_column_provinceCode_to_organizations.js +++ b/api/db/migrations/20190918105231_add_column_provinceCode_to_organizations.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'provinceCode'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME).index(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20190930115538_rename_column_birthplace_into_birthCity_in_certification_candidates.js b/api/db/migrations/20190930115538_rename_column_birthplace_into_birthCity_in_certification_candidates.js index 7aee0fbf587..4617e9c68c8 100644 --- a/api/db/migrations/20190930115538_rename_column_birthplace_into_birthCity_in_certification_candidates.js +++ b/api/db/migrations/20190930115538_rename_column_birthplace_into_birthCity_in_certification_candidates.js @@ -2,10 +2,12 @@ const TABLE_NAME = 'certification-candidates'; const OLD_COLUMN_NAME = 'birthplace'; const NEW_COLUMN_NAME = 'birthCity'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (t) => t.renameColumn(OLD_COLUMN_NAME, NEW_COLUMN_NAME)); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (t) => t.renameColumn(NEW_COLUMN_NAME, OLD_COLUMN_NAME)); }; + +export { up, down }; diff --git a/api/db/migrations/20190930121453_add_columns_birthProvinceCode_and_birthCity_to_certification_candidates.js b/api/db/migrations/20190930121453_add_columns_birthProvinceCode_and_birthCity_to_certification_candidates.js index 4838b83850d..f5e19662255 100644 --- a/api/db/migrations/20190930121453_add_columns_birthProvinceCode_and_birthCity_to_certification_candidates.js +++ b/api/db/migrations/20190930121453_add_columns_birthProvinceCode_and_birthCity_to_certification_candidates.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'certification-candidates'; const BIRTH_PROVINCE_CODE_COLUMN_NAME = 'birthProvinceCode'; const BIRTH_COUNTRY_COLUMN_NAME = 'birthCountry'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(BIRTH_PROVINCE_CODE_COLUMN_NAME); table.string(BIRTH_COUNTRY_COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(BIRTH_PROVINCE_CODE_COLUMN_NAME); table.dropColumn(BIRTH_COUNTRY_COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191008142311_alter_feedback_answer_column_to_text.js b/api/db/migrations/20191008142311_alter_feedback_answer_column_to_text.js index 72d04b634c6..fdca2340bcf 100644 --- a/api/db/migrations/20191008142311_alter_feedback_answer_column_to_text.js +++ b/api/db/migrations/20191008142311_alter_feedback_answer_column_to_text.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'feedbacks'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.text('answer').alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.string('answer').alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191014155036_add_code_to_organizationInvitations.js b/api/db/migrations/20191014155036_add_code_to_organizationInvitations.js index 10c091e6ee7..758779c0284 100644 --- a/api/db/migrations/20191014155036_add_code_to_organizationInvitations.js +++ b/api/db/migrations/20191014155036_add_code_to_organizationInvitations.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organization-invitations'; const COLUMN_NAME = 'code'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME).notNullable(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191017151624_add_columns_outdated_to_target_profiles_table.js b/api/db/migrations/20191017151624_add_columns_outdated_to_target_profiles_table.js index 8188cda93bc..19c5ad12a86 100644 --- a/api/db/migrations/20191017151624_add_columns_outdated_to_target_profiles_table.js +++ b/api/db/migrations/20191017151624_add_columns_outdated_to_target_profiles_table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'target-profiles'; const OUTDATED_COLUMN_NAME = 'outdated'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(OUTDATED_COLUMN_NAME).notNullable().defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(OUTDATED_COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191025161754_add_column_user_id_to_certification_candidates.js b/api/db/migrations/20191025161754_add_column_user_id_to_certification_candidates.js index 6b5c6a56248..b11681b7dd2 100644 --- a/api/db/migrations/20191025161754_add_column_user_id_to_certification_candidates.js +++ b/api/db/migrations/20191025161754_add_column_user_id_to_certification_candidates.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-candidates'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.integer('userId').references('users.id').index(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('userId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191028171724_delete_column_hasSeenNewProfileInfo_users_table.js b/api/db/migrations/20191028171724_delete_column_hasSeenNewProfileInfo_users_table.js index 5e297333358..8218f74d00c 100644 --- a/api/db/migrations/20191028171724_delete_column_hasSeenNewProfileInfo_users_table.js +++ b/api/db/migrations/20191028171724_delete_column_hasSeenNewProfileInfo_users_table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const OUTDATED_COLUMN_NAME = 'hasSeenNewProfileInfo'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(OUTDATED_COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(OUTDATED_COLUMN_NAME).notNullable().defaultTo(true); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191029091642_add_certification_candidates_unique_constraint_on_user_and_session.js b/api/db/migrations/20191029091642_add_certification_candidates_unique_constraint_on_user_and_session.js index 5953989db48..8d160ece4f6 100644 --- a/api/db/migrations/20191029091642_add_certification_candidates_unique_constraint_on_user_and_session.js +++ b/api/db/migrations/20191029091642_add_certification_candidates_unique_constraint_on_user_and_session.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-candidates'; -exports.up = async function (knex) { +const up = async function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.unique(['sessionId', 'userId']); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropUnique(['sessionId', 'userId']); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191029103059_add_column_status_in_session.js b/api/db/migrations/20191029103059_add_column_status_in_session.js index 5218ab98e16..4de3bd545c1 100644 --- a/api/db/migrations/20191029103059_add_column_status_in_session.js +++ b/api/db/migrations/20191029103059_add_column_status_in_session.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'sessions'; const COLUMN_NAME = 'status'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, async (table) => { table.string(COLUMN_NAME).defaultTo('started'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191112121128_update_memberships_modify_organizationRole.js b/api/db/migrations/20191112121128_update_memberships_modify_organizationRole.js index 1082958ba9b..12dfa43db0f 100644 --- a/api/db/migrations/20191112121128_update_memberships_modify_organizationRole.js +++ b/api/db/migrations/20191112121128_update_memberships_modify_organizationRole.js @@ -1,9 +1,11 @@ const TABLE_NAME = 'memberships'; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME).where('organizationRole', '=', 'OWNER').update({ organizationRole: 'ADMIN' }); }; -exports.down = function (knex) { +const down = function (knex) { return knex(TABLE_NAME).where('organizationRole', '=', 'ADMIN').update({ organizationRole: 'OWNER' }); }; + +export { up, down }; diff --git a/api/db/migrations/20191115123716_trim_lastname_firstname_from_certification_candidate.js b/api/db/migrations/20191115123716_trim_lastname_firstname_from_certification_candidate.js index 88f568dc5ea..d7e956c6358 100644 --- a/api/db/migrations/20191115123716_trim_lastname_firstname_from_certification_candidate.js +++ b/api/db/migrations/20191115123716_trim_lastname_firstname_from_certification_candidate.js @@ -1,20 +1,19 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw(` - UPDATE "public"."certification-candidates" - SET "firstName" = trim("firstName"), - "lastName" = trim("lastName"), - "birthCity" = trim("birthCity"), - "birthCountry" = trim("birthCountry") - WHERE id IN - (SELECT "public"."certification-candidates"."id" AS "id" - FROM "public"."certification-candidates" - WHERE "public"."certification-candidates"."firstName" LIKE '% ' - OR "public"."certification-candidates"."lastName" LIKE '% ' - OR "public"."certification-candidates"."birthCity" LIKE '% ' - OR "public"."certification-candidates"."birthCountry" LIKE '% ' ); - `); -}; - -exports.down = function () { - // no rollback for this case + UPDATE "public"."certification-candidates" + SET "firstName" = trim("firstName"), + "lastName" = trim("lastName"), + "birthCity" = trim("birthCity"), + "birthCountry" = trim("birthCountry") + WHERE id IN + (SELECT "public"."certification-candidates"."id" AS "id" + FROM "public"."certification-candidates" + WHERE "public"."certification-candidates"."firstName" LIKE '% ' + OR "public"."certification-candidates"."lastName" LIKE '% ' + OR "public"."certification-candidates"."birthCity" LIKE '% ' + OR "public"."certification-candidates"."birthCountry" LIKE '% ' ); + `); }; +// eslint-disable-next-line no-empty-function +const down = function () {}; +export { up, down }; diff --git a/api/db/migrations/20191118173128_copy-external-id-from-candidate-to-course.js b/api/db/migrations/20191118173128_copy-external-id-from-candidate-to-course.js index fe10bc1b559..864ebbd5640 100644 --- a/api/db/migrations/20191118173128_copy-external-id-from-candidate-to-course.js +++ b/api/db/migrations/20191118173128_copy-external-id-from-candidate-to-course.js @@ -1,9 +1,9 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw(` UPDATE "public"."certification-courses" as cc SET "externalId" = joinCcAndCca."externalIdCertificationCandidate" FROM - ( SELECT + ( SELECT cc."id" AS "idCertificationCourse", cca."externalId" AS "externalIdCertificationCandidate" FROM "public"."certification-courses" AS cc @@ -12,11 +12,10 @@ exports.up = async function (knex) { AND cc."sessionId" = cca."sessionId" WHERE cca."externalId" IS NOT NULL AND cc."externalId" IS NULL ) as joinCcAndCca - + WHERE cc."id" = joinCcAndCca."idCertificationCourse"; `); }; - -exports.down = function () { - // no rollback for this case -}; +// eslint-disable-next-line no-empty-function +const down = function () {}; +export { up, down }; diff --git a/api/db/migrations/20191129100835_add_column_comment_to_session.js b/api/db/migrations/20191129100835_add_column_comment_to_session.js index 169ff9d4df9..7962e968680 100644 --- a/api/db/migrations/20191129100835_add_column_comment_to_session.js +++ b/api/db/migrations/20191129100835_add_column_comment_to_session.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'sessions'; const COLUMN_NAME = 'examinerComment'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME, 500); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191202152127_add_column_externalId_to_certification_centers.js b/api/db/migrations/20191202152127_add_column_externalId_to_certification_centers.js index 9e38be331ff..22168d88d6b 100644 --- a/api/db/migrations/20191202152127_add_column_externalId_to_certification_centers.js +++ b/api/db/migrations/20191202152127_add_column_externalId_to_certification_centers.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-centers'; const COLUMN_NAME = 'externalId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191202152240_add_column_type_to_certification_centers.js b/api/db/migrations/20191202152240_add_column_type_to_certification_centers.js index 2b3928a1c3d..18efe2e7dad 100644 --- a/api/db/migrations/20191202152240_add_column_type_to_certification_centers.js +++ b/api/db/migrations/20191202152240_add_column_type_to_certification_centers.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-centers'; const COLUMN_NAME = 'type'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.enu(COLUMN_NAME, ['SCO', 'SUP', 'PRO']); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191202164101_replace_unique_on_national_student_id_by_unique_on_national_student_id_and_organization_id.js b/api/db/migrations/20191202164101_replace_unique_on_national_student_id_by_unique_on_national_student_id_and_organization_id.js index 2bd41b5abde..aa5ca213ed3 100644 --- a/api/db/migrations/20191202164101_replace_unique_on_national_student_id_by_unique_on_national_student_id_and_organization_id.js +++ b/api/db/migrations/20191202164101_replace_unique_on_national_student_id_by_unique_on_national_student_id_and_organization_id.js @@ -1,15 +1,17 @@ const TABLE_NAME = 'students'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropUnique('nationalStudentId'); table.unique(['nationalStudentId', 'organizationId']); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.unique('nationalStudentId'); table.dropUnique(['nationalStudentId', 'organizationId']); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191203174112_add_students_unique_on_user_id_and_organization_id.js b/api/db/migrations/20191203174112_add_students_unique_on_user_id_and_organization_id.js index 8b3fb19140d..17f71d90ba8 100644 --- a/api/db/migrations/20191203174112_add_students_unique_on_user_id_and_organization_id.js +++ b/api/db/migrations/20191203174112_add_students_unique_on_user_id_and_organization_id.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'students'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.unique(['userId', 'organizationId']); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropUnique(['userId', 'organizationId']); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191208041507_add_columns_examinerComment_and_hasSeenEndTestScreen_on_certification_candidates.js b/api/db/migrations/20191208041507_add_columns_examinerComment_and_hasSeenEndTestScreen_on_certification_candidates.js index a28766733b8..9d71f7ef80c 100644 --- a/api/db/migrations/20191208041507_add_columns_examinerComment_and_hasSeenEndTestScreen_on_certification_candidates.js +++ b/api/db/migrations/20191208041507_add_columns_examinerComment_and_hasSeenEndTestScreen_on_certification_candidates.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'certification-candidates'; const EXAMINER_COMMENT_NAME = 'examinerComment'; const HAS_SEEN_END_TEST_SCREEN_NAME = 'hasSeenEndTestScreen'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(EXAMINER_COMMENT_NAME, 500); table.boolean(HAS_SEEN_END_TEST_SCREEN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(EXAMINER_COMMENT_NAME); table.dropColumn(HAS_SEEN_END_TEST_SCREEN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191211110034_add_column_email_for_session_report.js b/api/db/migrations/20191211110034_add_column_email_for_session_report.js index 58af1128e31..58d987eef4a 100644 --- a/api/db/migrations/20191211110034_add_column_email_for_session_report.js +++ b/api/db/migrations/20191211110034_add_column_email_for_session_report.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-candidates'; const COLUMN_NAME = 'email'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191217105506_add_username_to_users.js b/api/db/migrations/20191217105506_add_username_to_users.js index ae04b5a4dfb..604175808b6 100644 --- a/api/db/migrations/20191217105506_add_username_to_users.js +++ b/api/db/migrations/20191217105506_add_username_to_users.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'users'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('username').unique(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('username'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20191220174321_remove_user_migration_column.js b/api/db/migrations/20191220174321_remove_user_migration_column.js index 875510c39bf..6b3cbc63b67 100644 --- a/api/db/migrations/20191220174321_remove_user_migration_column.js +++ b/api/db/migrations/20191220174321_remove_user_migration_column.js @@ -1,15 +1,17 @@ const TABLE_NAME = 'users'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('isProfileV2'); table.dropColumn('migratedAt'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean('isProfileV2').defaultTo(true); table.dateTime('migratedAt').nullable(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200106155510_update_cgu_for_gar_users.js b/api/db/migrations/20200106155510_update_cgu_for_gar_users.js index ac99c4f8676..e85beb5d05d 100644 --- a/api/db/migrations/20200106155510_update_cgu_for_gar_users.js +++ b/api/db/migrations/20200106155510_update_cgu_for_gar_users.js @@ -1,9 +1,11 @@ const TABLE_NAME = 'users'; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME).whereNotNull('samlId').update({ cgu: false }); }; -exports.down = function (knex) { +const down = function (knex) { return knex(TABLE_NAME).whereNotNull('samlId').update({ cgu: true }); }; + +export { up, down }; diff --git a/api/db/migrations/20200114155324_add_archived_at_column_on_campaigns.js b/api/db/migrations/20200114155324_add_archived_at_column_on_campaigns.js index 5466f7776c8..6ef97fe96c2 100644 --- a/api/db/migrations/20200114155324_add_archived_at_column_on_campaigns.js +++ b/api/db/migrations/20200114155324_add_archived_at_column_on_campaigns.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'campaigns'; const COLUMN_NAME = 'archivedAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, async (table) => { table.dateTime(COLUMN_NAME).nullable(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200117170614_rename_session_examiner_comment_to_examiner_global_comment.js b/api/db/migrations/20200117170614_rename_session_examiner_comment_to_examiner_global_comment.js index 61d747b1d08..b2f73c435ca 100644 --- a/api/db/migrations/20200117170614_rename_session_examiner_comment_to_examiner_global_comment.js +++ b/api/db/migrations/20200117170614_rename_session_examiner_comment_to_examiner_global_comment.js @@ -2,10 +2,12 @@ const TABLE_NAME = 'sessions'; const OLD_COLUMN_NAME = 'examinerComment'; const NEW_COLUMN_NAME = 'examinerGlobalComment'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (t) => t.renameColumn(OLD_COLUMN_NAME, NEW_COLUMN_NAME)); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (t) => t.renameColumn(NEW_COLUMN_NAME, OLD_COLUMN_NAME)); }; + +export { up, down }; diff --git a/api/db/migrations/20200117173110_add_examinerComment_and_hasSeenEndTestScreen_to_certifCourses_table.js b/api/db/migrations/20200117173110_add_examinerComment_and_hasSeenEndTestScreen_to_certifCourses_table.js index 742da89a9f2..7778dcf6e1f 100644 --- a/api/db/migrations/20200117173110_add_examinerComment_and_hasSeenEndTestScreen_to_certifCourses_table.js +++ b/api/db/migrations/20200117173110_add_examinerComment_and_hasSeenEndTestScreen_to_certifCourses_table.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'certification-courses'; const EXAMINER_COMMENT_NAME = 'examinerComment'; const HAS_SEEN_END_TEST_SCREEN_NAME = 'hasSeenEndTestScreen'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(EXAMINER_COMMENT_NAME, 500); table.boolean(HAS_SEEN_END_TEST_SCREEN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(EXAMINER_COMMENT_NAME); table.dropColumn(HAS_SEEN_END_TEST_SCREEN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200117173940_remove_column_examinerComment_and_hasSeenEndTestScreen_from_certifCandidates_table.js b/api/db/migrations/20200117173940_remove_column_examinerComment_and_hasSeenEndTestScreen_from_certifCandidates_table.js index 2e2e494540a..c010493c582 100644 --- a/api/db/migrations/20200117173940_remove_column_examinerComment_and_hasSeenEndTestScreen_from_certifCandidates_table.js +++ b/api/db/migrations/20200117173940_remove_column_examinerComment_and_hasSeenEndTestScreen_from_certifCandidates_table.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'certification-candidates'; const FIRST_COLUMN_NAME = 'examinerComment'; const SECOND_COLUMN_NAME = 'hasSeenEndTestScreen'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(FIRST_COLUMN_NAME); table.dropColumn(SECOND_COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(FIRST_COLUMN_NAME); table.string(SECOND_COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200129155649_add_column_finalizedAt_to_sessions.js b/api/db/migrations/20200129155649_add_column_finalizedAt_to_sessions.js index 86e90d1613e..4484aa6815b 100644 --- a/api/db/migrations/20200129155649_add_column_finalizedAt_to_sessions.js +++ b/api/db/migrations/20200129155649_add_column_finalizedAt_to_sessions.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'sessions'; const COLUMN_NAME = 'finalizedAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dateTime(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200204191322_set_competenceId_for_legacy_placement_assessments.js b/api/db/migrations/20200204191322_set_competenceId_for_legacy_placement_assessments.js index 93982771154..5604c343011 100644 --- a/api/db/migrations/20200204191322_set_competenceId_for_legacy_placement_assessments.js +++ b/api/db/migrations/20200204191322_set_competenceId_for_legacy_placement_assessments.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'assessments'; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME) .where({ type: 'PLACEMENT', @@ -28,7 +28,7 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex(TABLE_NAME) .where({ type: 'PLACEMENT', @@ -37,3 +37,5 @@ exports.down = function (knex) { competenceId: null, }); }; + +export { up, down }; diff --git a/api/db/migrations/20200212135345_fix_indexes_on_table_campaign-participations.js b/api/db/migrations/20200212135345_fix_indexes_on_table_campaign-participations.js index 018434ca8c5..3a47fea8234 100644 --- a/api/db/migrations/20200212135345_fix_indexes_on_table_campaign-participations.js +++ b/api/db/migrations/20200212135345_fix_indexes_on_table_campaign-participations.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'campaign-participations'; const CAMPAIGNID_COLUMN = 'campaignId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(CAMPAIGNID_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(CAMPAIGNID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200212135819_fix_indexes_on_table_certification-candidates.js b/api/db/migrations/20200212135819_fix_indexes_on_table_certification-candidates.js index 131012785e6..8e2f1ac7dfb 100644 --- a/api/db/migrations/20200212135819_fix_indexes_on_table_certification-candidates.js +++ b/api/db/migrations/20200212135819_fix_indexes_on_table_certification-candidates.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-candidates'; const SESSIONID_COLUMN = 'sessionId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(SESSIONID_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(SESSIONID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200212140202_fix_indexes_on_table_certification-center-memberships.js b/api/db/migrations/20200212140202_fix_indexes_on_table_certification-center-memberships.js index dbdfef61523..d50345ced9c 100644 --- a/api/db/migrations/20200212140202_fix_indexes_on_table_certification-center-memberships.js +++ b/api/db/migrations/20200212140202_fix_indexes_on_table_certification-center-memberships.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'certification-center-memberships'; const USERID_COLUMN = 'userId'; const CERTIFICATIONCENTERID_COLUMN = 'certificationCenterId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(USERID_COLUMN); table.dropIndex(CERTIFICATIONCENTERID_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(USERID_COLUMN); table.index(CERTIFICATIONCENTERID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200212140810_fix_indexes_on_table_competence-evaluations.js b/api/db/migrations/20200212140810_fix_indexes_on_table_competence-evaluations.js index 426c10be98e..5170910a206 100644 --- a/api/db/migrations/20200212140810_fix_indexes_on_table_competence-evaluations.js +++ b/api/db/migrations/20200212140810_fix_indexes_on_table_competence-evaluations.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'competence-evaluations'; const COMPETENCEID_COLUMN = 'competenceId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(COMPETENCEID_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(COMPETENCEID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200212141121_fix_indexes_on_table_knowledge-elements.js b/api/db/migrations/20200212141121_fix_indexes_on_table_knowledge-elements.js index 6602ef6c9f4..b2289e69531 100644 --- a/api/db/migrations/20200212141121_fix_indexes_on_table_knowledge-elements.js +++ b/api/db/migrations/20200212141121_fix_indexes_on_table_knowledge-elements.js @@ -4,7 +4,7 @@ const ANSWERID_COLUMN = 'answerId'; const ASSESSMENTID_COLUMN = 'assessmentId'; const COMPETENCEID_COLUMN = 'competenceId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(SKILLID_COLUMN); table.dropIndex(ANSWERID_COLUMN); @@ -13,7 +13,7 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(SKILLID_COLUMN); table.index(ANSWERID_COLUMN); @@ -21,3 +21,5 @@ exports.down = function (knex) { table.index(COMPETENCEID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200212141456_fix_indexes_on_table_memberships.js b/api/db/migrations/20200212141456_fix_indexes_on_table_memberships.js index 8785330b89c..3cc36cd4f63 100644 --- a/api/db/migrations/20200212141456_fix_indexes_on_table_memberships.js +++ b/api/db/migrations/20200212141456_fix_indexes_on_table_memberships.js @@ -4,7 +4,7 @@ const ORGANIZATIONID_COLUMN = 'organizationId'; const OLD_INDEX_USERID = 'organizations_accesses_userid_index'; const OLD_INDEX_ORGANIZATIONID = 'organizations_accesses_organizationid_index'; -exports.up = async function (knex) { +const up = async function (knex) { // eslint-disable-next-line knex/avoid-injections await knex.raw(`DROP INDEX IF EXISTS ${OLD_INDEX_USERID}`); // eslint-disable-next-line knex/avoid-injections @@ -14,10 +14,12 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(ORGANIZATIONID_COLUMN); table.index(USERID_COLUMN, OLD_INDEX_USERID); table.index(ORGANIZATIONID_COLUMN, OLD_INDEX_ORGANIZATIONID); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200212141646_fix_indexes_on_table_organizations.js b/api/db/migrations/20200212141646_fix_indexes_on_table_organizations.js index 28274cde893..b0650adfbf2 100644 --- a/api/db/migrations/20200212141646_fix_indexes_on_table_organizations.js +++ b/api/db/migrations/20200212141646_fix_indexes_on_table_organizations.js @@ -4,7 +4,7 @@ const PROVINCECODE_COLUMN = 'provinceCode'; const EXTERNALID_COLUMN = 'externalId'; const CODE_COLUMN = 'code'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(USERID_COLUMN); table.dropIndex(PROVINCECODE_COLUMN); @@ -13,7 +13,7 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(USERID_COLUMN); table.index(PROVINCECODE_COLUMN); @@ -21,3 +21,5 @@ exports.down = function (knex) { table.dropIndex(CODE_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200212142949_fix_indexes_on_table_sessions.js b/api/db/migrations/20200212142949_fix_indexes_on_table_sessions.js index fcf150313ca..5d00d016bf6 100644 --- a/api/db/migrations/20200212142949_fix_indexes_on_table_sessions.js +++ b/api/db/migrations/20200212142949_fix_indexes_on_table_sessions.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'sessions'; const ACCESSCODE_COLUMN = 'accessCode'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(ACCESSCODE_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(ACCESSCODE_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200212143352_fix_indexes_on_table_students.js b/api/db/migrations/20200212143352_fix_indexes_on_table_students.js index 767141da6f8..7fd2d7716de 100644 --- a/api/db/migrations/20200212143352_fix_indexes_on_table_students.js +++ b/api/db/migrations/20200212143352_fix_indexes_on_table_students.js @@ -3,7 +3,7 @@ const USERID_COLUMN = 'userId'; const ORGANIZATIONID_COLUMN = 'organizationId'; const NATIONALSTUDENTID_COLUMN = 'nationalStudentId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(NATIONALSTUDENTID_COLUMN); table.dropIndex(ORGANIZATIONID_COLUMN); @@ -13,7 +13,7 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(NATIONALSTUDENTID_COLUMN); table.index(ORGANIZATIONID_COLUMN); @@ -22,3 +22,5 @@ exports.down = function (knex) { table.dropUnique([ORGANIZATIONID_COLUMN, NATIONALSTUDENTID_COLUMN]); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200214151519_rename_session_status_started_to_created.js b/api/db/migrations/20200214151519_rename_session_status_started_to_created.js index 615eff783d0..2ff89cab0d1 100644 --- a/api/db/migrations/20200214151519_rename_session_status_started_to_created.js +++ b/api/db/migrations/20200214151519_rename_session_status_started_to_created.js @@ -2,10 +2,12 @@ const TABLE_NAME = 'sessions'; const OLD_STATUS = 'started'; const NEW_STATUS = 'created'; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME).where('status', '=', OLD_STATUS).update({ status: NEW_STATUS }); }; -exports.down = function (knex) { +const down = function (knex) { return knex(TABLE_NAME).where('status', '=', NEW_STATUS).update({ status: OLD_STATUS }); }; + +export { up, down }; diff --git a/api/db/migrations/20200217171312_create_badges_table.js b/api/db/migrations/20200217171312_create_badges_table.js index 9492f367fa2..0ebbbbbc8b4 100644 --- a/api/db/migrations/20200217171312_create_badges_table.js +++ b/api/db/migrations/20200217171312_create_badges_table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'badges'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (table) => { table.increments('id').primary(); table.string('altMessage').notNullable(); @@ -10,6 +10,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20200218114201_add_sendToPrescriber_column_in_session_table.js b/api/db/migrations/20200218114201_add_sendToPrescriber_column_in_session_table.js index ff0ddc92ccb..7ebb3717001 100644 --- a/api/db/migrations/20200218114201_add_sendToPrescriber_column_in_session_table.js +++ b/api/db/migrations/20200218114201_add_sendToPrescriber_column_in_session_table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'sessions'; const COLUMN_NAME = 'resultsSentToPrescriberAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dateTime(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200220145135_create_user_orga_settings.js b/api/db/migrations/20200220145135_create_user_orga_settings.js index 4e2e2e2b657..cc7ba07da5d 100644 --- a/api/db/migrations/20200220145135_create_user_orga_settings.js +++ b/api/db/migrations/20200220145135_create_user_orga_settings.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'user-orga-settings'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments('id').primary(); t.bigInteger('userId').references('users.id').index(); @@ -9,6 +9,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20200220145419_migrate_first_organization_join_to_user_orga_settings.js b/api/db/migrations/20200220145419_migrate_first_organization_join_to_user_orga_settings.js index 058f97b1b05..33e7f359276 100644 --- a/api/db/migrations/20200220145419_migrate_first_organization_join_to_user_orga_settings.js +++ b/api/db/migrations/20200220145419_migrate_first_organization_join_to_user_orga_settings.js @@ -1,9 +1,9 @@ -const { batch } = require('../batch-processing'); +import { batch } from '../batch-processing.js'; const TABLE_NAME_USER_ORGA_SETTINGS = 'user-orga-settings'; const TABLE_NAME_MEMBERSHIPS = 'memberships'; -exports.up = function (knex) { +const up = function (knex) { const subQuery = knex(TABLE_NAME_MEMBERSHIPS).min('id').groupBy('userId'); return knex(TABLE_NAME_MEMBERSHIPS) @@ -19,7 +19,7 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { const subQuery = knex(TABLE_NAME_MEMBERSHIPS).min('id').groupBy('userId'); return knex(TABLE_NAME_MEMBERSHIPS) @@ -34,3 +34,5 @@ exports.down = function (knex) { }); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200225130232_remove-user-id-in-organizations.js b/api/db/migrations/20200225130232_remove-user-id-in-organizations.js index fb54a5f5695..10922938aba 100644 --- a/api/db/migrations/20200225130232_remove-user-id-in-organizations.js +++ b/api/db/migrations/20200225130232_remove-user-id-in-organizations.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'userId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.integer(COLUMN_NAME).unsigned(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200225133240_remove-code-on-organizations.js b/api/db/migrations/20200225133240_remove-code-on-organizations.js index 8c42449d561..592319b8e12 100644 --- a/api/db/migrations/20200225133240_remove-code-on-organizations.js +++ b/api/db/migrations/20200225133240_remove-code-on-organizations.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'code'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.string(COLUMN_NAME, 6).default('').notNullable(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200225142247_add_column_certification-course-id_to_table_assessments.js b/api/db/migrations/20200225142247_add_column_certification-course-id_to_table_assessments.js index 3220f1f04fb..2148eac72b5 100644 --- a/api/db/migrations/20200225142247_add_column_certification-course-id_to_table_assessments.js +++ b/api/db/migrations/20200225142247_add_column_certification-course-id_to_table_assessments.js @@ -2,7 +2,7 @@ const TABLE_NAME = 'assessments'; const COLUMN_NAME = 'certificationCourseId'; const REFERENCE = 'certification-courses.id'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, (table) => { table.integer(COLUMN_NAME).unsigned().references(REFERENCE).index(); }); @@ -27,8 +27,10 @@ exports.up = async function (knex) { ); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200302104707_create_badge_acquisitions.js b/api/db/migrations/20200302104707_create_badge_acquisitions.js index 14480702fc2..2e3db50ef23 100644 --- a/api/db/migrations/20200302104707_create_badge_acquisitions.js +++ b/api/db/migrations/20200302104707_create_badge_acquisitions.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'badge-acquisitions'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (table) => { table.increments('id').primary(); table.dateTime('createdAt').notNullable().defaultTo(knex.fn.now()); @@ -9,6 +9,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20200303140224_add_columns_createdAt_and_updatedAt_to_user_orga_settings.js b/api/db/migrations/20200303140224_add_columns_createdAt_and_updatedAt_to_user_orga_settings.js index 2b2d11bbeb6..40bca5bb810 100644 --- a/api/db/migrations/20200303140224_add_columns_createdAt_and_updatedAt_to_user_orga_settings.js +++ b/api/db/migrations/20200303140224_add_columns_createdAt_and_updatedAt_to_user_orga_settings.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'user-orga-settings'; const CREATED_AT_COLUMN = 'createdAt'; const UPDATED_AT_COLUMN = 'updatedAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dateTime(CREATED_AT_COLUMN).notNullable().defaultTo(knex.fn.now()); table.dateTime(UPDATED_AT_COLUMN).notNullable().defaultTo(knex.fn.now()); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(UPDATED_AT_COLUMN); table.dropColumn(CREATED_AT_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200303153018_add-credit-column-to-organization.js b/api/db/migrations/20200303153018_add-credit-column-to-organization.js index c407c16345d..1f691ef28a1 100644 --- a/api/db/migrations/20200303153018_add-credit-column-to-organization.js +++ b/api/db/migrations/20200303153018_add-credit-column-to-organization.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'credit'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.integer(COLUMN_NAME).defaultTo(0); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200306143100_delete-snapshots-table.js b/api/db/migrations/20200306143100_delete-snapshots-table.js index f52bf469452..fd0acadb182 100644 --- a/api/db/migrations/20200306143100_delete-snapshots-table.js +++ b/api/db/migrations/20200306143100_delete-snapshots-table.js @@ -1,10 +1,10 @@ const TABLE_NAME = 'snapshots'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.string('studentCode'); @@ -18,3 +18,5 @@ exports.down = function (knex) { t.dateTime('updatedAt').notNullable().defaultTo(knex.fn.now()); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200317112058_add_unique_constraint_on_userid_certificationcourseid_table_assessments.js b/api/db/migrations/20200317112058_add_unique_constraint_on_userid_certificationcourseid_table_assessments.js index eac4f45d005..eabf9671cbe 100644 --- a/api/db/migrations/20200317112058_add_unique_constraint_on_userid_certificationcourseid_table_assessments.js +++ b/api/db/migrations/20200317112058_add_unique_constraint_on_userid_certificationcourseid_table_assessments.js @@ -2,7 +2,7 @@ const TABLE_NAME = 'assessments'; const COLUMN_USER_ID = 'userId'; const COLUMN_CERTIFICATION_COURSE_ID = 'certificationCourseId'; -exports.up = async (knex) => { +const up = async function (knex) { await knex.raw(` WITH ASSESSMENTS_BY_CERTIFICATION_COURSES AS ( SELECT "as"."id" as assessment_id, @@ -24,8 +24,10 @@ exports.up = async (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropUnique([COLUMN_USER_ID, COLUMN_CERTIFICATION_COURSE_ID]); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200317151424_create-badge-partner-competences.js b/api/db/migrations/20200317151424_create-badge-partner-competences.js index e46584da0bd..ccf8b9f2992 100644 --- a/api/db/migrations/20200317151424_create-badge-partner-competences.js +++ b/api/db/migrations/20200317151424_create-badge-partner-competences.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'badge-partner-competences'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (table) => { table.increments('id').primary(); table.string('name').notNullable(); @@ -10,6 +10,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20200320144239_rename_table_students_to_schooling-registrations.js b/api/db/migrations/20200320144239_rename_table_students_to_schooling-registrations.js index 88317d27f3d..2725e50f79a 100644 --- a/api/db/migrations/20200320144239_rename_table_students_to_schooling-registrations.js +++ b/api/db/migrations/20200320144239_rename_table_students_to_schooling-registrations.js @@ -1,10 +1,12 @@ const OLD_TABLE_NAME = 'students'; const NEW_TABLE_NAME = 'schooling-registrations'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.renameTable(OLD_TABLE_NAME, NEW_TABLE_NAME); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.renameTable(NEW_TABLE_NAME, OLD_TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20200320163042_add_functional_key_on_badges_table.js b/api/db/migrations/20200320163042_add_functional_key_on_badges_table.js index a46d46435c1..78ba17c72ee 100644 --- a/api/db/migrations/20200320163042_add_functional_key_on_badges_table.js +++ b/api/db/migrations/20200320163042_add_functional_key_on_badges_table.js @@ -1,7 +1,7 @@ const TABLE_NAME = 'badges'; const COLUMN_KEY = 'key'; -exports.up = async (knex) => { +const up = async function (knex) { await knex.schema.alterTable(TABLE_NAME, function (table) { table.text(COLUMN_KEY); }); @@ -11,8 +11,10 @@ exports.up = async (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_KEY); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200320170707_add-type-to-campaign.js b/api/db/migrations/20200320170707_add-type-to-campaign.js index 8278754db50..5c635e35791 100644 --- a/api/db/migrations/20200320170707_add-type-to-campaign.js +++ b/api/db/migrations/20200320170707_add-type-to-campaign.js @@ -1,7 +1,7 @@ const TABLE_NAME = 'campaigns'; const COLUMN_NAME = 'type'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema .table(TABLE_NAME, function (table) { table.string(COLUMN_NAME).notNullable().defaultTo(''); @@ -13,8 +13,10 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200320171110_add_column_shouldChangePassword_to_table_users.js b/api/db/migrations/20200320171110_add_column_shouldChangePassword_to_table_users.js index 2752bedeff9..09ab2d134e8 100644 --- a/api/db/migrations/20200320171110_add_column_shouldChangePassword_to_table_users.js +++ b/api/db/migrations/20200320171110_add_column_shouldChangePassword_to_table_users.js @@ -2,14 +2,16 @@ const TABLE_NAME = 'users'; const SHOULD_CHANGE_PASSWORD_COLUMN = 'shouldChangePassword'; const DEFAULT_VALUE = false; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(SHOULD_CHANGE_PASSWORD_COLUMN).notNullable().defaultTo(DEFAULT_VALUE); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(SHOULD_CHANGE_PASSWORD_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200324101353_add-can-collect-profiles-to-organization.js b/api/db/migrations/20200324101353_add-can-collect-profiles-to-organization.js index 30564875a4e..426ee1f7cad 100644 --- a/api/db/migrations/20200324101353_add-can-collect-profiles-to-organization.js +++ b/api/db/migrations/20200324101353_add-can-collect-profiles-to-organization.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'canCollectProfiles'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.boolean(COLUMN_NAME).notNullable().defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200324161149_create-user-tutorials.js b/api/db/migrations/20200324161149_create-user-tutorials.js index b9b9e3c46ef..1d8d1bd1967 100644 --- a/api/db/migrations/20200324161149_create-user-tutorials.js +++ b/api/db/migrations/20200324161149_create-user-tutorials.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'user_tutorials'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments('id').primary(); t.bigInteger('userId').index(); @@ -11,6 +11,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20200326163043_add-published-at-column-to-table-sessions.js b/api/db/migrations/20200326163043_add-published-at-column-to-table-sessions.js index bdaea4f5881..02ecdbb53f2 100644 --- a/api/db/migrations/20200326163043_add-published-at-column-to-table-sessions.js +++ b/api/db/migrations/20200326163043_add-published-at-column-to-table-sessions.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'sessions'; const COLUMN_NAME = 'publishedAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dateTime(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200327084158_drop_column_status_table_sessions.js b/api/db/migrations/20200327084158_drop_column_status_table_sessions.js index 0c107b95287..2c6699f2631 100644 --- a/api/db/migrations/20200327084158_drop_column_status_table_sessions.js +++ b/api/db/migrations/20200327084158_drop_column_status_table_sessions.js @@ -1,16 +1,18 @@ const TABLE_NAME = 'sessions'; const COLUMN_NAME = 'status'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, async (table) => { table.dropColumn(COLUMN_NAME); }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME).defaultTo('created'); }); await knex.raw('UPDATE "sessions" SET "status" = \'finalized\' WHERE "sessions"."finalizedAt" IS NOT NULL'); return knex.raw('UPDATE "sessions" SET "status" = \'processed\' WHERE "sessions"."publishedAt" IS NOT NULL'); }; + +export { up, down }; diff --git a/api/db/migrations/20200327110821_save_acquired_partner_certification_key_on_certif_course_table.js b/api/db/migrations/20200327110821_save_acquired_partner_certification_key_on_certif_course_table.js index 89fd36951ff..d603a574da7 100644 --- a/api/db/migrations/20200327110821_save_acquired_partner_certification_key_on_certif_course_table.js +++ b/api/db/migrations/20200327110821_save_acquired_partner_certification_key_on_certif_course_table.js @@ -1,12 +1,14 @@ const TABLE_NAME = 'certification-partner-acquisitions'; -exports.up = async (knex) => { +const up = async function (knex) { return knex.schema.createTable(TABLE_NAME, (table) => { table.integer('certificationCourseId').references('certification-courses.id').notNullable().index(); table.string('partnerKey').references('badges.key').notNullable(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20200327225551_add-column-assignedCertificationOfficerId-column-table-sessions.js b/api/db/migrations/20200327225551_add-column-assignedCertificationOfficerId-column-table-sessions.js index 72eb5582611..23416c820da 100644 --- a/api/db/migrations/20200327225551_add-column-assignedCertificationOfficerId-column-table-sessions.js +++ b/api/db/migrations/20200327225551_add-column-assignedCertificationOfficerId-column-table-sessions.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'sessions'; const COLUMN_NAME = 'assignedCertificationOfficerId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.integer(COLUMN_NAME).references('users.id'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200331131815_replace-campaign-type-TEST_GIVEN-by-ASSESSMENT.js b/api/db/migrations/20200331131815_replace-campaign-type-TEST_GIVEN-by-ASSESSMENT.js index 724efdbeeb3..09c2d2194e7 100644 --- a/api/db/migrations/20200331131815_replace-campaign-type-TEST_GIVEN-by-ASSESSMENT.js +++ b/api/db/migrations/20200331131815_replace-campaign-type-TEST_GIVEN-by-ASSESSMENT.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'campaigns'; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME).where('type', '=', 'TEST_GIVEN').update({ type: 'ASSESSMENT', }); }; -exports.down = function (knex) { +const down = function (knex) { return knex(TABLE_NAME).where('type', '=', 'ASSESSMENT').update({ type: 'TEST_GIVEN', }); }; + +export { up, down }; diff --git a/api/db/migrations/20200409104933_rename_associated-skill_into_associated-skill-name_table_certification-challenges.js b/api/db/migrations/20200409104933_rename_associated-skill_into_associated-skill-name_table_certification-challenges.js index 1247c61b66b..181fa714220 100644 --- a/api/db/migrations/20200409104933_rename_associated-skill_into_associated-skill-name_table_certification-challenges.js +++ b/api/db/migrations/20200409104933_rename_associated-skill_into_associated-skill-name_table_certification-challenges.js @@ -2,10 +2,12 @@ const TABLE_NAME = 'certification-challenges'; const OLD_COLUMN_NAME = 'associatedSkill'; const NEW_COLUMN_NAME = 'associatedSkillName'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (t) => t.renameColumn(OLD_COLUMN_NAME, NEW_COLUMN_NAME)); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (t) => t.renameColumn(NEW_COLUMN_NAME, OLD_COLUMN_NAME)); }; + +export { up, down }; diff --git a/api/db/migrations/20200414164040_create_tutorial-evaluations-table.js b/api/db/migrations/20200414164040_create_tutorial-evaluations-table.js index 367ccab3649..ca95f577937 100644 --- a/api/db/migrations/20200414164040_create_tutorial-evaluations-table.js +++ b/api/db/migrations/20200414164040_create_tutorial-evaluations-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'tutorial-evaluations'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments('id').primary(); t.bigInteger('userId').notNullable().index(); @@ -11,6 +11,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20200420120328_add_mustValidateTermsOfService_to_users.js b/api/db/migrations/20200420120328_add_mustValidateTermsOfService_to_users.js index 1331ae39d97..e93242f69b0 100644 --- a/api/db/migrations/20200420120328_add_mustValidateTermsOfService_to_users.js +++ b/api/db/migrations/20200420120328_add_mustValidateTermsOfService_to_users.js @@ -2,14 +2,16 @@ const TABLE_NAME = 'users'; const NEW_COLUMN = 'mustValidateTermsOfService'; const DEFAULT_VALUE = false; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(NEW_COLUMN).notNullable().defaultTo(DEFAULT_VALUE); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(NEW_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200503193240_add_lastTermsOfServiceValidatedAt_to_user.js b/api/db/migrations/20200503193240_add_lastTermsOfServiceValidatedAt_to_user.js index 785e209e1de..ecc8e0dbec5 100644 --- a/api/db/migrations/20200503193240_add_lastTermsOfServiceValidatedAt_to_user.js +++ b/api/db/migrations/20200503193240_add_lastTermsOfServiceValidatedAt_to_user.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'lastTermsOfServiceValidatedAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dateTime(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200505174655_create_badge-criteria_table.js b/api/db/migrations/20200505174655_create_badge-criteria_table.js index 97047a1fec3..cc0c81b6990 100644 --- a/api/db/migrations/20200505174655_create_badge-criteria_table.js +++ b/api/db/migrations/20200505174655_create_badge-criteria_table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'badge-criteria'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (table) => { table.increments('id').primary(); table.string('scope').notNullable(); @@ -9,6 +9,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20200509110115_update-associated-skill-id-column-certification-challenges-table.js b/api/db/migrations/20200509110115_update-associated-skill-id-column-certification-challenges-table.js index 8937d66d5ba..cae5a8ab74c 100644 --- a/api/db/migrations/20200509110115_update-associated-skill-id-column-certification-challenges-table.js +++ b/api/db/migrations/20200509110115_update-associated-skill-id-column-certification-challenges-table.js @@ -1,6 +1,6 @@ -const _ = require('lodash'); +import _ from 'lodash'; -exports.up = async function (knex) { +const up = async function (knex) { return knex.transaction(async (trx) => { const valuesTable = _.map(skills_at_2020_04_30, (skillId, skillName) => `('${skillId}', '${skillName}')`); const valuesString = _.join(valuesTable, ','); @@ -23,10 +23,12 @@ exports.up = async function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.raw('UPDATE ?? SET ?? = NULL', ['certification-challenges', 'associatedSkillId']); }; +export { up, down }; + // skillName -> md5() const skills_at_2020_04_30 = { '01f7ba2aff740a06e754b9f9dd9595e2': 'rec0J9OXaAj5v7w3r', diff --git a/api/db/migrations/20200515163806_add-column-createdat-updatedat-to-memberships.js b/api/db/migrations/20200515163806_add-column-createdat-updatedat-to-memberships.js index 7c1f632cf51..f00701ec52b 100644 --- a/api/db/migrations/20200515163806_add-column-createdat-updatedat-to-memberships.js +++ b/api/db/migrations/20200515163806_add-column-createdat-updatedat-to-memberships.js @@ -2,7 +2,7 @@ const TABLE_NAME = 'memberships'; const CREATED_AT_COLUMN = 'createdAt'; const UPDATED_AT_COLUMN = 'updatedAt'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, (table) => { table.dateTime(CREATED_AT_COLUMN); table.dateTime(UPDATED_AT_COLUMN); @@ -13,9 +13,11 @@ exports.up = async function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(UPDATED_AT_COLUMN); table.dropColumn(CREATED_AT_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200518173853_insert_badge_criteria.js b/api/db/migrations/20200518173853_insert_badge_criteria.js index f0a95d6c463..c9bda070177 100644 --- a/api/db/migrations/20200518173853_insert_badge_criteria.js +++ b/api/db/migrations/20200518173853_insert_badge_criteria.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'badge-criteria'; -exports.up = async function (knex) { +const up = async function (knex) { const badgeClea = await knex('badges').select('id').where('key', 'PIX_EMPLOI_CLEA'); if (badgeClea.length > 0) { await knex(TABLE_NAME).insert({ scope: 'CampaignParticipation', threshold: 85, badgeId: badgeClea[0].id }); @@ -8,9 +8,11 @@ exports.up = async function (knex) { } }; -exports.down = async function (knex) { +const down = async function (knex) { const badgeClea = await knex('badges').select('id').where('key', 'PIX_EMPLOI_CLEA'); if (badgeClea.length > 0) { await knex(TABLE_NAME).where('badgeId', badgeClea[0].id).delete(); } }; + +export { up, down }; diff --git a/api/db/migrations/20200522090553_add-competenceId-column-competence-marks-table.js b/api/db/migrations/20200522090553_add-competenceId-column-competence-marks-table.js index 0a0074e12dc..b3c383cda6c 100644 --- a/api/db/migrations/20200522090553_add-competenceId-column-competence-marks-table.js +++ b/api/db/migrations/20200522090553_add-competenceId-column-competence-marks-table.js @@ -1,7 +1,7 @@ const TABLE_NAME = 'competence-marks'; const COLUMN_NAME = 'competenceId'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME); }); @@ -66,8 +66,10 @@ exports.up = async function (knex) { ); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200528170928_add_certif_partner_acquisition_success_value.js b/api/db/migrations/20200528170928_add_certif_partner_acquisition_success_value.js index be6254f76b0..3a422a7b31b 100644 --- a/api/db/migrations/20200528170928_add_certif_partner_acquisition_success_value.js +++ b/api/db/migrations/20200528170928_add_certif_partner_acquisition_success_value.js @@ -1,7 +1,7 @@ const TABLE_NAME = 'certification-partner-acquisitions'; const COLUMN_NAME = 'acquired'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME); }); @@ -13,8 +13,10 @@ exports.up = async function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200604161113_rename-certification-partner.js b/api/db/migrations/20200604161113_rename-certification-partner.js index b8d37f5f26c..75487276e94 100644 --- a/api/db/migrations/20200604161113_rename-certification-partner.js +++ b/api/db/migrations/20200604161113_rename-certification-partner.js @@ -1,10 +1,12 @@ const OLD_TABLE_NAME = 'certification-partner-acquisitions'; const TABLE_NAME = 'partner-certifications'; -exports.up = async function (knex) { +const up = async function (knex) { return knex.schema.renameTable(OLD_TABLE_NAME, TABLE_NAME); }; -exports.down = async function (knex) { +const down = async function (knex) { return knex.schema.renameTable(TABLE_NAME, OLD_TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20200608170256_alter_table_badgePartnerCompetences_column_color_from_notNullable_to_nullable.js b/api/db/migrations/20200608170256_alter_table_badgePartnerCompetences_column_color_from_notNullable_to_nullable.js index 49dbb5d6b6e..d80fc9f4f08 100644 --- a/api/db/migrations/20200608170256_alter_table_badgePartnerCompetences_column_color_from_notNullable_to_nullable.js +++ b/api/db/migrations/20200608170256_alter_table_badgePartnerCompetences_column_color_from_notNullable_to_nullable.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'badge-partner-competences'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.string('color').nullable().alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.string('color').notNullable().alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200610153738_update-type-smart-placement-for-campaign.js b/api/db/migrations/20200610153738_update-type-smart-placement-for-campaign.js index b453fab79cc..8cc98228c33 100644 --- a/api/db/migrations/20200610153738_update-type-smart-placement-for-campaign.js +++ b/api/db/migrations/20200610153738_update-type-smart-placement-for-campaign.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'assessments'; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME) .where('type', 'SMART_PLACEMENT') .update({ type: 'CAMPAIGN', courseId: '[NOT USED] Campaign Assessment CourseId Not Used' }); }; -exports.down = function (knex) { +const down = function (knex) { return knex(TABLE_NAME) .where('type', 'CAMPAIGN') .update({ type: 'SMART_PLACEMENT', courseId: 'Smart Placement Tests CourseId Not Used' }); }; + +export { up, down }; diff --git a/api/db/migrations/20200612093847_add-column-disabledAt-to-memberships.js b/api/db/migrations/20200612093847_add-column-disabledAt-to-memberships.js index 78f196e2675..ce8dd45c9b6 100644 --- a/api/db/migrations/20200612093847_add-column-disabledAt-to-memberships.js +++ b/api/db/migrations/20200612093847_add-column-disabledAt-to-memberships.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'memberships'; const DISABLED_AT_COLUMN = 'disabledAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dateTime(DISABLED_AT_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(DISABLED_AT_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200617111042_add-column-title-to-badges.js b/api/db/migrations/20200617111042_add-column-title-to-badges.js index 87bb227fa63..8232f33ce0e 100644 --- a/api/db/migrations/20200617111042_add-column-title-to-badges.js +++ b/api/db/migrations/20200617111042_add-column-title-to-badges.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'badges'; const TITLE_COLUMN = 'title'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(TITLE_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(TITLE_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200623155650_add_updatedByUser_to_memberships.js b/api/db/migrations/20200623155650_add_updatedByUser_to_memberships.js index 559b4481efa..66b02c9f4f2 100644 --- a/api/db/migrations/20200623155650_add_updatedByUser_to_memberships.js +++ b/api/db/migrations/20200623155650_add_updatedByUser_to_memberships.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'memberships'; const COLUMN_NAME = 'updatedByUserId'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, (table) => { table.integer(COLUMN_NAME).unsigned().references('users.id'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200625113402_add-column-email-to-organizations.js b/api/db/migrations/20200625113402_add-column-email-to-organizations.js index 1b4ee09c808..7705306f88f 100644 --- a/api/db/migrations/20200625113402_add-column-email-to-organizations.js +++ b/api/db/migrations/20200625113402_add-column-email-to-organizations.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'email'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200702114943_add_check_on_memberships_role.js b/api/db/migrations/20200702114943_add_check_on_memberships_role.js index 1313c824124..3ef3d3e8675 100644 --- a/api/db/migrations/20200702114943_add_check_on_memberships_role.js +++ b/api/db/migrations/20200702114943_add_check_on_memberships_role.js @@ -1,12 +1,11 @@ -// Switching to raw SQL, because knex can't add CHECK constraint on existing column -// https://github.com/knex/knex/issues/1699 - -exports.up = function (knex) { +const up = function (knex) { return knex.raw( 'ALTER TABLE memberships ADD CONSTRAINT "memberships_organizationRole_check" CHECK ( "organizationRole" IN (\'ADMIN\', \'MEMBER\' ) )' ); }; -exports.down = function (knex) { +const down = function (knex) { return knex.raw('ALTER TABLE memberships DROP CONSTRAINT "memberships_organizationRole_check" '); }; + +export { up, down }; diff --git a/api/db/migrations/20200702135519_add-sup-columns-to-schooling-registrations.js b/api/db/migrations/20200702135519_add-sup-columns-to-schooling-registrations.js index 99b9be38235..72eae5589f8 100644 --- a/api/db/migrations/20200702135519_add-sup-columns-to-schooling-registrations.js +++ b/api/db/migrations/20200702135519_add-sup-columns-to-schooling-registrations.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'schooling-registrations'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('email'); table.string('studentNumber'); @@ -11,7 +11,7 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('email'); table.dropColumn('studentNumber'); @@ -21,3 +21,5 @@ exports.down = function (knex) { table.dropColumn('diploma'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200706144840_add_role_to_organization_invitation.js b/api/db/migrations/20200706144840_add_role_to_organization_invitation.js index 41ea271b1e8..62be0dcc3a8 100644 --- a/api/db/migrations/20200706144840_add_role_to_organization_invitation.js +++ b/api/db/migrations/20200706144840_add_role_to_organization_invitation.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organization-invitations'; const COLUMN_NAME = 'role'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.enu(COLUMN_NAME, ['MEMBER', 'ADMIN']); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200718085730_create-table-knowledge-element-snapshots.js b/api/db/migrations/20200718085730_create-table-knowledge-element-snapshots.js index afb52240864..7e42f0eb907 100644 --- a/api/db/migrations/20200718085730_create-table-knowledge-element-snapshots.js +++ b/api/db/migrations/20200718085730_create-table-knowledge-element-snapshots.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'knowledge-element-snapshots'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (table) => { table.increments('id').primary(); table.integer('userId').notNullable(); @@ -10,6 +10,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20200721180935_add_nationalStudentId_index_to_schooling-registrations_table.js b/api/db/migrations/20200721180935_add_nationalStudentId_index_to_schooling-registrations_table.js index 0c5431c1559..70b64e348cf 100644 --- a/api/db/migrations/20200721180935_add_nationalStudentId_index_to_schooling-registrations_table.js +++ b/api/db/migrations/20200721180935_add_nationalStudentId_index_to_schooling-registrations_table.js @@ -1,9 +1,11 @@ -exports.up = (knex) => { +const up = function (knex) { return knex.raw( 'CREATE INDEX "schooling-registrations_nationalstudentid_index" ON "schooling-registrations" ("nationalStudentId");' ); }; -exports.down = (knex) => { +const down = function (knex) { return knex.raw('DROP INDEX "schooling-registrations_nationalstudentid_index";'); }; + +export { up, down }; diff --git a/api/db/migrations/20200722120645_add-uniqu-constraint-for-schooling-registrations-on-student-number-and-organization-id.js b/api/db/migrations/20200722120645_add-uniqu-constraint-for-schooling-registrations-on-student-number-and-organization-id.js index cf84521d018..a00d251b4af 100644 --- a/api/db/migrations/20200722120645_add-uniqu-constraint-for-schooling-registrations-on-student-number-and-organization-id.js +++ b/api/db/migrations/20200722120645_add-uniqu-constraint-for-schooling-registrations-on-student-number-and-organization-id.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'schooling-registrations'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.unique(['studentNumber', 'organizationId']); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropUnique(['studentNumber', 'organizationId']); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200724115030_replace-knowledge-element-snapshots-index-by-unique-index-on-userId-and-snappedAt.js b/api/db/migrations/20200724115030_replace-knowledge-element-snapshots-index-by-unique-index-on-userId-and-snappedAt.js index b27cd7d8338..2b8f2ee955d 100644 --- a/api/db/migrations/20200724115030_replace-knowledge-element-snapshots-index-by-unique-index-on-userId-and-snappedAt.js +++ b/api/db/migrations/20200724115030_replace-knowledge-element-snapshots-index-by-unique-index-on-userId-and-snappedAt.js @@ -1,15 +1,17 @@ const TABLE_NAME = 'knowledge-element-snapshots'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex('userId'); table.unique(['userId', 'snappedAt']); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index('userId'); table.dropUnique(['userId', 'snappedAt']); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200731170630_add-certificationCourse-verifyCode-column.js b/api/db/migrations/20200731170630_add-certificationCourse-verifyCode-column.js index dd40ba2cbde..8736dbceb06 100644 --- a/api/db/migrations/20200731170630_add-certificationCourse-verifyCode-column.js +++ b/api/db/migrations/20200731170630_add-certificationCourse-verifyCode-column.js @@ -1,7 +1,7 @@ const TABLE_NAME = 'certification-courses'; const COLUMN_NAME = 'verificationCode'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME); }); @@ -11,9 +11,11 @@ exports.up = async function (knex) { ]); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.raw('DROP INDEX index_certification_courses_upper_verification_code'); await knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200803144114_create-stages-table.js b/api/db/migrations/20200803144114_create-stages-table.js index e9c99746e7e..c06d365d13f 100644 --- a/api/db/migrations/20200803144114_create-stages-table.js +++ b/api/db/migrations/20200803144114_create-stages-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'stages'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments('id').primary(); t.integer('targetProfileId').notNullable().references('target-profiles.id').index(); @@ -12,6 +12,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20200813154124_add-column-imageUrl-to-target-profiles.js b/api/db/migrations/20200813154124_add-column-imageUrl-to-target-profiles.js index 43a0c09a439..41c561c4f40 100644 --- a/api/db/migrations/20200813154124_add-column-imageUrl-to-target-profiles.js +++ b/api/db/migrations/20200813154124_add-column-imageUrl-to-target-profiles.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'target-profiles'; const COLUMN_NAME = 'imageUrl'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME).defaultTo(null); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200814135754_drop-redundant-index-table-tutorial-evaluations-on-column-user-id.js b/api/db/migrations/20200814135754_drop-redundant-index-table-tutorial-evaluations-on-column-user-id.js index 8d37e3bdbf1..d68c063c63e 100644 --- a/api/db/migrations/20200814135754_drop-redundant-index-table-tutorial-evaluations-on-column-user-id.js +++ b/api/db/migrations/20200814135754_drop-redundant-index-table-tutorial-evaluations-on-column-user-id.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'tutorial-evaluations'; const USERID_COLUMN = 'userId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(USERID_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(USERID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200814140251_drop-not-need-index-table-tutorial-evaluations-on-column-tutorial-id.js b/api/db/migrations/20200814140251_drop-not-need-index-table-tutorial-evaluations-on-column-tutorial-id.js index 892312918ee..1b45ff833f3 100644 --- a/api/db/migrations/20200814140251_drop-not-need-index-table-tutorial-evaluations-on-column-tutorial-id.js +++ b/api/db/migrations/20200814140251_drop-not-need-index-table-tutorial-evaluations-on-column-tutorial-id.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'tutorial-evaluations'; const TUTORIALID_COLUMN = 'tutorialId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(TUTORIALID_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(TUTORIALID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200814141138_drop-unused-index-on-user-id-table-certification-candidates.js b/api/db/migrations/20200814141138_drop-unused-index-on-user-id-table-certification-candidates.js index 88cbfd2cae6..7f9837f9272 100644 --- a/api/db/migrations/20200814141138_drop-unused-index-on-user-id-table-certification-candidates.js +++ b/api/db/migrations/20200814141138_drop-unused-index-on-user-id-table-certification-candidates.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-candidates'; const USERID_COLUMN = 'userId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(USERID_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(USERID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200814142127_drop-unused-index-on-course-id-table-assessments.js b/api/db/migrations/20200814142127_drop-unused-index-on-course-id-table-assessments.js index f03f36c6382..89667c2dd4b 100644 --- a/api/db/migrations/20200814142127_drop-unused-index-on-course-id-table-assessments.js +++ b/api/db/migrations/20200814142127_drop-unused-index-on-course-id-table-assessments.js @@ -1,7 +1,9 @@ -exports.up = (knex) => { +const up = function (knex) { return knex.raw('DROP INDEX IF EXISTS "assessment_courseid_index";'); }; -exports.down = (knex) => { +const down = function (knex) { return knex.raw('CREATE INDEX "assessment_courseid_index" ON assessments ("courseId");'); }; + +export { up, down }; diff --git a/api/db/migrations/20200814142831_drop-redundant-index-table-user-tutorials-on-column-user-id.js b/api/db/migrations/20200814142831_drop-redundant-index-table-user-tutorials-on-column-user-id.js index dfa3a2ae773..d7b3ea874a4 100644 --- a/api/db/migrations/20200814142831_drop-redundant-index-table-user-tutorials-on-column-user-id.js +++ b/api/db/migrations/20200814142831_drop-redundant-index-table-user-tutorials-on-column-user-id.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'user_tutorials'; const USERID_COLUMN = 'userId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(USERID_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(USERID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200814142948_drop-not-needed-index-table-user-tutorials-on-column-tutorial-id.js b/api/db/migrations/20200814142948_drop-not-needed-index-table-user-tutorials-on-column-tutorial-id.js index ac7973accdc..d9236c56851 100644 --- a/api/db/migrations/20200814142948_drop-not-needed-index-table-user-tutorials-on-column-tutorial-id.js +++ b/api/db/migrations/20200814142948_drop-not-needed-index-table-user-tutorials-on-column-tutorial-id.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'user_tutorials'; const TUTORIALID_COLUMN = 'tutorialId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(TUTORIALID_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(TUTORIALID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200814144054_drop-not-needed-index-table-feedbacks-on-column-assessment-id.js b/api/db/migrations/20200814144054_drop-not-needed-index-table-feedbacks-on-column-assessment-id.js index ee6373068cb..40c56b913ae 100644 --- a/api/db/migrations/20200814144054_drop-not-needed-index-table-feedbacks-on-column-assessment-id.js +++ b/api/db/migrations/20200814144054_drop-not-needed-index-table-feedbacks-on-column-assessment-id.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'feedbacks'; const ASSESSMENTID_COLUMN = 'assessmentId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(ASSESSMENTID_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(ASSESSMENTID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200814144606_drop-not-needed-index-table-assessments-on-column-type.js b/api/db/migrations/20200814144606_drop-not-needed-index-table-assessments-on-column-type.js index 3abc5741322..06e59c6be35 100644 --- a/api/db/migrations/20200814144606_drop-not-needed-index-table-assessments-on-column-type.js +++ b/api/db/migrations/20200814144606_drop-not-needed-index-table-assessments-on-column-type.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'assessments'; const TYPE_COLUMN = 'type'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(TYPE_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(TYPE_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200814144712_drop-not-needed-index-table-assessments-on-column-state.js b/api/db/migrations/20200814144712_drop-not-needed-index-table-assessments-on-column-state.js index b6365886a7f..6e335d0ebc9 100644 --- a/api/db/migrations/20200814144712_drop-not-needed-index-table-assessments-on-column-state.js +++ b/api/db/migrations/20200814144712_drop-not-needed-index-table-assessments-on-column-state.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'assessments'; const TYPE_COLUMN = 'state'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(TYPE_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(TYPE_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200814144752_drop-not-needed-index-table-assessments-on-column-competence-id.js b/api/db/migrations/20200814144752_drop-not-needed-index-table-assessments-on-column-competence-id.js index 7787c7065e7..f1e5780fca5 100644 --- a/api/db/migrations/20200814144752_drop-not-needed-index-table-assessments-on-column-competence-id.js +++ b/api/db/migrations/20200814144752_drop-not-needed-index-table-assessments-on-column-competence-id.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'assessments'; const COMPETENCEID_COLUMN = 'competenceId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(COMPETENCEID_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(COMPETENCEID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200814160658_add-column-additional-to-schooling-registration.js b/api/db/migrations/20200814160658_add-column-additional-to-schooling-registration.js index 7aa7435e0d7..425e6a449f9 100644 --- a/api/db/migrations/20200814160658_add-column-additional-to-schooling-registration.js +++ b/api/db/migrations/20200814160658_add-column-additional-to-schooling-registration.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'schooling-registrations'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean('isSupernumerary'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('isSupernumerary'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200814175528_add_notnull-constraint-to-schooling-registration-organization-id.js b/api/db/migrations/20200814175528_add_notnull-constraint-to-schooling-registration-organization-id.js index d1f5ed6bb27..81f76ac141a 100644 --- a/api/db/migrations/20200814175528_add_notnull-constraint-to-schooling-registration-organization-id.js +++ b/api/db/migrations/20200814175528_add_notnull-constraint-to-schooling-registration-organization-id.js @@ -1,17 +1,9 @@ -// Switching to raw SQL, because knex can't NOT NULL constraint on existing column -// exports.up = function(knex) { -// return knex.schema -// .alterTable(TABLE_NAME, (table) => { -// table.string(COLUMN_NAME).notNullable().alter(); -// }); -// }; -// migration failed with error: alter table "schooling-registrations" alter column "organizationId" type varchar(255) using ("organizationId"::varchar(255)) - -// foreign key constraint "students_organizationid_foreign" cannot be implemented - -exports.up = function (knex) { +const up = function (knex) { return knex.raw('ALTER TABLE "schooling-registrations" ALTER COLUMN "organizationId" SET NOT NULL;'); }; -exports.down = function (knex) { +const down = function (knex) { return knex.raw('ALTER TABLE "schooling-registrations" ALTER COLUMN "organizationId" DROP NOT NULL;'); }; + +export { up, down }; diff --git a/api/db/migrations/20200919165145_alter-table-campaigns-set-column-organizationId-not-nullable.js b/api/db/migrations/20200919165145_alter-table-campaigns-set-column-organizationId-not-nullable.js index c1b6e238009..9a8204929b6 100644 --- a/api/db/migrations/20200919165145_alter-table-campaigns-set-column-organizationId-not-nullable.js +++ b/api/db/migrations/20200919165145_alter-table-campaigns-set-column-organizationId-not-nullable.js @@ -1,10 +1,12 @@ const TABLE = 'campaigns'; const ORGANIZATION_ID_COLUMN = 'organizationId'; -exports.up = function (knex) { +const up = function (knex) { return knex.raw('ALTER TABLE ?? ALTER COLUMN ?? SET NOT NULL', [TABLE, ORGANIZATION_ID_COLUMN]); }; -exports.down = function (knex) { +const down = function (knex) { return knex.raw('ALTER TABLE ?? ALTER COLUMN ?? DROP NOT NULL', [TABLE, ORGANIZATION_ID_COLUMN]); }; + +export { up, down }; diff --git a/api/db/migrations/20200921174050_add-unique-constraint-for-schooling-registrations-on-student-number-and-organization-id-and-not-supernumerary.js b/api/db/migrations/20200921174050_add-unique-constraint-for-schooling-registrations-on-student-number-and-organization-id-and-not-supernumerary.js index 9bb01077ad8..7bfcf4958d6 100644 --- a/api/db/migrations/20200921174050_add-unique-constraint-for-schooling-registrations-on-student-number-and-organization-id-and-not-supernumerary.js +++ b/api/db/migrations/20200921174050_add-unique-constraint-for-schooling-registrations-on-student-number-and-organization-id-and-not-supernumerary.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'schooling-registrations'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw( 'CREATE INDEX "organizationid_studentnumber_index" ON "schooling-registrations" ("organizationId", "studentNumber");' ); @@ -10,7 +10,7 @@ exports.up = async function (knex) { return knex.schema.table(TABLE_NAME, (table) => table.dropUnique(['studentNumber', 'organizationId'])); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, (table) => table.unique(['studentNumber', 'organizationId'])); await knex.raw( 'DROP INDEX "organizationid_studentnumber_index" ON "schooling-registrations" ("organizationId", "studentNumber");' @@ -19,3 +19,5 @@ exports.down = async function (knex) { 'DROP UNIQUE INDEX "organizationid_studentnumber_notsupernumerary_index" ON "schooling-registrations" ("organizationId", "studentNumber") WHERE "isSupernumerary" IS FALSE;' ); }; + +export { up, down }; diff --git a/api/db/migrations/20200928163952_add-result-recipient-email-column-certification-candidates.js b/api/db/migrations/20200928163952_add-result-recipient-email-column-certification-candidates.js index e1500ce08ac..cc959c57549 100644 --- a/api/db/migrations/20200928163952_add-result-recipient-email-column-certification-candidates.js +++ b/api/db/migrations/20200928163952_add-result-recipient-email-column-certification-candidates.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-candidates'; const RESULT_RECIPIENT_EMAIL = 'resultRecipientEmail'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(RESULT_RECIPIENT_EMAIL, 500); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(RESULT_RECIPIENT_EMAIL); }); }; + +export { up, down }; diff --git a/api/db/migrations/20200929142112_update-constraint-memberships_userid_organizationid_unique.js b/api/db/migrations/20200929142112_update-constraint-memberships_userid_organizationid_unique.js index 71eff7c7d96..ee6410141c3 100644 --- a/api/db/migrations/20200929142112_update-constraint-memberships_userid_organizationid_unique.js +++ b/api/db/migrations/20200929142112_update-constraint-memberships_userid_organizationid_unique.js @@ -4,7 +4,7 @@ const ORGANIZATIONID_COLUMN = 'organizationId'; const DISABLEDAT_COLUMN = 'disabledAt'; const NEW_CONSTRAINT_NAME = 'memberships_userid_organizationid_disabledAt_unique'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropUnique([USERID_COLUMN, ORGANIZATIONID_COLUMN]); }); @@ -14,9 +14,11 @@ exports.up = async function (knex) { ); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropUnique(null, NEW_CONSTRAINT_NAME); table.unique([USERID_COLUMN, ORGANIZATIONID_COLUMN]); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201001165441_create-help-external-id-in-campaigns.js b/api/db/migrations/20201001165441_create-help-external-id-in-campaigns.js index d9ccfc52591..fa2c58b1ba9 100644 --- a/api/db/migrations/20201001165441_create-help-external-id-in-campaigns.js +++ b/api/db/migrations/20201001165441_create-help-external-id-in-campaigns.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'campaigns'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.text('externalIdHelpImageUrl'); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('externalIdHelpImageUrl'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201006140921_create_organization_tags.js b/api/db/migrations/20201006140921_create_organization_tags.js index 867a3eacb2e..955122a1b69 100644 --- a/api/db/migrations/20201006140921_create_organization_tags.js +++ b/api/db/migrations/20201006140921_create_organization_tags.js @@ -1,7 +1,7 @@ const TAGS_TABLE_NAME = 'tags'; const ORGANIZATION_TAGS_TABLE_NAME = 'organization-tags'; -exports.up = async (knex) => { +const up = async function (knex) { await knex.schema.createTable(TAGS_TABLE_NAME, (t) => { t.increments().primary(); t.string('name').notNullable().unique(); @@ -19,7 +19,9 @@ exports.up = async (knex) => { }); }; -exports.down = async (knex) => { +const down = async function (knex) { await knex.schema.dropTable(ORGANIZATION_TAGS_TABLE_NAME); return knex.schema.dropTable(TAGS_TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20201013093514_create-alternative-text-to-external-id-help-image.js b/api/db/migrations/20201013093514_create-alternative-text-to-external-id-help-image.js index f151ab77194..beb69418434 100644 --- a/api/db/migrations/20201013093514_create-alternative-text-to-external-id-help-image.js +++ b/api/db/migrations/20201013093514_create-alternative-text-to-external-id-help-image.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'campaigns'; const TITLE_COLUMN = 'alternativeTextToExternalIdHelpImage'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.text(TITLE_COLUMN); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(TITLE_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201026162616_add-schooling-registration-id-column-to-certification-candidate-table.js b/api/db/migrations/20201026162616_add-schooling-registration-id-column-to-certification-candidate-table.js index a639d0309f7..d4a995ef122 100644 --- a/api/db/migrations/20201026162616_add-schooling-registration-id-column-to-certification-candidate-table.js +++ b/api/db/migrations/20201026162616_add-schooling-registration-id-column-to-certification-candidate-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-candidates'; const COLUMN_NAME = 'schoolingRegistrationId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, async (table) => { table.integer(COLUMN_NAME).references('schooling-registrations.id'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201027144304_add_nationalApprenticeId_to_schooling-registrations.js b/api/db/migrations/20201027144304_add_nationalApprenticeId_to_schooling-registrations.js index f02c55b599a..5cfcfbb07c2 100644 --- a/api/db/migrations/20201027144304_add_nationalApprenticeId_to_schooling-registrations.js +++ b/api/db/migrations/20201027144304_add_nationalApprenticeId_to_schooling-registrations.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'schooling-registrations'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.string('nationalApprenticeId'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('nationalApprenticeId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201027154028_add_id_identite_externe_to_user.js b/api/db/migrations/20201027154028_add_id_identite_externe_to_user.js index 11f242e8ac6..1f393cb2c02 100644 --- a/api/db/migrations/20201027154028_add_id_identite_externe_to_user.js +++ b/api/db/migrations/20201027154028_add_id_identite_externe_to_user.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'externalIdentityId'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201028134814_create_table_authentication_methods.js b/api/db/migrations/20201028134814_create_table_authentication_methods.js index cf36944ec41..77549c1642a 100644 --- a/api/db/migrations/20201028134814_create_table_authentication_methods.js +++ b/api/db/migrations/20201028134814_create_table_authentication_methods.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'authentication-methods'; -exports.up = async (knex) => { +const up = async function (knex) { await knex.schema.createTable(TABLE_NAME, (t) => { t.increments('id').primary(); t.integer('userId').references('users.id').index(); @@ -19,6 +19,8 @@ exports.up = async (knex) => { ); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20201029134518_add-unique-constraint-organizationid-targetprofileid-on-target-profile-shares.js b/api/db/migrations/20201029134518_add-unique-constraint-organizationid-targetprofileid-on-target-profile-shares.js index 2d374a3c0c6..74712546783 100644 --- a/api/db/migrations/20201029134518_add-unique-constraint-organizationid-targetprofileid-on-target-profile-shares.js +++ b/api/db/migrations/20201029134518_add-unique-constraint-organizationid-targetprofileid-on-target-profile-shares.js @@ -1,4 +1,4 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex .with('all_target_profile_shares_ranked', (qb) => { qb.select([ @@ -18,6 +18,8 @@ exports.up = async function (knex) { return knex.schema.table('target-profile-shares', (table) => table.unique(['organizationId', 'targetProfileId'])); }; -exports.down = async function (knex) { +const down = async function (knex) { return knex.schema.table('target-profile-shares', (table) => table.dropUnique(['organizationId', 'targetProfileId'])); }; + +export { up, down }; diff --git a/api/db/migrations/20201106093514_add_unicity_contraint_schooling_registration_on_apprenticeId_and_organizationId.js b/api/db/migrations/20201106093514_add_unicity_contraint_schooling_registration_on_apprenticeId_and_organizationId.js index 1081233d65c..ba2c36949c5 100644 --- a/api/db/migrations/20201106093514_add_unicity_contraint_schooling_registration_on_apprenticeId_and_organizationId.js +++ b/api/db/migrations/20201106093514_add_unicity_contraint_schooling_registration_on_apprenticeId_and_organizationId.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'schooling-registrations'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.unique(['organizationId', 'nationalApprenticeId']); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropUnique(['organizationId', 'nationalApprenticeId']); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201106114017_add-lang-column-for-user.js b/api/db/migrations/20201106114017_add-lang-column-for-user.js index aa522cc2977..33855c231d7 100644 --- a/api/db/migrations/20201106114017_add-lang-column-for-user.js +++ b/api/db/migrations/20201106114017_add-lang-column-for-user.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'lang'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, async (table) => { table.string(COLUMN_NAME).notNullable().defaultTo('fr'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201113105430_migrate-password-and-shouldChangePassword-to-authentication-methods.js b/api/db/migrations/20201113105430_migrate-password-and-shouldChangePassword-to-authentication-methods.js index bdd2c12219d..e6d5611ee18 100644 --- a/api/db/migrations/20201113105430_migrate-password-and-shouldChangePassword-to-authentication-methods.js +++ b/api/db/migrations/20201113105430_migrate-password-and-shouldChangePassword-to-authentication-methods.js @@ -1,4 +1,4 @@ -exports.up = async (knex) => { +const up = async function (knex) { // eslint-disable-next-line knex/avoid-injections return knex.raw( 'INSERT INTO "authentication-methods" ("userId", "identityProvider", "authenticationComplement") ' + @@ -9,7 +9,7 @@ exports.up = async (knex) => { ); }; -exports.down = async (knex) => { +const down = async function (knex) { const sqlRequest = 'UPDATE users ' + 'SET password = subquery.password, ' + @@ -29,3 +29,5 @@ exports.down = async (knex) => { return knex.raw('DELETE FROM "authentication-methods" WHERE "identityProvider" = \'PIX\';'); }; + +export { up, down }; diff --git a/api/db/migrations/20201117143916_update-stages-message-column-string-to-text.js b/api/db/migrations/20201117143916_update-stages-message-column-string-to-text.js index 856c930cd59..b895f92b443 100644 --- a/api/db/migrations/20201117143916_update-stages-message-column-string-to-text.js +++ b/api/db/migrations/20201117143916_update-stages-message-column-string-to-text.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'stages'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.text('message').alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.string('message').alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201117144053_update-badges-message-column-string-to-text.js b/api/db/migrations/20201117144053_update-badges-message-column-string-to-text.js index fa5eca286d0..b2bcca367a6 100644 --- a/api/db/migrations/20201117144053_update-badges-message-column-string-to-text.js +++ b/api/db/migrations/20201117144053_update-badges-message-column-string-to-text.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'badges'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.text('message').alter(); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (table) { table.string('message').alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201119145715_drop_column_external_identity_id_from_users.js b/api/db/migrations/20201119145715_drop_column_external_identity_id_from_users.js index f724ce97212..ff8195e1636 100644 --- a/api/db/migrations/20201119145715_drop_column_external_identity_id_from_users.js +++ b/api/db/migrations/20201119145715_drop_column_external_identity_id_from_users.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'externalIdentityId'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201125103011_migrate-samlid-to-authentication-methods.js b/api/db/migrations/20201125103011_migrate-samlid-to-authentication-methods.js index 34618599dcc..1c0630fe1e1 100644 --- a/api/db/migrations/20201125103011_migrate-samlid-to-authentication-methods.js +++ b/api/db/migrations/20201125103011_migrate-samlid-to-authentication-methods.js @@ -1,6 +1,6 @@ -const AuthenticationMethod = require('../../lib/domain/models/AuthenticationMethod'); +import { AuthenticationMethod } from '../../lib/domain/models/AuthenticationMethod.js'; -exports.up = function (knex) { +const up = function (knex) { // eslint-disable-next-line knex/avoid-injections return knex.raw( 'INSERT INTO "authentication-methods"("userId", "externalIdentifier", "identityProvider") ' + @@ -8,7 +8,7 @@ exports.up = function (knex) { ); }; -exports.down = async function (knex) { +const down = async function (knex) { // eslint-disable-next-line knex/avoid-injections await knex.raw( 'UPDATE users SET "samlId" = ' + @@ -19,3 +19,5 @@ exports.down = async function (knex) { .where({ identityProvider: AuthenticationMethod.identityProviders.GAR }) .delete(); }; + +export { up, down }; diff --git a/api/db/migrations/20201126101242_create-certification-issue-reports-table.js b/api/db/migrations/20201126101242_create-certification-issue-reports-table.js index f289214196b..c33ab02084a 100644 --- a/api/db/migrations/20201126101242_create-certification-issue-reports-table.js +++ b/api/db/migrations/20201126101242_create-certification-issue-reports-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'certification-issue-reports'; -exports.up = async (knex) => { +const up = async function (knex) { await knex.schema.createTable(TABLE_NAME, (t) => { t.increments('id').primary(); t.integer('certificationCourseId').references('certification-courses.id').index(); @@ -11,6 +11,8 @@ exports.up = async (knex) => { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20201126103437_migrate-examinerComment-to-certification-issue-reports.js b/api/db/migrations/20201126103437_migrate-examinerComment-to-certification-issue-reports.js index 7ee50f13175..2ed318fbe0f 100644 --- a/api/db/migrations/20201126103437_migrate-examinerComment-to-certification-issue-reports.js +++ b/api/db/migrations/20201126103437_migrate-examinerComment-to-certification-issue-reports.js @@ -1,8 +1,9 @@ -const { CertificationIssueReportCategories } = require('../../lib/domain/models/CertificationIssueReportCategory'); +import { CertificationIssueReportCategory } from '../../lib/domain/models/CertificationIssueReportCategory.js'; + const CERTIFICATION_COURSES = 'certification-courses'; const CERTIFICATION_ISSUE_REPORTS = 'certification-issue-reports'; -exports.up = async (knex) => { +const up = async function (knex) { const certificationCoursesWithExaminerComment = await knex(CERTIFICATION_COURSES) .select('id', 'examinerComment') .whereNotNull('examinerComment'); @@ -11,14 +12,14 @@ exports.up = async (knex) => { return { certificationCourseId: id, description: examinerComment, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, }; }); return knex.batchInsert(CERTIFICATION_ISSUE_REPORTS, reportsToInsert); }; -exports.down = async (knex) => { +const down = async function (knex) { const certificationCoursesWithExaminerComment = await knex(CERTIFICATION_COURSES) .select('id') .whereNotNull('examinerComment'); @@ -27,3 +28,5 @@ exports.down = async (knex) => { return knex(CERTIFICATION_ISSUE_REPORTS).whereIn('certificationCourseId', idsToDelete).delete(); }; + +export { up, down }; diff --git a/api/db/migrations/20201201151026_create-pole-emploi-sendings-table.js b/api/db/migrations/20201201151026_create-pole-emploi-sendings-table.js index 2ed1fea018f..0a7fd6585d1 100644 --- a/api/db/migrations/20201201151026_create-pole-emploi-sendings-table.js +++ b/api/db/migrations/20201201151026_create-pole-emploi-sendings-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'pole-emploi-sendings'; -exports.up = async (knex) => { +const up = async function (knex) { await knex.schema.createTable(TABLE_NAME, (t) => { t.increments('id').primary(); t.integer('campaignParticipationId').references('campaign-participations.id').index(); @@ -12,6 +12,8 @@ exports.up = async (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20201215145328_add-column-max-reachable-level-certification-course.js b/api/db/migrations/20201215145328_add-column-max-reachable-level-certification-course.js index 609e0eabdb3..cc6464b99b6 100644 --- a/api/db/migrations/20201215145328_add-column-max-reachable-level-certification-course.js +++ b/api/db/migrations/20201215145328_add-column-max-reachable-level-certification-course.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-courses'; const COLUMN_NAME = 'maxReachableLevelOnCertificationDate'; -exports.up = async (knex) => { +const up = async function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.integer(COLUMN_NAME).notNullable().defaultTo(5); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201215163843_add_column_has-seen-new-level-info_to_users.js b/api/db/migrations/20201215163843_add_column_has-seen-new-level-info_to_users.js index dcfc8cca9a0..bdc7e845cd8 100644 --- a/api/db/migrations/20201215163843_add_column_has-seen-new-level-info_to_users.js +++ b/api/db/migrations/20201215163843_add_column_has-seen-new-level-info_to_users.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'hasSeenNewLevelInfo'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201217144235_add-subcategory-column-to-certif-issue-report.js b/api/db/migrations/20201217144235_add-subcategory-column-to-certif-issue-report.js index b7823c17cd3..526e6774ce7 100644 --- a/api/db/migrations/20201217144235_add-subcategory-column-to-certif-issue-report.js +++ b/api/db/migrations/20201217144235_add-subcategory-column-to-certif-issue-report.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-issue-reports'; const COLUMN_NAME = 'subcategory'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.string(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20201222163514_add-question-number-column-to-certification-issue-reports-table.js b/api/db/migrations/20201222163514_add-question-number-column-to-certification-issue-reports-table.js index fb47efd1270..90bdb2e5428 100644 --- a/api/db/migrations/20201222163514_add-question-number-column-to-certification-issue-reports-table.js +++ b/api/db/migrations/20201222163514_add-question-number-column-to-certification-issue-reports-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-issue-reports'; const COLUMN_NAME = 'questionNumber'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.integer(COLUMN_NAME).unsigned(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210111154804_rename-target-profile-organizationid-to-target-profile-owner-organization-id.js b/api/db/migrations/20210111154804_rename-target-profile-organizationid-to-target-profile-owner-organization-id.js index 0ea2bf66587..2e5e62f3e10 100644 --- a/api/db/migrations/20210111154804_rename-target-profile-organizationid-to-target-profile-owner-organization-id.js +++ b/api/db/migrations/20210111154804_rename-target-profile-organizationid-to-target-profile-owner-organization-id.js @@ -2,10 +2,12 @@ const TABLE_NAME = 'target-profiles'; const OLD_COLUMN_NAME = 'organizationId'; const NEW_COLUMN_NAME = 'ownerOrganizationId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (t) => t.renameColumn(OLD_COLUMN_NAME, NEW_COLUMN_NAME)); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (t) => t.renameColumn(NEW_COLUMN_NAME, OLD_COLUMN_NAME)); }; + +export { up, down }; diff --git a/api/db/migrations/20210115143718_add-column-in-target-profiles-is-simplified-access.js b/api/db/migrations/20210115143718_add-column-in-target-profiles-is-simplified-access.js index 16171817ae7..47b75611586 100644 --- a/api/db/migrations/20210115143718_add-column-in-target-profiles-is-simplified-access.js +++ b/api/db/migrations/20210115143718_add-column-in-target-profiles-is-simplified-access.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'target-profiles'; const COLUMN_NAME = 'isSimplifiedAccess'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210118162334_add_column_has-seen-new-dashboard-info_to_users.js b/api/db/migrations/20210118162334_add_column_has-seen-new-dashboard-info_to_users.js index 1c81419ca9b..580b0091a7e 100644 --- a/api/db/migrations/20210118162334_add_column_has-seen-new-dashboard-info_to_users.js +++ b/api/db/migrations/20210118162334_add_column_has-seen-new-dashboard-info_to_users.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'hasSeenNewDashboardInfo'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210119120015_add-validated-skills-count-to-campaign-participations.js b/api/db/migrations/20210119120015_add-validated-skills-count-to-campaign-participations.js index 256c1d5dbec..5bb4ca6fe78 100644 --- a/api/db/migrations/20210119120015_add-validated-skills-count-to-campaign-participations.js +++ b/api/db/migrations/20210119120015_add-validated-skills-count-to-campaign-participations.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'campaign-participations'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.integer('validatedSkillsCount'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('validatedSkillsCount'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210119141645_add-column-is-anonymous-to-users.js b/api/db/migrations/20210119141645_add-column-is-anonymous-to-users.js index 35a486e841c..b0f7236677e 100644 --- a/api/db/migrations/20210119141645_add-column-is-anonymous-to-users.js +++ b/api/db/migrations/20210119141645_add-column-is-anonymous-to-users.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'isAnonymous'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210129110252_remove_password_column_from_users_table.js b/api/db/migrations/20210129110252_remove_password_column_from_users_table.js index add71044b64..79efa81941c 100644 --- a/api/db/migrations/20210129110252_remove_password_column_from_users_table.js +++ b/api/db/migrations/20210129110252_remove_password_column_from_users_table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'password'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210129124701_remove_shouldChangePassword_column_from_users_table.js b/api/db/migrations/20210129124701_remove_shouldChangePassword_column_from_users_table.js index 47897faba85..8c84c9ada0d 100644 --- a/api/db/migrations/20210129124701_remove_shouldChangePassword_column_from_users_table.js +++ b/api/db/migrations/20210129124701_remove_shouldChangePassword_column_from_users_table.js @@ -2,14 +2,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'shouldChangePassword'; const DEFAULT_VALUE = false; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).defaultTo(DEFAULT_VALUE); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210129140117_remove_samlId_column_from_users_table.js b/api/db/migrations/20210129140117_remove_samlId_column_from_users_table.js index 0e60353a5fd..eae1666be0b 100644 --- a/api/db/migrations/20210129140117_remove_samlId_column_from_users_table.js +++ b/api/db/migrations/20210129140117_remove_samlId_column_from_users_table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'samlId'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME)(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210201101653_create-finalized-session-table.js b/api/db/migrations/20210201101653_create-finalized-session-table.js index bfdb9b540ab..5320f9ac0d1 100644 --- a/api/db/migrations/20210201101653_create-finalized-session-table.js +++ b/api/db/migrations/20210201101653_create-finalized-session-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'finalized-sessions'; -exports.up = async (knex) => { +const up = async function (knex) { await knex.schema.createTable(TABLE_NAME, (t) => { t.integer('sessionId').primary(); t.boolean('isPublishable').notNullable(); @@ -11,6 +11,8 @@ exports.up = async (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20210203110934_add-publishedAt-in-finalized-session-table.js b/api/db/migrations/20210203110934_add-publishedAt-in-finalized-session-table.js index ed70b79ee9d..2efb2f7cc89 100644 --- a/api/db/migrations/20210203110934_add-publishedAt-in-finalized-session-table.js +++ b/api/db/migrations/20210203110934_add-publishedAt-in-finalized-session-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'finalized-sessions'; const COLUMN_NAME = 'publishedAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dateTime(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210216141040_add-column-for-absolute-novice-to-campaigns.js b/api/db/migrations/20210216141040_add-column-for-absolute-novice-to-campaigns.js index aa28a1c7796..3efea4d30d4 100644 --- a/api/db/migrations/20210216141040_add-column-for-absolute-novice-to-campaigns.js +++ b/api/db/migrations/20210216141040_add-column-for-absolute-novice-to-campaigns.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'campaigns'; const COLUMN_NAME = 'isForAbsoluteNovice'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210224170037_add-prescriber-description-and-prescriber-title-to-stages-table.js b/api/db/migrations/20210224170037_add-prescriber-description-and-prescriber-title-to-stages-table.js index 8dd1e53ac10..84f2a21bae8 100644 --- a/api/db/migrations/20210224170037_add-prescriber-description-and-prescriber-title-to-stages-table.js +++ b/api/db/migrations/20210224170037_add-prescriber-description-and-prescriber-title-to-stages-table.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'stages'; const PRESCRIBER_TITLE_COLUMN = 'prescriberTitle'; const PRESCRIBER_DESCRIPTION_COLUMN = 'prescriberDescription'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.string(PRESCRIBER_TITLE_COLUMN); table.text(PRESCRIBER_DESCRIPTION_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(PRESCRIBER_TITLE_COLUMN); table.dropColumn(PRESCRIBER_DESCRIPTION_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210226114025_drop-column-has-seen-new-level-info-from-users.js b/api/db/migrations/20210226114025_drop-column-has-seen-new-level-info-from-users.js index 5614317574f..dc40317dedf 100644 --- a/api/db/migrations/20210226114025_drop-column-has-seen-new-level-info-from-users.js +++ b/api/db/migrations/20210226114025_drop-column-has-seen-new-level-info-from-users.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'hasSeenNewLevelInfo'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).defaultTo(false); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210304154309_add-partner-competences-ids-to-badge-criteria-table.js b/api/db/migrations/20210304154309_add-partner-competences-ids-to-badge-criteria-table.js index 9783443e11a..9983fa0a398 100644 --- a/api/db/migrations/20210304154309_add-partner-competences-ids-to-badge-criteria-table.js +++ b/api/db/migrations/20210304154309_add-partner-competences-ids-to-badge-criteria-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'badge-criteria'; const NEW_COLUMN = 'partnerCompetenceIds'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.specificType(NEW_COLUMN, 'int[]'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(NEW_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210309173118_add_assigned_certification_officer_name_to_finalized_sessions_table.js b/api/db/migrations/20210309173118_add_assigned_certification_officer_name_to_finalized_sessions_table.js index 0e5a8b74e59..aacaca525f7 100644 --- a/api/db/migrations/20210309173118_add_assigned_certification_officer_name_to_finalized_sessions_table.js +++ b/api/db/migrations/20210309173118_add_assigned_certification_officer_name_to_finalized_sessions_table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'finalized-sessions'; const COLUMN_NAME = 'assignedCertificationOfficerName'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210310110213_add-last-question-date-in-assesments-table.js b/api/db/migrations/20210310110213_add-last-question-date-in-assesments-table.js index 1082515ce48..91425a6bd15 100644 --- a/api/db/migrations/20210310110213_add-last-question-date-in-assesments-table.js +++ b/api/db/migrations/20210310110213_add-last-question-date-in-assesments-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'assessments'; const COLUMN_NAME = 'lastQuestionDate'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dateTime(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210311142327_add-column-timespent-in-answers.js b/api/db/migrations/20210311142327_add-column-timespent-in-answers.js index 373f214aea7..4a9182a24f1 100644 --- a/api/db/migrations/20210311142327_add-column-timespent-in-answers.js +++ b/api/db/migrations/20210311142327_add-column-timespent-in-answers.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'answers'; const COLUMN_NAME = 'timeSpent'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.integer(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210315154549_drop-elapsedTime-in-answers-table.js b/api/db/migrations/20210315154549_drop-elapsedTime-in-answers-table.js index fcf95de6604..5cc9f6549ab 100644 --- a/api/db/migrations/20210315154549_drop-elapsedTime-in-answers-table.js +++ b/api/db/migrations/20210315154549_drop-elapsedTime-in-answers-table.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'answers'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('elapsedTime'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.integer('elapsedTime'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210316221427_add-column-isNeutralized-in-certification-challenges.js b/api/db/migrations/20210316221427_add-column-isNeutralized-in-certification-challenges.js index e1289ecba8a..f8de1348107 100644 --- a/api/db/migrations/20210316221427_add-column-isNeutralized-in-certification-challenges.js +++ b/api/db/migrations/20210316221427_add-column-isNeutralized-in-certification-challenges.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-challenges'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean('isNeutralized').notNullable().defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('isNeutralized'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210318145742_add-column-is-certifiable-to-badges.js b/api/db/migrations/20210318145742_add-column-is-certifiable-to-badges.js index f8750608966..b64056d7a78 100644 --- a/api/db/migrations/20210318145742_add-column-is-certifiable-to-badges.js +++ b/api/db/migrations/20210318145742_add-column-is-certifiable-to-badges.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'badges'; const COLUMN_NAME = 'isCertifiable'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210324101030_add-campaign-participation-to-badge-acquisitions-table.js b/api/db/migrations/20210324101030_add-campaign-participation-to-badge-acquisitions-table.js index 1108278cc48..65a513fd3d9 100644 --- a/api/db/migrations/20210324101030_add-campaign-participation-to-badge-acquisitions-table.js +++ b/api/db/migrations/20210324101030_add-campaign-participation-to-badge-acquisitions-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'badge-acquisitions'; const CAMPAIGN_PARTICIPATION_ID_COLUMN = 'campaignParticipationId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.integer(CAMPAIGN_PARTICIPATION_ID_COLUMN).references('campaign-participations.id').index(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(CAMPAIGN_PARTICIPATION_ID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210325103306_add-custom-fields-to-campaign.js b/api/db/migrations/20210325103306_add-custom-fields-to-campaign.js index 0af820b62d2..8fa5b928970 100644 --- a/api/db/migrations/20210325103306_add-custom-fields-to-campaign.js +++ b/api/db/migrations/20210325103306_add-custom-fields-to-campaign.js @@ -3,7 +3,7 @@ const CUSTOM_RESULT_PAGE_TEXT_COLUMN = 'customResultPageText'; const CUSTOM_RESULT_PAGE_BUTTON_TEXT_COLUMN = 'customResultPageButtonText'; const CUSTOM_RESULT_PAGE_BUTTON_URL_COLUMN = 'customResultPageButtonUrl'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.text(CUSTOM_RESULT_PAGE_TEXT_COLUMN); table.string(CUSTOM_RESULT_PAGE_BUTTON_TEXT_COLUMN); @@ -11,10 +11,12 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(CUSTOM_RESULT_PAGE_TEXT_COLUMN); table.dropColumn(CUSTOM_RESULT_PAGE_BUTTON_TEXT_COLUMN); table.dropColumn(CUSTOM_RESULT_PAGE_BUTTON_URL_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210413170121_add-column-envoisMultiples-to-campaigns-and-add-isImproved-to-campaign-participations-and-update-constraint-campaign-participations-unique-userId-campaignId-isImproved.js b/api/db/migrations/20210413170121_add-column-envoisMultiples-to-campaigns-and-add-isImproved-to-campaign-participations-and-update-constraint-campaign-participations-unique-userId-campaignId-isImproved.js index e9fb4212a59..22dfda23b8e 100644 --- a/api/db/migrations/20210413170121_add-column-envoisMultiples-to-campaigns-and-add-isImproved-to-campaign-participations-and-update-constraint-campaign-participations-unique-userId-campaignId-isImproved.js +++ b/api/db/migrations/20210413170121_add-column-envoisMultiples-to-campaigns-and-add-isImproved-to-campaign-participations-and-update-constraint-campaign-participations-unique-userId-campaignId-isImproved.js @@ -7,7 +7,7 @@ const USERID_COLUMN = 'userId'; const CAMPAIGNID_COLUMN = 'campaignId'; const NEW_CONSTRAINT_NAME = 'campaign_participations_campaignid_userid_isimproved'; -exports.up = async (knex) => { +const up = async function (knex) { await knex.schema.table(CAMPAIGNS_TABLE, function (table) { table.boolean(MULTIPLESENDINGS_COLUMN).defaultTo(false); }); @@ -23,7 +23,7 @@ exports.up = async (knex) => { ); }; -exports.down = async (knex) => { +const down = async function (knex) { // eslint-disable-next-line knex/avoid-injections await knex.raw(`DROP INDEX ${NEW_CONSTRAINT_NAME};`); await knex.schema.table(CAMPAIGNPARTICIPATIONS_TABLE, (table) => { @@ -36,3 +36,5 @@ exports.down = async (knex) => { table.dropColumn(MULTIPLESENDINGS_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210414154016_add-index-on-lower-email-column-table-users.js b/api/db/migrations/20210414154016_add-index-on-lower-email-column-table-users.js index c3dc6b16fb8..f7aad7e66e0 100644 --- a/api/db/migrations/20210414154016_add-index-on-lower-email-column-table-users.js +++ b/api/db/migrations/20210414154016_add-index-on-lower-email-column-table-users.js @@ -1,11 +1,13 @@ const INDEX_NAME = 'users_email_lower'; -exports.up = (knex) => { +const up = function (knex) { // eslint-disable-next-line knex/avoid-injections return knex.raw(`CREATE INDEX "${INDEX_NAME}" ON "users"(LOWER("email"))`); }; -exports.down = (knex) => { +const down = function (knex) { // eslint-disable-next-line knex/avoid-injections return knex.raw(`DROP INDEX "${INDEX_NAME}"`); }; + +export { up, down }; diff --git a/api/db/migrations/20210414161434_add-index-lower-email-reset-password.js b/api/db/migrations/20210414161434_add-index-lower-email-reset-password.js index 49b31ce896d..c2d4936aa4d 100644 --- a/api/db/migrations/20210414161434_add-index-lower-email-reset-password.js +++ b/api/db/migrations/20210414161434_add-index-lower-email-reset-password.js @@ -1,6 +1,6 @@ const INDEX_NAME = 'reset-password-demands_email_lower'; -exports.up = async (knex) => { +const up = async function (knex) { // eslint-disable-next-line knex/avoid-injections await knex.raw(`CREATE INDEX "${INDEX_NAME}" ON "reset-password-demands"(LOWER("email"))`); return knex.schema.table('reset-password-demands', function (table) { @@ -8,7 +8,7 @@ exports.up = async (knex) => { }); }; -exports.down = async (knex) => { +const down = async function (knex) { await knex.schema.table('reset-password-demands', function (table) { table.index('email'); }); @@ -16,3 +16,5 @@ exports.down = async (knex) => { // eslint-disable-next-line knex/avoid-injections return knex.raw(`DROP INDEX "${INDEX_NAME}"`); }; + +export { up, down }; diff --git a/api/db/migrations/20210416082943_add-column-certifiable-badge-key-to-certification-challenges-table.js b/api/db/migrations/20210416082943_add-column-certifiable-badge-key-to-certification-challenges-table.js index 5c7a8b3c10d..e858481ca8a 100644 --- a/api/db/migrations/20210416082943_add-column-certifiable-badge-key-to-certification-challenges-table.js +++ b/api/db/migrations/20210416082943_add-column-certifiable-badge-key-to-certification-challenges-table.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-challenges'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('certifiableBadgeKey'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('certifiableBadgeKey'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210420154410_add-column-isCancelled-to-certification-course.js b/api/db/migrations/20210420154410_add-column-isCancelled-to-certification-course.js index b8337dfb21b..816b8d209d0 100644 --- a/api/db/migrations/20210420154410_add-column-isCancelled-to-certification-course.js +++ b/api/db/migrations/20210420154410_add-column-isCancelled-to-certification-course.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-courses'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean('isCancelled').notNullable().defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('isCancelled'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210427100545_add_indexes_on_table_campaign-participations.js b/api/db/migrations/20210427100545_add_indexes_on_table_campaign-participations.js index b0b9d579c0b..aa2c480fbf7 100644 --- a/api/db/migrations/20210427100545_add_indexes_on_table_campaign-participations.js +++ b/api/db/migrations/20210427100545_add_indexes_on_table_campaign-participations.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'campaign-participations'; const CAMPAIGNID_COLUMN = 'campaignId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(CAMPAIGNID_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(CAMPAIGNID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210429113555_replace-organization-id-student-number-index-on-schooling-registration.js b/api/db/migrations/20210429113555_replace-organization-id-student-number-index-on-schooling-registration.js index 8e33e738eb5..d3e6e0c6595 100644 --- a/api/db/migrations/20210429113555_replace-organization-id-student-number-index-on-schooling-registration.js +++ b/api/db/migrations/20210429113555_replace-organization-id-student-number-index-on-schooling-registration.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'schooling-registrations'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw('DROP INDEX "organizationid_studentnumber_index"'); await knex.raw('DROP INDEX "organizationid_studentnumber_notsupernumerary_index"'); @@ -9,7 +9,7 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.raw( 'CREATE INDEX "organizationid_studentnumber_index" ON "schooling-registrations" ("organizationId", "studentNumber");' ); @@ -21,3 +21,5 @@ exports.down = async function (knex) { table.dropUnique(['studentNumber', 'organizationId']); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210430154711_trim-certification-candidates-first-name-and-last-name.js b/api/db/migrations/20210430154711_trim-certification-candidates-first-name-and-last-name.js index 9fce4772298..a9859ada8a2 100644 --- a/api/db/migrations/20210430154711_trim-certification-candidates-first-name-and-last-name.js +++ b/api/db/migrations/20210430154711_trim-certification-candidates-first-name-and-last-name.js @@ -1,4 +1,4 @@ -exports.up = function (knex) { +const up = function (knex) { // eslint-disable-next-line knex/avoid-injections return knex.raw( 'UPDATE "certification-candidates"' + @@ -8,6 +8,8 @@ exports.up = function (knex) { ); }; -exports.down = function () { +const down = function () { return; }; + +export { up, down }; diff --git a/api/db/migrations/20210503164450_remove-isSupernumeray-column.js b/api/db/migrations/20210503164450_remove-isSupernumeray-column.js index 18acbed6017..3f23befd838 100644 --- a/api/db/migrations/20210503164450_remove-isSupernumeray-column.js +++ b/api/db/migrations/20210503164450_remove-isSupernumeray-column.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'schooling-registrations'; const COLUMN = 'isSupernumerary'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.boolean(COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210506112005_fill-missing-competence-id-values-in-table-competence-marks.js b/api/db/migrations/20210506112005_fill-missing-competence-id-values-in-table-competence-marks.js index ff1ae73cf66..79ccabe7b2c 100644 --- a/api/db/migrations/20210506112005_fill-missing-competence-id-values-in-table-competence-marks.js +++ b/api/db/migrations/20210506112005_fill-missing-competence-id-values-in-table-competence-marks.js @@ -1,4 +1,4 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex('competence-marks').whereNull('competenceId').where('competence_code', '1.1').update({ competenceId: 'recsvLz0W2ShyfD63', }); @@ -52,6 +52,8 @@ exports.up = async function (knex) { }); }; -exports.down = function () { +const down = function () { return; }; + +export { up, down }; diff --git a/api/db/migrations/20210506114245_remove-nullable-mentions-in-columns-table-competence-marks.js b/api/db/migrations/20210506114245_remove-nullable-mentions-in-columns-table-competence-marks.js index 33bb4d14703..5be29ff99d5 100644 --- a/api/db/migrations/20210506114245_remove-nullable-mentions-in-columns-table-competence-marks.js +++ b/api/db/migrations/20210506114245_remove-nullable-mentions-in-columns-table-competence-marks.js @@ -1,13 +1,15 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw('ALTER TABLE "competence-marks" ALTER COLUMN "competenceId" SET NOT NULL'); await knex.raw('ALTER TABLE "competence-marks" ALTER COLUMN "assessmentResultId" SET NOT NULL'); await knex.raw('ALTER TABLE "competence-marks" ALTER COLUMN "level" SET NOT NULL'); await knex.raw('ALTER TABLE "competence-marks" ALTER COLUMN "score" SET NOT NULL'); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.raw('ALTER TABLE "competence-marks" ALTER COLUMN "competenceId" DROP NOT NULL'); await knex.raw('ALTER TABLE "competence-marks" ALTER COLUMN "assessmentResultId" DROP NOT NULL'); await knex.raw('ALTER TABLE "competence-marks" ALTER COLUMN "level" DROP NOT NULL'); await knex.raw('ALTER TABLE "competence-marks" ALTER COLUMN "score" DROP NOT NULL'); }; + +export { up, down }; diff --git a/api/db/migrations/20210506121007_delete_pix_reader_row_in_pix_roles.js b/api/db/migrations/20210506121007_delete_pix_reader_row_in_pix_roles.js index fe9babb9b3f..c7f76743878 100644 --- a/api/db/migrations/20210506121007_delete_pix_reader_row_in_pix_roles.js +++ b/api/db/migrations/20210506121007_delete_pix_reader_row_in_pix_roles.js @@ -1,10 +1,12 @@ const TABLE_NAME = 'pix_roles'; const ROW = { name: 'PIX_READER' }; -exports.up = function (knex) { +const up = function (knex) { return knex.table(TABLE_NAME).where('name', ROW.name).delete(); }; -exports.down = function (knex) { +const down = function (knex) { return knex.table(TABLE_NAME).insert(ROW); }; + +export { up, down }; diff --git a/api/db/migrations/20210506134706_alter_users_pix_roles_add_unique_constraint.js b/api/db/migrations/20210506134706_alter_users_pix_roles_add_unique_constraint.js index f585f95cd70..1fdd576fe73 100644 --- a/api/db/migrations/20210506134706_alter_users_pix_roles_add_unique_constraint.js +++ b/api/db/migrations/20210506134706_alter_users_pix_roles_add_unique_constraint.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users_pix_roles'; const COLUMNS_NAME = ['user_id', 'pix_role_id']; -exports.up = async function (knex) { +const up = async function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.unique(COLUMNS_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropUnique(COLUMNS_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210507093056_add-column-certified-image-url-table-badges.js b/api/db/migrations/20210507093056_add-column-certified-image-url-table-badges.js index e23020ac343..44e16c8e522 100644 --- a/api/db/migrations/20210507093056_add-column-certified-image-url-table-badges.js +++ b/api/db/migrations/20210507093056_add-column-certified-image-url-table-badges.js @@ -1,11 +1,13 @@ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table('badges', (table) => { table.string('certifiedImageUrl', 500); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table('badges', function (table) { table.dropColumn('certifiedImageUrl'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210517162046_drop-column-color-in-badge-partner-competences.js b/api/db/migrations/20210517162046_drop-column-color-in-badge-partner-competences.js index d6ca71ce77a..84fcf054251 100644 --- a/api/db/migrations/20210517162046_drop-column-color-in-badge-partner-competences.js +++ b/api/db/migrations/20210517162046_drop-column-color-in-badge-partner-competences.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'badge-partner-competences'; const COLUMN_NAME = 'color'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210519150136_add-column-last-challenge-in-assessment.js b/api/db/migrations/20210519150136_add-column-last-challenge-in-assessment.js index ff11d28e913..c4e05813ace 100644 --- a/api/db/migrations/20210519150136_add-column-last-challenge-in-assessment.js +++ b/api/db/migrations/20210519150136_add-column-last-challenge-in-assessment.js @@ -1,11 +1,13 @@ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table('assessments', (table) => { table.string('lastChallengeId', 50); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table('assessments', function (table) { table.dropColumn('lastChallengeId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210525140944_add-column-processed-at-table-certification-issue-reports.js b/api/db/migrations/20210525140944_add-column-processed-at-table-certification-issue-reports.js index 30d07811f57..c3be2b5476e 100644 --- a/api/db/migrations/20210525140944_add-column-processed-at-table-certification-issue-reports.js +++ b/api/db/migrations/20210525140944_add-column-processed-at-table-certification-issue-reports.js @@ -1,13 +1,15 @@ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table('certification-issue-reports', (table) => { table.dateTime('resolvedAt'); table.string('resolution'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table('certification-issue-reports', (table) => { table.dropColumn('resolvedAt'); table.dropColumn('resolution'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210527111219_add-column-sex-in-table-schooling-registrations.js b/api/db/migrations/20210527111219_add-column-sex-in-table-schooling-registrations.js index b3ac91c3a99..ca1ee160ca8 100644 --- a/api/db/migrations/20210527111219_add-column-sex-in-table-schooling-registrations.js +++ b/api/db/migrations/20210527111219_add-column-sex-in-table-schooling-registrations.js @@ -1,11 +1,13 @@ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table('schooling-registrations', (table) => { table.string('sex', 1); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table('schooling-registrations', function (table) { table.dropColumn('sex'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210607141627_drop-column-certified-badge-image-url-on-table-badges.js b/api/db/migrations/20210607141627_drop-column-certified-badge-image-url-on-table-badges.js index f2bb71440ce..9b73bdf5db0 100644 --- a/api/db/migrations/20210607141627_drop-column-certified-badge-image-url-on-table-badges.js +++ b/api/db/migrations/20210607141627_drop-column-certified-badge-image-url-on-table-badges.js @@ -1,11 +1,13 @@ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table('badges', function (table) { table.dropColumn('certifiedImageUrl'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table('badges', (table) => { table.string('certifiedImageUrl', 500); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210607142018_fix-certifications-version-v2.js b/api/db/migrations/20210607142018_fix-certifications-version-v2.js index 7e02b56611d..df5663d49f5 100644 --- a/api/db/migrations/20210607142018_fix-certifications-version-v2.js +++ b/api/db/migrations/20210607142018_fix-certifications-version-v2.js @@ -1,12 +1,14 @@ const TABLE_NAME = 'certification-courses'; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME).where('createdAt', '>', '2021-01-01').andWhere('isV2Certification', false).update({ isV2Certification: true, }); }; -exports.down = function (_) { +const down = function (_) { // un rollback serait contre-productif return Promise.resolve(); }; + +export { up, down }; diff --git a/api/db/migrations/20210607163646_add-columns-sex-birthPostalCode-birthINSEECode-in-table-certification-candidates.js b/api/db/migrations/20210607163646_add-columns-sex-birthPostalCode-birthINSEECode-in-table-certification-candidates.js index 45b720ba128..c1b3a01fb7c 100644 --- a/api/db/migrations/20210607163646_add-columns-sex-birthPostalCode-birthINSEECode-in-table-certification-candidates.js +++ b/api/db/migrations/20210607163646_add-columns-sex-birthPostalCode-birthINSEECode-in-table-certification-candidates.js @@ -1,4 +1,4 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table('certification-candidates', (table) => { table.string('birthPostalCode'); table.string('birthINSEECode'); @@ -10,9 +10,11 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.alterTable('certification-candidates', (table) => { table.dropColumns('birthPostalCode', 'birthINSEECode', 'sex'); table.string('birthCity').notNullable().alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210609045948_add-index-on-table-certification-candidates-column-schooling-registration-id.js b/api/db/migrations/20210609045948_add-index-on-table-certification-candidates-column-schooling-registration-id.js index e895b0b4126..2c3aabd8f58 100644 --- a/api/db/migrations/20210609045948_add-index-on-table-certification-candidates-column-schooling-registration-id.js +++ b/api/db/migrations/20210609045948_add-index-on-table-certification-candidates-column-schooling-registration-id.js @@ -1,11 +1,13 @@ -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table('certification-candidates', (table) => { table.index('schoolingRegistrationId'); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table('certification-candidates', (table) => { table.dropIndex('schoolingRegistrationId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210610172018_fill_badge_partner_competence_for_critera.js b/api/db/migrations/20210610172018_fill_badge_partner_competence_for_critera.js index 591b5d54f49..4392a65febd 100644 --- a/api/db/migrations/20210610172018_fill_badge_partner_competence_for_critera.js +++ b/api/db/migrations/20210610172018_fill_badge_partner_competence_for_critera.js @@ -1,7 +1,7 @@ -const bluebird = require('bluebird'); -const _ = require('lodash'); +import bluebird from 'bluebird'; +import _ from 'lodash'; -exports.up = async function (knex) { +const up = async function (knex) { const badgesAndPartnerCompetences = await knex('badges') .select('badges.id as badgeId', 'badge-partner-competences.id as partnerCompetenceId') .leftJoin('badge-criteria', 'badges.id', 'badge-criteria.badgeId') @@ -25,6 +25,8 @@ exports.up = async function (knex) { }); }; -exports.down = function () { +const down = function () { return; }; + +export { up, down }; diff --git a/api/db/migrations/20210611081228_add-columns-sex-birthPostalCode-birthINSEECode-in-table-certification-courses.js b/api/db/migrations/20210611081228_add-columns-sex-birthPostalCode-birthINSEECode-in-table-certification-courses.js index 91ee51f9410..af64296331c 100644 --- a/api/db/migrations/20210611081228_add-columns-sex-birthPostalCode-birthINSEECode-in-table-certification-courses.js +++ b/api/db/migrations/20210611081228_add-columns-sex-birthPostalCode-birthINSEECode-in-table-certification-courses.js @@ -1,4 +1,4 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table('certification-courses', (table) => { table.string('birthPostalCode'); table.string('birthINSEECode'); @@ -6,8 +6,10 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.alterTable('certification-courses', (table) => { table.dropColumns('birthPostalCode', 'birthINSEECode', 'sex'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210614103332_create-table-certification-cpf-countries.js b/api/db/migrations/20210614103332_create-table-certification-cpf-countries.js index 8f76f481d15..3d77da58058 100644 --- a/api/db/migrations/20210614103332_create-table-certification-cpf-countries.js +++ b/api/db/migrations/20210614103332_create-table-certification-cpf-countries.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'certification-cpf-countries'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.string('code').notNullable(); @@ -11,6 +11,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20210614103435_create-table-certification-cpf-cities.js b/api/db/migrations/20210614103435_create-table-certification-cpf-cities.js index 583752446d6..a9ed3fe3aa2 100644 --- a/api/db/migrations/20210614103435_create-table-certification-cpf-cities.js +++ b/api/db/migrations/20210614103435_create-table-certification-cpf-cities.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'certification-cpf-cities'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.string('name').notNullable(); @@ -11,6 +11,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20210614142832_audit-table-for-autojury.js b/api/db/migrations/20210614142832_audit-table-for-autojury.js index 011472d0049..94e387334fc 100644 --- a/api/db/migrations/20210614142832_audit-table-for-autojury.js +++ b/api/db/migrations/20210614142832_audit-table-for-autojury.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'autojury-script-audit'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments('sessionId').primary(); t.text('certificationCenterName'); @@ -13,6 +13,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20210616111928_rename-badge-criteria-scope.js b/api/db/migrations/20210616111928_rename-badge-criteria-scope.js index 0cdaaf4d9f8..d184d3dfc6a 100644 --- a/api/db/migrations/20210616111928_rename-badge-criteria-scope.js +++ b/api/db/migrations/20210616111928_rename-badge-criteria-scope.js @@ -1,7 +1,9 @@ -exports.up = async function (knex) { +const up = async function (knex) { return knex('badge-criteria').update({ scope: 'SkillSet' }).where({ scope: 'SomePartnerCompetences' }); }; -exports.down = function (knex) { +const down = function (knex) { return knex('badge-criteria').update({ scope: 'SomePartnerCompetences' }).where({ scope: 'SkillSet' }); }; + +export { up, down }; diff --git a/api/db/migrations/20210630150224_add_column_updatedAt_to_badge_acquisitions.js b/api/db/migrations/20210630150224_add_column_updatedAt_to_badge_acquisitions.js index 313c86f5e27..7610ecfd808 100644 --- a/api/db/migrations/20210630150224_add_column_updatedAt_to_badge_acquisitions.js +++ b/api/db/migrations/20210630150224_add_column_updatedAt_to_badge_acquisitions.js @@ -1,7 +1,7 @@ const TABLE_NAME = 'badge-acquisitions'; const UPDATED_AT_COLUMN = 'updatedAt'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, (table) => { table.dateTime(UPDATED_AT_COLUMN).notNullable().defaultTo(knex.fn.now()); }); @@ -10,8 +10,10 @@ exports.up = async function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(UPDATED_AT_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210706121344_create-account-recovery-demands-table.js b/api/db/migrations/20210706121344_create-account-recovery-demands-table.js index 101a1a67204..e5c00b566f7 100644 --- a/api/db/migrations/20210706121344_create-account-recovery-demands-table.js +++ b/api/db/migrations/20210706121344_create-account-recovery-demands-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'account-recovery-demands'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.string('userId').index(); @@ -13,6 +13,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20210707082408_update-account-recovery-demands-table.js b/api/db/migrations/20210707082408_update-account-recovery-demands-table.js index 9180a016598..7de81034ee6 100644 --- a/api/db/migrations/20210707082408_update-account-recovery-demands-table.js +++ b/api/db/migrations/20210707082408_update-account-recovery-demands-table.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'account-recovery-demands'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, (t) => { t.integer('userId').alter(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, (t) => { t.string('userId').alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210713145931_set-default-target-profile-image.js b/api/db/migrations/20210713145931_set-default-target-profile-image.js index b5eed7ade93..56a7acd78db 100644 --- a/api/db/migrations/20210713145931_set-default-target-profile-image.js +++ b/api/db/migrations/20210713145931_set-default-target-profile-image.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'target-profiles'; const DEFAULT_IMAGE_URL = 'https://images.pix.fr/profil-cible/Illu_GEN.svg'; -exports.up = async function (knex) { +const up = async function (knex) { await updateWithDefaultImageUrl(knex); }; -exports.down = function () { +const down = function () { return; }; +export { up, down }; + async function updateWithDefaultImageUrl(knex) { await knex(TABLE_NAME).whereNull('imageUrl').update({ imageUrl: DEFAULT_IMAGE_URL, diff --git a/api/db/migrations/20210715153308_add-column-schoolingRegistrationId-to-account-recovery-demands-table.js b/api/db/migrations/20210715153308_add-column-schoolingRegistrationId-to-account-recovery-demands-table.js index df61f2fb5ec..2c18063a520 100644 --- a/api/db/migrations/20210715153308_add-column-schoolingRegistrationId-to-account-recovery-demands-table.js +++ b/api/db/migrations/20210715153308_add-column-schoolingRegistrationId-to-account-recovery-demands-table.js @@ -2,14 +2,16 @@ const TABLE_NAME = 'account-recovery-demands'; const TABLE_COLUMN = 'schoolingRegistrationId'; const REFERENCED_COLUMN_NAME = 'schooling-registrations.id'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.integer(TABLE_COLUMN).unsigned().references(REFERENCED_COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(TABLE_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210715184135_add-email-confirmed-at-to-users.js b/api/db/migrations/20210715184135_add-email-confirmed-at-to-users.js index 90cfc2701a0..99b45a0ffb9 100644 --- a/api/db/migrations/20210715184135_add-email-confirmed-at-to-users.js +++ b/api/db/migrations/20210715184135_add-email-confirmed-at-to-users.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'emailConfirmedAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dateTime(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210716074232_alter_account-recovery-demand_add_unique_temporary_key.js b/api/db/migrations/20210716074232_alter_account-recovery-demand_add_unique_temporary_key.js index ba3de604438..42615b5b1ae 100644 --- a/api/db/migrations/20210716074232_alter_account-recovery-demand_add_unique_temporary_key.js +++ b/api/db/migrations/20210716074232_alter_account-recovery-demand_add_unique_temporary_key.js @@ -1,11 +1,13 @@ -exports.up = function (knex) { +const up = function (knex) { return knex.raw( 'ALTER TABLE "account-recovery-demands" ADD CONSTRAINT account_recovery_demands_temporary_key_unique UNIQUE("temporaryKey")' ); }; -exports.down = function (knex) { +const down = function (knex) { return knex.raw( 'ALTER TABLE "account-recovery-demands" DROP CONSTRAINT account_recovery_demands_temporary_key_unique' ); }; + +export { up, down }; diff --git a/api/db/migrations/20210721084659_add-birthCountry-in-certification-course-table.js b/api/db/migrations/20210721084659_add-birthCountry-in-certification-course-table.js index 5ea2455c761..963a1966305 100644 --- a/api/db/migrations/20210721084659_add-birthCountry-in-certification-course-table.js +++ b/api/db/migrations/20210721084659_add-birthCountry-in-certification-course-table.js @@ -1,11 +1,13 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table('certification-courses', (table) => { table.string('birthCountry'); }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.alterTable('certification-courses', (table) => { table.dropColumns('birthCountry'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210722122054_drop-table-autojury-script-audit.js b/api/db/migrations/20210722122054_drop-table-autojury-script-audit.js index c86ebb3801f..3576839ef8d 100644 --- a/api/db/migrations/20210722122054_drop-table-autojury-script-audit.js +++ b/api/db/migrations/20210722122054_drop-table-autojury-script-audit.js @@ -1,10 +1,10 @@ const TABLE_NAME = 'autojury-script-audit'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments('sessionId').primary(); t.text('certificationCenterName'); @@ -16,3 +16,5 @@ exports.down = function (knex) { t.enu('status', ['TO DO', 'DOING', 'DONE', 'TO RETRY']); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210726130724_add-isDisabled-column-in-schooling-registrations-table.js b/api/db/migrations/20210726130724_add-isDisabled-column-in-schooling-registrations-table.js index a58cd110989..b57df1a8ea6 100644 --- a/api/db/migrations/20210726130724_add-isDisabled-column-in-schooling-registrations-table.js +++ b/api/db/migrations/20210726130724_add-isDisabled-column-in-schooling-registrations-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'schooling-registrations'; const COLUMN_NAME = 'isDisabled'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210727092407_add-columns-has-seen-focused-and-other-challenge-tooltips.js b/api/db/migrations/20210727092407_add-columns-has-seen-focused-and-other-challenge-tooltips.js index 1e6f46b41eb..28b4a1c6a51 100644 --- a/api/db/migrations/20210727092407_add-columns-has-seen-focused-and-other-challenge-tooltips.js +++ b/api/db/migrations/20210727092407_add-columns-has-seen-focused-and-other-challenge-tooltips.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'hasSeenFocusedChallengeTooltip'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210802093720_add-column-mastery-percentage-on-campaign-participation.js b/api/db/migrations/20210802093720_add-column-mastery-percentage-on-campaign-participation.js index e372fe596e8..7fff725f6a8 100644 --- a/api/db/migrations/20210802093720_add-column-mastery-percentage-on-campaign-participation.js +++ b/api/db/migrations/20210802093720_add-column-mastery-percentage-on-campaign-participation.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'campaign-participations'; const COLUMN_NAME = 'masteryPercentage'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.decimal(COLUMN_NAME, 3, 2).defaultTo(null); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210802094853_add-column-pix-score-on-campaign-participation.js b/api/db/migrations/20210802094853_add-column-pix-score-on-campaign-participation.js index 3dbc81e1c08..6aef206c53c 100644 --- a/api/db/migrations/20210802094853_add-column-pix-score-on-campaign-participation.js +++ b/api/db/migrations/20210802094853_add-column-pix-score-on-campaign-participation.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'campaign-participations'; const COLUMN_NAME = 'pixScore'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.integer(COLUMN_NAME).defaultTo(null); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210810061837_add-column-createdBy-to-organizations.js b/api/db/migrations/20210810061837_add-column-createdBy-to-organizations.js index 524f927887c..3d64b5bfd49 100644 --- a/api/db/migrations/20210810061837_add-column-createdBy-to-organizations.js +++ b/api/db/migrations/20210810061837_add-column-createdBy-to-organizations.js @@ -2,14 +2,16 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'createdBy'; const REFERENCED_COLUMN_NAME = 'users.id'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.integer(COLUMN_NAME).unsigned().references(REFERENCED_COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210810084355_alter_table_account-recovery-demands_add_not_null_schoolingRegistrationId.js b/api/db/migrations/20210810084355_alter_table_account-recovery-demands_add_not_null_schoolingRegistrationId.js index 51936118d63..1bfe8fe309a 100644 --- a/api/db/migrations/20210810084355_alter_table_account-recovery-demands_add_not_null_schoolingRegistrationId.js +++ b/api/db/migrations/20210810084355_alter_table_account-recovery-demands_add_not_null_schoolingRegistrationId.js @@ -1,7 +1,9 @@ -exports.up = function (knex) { +const up = function (knex) { return knex.raw('ALTER TABLE "account-recovery-demands" ALTER COLUMN "schoolingRegistrationId" SET NOT NULL'); }; -exports.down = function (knex) { +const down = function (knex) { return knex.raw('ALTER TABLE "account-recovery-demands" ALTER COLUMN "schoolingRegistrationId" DROP NOT NULL'); }; + +export { up, down }; diff --git a/api/db/migrations/20210811153908_alter_table_account-recovery-demands_add_foreign_key_not_null_userId.js b/api/db/migrations/20210811153908_alter_table_account-recovery-demands_add_foreign_key_not_null_userId.js index e84f65f8830..23f26fd36db 100644 --- a/api/db/migrations/20210811153908_alter_table_account-recovery-demands_add_foreign_key_not_null_userId.js +++ b/api/db/migrations/20210811153908_alter_table_account-recovery-demands_add_foreign_key_not_null_userId.js @@ -1,11 +1,13 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw('ALTER TABLE "account-recovery-demands" ALTER COLUMN "userId" SET NOT NULL'); await knex.raw( 'ALTER TABLE "account-recovery-demands" ADD CONSTRAINT "account_recovery_demands_userid_foreign" FOREIGN KEY ("userId") REFERENCES "users" (id)' ); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.raw('ALTER TABLE "account-recovery-demands" ALTER COLUMN "userId" DROP NOT NULL'); await knex.raw('ALTER TABLE "account-recovery-demands" DROP CONSTRAINT "account_recovery_demands_userid_foreign"'); }; + +export { up, down }; diff --git a/api/db/migrations/20210818132942_add-bigintId-to-knowledge-elements.js b/api/db/migrations/20210818132942_add-bigintId-to-knowledge-elements.js index d82cabe5037..45035329d17 100644 --- a/api/db/migrations/20210818132942_add-bigintId-to-knowledge-elements.js +++ b/api/db/migrations/20210818132942_add-bigintId-to-knowledge-elements.js @@ -2,7 +2,7 @@ const TABLE_NAME = 'knowledge-elements'; const COLUMN_NAME = 'bigintId'; const FAKE_VALUE_TO_COMPLY_WITH_NOT_NULL_CONSTRAINT_MANDATORY_FOR_FUTURE_PK = -1; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table .bigInteger(COLUMN_NAME) @@ -25,7 +25,7 @@ exports.up = async function (knex) { EXECUTE FUNCTION copy_int_id_to_bigint_id();`); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.raw('DROP TRIGGER "trg_knowledge-elements" ON "knowledge-elements"'); await knex.raw('DROP FUNCTION copy_int_id_to_bigint_id'); @@ -33,3 +33,5 @@ exports.down = async function (knex) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210818155256_copy_id_to_bigintid_on_knowledge-elements.js b/api/db/migrations/20210818155256_copy_id_to_bigintid_on_knowledge-elements.js index 74f651e60a0..e6be98c2007 100644 --- a/api/db/migrations/20210818155256_copy_id_to_bigintid_on_knowledge-elements.js +++ b/api/db/migrations/20210818155256_copy_id_to_bigintid_on_knowledge-elements.js @@ -1,6 +1,6 @@ const MAX_ROW_COUNT_FOR_SYNCHRONOUS_MIGRATION = 10000000; -exports.up = async function (knex) { +const up = async function (knex) { const nbRows = (await knex('knowledge-elements').max('id').first()).max; if (nbRows < MAX_ROW_COUNT_FOR_SYNCHRONOUS_MIGRATION) { @@ -9,6 +9,8 @@ exports.up = async function (knex) { } }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.raw('DROP INDEX IF EXISTS "knowledge-elements_bigintId_index"'); }; + +export { up, down }; diff --git a/api/db/migrations/20210819161111_use-bigint-for-knowledge-elements-pk.js b/api/db/migrations/20210819161111_use-bigint-for-knowledge-elements-pk.js index 376e3813356..a19a5f5e8e9 100644 --- a/api/db/migrations/20210819161111_use-bigint-for-knowledge-elements-pk.js +++ b/api/db/migrations/20210819161111_use-bigint-for-knowledge-elements-pk.js @@ -1,6 +1,6 @@ const MAX_ROW_COUNT_FOR_CREATING_BACK_PK_IN_DEPLOYMENT = 500000; -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw('LOCK TABLE "knowledge-elements" IN ACCESS EXCLUSIVE MODE'); await knex.raw('DROP TRIGGER "trg_knowledge-elements" ON "knowledge-elements"'); await knex.raw('DROP FUNCTION copy_int_id_to_bigint_id'); @@ -19,7 +19,7 @@ exports.up = async function (knex) { await knex.raw('ALTER TABLE "knowledge-elements" RENAME COLUMN "bigintId" TO "id"'); }; -exports.down = async function (knex) { +const down = async function (knex) { const nbRows = (await knex('knowledge-elements').max('id').first()).max; if (nbRows < MAX_ROW_COUNT_FOR_CREATING_BACK_PK_IN_DEPLOYMENT) { @@ -60,3 +60,5 @@ exports.down = async function (knex) { // https://doc.scalingo.com/platform/app/postdeploy-hook#limits } }; + +export { up, down }; diff --git a/api/db/migrations/20210820071611_remove-integer-id-from-knowledge-elements.js b/api/db/migrations/20210820071611_remove-integer-id-from-knowledge-elements.js index 84ebf9ee31c..d712a77f9d4 100644 --- a/api/db/migrations/20210820071611_remove-integer-id-from-knowledge-elements.js +++ b/api/db/migrations/20210820071611_remove-integer-id-from-knowledge-elements.js @@ -1,7 +1,9 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw('ALTER TABLE "knowledge-elements" DROP COLUMN "intId"'); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.raw('ALTER TABLE "knowledge-elements" ADD COLUMN "intId" INTEGER'); }; + +export { up, down }; diff --git a/api/db/migrations/20210823142553_add-column-assessment-method-to-campaigns-table.js b/api/db/migrations/20210823142553_add-column-assessment-method-to-campaigns-table.js index 325feda9ed3..b992fd8391f 100644 --- a/api/db/migrations/20210823142553_add-column-assessment-method-to-campaigns-table.js +++ b/api/db/migrations/20210823142553_add-column-assessment-method-to-campaigns-table.js @@ -2,14 +2,16 @@ const TABLE_NAME = 'campaigns'; const COLUMN_NAME = 'assessmentMethod'; const DEFAULT_COLUMN_VALUE = 'SMART_RANDOM'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.text(COLUMN_NAME).defaultTo(DEFAULT_COLUMN_VALUE); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210827153245_add-column-last-question-state-in-assessment.js b/api/db/migrations/20210827153245_add-column-last-question-state-in-assessment.js index 7cc19a62367..70ccf6eae83 100644 --- a/api/db/migrations/20210827153245_add-column-last-question-state-in-assessment.js +++ b/api/db/migrations/20210827153245_add-column-last-question-state-in-assessment.js @@ -1,11 +1,13 @@ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table('assessments', (table) => { table.string('lastQuestionState', 50).default('asked'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table('assessments', function (table) { table.dropColumn('lastQuestionState'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210830100754_delete-index-on-account-recovery-demands-table.js b/api/db/migrations/20210830100754_delete-index-on-account-recovery-demands-table.js index 17138702b69..8a828f6d5f9 100644 --- a/api/db/migrations/20210830100754_delete-index-on-account-recovery-demands-table.js +++ b/api/db/migrations/20210830100754_delete-index-on-account-recovery-demands-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'account-recovery-demands'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex('oldEmail'); table.dropIndex('newEmail'); @@ -8,10 +8,12 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index('oldEmail'); table.index('newEmail'); table.index('temporaryKey'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210831124754_add-last-logged-at-column-in-users-table.js b/api/db/migrations/20210831124754_add-last-logged-at-column-in-users-table.js index a4810fff7c7..68cb99e50e4 100644 --- a/api/db/migrations/20210831124754_add-last-logged-at-column-in-users-table.js +++ b/api/db/migrations/20210831124754_add-last-logged-at-column-in-users-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'lastLoggedAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dateTime(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210831140352_add_certification-courses_abort-reason.js b/api/db/migrations/20210831140352_add_certification-courses_abort-reason.js index 5e4230a75d2..0d5089c8aad 100644 --- a/api/db/migrations/20210831140352_add_certification-courses_abort-reason.js +++ b/api/db/migrations/20210831140352_add_certification-courses_abort-reason.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-courses'; const COLUMN_NAME = 'abortReason'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.text(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210831141155_add-columns-for-session-jury-comments.js b/api/db/migrations/20210831141155_add-columns-for-session-jury-comments.js index d8e684a944e..951ed6f25ed 100644 --- a/api/db/migrations/20210831141155_add-columns-for-session-jury-comments.js +++ b/api/db/migrations/20210831141155_add-columns-for-session-jury-comments.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'sessions'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.text('juryComment').defaultsTo(null); table.integer('juryCommentAuthorId').unsigned().references('users.id').defaultsTo(null); @@ -8,10 +8,12 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.dropColumn('juryComment'); table.dropColumn('juryCommentAuthorId'); table.dropColumn('juryCommentedAt'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210831141356_create-accreditations-table.js b/api/db/migrations/20210831141356_create-accreditations-table.js index 388570e2f18..eca744be51a 100644 --- a/api/db/migrations/20210831141356_create-accreditations-table.js +++ b/api/db/migrations/20210831141356_create-accreditations-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'accreditations'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.string('name').notNullable(); @@ -8,6 +8,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20210831142318_create-granted-accreditations-table.js b/api/db/migrations/20210831142318_create-granted-accreditations-table.js index c252503c927..53d549bcd42 100644 --- a/api/db/migrations/20210831142318_create-granted-accreditations-table.js +++ b/api/db/migrations/20210831142318_create-granted-accreditations-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'granted-accreditations'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.dateTime('createdAt').notNullable().defaultTo(knex.fn.now()); @@ -9,6 +9,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20210831145630_create-accredited-badges-table.js b/api/db/migrations/20210831145630_create-accredited-badges-table.js index 14acd197ccd..34be6c75b96 100644 --- a/api/db/migrations/20210831145630_create-accredited-badges-table.js +++ b/api/db/migrations/20210831145630_create-accredited-badges-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'accredited-badges'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('accreditationId').references('accreditations.id').notNullable(); @@ -9,6 +9,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20210902135810_add-status-column-on-campaign-participations.js b/api/db/migrations/20210902135810_add-status-column-on-campaign-participations.js index 241d5ed82a5..77aac35dc63 100644 --- a/api/db/migrations/20210902135810_add-status-column-on-campaign-participations.js +++ b/api/db/migrations/20210902135810_add-status-column-on-campaign-participations.js @@ -2,14 +2,16 @@ const TABLE_NAME = 'campaign-participations'; const COLUMN_NAME = 'status'; const DEFAULT_COLUMN_VALUE = 'STARTED'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME).defaultTo(DEFAULT_COLUMN_VALUE); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210907094748_add-column-has-seen-other-challenges-tooltip-to-users-table.js b/api/db/migrations/20210907094748_add-column-has-seen-other-challenges-tooltip-to-users-table.js index be07dd32446..98f56cd7d65 100644 --- a/api/db/migrations/20210907094748_add-column-has-seen-other-challenges-tooltip-to-users-table.js +++ b/api/db/migrations/20210907094748_add-column-has-seen-other-challenges-tooltip-to-users-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'hasSeenOtherChallengesTooltip'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210908085902_add-method-column-in-assessments.js b/api/db/migrations/20210908085902_add-method-column-in-assessments.js index 3733b3f6927..bddd83de99b 100644 --- a/api/db/migrations/20210908085902_add-method-column-in-assessments.js +++ b/api/db/migrations/20210908085902_add-method-column-in-assessments.js @@ -1,7 +1,7 @@ const TABLE_NAME = 'assessments'; const COLUMN_NAME = 'method'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, (table) => { table.text(COLUMN_NAME); }); @@ -26,8 +26,10 @@ exports.up = async function (knex) { } }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210916120235_update-badges-imageUrl-to-url-with-pix-domain.js b/api/db/migrations/20210916120235_update-badges-imageUrl-to-url-with-pix-domain.js index 22051a41340..2d4f170ec99 100644 --- a/api/db/migrations/20210916120235_update-badges-imageUrl-to-url-with-pix-domain.js +++ b/api/db/migrations/20210916120235_update-badges-imageUrl-to-url-with-pix-domain.js @@ -3,13 +3,15 @@ const COLUMN_NAME = 'imageUrl'; const OVH_URL = 'https://storage.gra.cloud.ovh.net/v1/AUTH_27c5a6d3d35841a5914c7fb9a8e96345/pix-images'; const PIX_URL = 'https://images.pix.fr'; -exports.up = function (knex) { +const up = function (knex) { // eslint-disable-next-line knex/avoid-injections return knex.raw( `UPDATE ${TABLE_NAME} SET "${COLUMN_NAME}" = REPLACE("${COLUMN_NAME}", '${OVH_URL}', '${PIX_URL}') WHERE "${COLUMN_NAME}" LIKE '${OVH_URL}%';` ); }; -exports.down = function () { +const down = function () { return; }; + +export { up, down }; diff --git a/api/db/migrations/20210917121620_add-hasBeenSkippedAutomatically-in-certification-chalenge-table.js b/api/db/migrations/20210917121620_add-hasBeenSkippedAutomatically-in-certification-chalenge-table.js index 356d7d9588e..7bd760b061c 100644 --- a/api/db/migrations/20210917121620_add-hasBeenSkippedAutomatically-in-certification-chalenge-table.js +++ b/api/db/migrations/20210917121620_add-hasBeenSkippedAutomatically-in-certification-chalenge-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-challenges'; const COLUMN_NAME = 'hasBeenSkippedAutomatically'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).notNullable().defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210917162014_add-column-visible-to-badges-table.js b/api/db/migrations/20210917162014_add-column-visible-to-badges-table.js index f17cf2f5f38..21bcd11bef9 100644 --- a/api/db/migrations/20210917162014_add-column-visible-to-badges-table.js +++ b/api/db/migrations/20210917162014_add-column-visible-to-badges-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'badges'; const TITLE_COLUMN = 'isAlwaysVisible'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(TITLE_COLUMN).notNullable().defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(TITLE_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210920153452_add-column-focusedout-to-answers.js b/api/db/migrations/20210920153452_add-column-focusedout-to-answers.js index 72c653f49f4..2630f3dfacb 100644 --- a/api/db/migrations/20210920153452_add-column-focusedout-to-answers.js +++ b/api/db/migrations/20210920153452_add-column-focusedout-to-answers.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'answers'; const COLUMN_NAME = 'isFocusedOut'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).notNullable().defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20210922124114_rename-masteryPercentage-to-masteryRate.js b/api/db/migrations/20210922124114_rename-masteryPercentage-to-masteryRate.js index c09d1827c22..bcf272e06d1 100644 --- a/api/db/migrations/20210922124114_rename-masteryPercentage-to-masteryRate.js +++ b/api/db/migrations/20210922124114_rename-masteryPercentage-to-masteryRate.js @@ -2,10 +2,12 @@ const TABLE_NAME = 'campaign-participations'; const OLD_COLUMN_NAME = 'masteryPercentage'; const NEW_COLUMN_NAME = 'masteryRate'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (t) => t.renameColumn(OLD_COLUMN_NAME, NEW_COLUMN_NAME)); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (t) => t.renameColumn(NEW_COLUMN_NAME, OLD_COLUMN_NAME)); }; + +export { up, down }; diff --git a/api/db/migrations/20211008153516_remove-is-shared-column.js b/api/db/migrations/20211008153516_remove-is-shared-column.js index cae8afdd1a0..4964104a2bd 100644 --- a/api/db/migrations/20211008153516_remove-is-shared-column.js +++ b/api/db/migrations/20211008153516_remove-is-shared-column.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'campaign-participations'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn('isShared'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string('isShared'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211012123226_rename-badge-partner-competences-to-skillsets.js b/api/db/migrations/20211012123226_rename-badge-partner-competences-to-skillsets.js index 03777572571..c2558ede5c4 100644 --- a/api/db/migrations/20211012123226_rename-badge-partner-competences-to-skillsets.js +++ b/api/db/migrations/20211012123226_rename-badge-partner-competences-to-skillsets.js @@ -4,12 +4,14 @@ const NEW_TABLE_NAME = 'skill-sets'; const OLD_COLUMN_NAME = 'partnerCompetenceIds'; const NEW_COLUMN_NAME = 'skillSetIds'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.renameTable(OLD_TABLE_NAME, NEW_TABLE_NAME); return knex.schema.table('badge-criteria', (t) => t.renameColumn(OLD_COLUMN_NAME, NEW_COLUMN_NAME)); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.renameTable(NEW_TABLE_NAME, OLD_TABLE_NAME); return knex.schema.table('badge-criteria', (t) => t.renameColumn(NEW_COLUMN_NAME, OLD_COLUMN_NAME)); }; + +export { up, down }; diff --git a/api/db/migrations/20211019121329_add_session_password.js b/api/db/migrations/20211019121329_add_session_password.js index 6bc387fa657..c81826fad7b 100644 --- a/api/db/migrations/20211019121329_add_session_password.js +++ b/api/db/migrations/20211019121329_add_session_password.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'sessions'; const COLUMN_NAME = 'supervisorPassword'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME, 5); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211025132405_create-table-complementary-certifications.js b/api/db/migrations/20211025132405_create-table-complementary-certifications.js index fc060c03ef6..f78fdad1ab3 100644 --- a/api/db/migrations/20211025132405_create-table-complementary-certifications.js +++ b/api/db/migrations/20211025132405_create-table-complementary-certifications.js @@ -1,4 +1,4 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.createTable('complementary-certifications', (t) => { t.increments().primary(); t.string('name').notNullable(); @@ -17,6 +17,8 @@ exports.up = async function (knex) { } }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable('complementary-certifications'); }; + +export { up, down }; diff --git a/api/db/migrations/20211025155811_create-table-complementary-certification-habilitations.js b/api/db/migrations/20211025155811_create-table-complementary-certification-habilitations.js index bcae57dc214..6d931b269b2 100644 --- a/api/db/migrations/20211025155811_create-table-complementary-certification-habilitations.js +++ b/api/db/migrations/20211025155811_create-table-complementary-certification-habilitations.js @@ -1,4 +1,4 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.createTable('complementary-certification-habilitations', (t) => { t.increments().primary(); t.dateTime('createdAt').notNullable().defaultTo(knex.fn.now()); @@ -30,6 +30,8 @@ exports.up = async function (knex) { } }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable('complementary-certification-habilitations'); }; + +export { up, down }; diff --git a/api/db/migrations/20211025155926_create-table-complementary-certification-badges.js b/api/db/migrations/20211025155926_create-table-complementary-certification-badges.js index 3cd195b6636..23af1a2e2aa 100644 --- a/api/db/migrations/20211025155926_create-table-complementary-certification-badges.js +++ b/api/db/migrations/20211025155926_create-table-complementary-certification-badges.js @@ -1,4 +1,4 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.createTable('complementary-certification-badges', (t) => { t.increments().primary(); t.dateTime('createdAt').notNullable().defaultTo(knex.fn.now()); @@ -26,6 +26,8 @@ exports.up = async function (knex) { } }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable('complementary-certification-badges'); }; + +export { up, down }; diff --git a/api/db/migrations/20211029094139_add-candidate-in-session-status.js b/api/db/migrations/20211029094139_add-candidate-in-session-status.js index 3693d3086e7..e18c487df01 100644 --- a/api/db/migrations/20211029094139_add-candidate-in-session-status.js +++ b/api/db/migrations/20211029094139_add-candidate-in-session-status.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-candidates'; const TITLE_COLUMN = 'authorizedToStart'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(TITLE_COLUMN).notNullable().defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(TITLE_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211029181054_set-certification-center-type-as-not-null.js b/api/db/migrations/20211029181054_set-certification-center-type-as-not-null.js index 97c1ab56daa..54c41a1e85b 100644 --- a/api/db/migrations/20211029181054_set-certification-center-type-as-not-null.js +++ b/api/db/migrations/20211029181054_set-certification-center-type-as-not-null.js @@ -1,7 +1,9 @@ -exports.up = function (knex) { +const up = function (knex) { return knex.raw('ALTER TABLE "certification-centers" ALTER COLUMN "type" SET NOT NULL'); }; -exports.down = function (knex) { +const down = function (knex) { return knex.raw('ALTER TABLE "certification-centers" ALTER COLUMN "type" DROP NOT NULL'); }; + +export { up, down }; diff --git a/api/db/migrations/20211103094329_create-table-supervisor-accesses.js b/api/db/migrations/20211103094329_create-table-supervisor-accesses.js index ebd45ace4f4..aea3c0687c1 100644 --- a/api/db/migrations/20211103094329_create-table-supervisor-accesses.js +++ b/api/db/migrations/20211103094329_create-table-supervisor-accesses.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'supervisor-accesses'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('sessionId').references('sessions.id').notNullable(); @@ -9,6 +9,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20211108140716_create-table-complementary-certification-subscriptions.js b/api/db/migrations/20211108140716_create-table-complementary-certification-subscriptions.js index 53dd03e8923..4b32b6218d7 100644 --- a/api/db/migrations/20211108140716_create-table-complementary-certification-subscriptions.js +++ b/api/db/migrations/20211108140716_create-table-complementary-certification-subscriptions.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'complementary-certification-subscriptions'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.integer('complementaryCertificationId').references('complementary-certifications.id').notNullable(); t.integer('certificationCandidateId').references('certification-candidates.id').notNullable(); @@ -8,6 +8,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20211112093024_add-description-in-target-profiles.js b/api/db/migrations/20211112093024_add-description-in-target-profiles.js index 3f60d6c848e..ae3de3decf0 100644 --- a/api/db/migrations/20211112093024_add-description-in-target-profiles.js +++ b/api/db/migrations/20211112093024_add-description-in-target-profiles.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'target-profiles'; const COLUMN_NAME = 'description'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.text(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211112144138_add_updatedAt_column_to_certification_centers_table.js b/api/db/migrations/20211112144138_add_updatedAt_column_to_certification_centers_table.js index 97472b3f553..2ddabbf9923 100644 --- a/api/db/migrations/20211112144138_add_updatedAt_column_to_certification_centers_table.js +++ b/api/db/migrations/20211112144138_add_updatedAt_column_to_certification_centers_table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-centers'; const UPDATED_AT_COLUMN = 'updatedAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dateTime(UPDATED_AT_COLUMN).notNullable().defaultTo(knex.fn.now()); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(UPDATED_AT_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211116091730_add_user_agent_to_feedbacks.js b/api/db/migrations/20211116091730_add_user_agent_to_feedbacks.js index 26efe0b3afc..254b210c74c 100644 --- a/api/db/migrations/20211116091730_add_user_agent_to_feedbacks.js +++ b/api/db/migrations/20211116091730_add_user_agent_to_feedbacks.js @@ -1,11 +1,13 @@ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table('feedbacks', function (table) { table.string('userAgent'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table('feedbacks', (table) => { table.dropColumn('userAgent'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211118141612_add-private-comments-on-target-profile.js b/api/db/migrations/20211118141612_add-private-comments-on-target-profile.js index ef9a24fb973..6524f1f7913 100644 --- a/api/db/migrations/20211118141612_add-private-comments-on-target-profile.js +++ b/api/db/migrations/20211118141612_add-private-comments-on-target-profile.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'target-profiles'; const COMMENT = 'comment'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.text(COMMENT); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COMMENT); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211122131317_create-table-complementary-certification-courses.js b/api/db/migrations/20211122131317_create-table-complementary-certification-courses.js index e1e013be634..085c018b3a5 100644 --- a/api/db/migrations/20211122131317_create-table-complementary-certification-courses.js +++ b/api/db/migrations/20211122131317_create-table-complementary-certification-courses.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'complementary-certification-courses'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.integer('complementaryCertificationId').references('complementary-certifications.id').notNullable(); t.integer('certificationCourseId').references('certification-courses.id').notNullable(); @@ -8,6 +8,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20211123133135_resole-existing-certification-issue-reports.js b/api/db/migrations/20211123133135_resole-existing-certification-issue-reports.js index 03621519f95..33624bbbe1c 100644 --- a/api/db/migrations/20211123133135_resole-existing-certification-issue-reports.js +++ b/api/db/migrations/20211123133135_resole-existing-certification-issue-reports.js @@ -1,4 +1,4 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw(`UPDATE "certification-issue-reports" SET "resolvedAt" = NOW() WHERE id IN @@ -12,6 +12,8 @@ exports.up = async function (knex) { )`); }; -exports.down = function () { +const down = function () { return; }; + +export { up, down }; diff --git a/api/db/migrations/20211126144130_add-disabled-at-column-in-certification-center-memberships-table.js b/api/db/migrations/20211126144130_add-disabled-at-column-in-certification-center-memberships-table.js index 233a9fa7f30..302a298970f 100644 --- a/api/db/migrations/20211126144130_add-disabled-at-column-in-certification-center-memberships-table.js +++ b/api/db/migrations/20211126144130_add-disabled-at-column-in-certification-center-memberships-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-center-memberships'; const DISABLED_AT_COLUMN = 'disabledAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dateTime(DISABLED_AT_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(DISABLED_AT_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211130133233_add_lastPixOrgaTermsOfServiceValidatedAt_column_to_users_table.js b/api/db/migrations/20211130133233_add_lastPixOrgaTermsOfServiceValidatedAt_column_to_users_table.js index b1eff9d20d1..a73c1f8d385 100644 --- a/api/db/migrations/20211130133233_add_lastPixOrgaTermsOfServiceValidatedAt_column_to_users_table.js +++ b/api/db/migrations/20211130133233_add_lastPixOrgaTermsOfServiceValidatedAt_column_to_users_table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'lastPixOrgaTermsOfServiceValidatedAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dateTime(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211201102703_add_lastPixCertifTermsOfServiceValidatedAt_column_to_users_table.js b/api/db/migrations/20211201102703_add_lastPixCertifTermsOfServiceValidatedAt_column_to_users_table.js index fda1cd867e6..192f5d0bee3 100644 --- a/api/db/migrations/20211201102703_add_lastPixCertifTermsOfServiceValidatedAt_column_to_users_table.js +++ b/api/db/migrations/20211201102703_add_lastPixCertifTermsOfServiceValidatedAt_column_to_users_table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'lastPixCertifTermsOfServiceValidatedAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dateTime(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211203133335_add_documentation_to_organization.js b/api/db/migrations/20211203133335_add_documentation_to_organization.js index 0ab4be8cddc..436052cf13a 100644 --- a/api/db/migrations/20211203133335_add_documentation_to_organization.js +++ b/api/db/migrations/20211203133335_add_documentation_to_organization.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'documentationUrl'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.text(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211208080142_drop-granted-accreditations-table.js b/api/db/migrations/20211208080142_drop-granted-accreditations-table.js index 9ec31f0c459..0a694800cd3 100644 --- a/api/db/migrations/20211208080142_drop-granted-accreditations-table.js +++ b/api/db/migrations/20211208080142_drop-granted-accreditations-table.js @@ -1,10 +1,10 @@ const TABLE_NAME = 'granted-accreditations'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.dateTime('createdAt').notNullable().defaultTo(knex.fn.now()); @@ -12,3 +12,5 @@ exports.down = function (knex) { t.integer('certificationCenterId').references('certification-centers.id').notNullable(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211208080513_drop-accreditated-badges-table.js b/api/db/migrations/20211208080513_drop-accreditated-badges-table.js index 230de87c669..c96d07839ce 100644 --- a/api/db/migrations/20211208080513_drop-accreditated-badges-table.js +++ b/api/db/migrations/20211208080513_drop-accreditated-badges-table.js @@ -1,10 +1,10 @@ const TABLE_NAME = 'accredited-badges'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('accreditationId').references('accreditations.id').notNullable(); @@ -12,3 +12,5 @@ exports.down = (knex) => { t.dateTime('createdAt').notNullable().defaultTo(knex.fn.now()); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211208080645_drop-accreditations-table.js b/api/db/migrations/20211208080645_drop-accreditations-table.js index 7aca5dc7635..5fe3dda7ed9 100644 --- a/api/db/migrations/20211208080645_drop-accreditations-table.js +++ b/api/db/migrations/20211208080645_drop-accreditations-table.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'accreditations'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.string('name').notNullable(); t.dateTime('createdAt').notNullable().defaultTo(knex.fn.now()); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211209130833_add-shownps-to-organization.js b/api/db/migrations/20211209130833_add-shownps-to-organization.js index dbea73d2ed3..2535dfc3c88 100644 --- a/api/db/migrations/20211209130833_add-shownps-to-organization.js +++ b/api/db/migrations/20211209130833_add-shownps-to-organization.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'showNPS'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.boolean(COLUMN_NAME).notNullable().defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211213103138_add-urlNPS-to-organizations.js b/api/db/migrations/20211213103138_add-urlNPS-to-organizations.js index ae66aa823ef..abb4d82eed3 100644 --- a/api/db/migrations/20211213103138_add-urlNPS-to-organizations.js +++ b/api/db/migrations/20211213103138_add-urlNPS-to-organizations.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'formNPSUrl'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211220105432_add-ownerId-to-campaigns.js b/api/db/migrations/20211220105432_add-ownerId-to-campaigns.js index 16580e5a2b5..0a4cc8e71ca 100644 --- a/api/db/migrations/20211220105432_add-ownerId-to-campaigns.js +++ b/api/db/migrations/20211220105432_add-ownerId-to-campaigns.js @@ -1,7 +1,7 @@ const TABLE_NAME = 'campaigns'; const COLUMN_NAME = 'ownerId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema .table(TABLE_NAME, function (table) { table.bigInteger(COLUMN_NAME).references('users.id'); @@ -16,8 +16,10 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20211223092838_create-flash-assessment-results.js b/api/db/migrations/20211223092838_create-flash-assessment-results.js index fd6e67d4de1..c518e7d26e0 100644 --- a/api/db/migrations/20211223092838_create-flash-assessment-results.js +++ b/api/db/migrations/20211223092838_create-flash-assessment-results.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'flash-assessment-results'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('assessmentId').references('assessments.id').notNullable().unique(); @@ -9,6 +9,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20211223110017_add-category-to-target-profiles.js b/api/db/migrations/20211223110017_add-category-to-target-profiles.js index 4821a90c831..101ee22ae60 100644 --- a/api/db/migrations/20211223110017_add-category-to-target-profiles.js +++ b/api/db/migrations/20211223110017_add-category-to-target-profiles.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'target-profiles'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.string('category').defaultTo('OTHER'); }); @@ -8,8 +8,10 @@ exports.up = async function (knex) { await knex(TABLE_NAME).where({ isPublic: true }).update({ category: 'COMPETENCES' }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('category'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220105132942_alter-creatorId-from-campaigns-to-be-not-nullable.js b/api/db/migrations/20220105132942_alter-creatorId-from-campaigns-to-be-not-nullable.js index d8e679dcf9e..960c4d32bd4 100644 --- a/api/db/migrations/20220105132942_alter-creatorId-from-campaigns-to-be-not-nullable.js +++ b/api/db/migrations/20220105132942_alter-creatorId-from-campaigns-to-be-not-nullable.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'campaigns'; const COLUMN_NAME = 'creatorId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.integer(COLUMN_NAME).notNullable().alter(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.integer(COLUMN_NAME).nullable().alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220106130955_add-showskills-to-organizations.js b/api/db/migrations/20220106130955_add-showskills-to-organizations.js index 48c902ad5a3..0e39f4b6db2 100644 --- a/api/db/migrations/20220106130955_add-showskills-to-organizations.js +++ b/api/db/migrations/20220106130955_add-showskills-to-organizations.js @@ -1,14 +1,17 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'showSkills'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.boolean(COLUMN_NAME).notNullable().defaultTo(false); }); await knex(TABLE_NAME).whereIn('type', ['SUP', 'PRO']).update({ showSkills: true }); }; -exports.down = async function (knex) { + +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220111143029_add-schooling-registration-id-campaign-participation.js b/api/db/migrations/20220111143029_add-schooling-registration-id-campaign-participation.js index bb52d85c360..8b2357ae541 100644 --- a/api/db/migrations/20220111143029_add-schooling-registration-id-campaign-participation.js +++ b/api/db/migrations/20220111143029_add-schooling-registration-id-campaign-participation.js @@ -2,14 +2,16 @@ const TABLE_NAME = 'campaign-participations'; const REFERENCE_TABLE_NAME = 'schooling-registrations'; const COLUMN_NAME = 'schoolingRegistrationId'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.integer(COLUMN_NAME).references(`${REFERENCE_TABLE_NAME}.id`).defaultTo(null); }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220118153609_update_pix_edu_badge_keys.js b/api/db/migrations/20220118153609_update_pix_edu_badge_keys.js index 89549583d20..1df45d7eee4 100644 --- a/api/db/migrations/20220118153609_update_pix_edu_badge_keys.js +++ b/api/db/migrations/20220118153609_update_pix_edu_badge_keys.js @@ -1,4 +1,4 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.alterTable('partner-certifications', (table) => { table.dropForeign(null, 'certification_partner_acquisitions_partnerkey_foreign'); }); @@ -43,7 +43,7 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.alterTable('partner-certifications', (table) => { table.dropForeign('partnerKey'); }); @@ -87,3 +87,5 @@ exports.down = async function (knex) { table.foreign(null, 'certification_partner_acquisitions_partnerkey_foreign').references('key').inTable('badges'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220127154426_add-billing-columns-to-certification-candidate.js b/api/db/migrations/20220127154426_add-billing-columns-to-certification-candidate.js index 51df260ceeb..ffafc2a401f 100644 --- a/api/db/migrations/20220127154426_add-billing-columns-to-certification-candidate.js +++ b/api/db/migrations/20220127154426_add-billing-columns-to-certification-candidate.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'certification-candidates'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, (table) => { table.text('billingMode').defaultsTo(null); table.text('prepaymentCode').defaultsTo(null); @@ -11,9 +11,11 @@ exports.up = async function (knex) { ); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.dropColumn('billingMode'); table.dropColumn('prepaymentCode'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220128223044_add-certification-center-isSupervisorAccessEnabled.js b/api/db/migrations/20220128223044_add-certification-center-isSupervisorAccessEnabled.js index ed211e55e4e..bae10961180 100644 --- a/api/db/migrations/20220128223044_add-certification-center-isSupervisorAccessEnabled.js +++ b/api/db/migrations/20220128223044_add-certification-center-isSupervisorAccessEnabled.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-centers'; const COLUMN_NAME = 'isSupervisorAccessEnabled'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.boolean(COLUMN_NAME).notNullable().defaultTo(false); }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220202140419_flash-assessment-result-history.js b/api/db/migrations/20220202140419_flash-assessment-result-history.js index fd03d39429f..89ae0f249f8 100644 --- a/api/db/migrations/20220202140419_flash-assessment-result-history.js +++ b/api/db/migrations/20220202140419_flash-assessment-result-history.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'flash-assessment-results'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.raw('alter table "flash-assessment-results" alter column id type bigint'); await knex.schema.table(TABLE_NAME, (t) => { @@ -22,7 +22,7 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex(TABLE_NAME) .whereIn( 'answerId', @@ -59,3 +59,5 @@ exports.down = async function (knex) { t.dropColumn('answerId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220204111119_replace-empty-string-by-null-for-custom-landing-page-text.js b/api/db/migrations/20220204111119_replace-empty-string-by-null-for-custom-landing-page-text.js index 756fc610d38..59bff1029e0 100644 --- a/api/db/migrations/20220204111119_replace-empty-string-by-null-for-custom-landing-page-text.js +++ b/api/db/migrations/20220204111119_replace-empty-string-by-null-for-custom-landing-page-text.js @@ -1,7 +1,9 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex('campaigns').where({ customLandingPageText: '' }).update({ customLandingPageText: null }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex('campaigns').where({ customLandingPageText: null }).update({ customLandingPageText: '' }); }; + +export { up, down }; diff --git a/api/db/migrations/20220209161348_drop-birthdate-constraint-on-schooling-registrations.js b/api/db/migrations/20220209161348_drop-birthdate-constraint-on-schooling-registrations.js index 16d9bd44c22..e9594a7ec30 100644 --- a/api/db/migrations/20220209161348_drop-birthdate-constraint-on-schooling-registrations.js +++ b/api/db/migrations/20220209161348_drop-birthdate-constraint-on-schooling-registrations.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'schooling-registrations'; const COLUMN_NAME = 'birthdate'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.date(COLUMN_NAME).nullable().alter(); }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.date(COLUMN_NAME).notNullable().alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220221103255_update-unique-constraint-on-certification-center-memberships.js b/api/db/migrations/20220221103255_update-unique-constraint-on-certification-center-memberships.js index d3202a88d64..f45f2dca1b2 100644 --- a/api/db/migrations/20220221103255_update-unique-constraint-on-certification-center-memberships.js +++ b/api/db/migrations/20220221103255_update-unique-constraint-on-certification-center-memberships.js @@ -1,4 +1,4 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table('certification-center-memberships', function (table) { table.dropUnique(['userId', 'certificationCenterId']); }); @@ -7,9 +7,11 @@ exports.up = async function (knex) { ); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table('certification-center-memberships', function (table) { table.dropUnique(null, 'certification-center-memberships_userid_certificationcenterid_disabledAt_unique'); table.unique(['userId', 'certificationCenterId']); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220225130743_rename-user-tutorials-to-user-saved-tutorials.js b/api/db/migrations/20220225130743_rename-user-tutorials-to-user-saved-tutorials.js index ae35f688427..cba234e7b59 100644 --- a/api/db/migrations/20220225130743_rename-user-tutorials-to-user-saved-tutorials.js +++ b/api/db/migrations/20220225130743_rename-user-tutorials-to-user-saved-tutorials.js @@ -1,24 +1,28 @@ -/* eslint-disable knex/avoid-injections */ const OLD_TABLE_NAME = 'user_tutorials'; const NEW_TABLE_NAME = 'user-saved-tutorials'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.renameTable(OLD_TABLE_NAME, NEW_TABLE_NAME); + // eslint-disable-next-line knex/avoid-injections await knex.raw( `ALTER TABLE "${NEW_TABLE_NAME}" RENAME CONSTRAINT "${OLD_TABLE_NAME}_pkey" TO "${NEW_TABLE_NAME}_pkey"` ); + // eslint-disable-next-line knex/avoid-injections await knex.raw( `ALTER TABLE "${NEW_TABLE_NAME}" RENAME CONSTRAINT "${OLD_TABLE_NAME}_userid_tutorialid_unique" TO "${NEW_TABLE_NAME}_userid_tutorialid_unique"` ); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.renameTable(NEW_TABLE_NAME, OLD_TABLE_NAME); + // eslint-disable-next-line knex/avoid-injections await knex.raw( `ALTER TABLE "${OLD_TABLE_NAME}" RENAME CONSTRAINT "${NEW_TABLE_NAME}_pkey" TO "${OLD_TABLE_NAME}_pkey"` ); + // eslint-disable-next-line knex/avoid-injections await knex.raw( `ALTER TABLE "${OLD_TABLE_NAME}" RENAME CONSTRAINT "${NEW_TABLE_NAME}_userid_tutorialid_unique" TO "${OLD_TABLE_NAME}_userid_tutorialid_unique"` ); }; -/* eslint-enable knex/avoid-injections */ + +export { up, down }; diff --git a/api/db/migrations/20220225145933_add-skillid-in-user-saved-tutorials.js b/api/db/migrations/20220225145933_add-skillid-in-user-saved-tutorials.js index aa6105871de..70c691b06b1 100644 --- a/api/db/migrations/20220225145933_add-skillid-in-user-saved-tutorials.js +++ b/api/db/migrations/20220225145933_add-skillid-in-user-saved-tutorials.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'user-saved-tutorials'; const COLUMN_NAME = 'skillId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.string(COLUMN_NAME).defaultTo(null); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220228135813_add-archived-at-and-archived-by-columns-on-organizations-table.js b/api/db/migrations/20220228135813_add-archived-at-and-archived-by-columns-on-organizations-table.js index 3cdf7114818..5ca78ffba72 100644 --- a/api/db/migrations/20220228135813_add-archived-at-and-archived-by-columns-on-organizations-table.js +++ b/api/db/migrations/20220228135813_add-archived-at-and-archived-by-columns-on-organizations-table.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'organizations'; const ARCHIVED_AT = 'archivedAt'; const ARCHIVED_BY = 'archivedBy'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, async (table) => { table.dateTime(ARCHIVED_AT).nullable(); table.bigInteger(ARCHIVED_BY).nullable().references('users.id'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(ARCHIVED_AT); table.dropColumn(ARCHIVED_BY); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220228150453_delete-can-collect-profile-column.js b/api/db/migrations/20220228150453_delete-can-collect-profile-column.js index 7eb4e9c3be3..2d3e04a551e 100644 --- a/api/db/migrations/20220228150453_delete-can-collect-profile-column.js +++ b/api/db/migrations/20220228150453_delete-can-collect-profile-column.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organizations'; const COLUMN = 'canCollectProfiles'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, async (table) => { table.dropColumn(COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, async (table) => { table.boolean(COLUMN).notNullable().defaultTo(false); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220228154928_rename-table-schooling-registrations-by-organization-learners.js b/api/db/migrations/20220228154928_rename-table-schooling-registrations-by-organization-learners.js index 5dc0521898c..a852218db27 100644 --- a/api/db/migrations/20220228154928_rename-table-schooling-registrations-by-organization-learners.js +++ b/api/db/migrations/20220228154928_rename-table-schooling-registrations-by-organization-learners.js @@ -1,10 +1,12 @@ const OLD_TABLE_NAME = 'schooling-registrations'; const NEW_TABLE_NAME = 'organization-learners'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.renameTable(OLD_TABLE_NAME, NEW_TABLE_NAME); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.renameTable(NEW_TABLE_NAME, OLD_TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20220302101303_add-deletedat-deletedby-on-campaign-participations.js b/api/db/migrations/20220302101303_add-deletedat-deletedby-on-campaign-participations.js index 646d0db83bc..28eace84eba 100644 --- a/api/db/migrations/20220302101303_add-deletedat-deletedby-on-campaign-participations.js +++ b/api/db/migrations/20220302101303_add-deletedat-deletedby-on-campaign-participations.js @@ -8,7 +8,7 @@ const CAMPAIGNID_COLUMN = 'campaignId'; const NEW_CONSTRAINT_NAME = 'campaign_participations_campaignid_userid_isimproved_deleted'; const OLD_CONSTRAINT_NAME = 'campaign_participations_campaignid_userid_isimproved'; -exports.up = async function (knex) { +const up = async function (knex) { // eslint-disable-next-line knex/avoid-injections await knex.raw(`DROP INDEX ${OLD_CONSTRAINT_NAME};`); @@ -23,7 +23,7 @@ exports.up = async function (knex) { ); }; -exports.down = async function (knex) { +const down = async function (knex) { // eslint-disable-next-line knex/avoid-injections await knex.raw(`DROP INDEX ${NEW_CONSTRAINT_NAME};`); @@ -37,3 +37,5 @@ exports.down = async function (knex) { `CREATE UNIQUE INDEX ${OLD_CONSTRAINT_NAME} ON "${TABLE_NAME}" ("${CAMPAIGNID_COLUMN}", "${USERID_COLUMN}" ) WHERE "${ISIMPROVED_COLUMN}" IS FALSE;` ); }; + +export { up, down }; diff --git a/api/db/migrations/20220303094934_add-column-temporary-partner-key-in-partner-certifications-and-populate-it.js b/api/db/migrations/20220303094934_add-column-temporary-partner-key-in-partner-certifications-and-populate-it.js index d1e8ca23606..ccaac07ca0d 100644 --- a/api/db/migrations/20220303094934_add-column-temporary-partner-key-in-partner-certifications-and-populate-it.js +++ b/api/db/migrations/20220303094934_add-column-temporary-partner-key-in-partner-certifications-and-populate-it.js @@ -1,10 +1,11 @@ +import { badges } from '../constants.js'; const { PIX_EDU_FORMATION_INITIALE_2ND_DEGRE_INITIE, PIX_EDU_FORMATION_INITIALE_2ND_DEGRE_CONFIRME, PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE_CONFIRME, PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE_AVANCE, PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE_EXPERT, -} = require('../constants').badges.keys; +} = badges.keys; const pixEduBadges = [ PIX_EDU_FORMATION_INITIALE_2ND_DEGRE_INITIE, @@ -16,7 +17,7 @@ const pixEduBadges = [ .map((badge) => `'${badge}'`) .join(','); -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.alterTable('partner-certifications', function (table) { table.string('partnerKey').nullable().alter(); table.string('temporaryPartnerKey').references('badges.key').nullable(); @@ -28,7 +29,7 @@ exports.up = async function (knex) { ); }; -exports.down = async function (knex) { +const down = async function (knex) { // eslint-disable-next-line knex/avoid-injections await knex.raw( `UPDATE "partner-certifications" SET "partnerKey" = "temporaryPartnerKey" WHERE "temporaryPartnerKey" IN (${pixEduBadges})` @@ -39,3 +40,5 @@ exports.down = async function (knex) { table.string('partnerKey').notNullable().alter(); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220303102116_rename-schooling-registration-id-to-organization-learner-id.js b/api/db/migrations/20220303102116_rename-schooling-registration-id-to-organization-learner-id.js index a203a9f46a6..59df819322d 100644 --- a/api/db/migrations/20220303102116_rename-schooling-registration-id-to-organization-learner-id.js +++ b/api/db/migrations/20220303102116_rename-schooling-registration-id-to-organization-learner-id.js @@ -4,7 +4,7 @@ const CAMPAIGN_PARTICIPATIONS = 'campaign-participations'; const OLD_COLUMN_NAME = 'schoolingRegistrationId'; const NEW_COLUMN_NAME = 'organizationLearnerId'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(ACCOUNT_RECOVERY_DEMANDS, (table) => table.renameColumn(OLD_COLUMN_NAME, NEW_COLUMN_NAME)); await knex.schema.table(CERTIFICATION_CANDIDATES, (table) => { @@ -19,7 +19,7 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(ACCOUNT_RECOVERY_DEMANDS, (table) => table.renameColumn(NEW_COLUMN_NAME, OLD_COLUMN_NAME)); await knex.schema.table(CERTIFICATION_CANDIDATES, (table) => { @@ -33,3 +33,5 @@ exports.down = async function (knex) { table.renameColumn(NEW_COLUMN_NAME, OLD_COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220325144812_add-complementary-certification-courses-table.js b/api/db/migrations/20220325144812_add-complementary-certification-courses-table.js index 49a9d037ea2..94e32adc894 100644 --- a/api/db/migrations/20220325144812_add-complementary-certification-courses-table.js +++ b/api/db/migrations/20220325144812_add-complementary-certification-courses-table.js @@ -1,13 +1,15 @@ const COMPLEMENTARY_CERTIFICATION_COURSES_TABLE_NAME = 'complementary-certification-courses'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(COMPLEMENTARY_CERTIFICATION_COURSES_TABLE_NAME, async (table) => { table.increments('id').primary(); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(COMPLEMENTARY_CERTIFICATION_COURSES_TABLE_NAME, async (table) => { table.dropColumn('id'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220328102300_rename_partner-certification.js b/api/db/migrations/20220328102300_rename_partner-certification.js index 07347ce1c54..6d730c9c285 100644 --- a/api/db/migrations/20220328102300_rename_partner-certification.js +++ b/api/db/migrations/20220328102300_rename_partner-certification.js @@ -1,10 +1,12 @@ const OLD_TABLE_NAME = 'partner-certifications'; const COMPLEMENTARY_CERTIFICATION_COURSE_RESULTS_TABLE = 'complementary-certification-course-results'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.renameTable(OLD_TABLE_NAME, COMPLEMENTARY_CERTIFICATION_COURSE_RESULTS_TABLE); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.renameTable(COMPLEMENTARY_CERTIFICATION_COURSE_RESULTS_TABLE, OLD_TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20220328102301_link-complementary-certification-course-results-to-complementary-certification-courses.js b/api/db/migrations/20220328102301_link-complementary-certification-course-results-to-complementary-certification-courses.js index a59ddd0f364..2ee0002481d 100644 --- a/api/db/migrations/20220328102301_link-complementary-certification-course-results-to-complementary-certification-courses.js +++ b/api/db/migrations/20220328102301_link-complementary-certification-course-results-to-complementary-certification-courses.js @@ -3,8 +3,10 @@ const COMPLEMENTARY_CERTIFICATION_COURSES_TABLE = 'complementary-certification-c const COMPLEMENTARY_CERTIFICATION_COURSE_RESULTS_TABLE = 'complementary-certification-course-results'; const COMPLEMENTARY_CERTIFICATION_COURSE_ID_COLUMN = 'complementaryCertificationCourseId'; const CERTIFICATION_COURSE_ID = 'certificationCourseId'; -const uniqBy = require('lodash/uniqBy'); -const bluebird = require('bluebird'); +import lodash from 'lodash'; +const { uniqBy } = lodash; +import bluebird from 'bluebird'; +import { badges } from '../constants.js'; const { PIX_EMPLOI_CLEA, PIX_EMPLOI_CLEA_V2, @@ -15,13 +17,13 @@ const { PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE_CONFIRME, PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE_AVANCE, PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE_EXPERT, -} = require('../constants').badges.keys; +} = badges.keys; const PIX_PLUS_EDU = 'Pix+ Édu'; const PIX_PLUS_DROIT = 'Pix+ Droit'; const CLEA = 'CléA Numérique'; -exports.up = async function (knex) { +const up = async function (knex) { const complementaryCertifications = await knex(COMPLEMENTARY_CERTIFICATIONS_TABLE).select('*'); await _alterComplementaryCertificationCourseResultsForeignKey(); await _addMissingComplementaryCertificationCourses(); @@ -151,7 +153,7 @@ exports.up = async function (knex) { } }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(COMPLEMENTARY_CERTIFICATION_COURSE_RESULTS_TABLE, async (table) => { table .dropColumn(COMPLEMENTARY_CERTIFICATION_COURSE_ID_COLUMN) @@ -159,3 +161,5 @@ exports.down = async function (knex) { .references('complementary-certification-courses.id'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220406083222_add_index_for_table_knowledge_elements_on_column_assessmentId.js b/api/db/migrations/20220406083222_add_index_for_table_knowledge_elements_on_column_assessmentId.js index 53ec65026f3..9aa17c160b4 100644 --- a/api/db/migrations/20220406083222_add_index_for_table_knowledge_elements_on_column_assessmentId.js +++ b/api/db/migrations/20220406083222_add_index_for_table_knowledge_elements_on_column_assessmentId.js @@ -1,9 +1,11 @@ -exports.up = (knex) => { +const up = function (knex) { return knex.raw( 'CREATE INDEX IF NOT EXISTS "knowledge-elements_assessmentId_idx" on "knowledge-elements" ("assessmentId")' ); }; -exports.down = function (knex) { +const down = function (knex) { return knex.raw('DROP INDEX "knowledge-elements_assessmentId_idx"'); }; + +export { up, down }; diff --git a/api/db/migrations/20220406140150_drop-unused-index-on-userid-table-user-orga-settings.js b/api/db/migrations/20220406140150_drop-unused-index-on-userid-table-user-orga-settings.js index dfe72738836..8e31ffb7e55 100644 --- a/api/db/migrations/20220406140150_drop-unused-index-on-userid-table-user-orga-settings.js +++ b/api/db/migrations/20220406140150_drop-unused-index-on-userid-table-user-orga-settings.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'user-orga-settings'; const USERID_COLUMN = 'userId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropIndex(USERID_COLUMN); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.index(USERID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220406140553_drop-unused-index-on-owner-organization-id-table-target-profiles.js b/api/db/migrations/20220406140553_drop-unused-index-on-owner-organization-id-table-target-profiles.js index 023ec097f37..2b9c1de28bd 100644 --- a/api/db/migrations/20220406140553_drop-unused-index-on-owner-organization-id-table-target-profiles.js +++ b/api/db/migrations/20220406140553_drop-unused-index-on-owner-organization-id-table-target-profiles.js @@ -2,14 +2,16 @@ const TABLE_NAME = 'target-profiles'; const USERID_COLUMN = 'ownerOrganizationId'; const INDEX_NAME = 'target_profiles_organizationid_index'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(USERID_COLUMN, INDEX_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(USERID_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220407193857_add-column-reproducibility-rate-in-assessment-results-table.js b/api/db/migrations/20220407193857_add-column-reproducibility-rate-in-assessment-results-table.js index 06460ad558f..f2fbd3bb6dd 100644 --- a/api/db/migrations/20220407193857_add-column-reproducibility-rate-in-assessment-results-table.js +++ b/api/db/migrations/20220407193857_add-column-reproducibility-rate-in-assessment-results-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'assessment-results'; const COLUMN_NAME = 'reproducibilityRate'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.decimal(COLUMN_NAME, 5, 2).defaultTo(null); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220411134827_add-column-source-to-complementary-certification-results.js b/api/db/migrations/20220411134827_add-column-source-to-complementary-certification-results.js index 4e75af74c66..d3029a9700f 100644 --- a/api/db/migrations/20220411134827_add-column-source-to-complementary-certification-results.js +++ b/api/db/migrations/20220411134827_add-column-source-to-complementary-certification-results.js @@ -1,7 +1,7 @@ const TABLE_NAME = 'complementary-certification-course-results'; const COLUMN_NAME = 'source'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.string(COLUMN_NAME).defaultTo('PIX').notNullable(); }); @@ -12,8 +12,10 @@ exports.up = async function (knex) { `); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220411140819_migrate-complementary-certification-results-sources.js b/api/db/migrations/20220411140819_migrate-complementary-certification-results-sources.js index d8537e8f428..b43276e71f4 100644 --- a/api/db/migrations/20220411140819_migrate-complementary-certification-results-sources.js +++ b/api/db/migrations/20220411140819_migrate-complementary-certification-results-sources.js @@ -1,7 +1,7 @@ const TABLE_NAME = 'complementary-certification-course-results'; const TEMPORARY_PARTNER_KEY_COLUMN_NAME = 'temporaryPartnerKey'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw(` INSERT INTO "complementary-certification-course-results" ("partnerKey", "complementaryCertificationCourseId", "acquired", "source") SELECT "partnerKey", "complementaryCertificationCourseId", "acquired", 'EXTERNAL' @@ -21,7 +21,7 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.string(TEMPORARY_PARTNER_KEY_COLUMN_NAME).references('badges.key').nullable(); }); @@ -56,3 +56,5 @@ exports.down = async function (knex) { WHERE "source" = 'EXTERNAL' `); }; + +export { up, down }; diff --git a/api/db/migrations/20220412085737_update-table-from-users-pix-roles-to-pix-admin-roles.js b/api/db/migrations/20220412085737_update-table-from-users-pix-roles-to-pix-admin-roles.js index be5020ed973..832d0c711c9 100644 --- a/api/db/migrations/20220412085737_update-table-from-users-pix-roles-to-pix-admin-roles.js +++ b/api/db/migrations/20220412085737_update-table-from-users-pix-roles-to-pix-admin-roles.js @@ -8,7 +8,7 @@ const OLD_COLUMN_NAME = 'user_id'; const NEW_COLUMN_NAME = 'userId'; const COLUMN_TO_DELETE = 'pix_role_id'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.renameTable(OLD_TABLE_NAME, NEW_TABLE_NAME); await knex.schema.table(NEW_TABLE_NAME, (table) => { table.string(ROLE_COLUMN); @@ -31,7 +31,7 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.renameTable(NEW_TABLE_NAME, OLD_TABLE_NAME); await knex.schema.table(OLD_TABLE_NAME, (table) => { @@ -42,3 +42,5 @@ exports.down = async function (knex) { table.renameColumn(NEW_COLUMN_NAME, OLD_COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220412092214_delete-pix-roles-table.js b/api/db/migrations/20220412092214_delete-pix-roles-table.js index f69c1ce0a0a..cdb318230a7 100644 --- a/api/db/migrations/20220412092214_delete-pix-roles-table.js +++ b/api/db/migrations/20220412092214_delete-pix-roles-table.js @@ -2,11 +2,11 @@ const TABLE_NAME_TO_DELETE = 'pix_roles'; const TABLE_NAME_TO_UPDATE = 'pix-admin-roles'; const COLUMN_TO_DELETE = 'pix_role_id'; -exports.up = async (knex) => { +const up = async function (knex) { await knex.schema.dropTable(TABLE_NAME_TO_DELETE); }; -exports.down = async (knex) => { +const down = async function (knex) { await knex.schema.createTable(TABLE_NAME_TO_DELETE, (table) => { table.increments('id').primary(); table.string('name').notNull(); @@ -18,3 +18,5 @@ exports.down = async (knex) => { table.bigInteger(COLUMN_TO_DELETE).defaultTo(pixRoleId).references(`${TABLE_NAME_TO_DELETE}.id`); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220415083318_add-organization-places-table.js b/api/db/migrations/20220415083318_add-organization-places-table.js index 27ceb989d7a..8ab98bc5fe2 100644 --- a/api/db/migrations/20220415083318_add-organization-places-table.js +++ b/api/db/migrations/20220415083318_add-organization-places-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'organization-places'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('count'); @@ -14,6 +14,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20220415140322_add-extension-for-pgboss.js b/api/db/migrations/20220415140322_add-extension-for-pgboss.js index ab352a38793..8cad2a8a3af 100644 --- a/api/db/migrations/20220415140322_add-extension-for-pgboss.js +++ b/api/db/migrations/20220415140322_add-extension-for-pgboss.js @@ -1,7 +1,9 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw('CREATE EXTENSION IF NOT EXISTS pgcrypto;'); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.raw('DROP EXTENSION IF EXISTS pgcrypto;'); }; + +export { up, down }; diff --git a/api/db/migrations/20220427094148_add-check-constraint-on-pix-admin-roles.js b/api/db/migrations/20220427094148_add-check-constraint-on-pix-admin-roles.js index 1229cac37d6..ede61a9d17c 100644 --- a/api/db/migrations/20220427094148_add-check-constraint-on-pix-admin-roles.js +++ b/api/db/migrations/20220427094148_add-check-constraint-on-pix-admin-roles.js @@ -1,9 +1,11 @@ -exports.up = function (knex) { +const up = function (knex) { return knex.raw( "ALTER TABLE \"pix-admin-roles\" ADD CONSTRAINT \"pix-admin-roles_role_check\" CHECK ( \"role\" IN ('SUPER_ADMIN', 'SUPPORT', 'METIER', 'CERTIF') )" ); }; -exports.down = function (knex) { +const down = function (knex) { return knex.raw('ALTER TABLE "pix-admin-roles" DROP CONSTRAINT "pix-admin-roles_role_check"'); }; + +export { up, down }; diff --git a/api/db/migrations/20220429143417_add-scoring-columns-to-table-complementary-certifications.js b/api/db/migrations/20220429143417_add-scoring-columns-to-table-complementary-certifications.js index f2390a3f38f..390425593ba 100644 --- a/api/db/migrations/20220429143417_add-scoring-columns-to-table-complementary-certifications.js +++ b/api/db/migrations/20220429143417_add-scoring-columns-to-table-complementary-certifications.js @@ -1,4 +1,4 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table('complementary-certifications', (table) => { table.decimal('minimumReproducibilityRate', 5, 2).nullable(); table.integer('minimumEarnedPix').nullable(); @@ -12,9 +12,11 @@ exports.up = async function (knex) { .where({ name: 'CléA Numérique' }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table('complementary-certifications', (table) => { table.dropColumn('minimumReproducibilityRate'); table.dropColumn('minimumEarnedPix'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220504150638_add-extension-pg-trgm.js b/api/db/migrations/20220504150638_add-extension-pg-trgm.js index cf02874d151..8c7546b1d31 100644 --- a/api/db/migrations/20220504150638_add-extension-pg-trgm.js +++ b/api/db/migrations/20220504150638_add-extension-pg-trgm.js @@ -1,7 +1,9 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw('CREATE EXTENSION IF NOT EXISTS pg_trgm;'); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.raw('DROP EXTENSION IF EXISTS pg_trgm;'); }; + +export { up, down }; diff --git a/api/db/migrations/20220506091338_add_cnav_identity_provider_to_authentication_methods_table.js b/api/db/migrations/20220506091338_add_cnav_identity_provider_to_authentication_methods_table.js index 4ce78387608..1e40b2a60c8 100644 --- a/api/db/migrations/20220506091338_add_cnav_identity_provider_to_authentication_methods_table.js +++ b/api/db/migrations/20220506091338_add_cnav_identity_provider_to_authentication_methods_table.js @@ -1,4 +1,4 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw( 'ALTER TABLE "authentication-methods" DROP CONSTRAINT "authentication_methods_identityProvider_check" ' ); @@ -7,7 +7,7 @@ exports.up = async function (knex) { ); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.raw( 'ALTER TABLE "authentication-methods" DROP CONSTRAINT "authentication_methods_identityProvider_check" ' ); @@ -15,3 +15,5 @@ exports.down = async function (knex) { 'ALTER TABLE "authentication-methods" ADD CONSTRAINT "authentication_methods_identityProvider_check" CHECK ( "identityProvider" IN (\'PIX\', \'GAR\', \'POLE_EMPLOI\') )' ); }; + +export { up, down }; diff --git a/api/db/migrations/20220510124351_create-target-profile-template-table.js b/api/db/migrations/20220510124351_create-target-profile-template-table.js index 06d38182a76..4217cc8b0d0 100644 --- a/api/db/migrations/20220510124351_create-target-profile-template-table.js +++ b/api/db/migrations/20220510124351_create-target-profile-template-table.js @@ -2,7 +2,7 @@ const TEMPLATE_TABLE_NAME = 'target-profile-templates'; const TEMPLATE_TUBES_TABLE_NAME = 'target-profile-templates_tubes'; const TARGET_PROFILE_TABLE_NAME = 'target-profiles'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.createTable(TEMPLATE_TABLE_NAME, (t) => { t.increments().primary(); }); @@ -19,10 +19,12 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TARGET_PROFILE_TABLE_NAME, (t) => { t.dropColumn('targetProfileTemplateId'); }); await knex.schema.dropTable(TEMPLATE_TUBES_TABLE_NAME); await knex.schema.dropTable(TEMPLATE_TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20220510152417_fix-index-knowledge-elements-assessment-id-not-compliant-knex-convention.js b/api/db/migrations/20220510152417_fix-index-knowledge-elements-assessment-id-not-compliant-knex-convention.js index ea5671d4c8c..cae5cb0b5a4 100644 --- a/api/db/migrations/20220510152417_fix-index-knowledge-elements-assessment-id-not-compliant-knex-convention.js +++ b/api/db/migrations/20220510152417_fix-index-knowledge-elements-assessment-id-not-compliant-knex-convention.js @@ -1,9 +1,8 @@ -exports.up = (knex) => { +const up = function (knex) { return knex.raw( 'ALTER INDEX IF EXISTS "knowledge-elements_assessmentId_idx" RENAME TO "knowledge_elements_assessmentid_index"' ); }; - -exports.down = function () { - // no rollback for this case -}; +// eslint-disable-next-line no-empty-function +const down = function () {}; +export { up, down }; diff --git a/api/db/migrations/20220512143417_add-unique-to-table-complementary-certification-results.js b/api/db/migrations/20220512143417_add-unique-to-table-complementary-certification-results.js index d796368e49a..b8b439f5a7e 100644 --- a/api/db/migrations/20220512143417_add-unique-to-table-complementary-certification-results.js +++ b/api/db/migrations/20220512143417_add-unique-to-table-complementary-certification-results.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'complementary-certification-course-results'; const CONSTRAINT_NAME = 'complementary-certification-course-results-cccrId-source-unique'; -exports.up = async (knex) => { +const up = async function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.unique(['complementaryCertificationCourseId', 'source'], CONSTRAINT_NAME); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropUnique(['complementaryCertificationCourseId', 'source'], CONSTRAINT_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220516142918_split-pix-edu-complementary-certifications.js b/api/db/migrations/20220516142918_split-pix-edu-complementary-certifications.js index 94e46b5f887..2d090cb2ae5 100644 --- a/api/db/migrations/20220516142918_split-pix-edu-complementary-certifications.js +++ b/api/db/migrations/20220516142918_split-pix-edu-complementary-certifications.js @@ -1,12 +1,13 @@ +import { badges } from '../constants.js'; const { PIX_EDU_FORMATION_INITIALE_1ER_DEGRE_INITIE, PIX_EDU_FORMATION_INITIALE_1ER_DEGRE_CONFIRME, PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_CONFIRME, PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_AVANCE, PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_EXPERT, -} = require('../constants').badges.keys; +} = badges.keys; -exports.up = async function (knex) { +const up = async function (knex) { await knex('complementary-certifications').update({ name: 'Pix+ Édu 2nd degré' }).where({ name: 'Pix+ Édu' }); const [{ id: pixEdu1erDegreComplementaryCertificationId }] = await knex('complementary-certifications') @@ -36,7 +37,7 @@ exports.up = async function (knex) { ); }; -exports.down = async function (knex) { +const down = async function (knex) { const pixEdu1erDegreComplementaryCertificationCourseIds = await knex('complementary-certification-course-results') .select('complementaryCertificationCourseId') .distinct() @@ -70,3 +71,5 @@ exports.down = async function (knex) { await knex('complementary-certifications').update({ name: 'Pix+ Édu' }).where({ name: 'Pix+ Édu 2nd degré' }); }; + +export { up, down }; diff --git a/api/db/migrations/20220517113336_update-contraints-names-to-remove-schooling-registration-mention.js b/api/db/migrations/20220517113336_update-contraints-names-to-remove-schooling-registration-mention.js index cfb9bbf67d9..7effcbcf469 100644 --- a/api/db/migrations/20220517113336_update-contraints-names-to-remove-schooling-registration-mention.js +++ b/api/db/migrations/20220517113336_update-contraints-names-to-remove-schooling-registration-mention.js @@ -45,7 +45,7 @@ const OLD_UNIQUE_ORGANIZATION_ID_STUDENT_NUMBER_CONSTRAINT_NAME = const NEW_UNIQUE_ORGANIZATION_ID_STUDENT_NUMBER_CONSTRAINT_NAME = 'organization_learners_organizationid_studentnumber_unique'; -exports.up = async (knex) => { +const up = async function (knex) { // eslint-disable-next-line knex/avoid-injections await knex.raw( `ALTER TABLE "${CAMPAIGN_PARTICIPATIONS_TABLE}" RENAME CONSTRAINT "${OLD_FOREIGN_KEY_IN_CAMPAIGN_PARTICIPATIONS_CONSTRAINT_NAME}" TO "${NEW_FOREIGN_KEY_IN_CAMPAIGN_PARTICIPATIONS_CONSTRAINT_NAME}";` @@ -89,7 +89,7 @@ exports.up = async (knex) => { ); }; -exports.down = async (knex) => { +const down = async function (knex) { // eslint-disable-next-line knex/avoid-injections await knex.raw( `ALTER TABLE "${CAMPAIGN_PARTICIPATIONS_TABLE}" RENAME CONSTRAINT "${NEW_FOREIGN_KEY_IN_CAMPAIGN_PARTICIPATIONS_CONSTRAINT_NAME}" TO "${OLD_FOREIGN_KEY_IN_CAMPAIGN_PARTICIPATIONS_CONSTRAINT_NAME}";` @@ -132,3 +132,5 @@ exports.down = async (knex) => { `ALTER TABLE "${ORGANIZATION_LEARNERS_TABLE}" RENAME CONSTRAINT "${NEW_UNIQUE_ORGANIZATION_ID_STUDENT_NUMBER_CONSTRAINT_NAME}" TO "${OLD_UNIQUE_ORGANIZATION_ID_STUDENT_NUMBER_CONSTRAINT_NAME}";` ); }; + +export { up, down }; diff --git a/api/db/migrations/20220517131951_update-constraint-campaign-participations-organizationLearnerId-not-null.js b/api/db/migrations/20220517131951_update-constraint-campaign-participations-organizationLearnerId-not-null.js index 4dd3e51a2b6..4760dbfc40f 100644 --- a/api/db/migrations/20220517131951_update-constraint-campaign-participations-organizationLearnerId-not-null.js +++ b/api/db/migrations/20220517131951_update-constraint-campaign-participations-organizationLearnerId-not-null.js @@ -6,7 +6,7 @@ const ORGANIZATIONLEARNERID_COLUMN = 'organizationLearnerId'; const CAMPAIGNID_COLUMN = 'campaignId'; const NEW_CONSTRAINT_NAME = 'one_active_participation_by_learner'; -exports.up = async (knex) => { +const up = async function (knex) { await knex.schema.alterTable(CAMPAIGN_PARTICIPATIONS_TABLE, function (table) { table.integer(ORGANIZATIONLEARNERID_COLUMN).notNullable().alter(); }); @@ -25,7 +25,7 @@ exports.up = async (knex) => { ); }; -exports.down = async (knex) => { +const down = async function (knex) { await knex.schema.alterTable(CAMPAIGN_PARTICIPATIONS_TABLE, function (table) { table.integer(ORGANIZATIONLEARNERID_COLUMN).nullable().alter(); }); @@ -33,3 +33,5 @@ exports.down = async (knex) => { // eslint-disable-next-line knex/avoid-injections return knex.raw(`DROP INDEX ${NEW_CONSTRAINT_NAME};`); }; + +export { up, down }; diff --git a/api/db/migrations/20220610085239_add-columns-incident-and-joining-issue-to-session.js b/api/db/migrations/20220610085239_add-columns-incident-and-joining-issue-to-session.js index 27d5584d418..1dcfe9462e7 100644 --- a/api/db/migrations/20220610085239_add-columns-incident-and-joining-issue-to-session.js +++ b/api/db/migrations/20220610085239_add-columns-incident-and-joining-issue-to-session.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'sessions'; const COLUMN_NAME_INCIDENT = 'hasIncident'; const COLUMN_NAME_JOINING_ISSUE = 'hasJoiningIssue'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.boolean(COLUMN_NAME_INCIDENT).notNullable().defaultTo(false); table.boolean(COLUMN_NAME_JOINING_ISSUE).notNullable().defaultTo(false); }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME_INCIDENT); table.dropColumn(COLUMN_NAME_JOINING_ISSUE); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220616131338_add-column-status-to-tutorial-evaluations.js b/api/db/migrations/20220616131338_add-column-status-to-tutorial-evaluations.js index a3a9c1ddae0..b39d457a761 100644 --- a/api/db/migrations/20220616131338_add-column-status-to-tutorial-evaluations.js +++ b/api/db/migrations/20220616131338_add-column-status-to-tutorial-evaluations.js @@ -4,14 +4,17 @@ const EVALUATION_STATUS = { LIKED: 'LIKED', NEUTRAL: 'NEUTRAL', }; -exports.up = async function (knex) { + +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.enu(COLUMN_NAME, [EVALUATION_STATUS.LIKED, EVALUATION_STATUS.NEUTRAL]).defaultTo('LIKED'); }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220617144325-rename-expiredDate-in-expirationDate-in-organization-places-table.js b/api/db/migrations/20220617144325-rename-expiredDate-in-expirationDate-in-organization-places-table.js index 7ff6ff4cf6d..42a3d2c6556 100644 --- a/api/db/migrations/20220617144325-rename-expiredDate-in-expirationDate-in-organization-places-table.js +++ b/api/db/migrations/20220617144325-rename-expiredDate-in-expirationDate-in-organization-places-table.js @@ -2,10 +2,12 @@ const TABLE_NAME = 'organization-places'; const OLD_COLUMN_NAME = 'expiredDate'; const NEW_COLUMN_NAME = 'expirationDate'; -exports.up = async function (knex) { +const up = async function (knex) { return knex.schema.table(TABLE_NAME, (t) => t.renameColumn(OLD_COLUMN_NAME, NEW_COLUMN_NAME)); }; -exports.down = async function (knex) { +const down = async function (knex) { return knex.schema.table(TABLE_NAME, (t) => t.renameColumn(NEW_COLUMN_NAME, OLD_COLUMN_NAME)); }; + +export { up, down }; diff --git a/api/db/migrations/20220620123740_add-identity-provider-for-campaigns-column-in-organizations-table.js b/api/db/migrations/20220620123740_add-identity-provider-for-campaigns-column-in-organizations-table.js index 93af0261f45..f4c3fc94b68 100644 --- a/api/db/migrations/20220620123740_add-identity-provider-for-campaigns-column-in-organizations-table.js +++ b/api/db/migrations/20220620123740_add-identity-provider-for-campaigns-column-in-organizations-table.js @@ -1,7 +1,7 @@ const TABLE_NAME = 'organizations'; const COLUMN_NAME = 'identityProviderForCampaigns'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, async (table) => { table.string(COLUMN_NAME).nullable(); }); @@ -11,8 +11,10 @@ exports.up = async function (knex) { ); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220629091212_drop-target-profile-template-table.js b/api/db/migrations/20220629091212_drop-target-profile-template-table.js index 5ff6d53cf40..ce4f3658a19 100644 --- a/api/db/migrations/20220629091212_drop-target-profile-template-table.js +++ b/api/db/migrations/20220629091212_drop-target-profile-template-table.js @@ -1,11 +1,11 @@ -const bluebird = require('bluebird'); +import bluebird from 'bluebird'; const TEMPLATE_TABLE_NAME = 'target-profile-templates'; const OLD_TEMPLATE_TUBES_TABLE_NAME = 'target-profile-templates_tubes'; const TARGET_PROFILE_TUBES_TABLE_NAME = 'target-profile_tubes'; const TARGET_PROFILE_TABLE_NAME = 'target-profiles'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.renameTable(OLD_TEMPLATE_TUBES_TABLE_NAME, TARGET_PROFILE_TUBES_TABLE_NAME); await knex.schema.table(TARGET_PROFILE_TUBES_TABLE_NAME, (t) => { @@ -30,7 +30,7 @@ exports.up = async function (knex) { await knex.schema.dropTable(TEMPLATE_TABLE_NAME); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.createTable(TEMPLATE_TABLE_NAME, (t) => { t.increments().primary(); }); @@ -59,3 +59,5 @@ exports.down = async function (knex) { await knex.schema.renameTable(TARGET_PROFILE_TUBES_TABLE_NAME, OLD_TEMPLATE_TUBES_TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20220711194824_add-level-to-complementary-certification-badges.js b/api/db/migrations/20220711194824_add-level-to-complementary-certification-badges.js index b7c8b0c4441..cdbe3dbe6f5 100644 --- a/api/db/migrations/20220711194824_add-level-to-complementary-certification-badges.js +++ b/api/db/migrations/20220711194824_add-level-to-complementary-certification-badges.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'complementary-certification-badges'; const COLUMN_NAME = 'level'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.integer(COLUMN_NAME).notNullable().defaultTo(1); }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220712082535_insert-complementary-certification-badges.js b/api/db/migrations/20220712082535_insert-complementary-certification-badges.js index 59eb1ad4181..b1c7d6c800b 100644 --- a/api/db/migrations/20220712082535_insert-complementary-certification-badges.js +++ b/api/db/migrations/20220712082535_insert-complementary-certification-badges.js @@ -1,5 +1,10 @@ const TABLE_NAME = 'complementary-certification-badges'; -const { noop } = require('lodash'); +import lodash from 'lodash'; + +const { noop } = lodash; + +import { badges } from '../constants.js'; + const { PIX_EMPLOI_CLEA_V1, PIX_EMPLOI_CLEA_V2, @@ -20,7 +25,7 @@ const { PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE_CONFIRME, PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE_AVANCE, PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE_EXPERT, -} = require('../constants').badges.keys; +} = badges.keys; const DROIT = 'Pix+ Droit'; const CLEA = 'CléA Numérique'; @@ -73,7 +78,7 @@ const data = [ { keys: [PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE_EXPERT], level: 5, complementaryCourseKey: EDU_2 }, ]; -exports.up = async function (knex) { +const up = async function (knex) { await _insertComplementaryCertifications(); await knex(TABLE_NAME).del(); @@ -131,6 +136,8 @@ exports.up = async function (knex) { } }; -exports.down = async function () { +const down = async function () { noop; }; + +export { up, down }; diff --git a/api/db/migrations/20220712125907_add-hasBeenAutomaticallyResolved-column-to-certification-issue-reports.js b/api/db/migrations/20220712125907_add-hasBeenAutomaticallyResolved-column-to-certification-issue-reports.js index 96b3d1ff91e..de8ebe54c1f 100644 --- a/api/db/migrations/20220712125907_add-hasBeenAutomaticallyResolved-column-to-certification-issue-reports.js +++ b/api/db/migrations/20220712125907_add-hasBeenAutomaticallyResolved-column-to-certification-issue-reports.js @@ -11,7 +11,7 @@ const autoResolveSentences = [ 'Cette réponse a été acceptée automatiquement', ]; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table('certification-issue-reports', (table) => { table.boolean('hasBeenAutomaticallyResolved').nullable(); }); @@ -24,8 +24,10 @@ exports.up = async function (knex) { .update({ hasBeenAutomaticallyResolved: true }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table('certification-issue-reports', (table) => { table.dropColumn('hasBeenAutomaticallyResolved'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220721115757_alter-answers-id-from-int-to-bigint.js b/api/db/migrations/20220721115757_alter-answers-id-from-int-to-bigint.js index 26a6dea9b52..f4d30327a8e 100644 --- a/api/db/migrations/20220721115757_alter-answers-id-from-int-to-bigint.js +++ b/api/db/migrations/20220721115757_alter-answers-id-from-int-to-bigint.js @@ -9,7 +9,7 @@ const changeAnswerIdTypeToBigint = async (knex) => { }); }; -exports.up = async function (knex) { +const up = async function (knex) { const { rows: answersCheckDataTypeQueryResult } = await knex.raw(` SELECT "column_name","data_type" FROM "information_schema"."columns" @@ -33,7 +33,6 @@ exports.up = async function (knex) { } } }; - -exports.down = function () { - // no need for rollback -}; +// eslint-disable-next-line no-empty-function +const down = function () {}; +export { up, down }; diff --git a/api/db/migrations/20220729092523_add-column-key-and-rename-name-as-label-to-complemantary-certifications.js b/api/db/migrations/20220729092523_add-column-key-and-rename-name-as-label-to-complemantary-certifications.js index 65f81f7d155..b68252816c8 100644 --- a/api/db/migrations/20220729092523_add-column-key-and-rename-name-as-label-to-complemantary-certifications.js +++ b/api/db/migrations/20220729092523_add-column-key-and-rename-name-as-label-to-complemantary-certifications.js @@ -3,7 +3,7 @@ const COLUMN_NAME_NAME = 'name'; const COLUMN_NAME_LABEL = 'label'; const COLUMN_NAME_KEY = 'key'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.string(COLUMN_NAME_KEY); }); @@ -19,9 +19,11 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME_KEY); table.renameColumn(COLUMN_NAME_LABEL, COLUMN_NAME_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220802093742_add-imageUrl-to-complementary-certification-badges.js b/api/db/migrations/20220802093742_add-imageUrl-to-complementary-certification-badges.js index 126274d8573..0129ee6a20d 100644 --- a/api/db/migrations/20220802093742_add-imageUrl-to-complementary-certification-badges.js +++ b/api/db/migrations/20220802093742_add-imageUrl-to-complementary-certification-badges.js @@ -1,3 +1,4 @@ +import { badges } from '../constants.js'; const TABLE_NAME = 'complementary-certification-badges'; const COLUMN_NAME = 'imageUrl'; const { @@ -16,11 +17,11 @@ const { PIX_EMPLOI_CLEA_V1, PIX_EMPLOI_CLEA_V2, PIX_EMPLOI_CLEA_V3, -} = require('../constants').badges.keys; +} = badges.keys; -const bluebird = require('bluebird'); +import bluebird from 'bluebird'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.string(COLUMN_NAME); }); @@ -95,8 +96,10 @@ exports.up = async function (knex) { } }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220802141209_set-isCertifiable-to-true-on-clea-badges.js b/api/db/migrations/20220802141209_set-isCertifiable-to-true-on-clea-badges.js index 1d8d8eaa6f5..498aa7f2c29 100644 --- a/api/db/migrations/20220802141209_set-isCertifiable-to-true-on-clea-badges.js +++ b/api/db/migrations/20220802141209_set-isCertifiable-to-true-on-clea-badges.js @@ -1,12 +1,15 @@ -const { PIX_EMPLOI_CLEA_V1, PIX_EMPLOI_CLEA_V2, PIX_EMPLOI_CLEA_V3 } = require('../constants').badges.keys; +import { badges } from '../constants.js'; +const { PIX_EMPLOI_CLEA_V1, PIX_EMPLOI_CLEA_V2, PIX_EMPLOI_CLEA_V3 } = badges.keys; const TABLE_NAME = 'badges'; const CLEA_KEYS = [PIX_EMPLOI_CLEA_V1, PIX_EMPLOI_CLEA_V2, PIX_EMPLOI_CLEA_V3]; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME).update({ isCertifiable: true }).whereIn('key', CLEA_KEYS); }; -exports.down = function (knex) { +const down = function (knex) { return knex(TABLE_NAME).update({ isCertifiable: false }).whereIn('key', CLEA_KEYS); }; + +export { up, down }; diff --git a/api/db/migrations/20220802143639_add-level-to-clea-certif-badges.js b/api/db/migrations/20220802143639_add-level-to-clea-certif-badges.js index a77b0a86cee..4f9af04a079 100644 --- a/api/db/migrations/20220802143639_add-level-to-clea-certif-badges.js +++ b/api/db/migrations/20220802143639_add-level-to-clea-certif-badges.js @@ -1,7 +1,8 @@ +import { badges } from '../constants.js'; const TABLE_NAME = 'complementary-certification-badges'; -const { PIX_EMPLOI_CLEA_V2, PIX_EMPLOI_CLEA_V3 } = require('../constants').badges.keys; +const { PIX_EMPLOI_CLEA_V2, PIX_EMPLOI_CLEA_V3 } = badges.keys; -exports.up = async function (knex) { +const up = async function (knex) { await knex(TABLE_NAME) .update({ level: 2 }) .where({ badgeId: knex('badges').select('id').where({ key: PIX_EMPLOI_CLEA_V2 }) }); @@ -10,7 +11,7 @@ exports.up = async function (knex) { .where({ badgeId: knex('badges').select('id').where({ key: PIX_EMPLOI_CLEA_V3 }) }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex(TABLE_NAME) .update({ level: 1 }) .where({ badgeId: knex('badges').select('id').where({ key: PIX_EMPLOI_CLEA_V2 }) }); @@ -18,3 +19,5 @@ exports.down = async function (knex) { .update({ level: 1 }) .where({ badgeId: knex('badges').select('id').where({ key: PIX_EMPLOI_CLEA_V3 }) }); }; + +export { up, down }; diff --git a/api/db/migrations/20220808152543_add-label-column-to-complementary-certification-badges-table.js b/api/db/migrations/20220808152543_add-label-column-to-complementary-certification-badges-table.js index e9a81b98033..e50d451a14b 100644 --- a/api/db/migrations/20220808152543_add-label-column-to-complementary-certification-badges-table.js +++ b/api/db/migrations/20220808152543_add-label-column-to-complementary-certification-badges-table.js @@ -1,3 +1,5 @@ +import { badges } from '../constants.js'; + const TABLE_NAME = 'complementary-certification-badges'; const COLUMN_NAME = 'label'; const { @@ -16,11 +18,11 @@ const { PIX_EMPLOI_CLEA_V1, PIX_EMPLOI_CLEA_V2, PIX_EMPLOI_CLEA_V3, -} = require('../constants').badges.keys; +} = badges.keys; -const bluebird = require('bluebird'); +import bluebird from 'bluebird'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.string(COLUMN_NAME); }); @@ -95,8 +97,10 @@ exports.up = async function (knex) { } }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220811152439_add-archived-by-to-campaigns.js b/api/db/migrations/20220811152439_add-archived-by-to-campaigns.js index b3f3cfa17cb..e0773b32bd5 100644 --- a/api/db/migrations/20220811152439_add-archived-by-to-campaigns.js +++ b/api/db/migrations/20220811152439_add-archived-by-to-campaigns.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'campaigns'; const ARCHIVEDBY_COLUMN = 'archivedBy'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, async (table) => { table.bigInteger(ARCHIVEDBY_COLUMN).index().references('users.id'); }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, async (table) => { table.dropColumn(ARCHIVEDBY_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220816125246_add-deleted-at-and-deleted-by-to-organization-places.js b/api/db/migrations/20220816125246_add-deleted-at-and-deleted-by-to-organization-places.js index 57208bcd569..4cc47a4dcad 100644 --- a/api/db/migrations/20220816125246_add-deleted-at-and-deleted-by-to-organization-places.js +++ b/api/db/migrations/20220816125246_add-deleted-at-and-deleted-by-to-organization-places.js @@ -2,24 +2,18 @@ const TABLE_NAME = 'organization-places'; const DELETEDAT_COLUMN = 'deletedAt'; const DELETEDBY_COLUMN = 'deletedBy'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, async (table) => { table.dateTime(DELETEDAT_COLUMN).nullable(); table.bigInteger(DELETEDBY_COLUMN).index().references('users.id').nullable(); }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, async (table) => { table.dropColumn(DELETEDAT_COLUMN); table.dropColumn(DELETEDBY_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220816143731_add-isCertifiable-to-campaign-participations.js b/api/db/migrations/20220816143731_add-isCertifiable-to-campaign-participations.js index 3d15702996f..38249a49f1f 100644 --- a/api/db/migrations/20220816143731_add-isCertifiable-to-campaign-participations.js +++ b/api/db/migrations/20220816143731_add-isCertifiable-to-campaign-participations.js @@ -1,22 +1,16 @@ const TABLE_NAME = 'campaign-participations'; const COLUMN = 'isCertifiable'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, async (table) => { table.boolean(COLUMN).nullable().defaultTo(null); }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, async (table) => { table.dropColumn(COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220824131510_create-campaign-skill-relationship-table.js b/api/db/migrations/20220824131510_create-campaign-skill-relationship-table.js index 519a7d7737d..ebfc5590578 100644 --- a/api/db/migrations/20220824131510_create-campaign-skill-relationship-table.js +++ b/api/db/migrations/20220824131510_create-campaign-skill-relationship-table.js @@ -3,7 +3,7 @@ const CAMPAIGN_SKILL_TABLE_NAME = 'campaign_skills'; const CAMPAIGN_ID_COLUMN = 'campaignId'; const SKILL_ID_COLUMN = 'skillId'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.createTable(CAMPAIGN_SKILL_TABLE_NAME, (t) => { t.integer(CAMPAIGN_ID_COLUMN).notNullable().references(`${CAMPAIGN_TABLE_NAME}.id`); t.string(SKILL_ID_COLUMN).notNullable(); @@ -11,6 +11,8 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.dropTable(CAMPAIGN_SKILL_TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20220830082750_add-gar-identity-provider-for-campaigns-in-organizations-table.js b/api/db/migrations/20220830082750_add-gar-identity-provider-for-campaigns-in-organizations-table.js index 6fbea122644..6328a339e85 100644 --- a/api/db/migrations/20220830082750_add-gar-identity-provider-for-campaigns-in-organizations-table.js +++ b/api/db/migrations/20220830082750_add-gar-identity-provider-for-campaigns-in-organizations-table.js @@ -1,13 +1,15 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw('ALTER TABLE "organizations" DROP CONSTRAINT "organizations_identityProviderForCampaigns_check" '); return knex.raw( 'ALTER TABLE "organizations" ADD CONSTRAINT "organizations_identityProviderForCampaigns_check" CHECK ( "identityProviderForCampaigns" IN (\'POLE_EMPLOI\', \'CNAV\', \'GAR\') )' ); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.raw('ALTER TABLE "organizations" DROP CONSTRAINT "organizations_identityProviderForCampaigns_check" '); return knex.raw( 'ALTER TABLE "organizations" ADD CONSTRAINT "organizations_identityProviderForCampaigns_check" CHECK ( "identityProviderForCampaigns" IN (\'POLE_EMPLOI\', \'CNAV\') )' ); }; + +export { up, down }; diff --git a/api/db/migrations/20220830093334_add-minimum-reproducibility-rate-in-complementary-certifications-table.js b/api/db/migrations/20220830093334_add-minimum-reproducibility-rate-in-complementary-certifications-table.js index 4e908725cbf..401bdc5fe01 100644 --- a/api/db/migrations/20220830093334_add-minimum-reproducibility-rate-in-complementary-certifications-table.js +++ b/api/db/migrations/20220830093334_add-minimum-reproducibility-rate-in-complementary-certifications-table.js @@ -1,11 +1,7 @@ const TABLE_NAME = 'complementary-certifications'; const COLUMN = 'minimumReproducibilityRate'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = async function (knex) { +const up = async function (knex) { await knex(TABLE_NAME).update({ minimumReproducibilityRate: 50.0, minimumEarnedPix: 70 }).where({ key: 'CLEA' }); await knex(TABLE_NAME).update(COLUMN, 75.0).where({ key: 'DROIT' }); @@ -17,14 +13,12 @@ exports.up = async function (knex) { }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.alterTable(TABLE_NAME, async (table) => { await table.decimal(COLUMN, 5, 2).nullable().alter(); }); await knex(TABLE_NAME).update(COLUMN, null).whereIn('key', ['DROIT', 'EDU_1ER_DEGRE', 'EDU_2ND_DEGRE']); }; + +export { up, down }; diff --git a/api/db/migrations/20220830132314_add-column-has-complementary-referential-to-complementary-certifications.js b/api/db/migrations/20220830132314_add-column-has-complementary-referential-to-complementary-certifications.js index 0fd0435ef45..eec8a22acbe 100644 --- a/api/db/migrations/20220830132314_add-column-has-complementary-referential-to-complementary-certifications.js +++ b/api/db/migrations/20220830132314_add-column-has-complementary-referential-to-complementary-certifications.js @@ -1,7 +1,7 @@ const TABLE_NAME = 'complementary-certifications'; const COLUMN_NAME = 'hasComplementaryReferential'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.boolean(COLUMN_NAME); }); @@ -16,8 +16,10 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220831084146_add-complementary-certification-badges-fk-to-complementary-certification-courses.js b/api/db/migrations/20220831084146_add-complementary-certification-badges-fk-to-complementary-certification-courses.js index cf0c004a59a..725ed7c313a 100644 --- a/api/db/migrations/20220831084146_add-complementary-certification-badges-fk-to-complementary-certification-courses.js +++ b/api/db/migrations/20220831084146_add-complementary-certification-badges-fk-to-complementary-certification-courses.js @@ -1,8 +1,8 @@ -const bluebird = require('bluebird'); +import bluebird from 'bluebird'; const TABLE_NAME = 'complementary-certification-courses'; const COLUMN = 'complementaryCertificationBadgeId'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, async (table) => { await table.integer(COLUMN).references('complementary-certification-badges.id'); }); @@ -24,8 +24,10 @@ exports.up = async function (knex) { }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, async (table) => { table.dropColumn(COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220906131043_add-level-column-to-stages-table.js b/api/db/migrations/20220906131043_add-level-column-to-stages-table.js index aeb99e8afa7..59e25025e51 100644 --- a/api/db/migrations/20220906131043_add-level-column-to-stages-table.js +++ b/api/db/migrations/20220906131043_add-level-column-to-stages-table.js @@ -2,15 +2,17 @@ const TABLE_NAME = 'stages'; const LEVEL_COLUMN = 'level'; const THRESHOLD_COLUMN = 'threshold'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, (table) => { table.integer(LEVEL_COLUMN).nullable().defaultTo(null); table.integer(THRESHOLD_COLUMN).nullable().alter(); }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, (table) => { table.dropColumn(LEVEL_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220906142048_add-assessmentId-in-flash-assessments-results.js b/api/db/migrations/20220906142048_add-assessmentId-in-flash-assessments-results.js index 77ab4d819f2..0209872ffab 100644 --- a/api/db/migrations/20220906142048_add-assessmentId-in-flash-assessments-results.js +++ b/api/db/migrations/20220906142048_add-assessmentId-in-flash-assessments-results.js @@ -1,8 +1,8 @@ -const bluebird = require('bluebird'); +import bluebird from 'bluebird'; const TABLE_NAME = 'flash-assessment-results'; const COLUMN_NAME = 'assessmentId'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, async (table) => table.integer(COLUMN_NAME).references('assessments.id')); const flashAssessmentResults = await knex(TABLE_NAME) @@ -18,6 +18,8 @@ exports.up = async function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, async (table) => table.dropColumn(COLUMN_NAME)); }; + +export { up, down }; diff --git a/api/db/migrations/20220907144932_add-column-exported-in-file-in-table-certification-courses.js b/api/db/migrations/20220907144932_add-column-exported-in-file-in-table-certification-courses.js index f4612a8cc43..e101c5065a3 100644 --- a/api/db/migrations/20220907144932_add-column-exported-in-file-in-table-certification-courses.js +++ b/api/db/migrations/20220907144932_add-column-exported-in-file-in-table-certification-courses.js @@ -1,22 +1,16 @@ const TABLE_NAME = 'certification-courses'; const COLUMN_NAME = 'cpfFilename'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.text(COLUMN_NAME).nullable(); }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220913073642_add-has-external-jury-column-to-complementary-certifications-table.js b/api/db/migrations/20220913073642_add-has-external-jury-column-to-complementary-certifications-table.js index 7a7ed64ac72..493676c938d 100644 --- a/api/db/migrations/20220913073642_add-has-external-jury-column-to-complementary-certifications-table.js +++ b/api/db/migrations/20220913073642_add-has-external-jury-column-to-complementary-certifications-table.js @@ -1,11 +1,8 @@ const TABLE_NAME = 'complementary-certifications'; const COLUMN_NAME = 'hasExternalJury'; -const { - PIX_PLUS_EDU_1ER_DEGRE, - PIX_PLUS_EDU_2ND_DEGRE, -} = require('../../lib/domain/models/ComplementaryCertification'); +import { PIX_PLUS_EDU_1ER_DEGRE, PIX_PLUS_EDU_2ND_DEGRE } from '../../lib/domain/models/ComplementaryCertification.js'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.boolean(COLUMN_NAME).notNullable().default(false); }); @@ -15,6 +12,8 @@ exports.up = async function (knex) { .whereIn('key', [PIX_PLUS_EDU_1ER_DEGRE, PIX_PLUS_EDU_2ND_DEGRE]); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, async (table) => table.dropColumn(COLUMN_NAME)); }; + +export { up, down }; diff --git a/api/db/migrations/20220914125923_replace-clea-image-url.js b/api/db/migrations/20220914125923_replace-clea-image-url.js index b850b1ebfd2..40b14b682a8 100644 --- a/api/db/migrations/20220914125923_replace-clea-image-url.js +++ b/api/db/migrations/20220914125923_replace-clea-image-url.js @@ -2,10 +2,12 @@ const TABLE_NAME = 'complementary-certification-badges'; const newUrl = 'https://images.pix.fr/badges/CleA_Num_certif.svg'; const oldUrl = 'https://images.pix.fr/badges/Pix-emploi.svg'; -exports.up = async function (knex) { +const up = async function (knex) { await knex(TABLE_NAME).update({ imageUrl: newUrl }).where({ imageUrl: oldUrl }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex(TABLE_NAME).update({ imageUrl: oldUrl }).where({ imageUrl: newUrl }); }; + +export { up, down }; diff --git a/api/db/migrations/20220915083737_add-new-column-referer-to-certification-centers-memberships.js b/api/db/migrations/20220915083737_add-new-column-referer-to-certification-centers-memberships.js index d320667dcf0..0e8112a677d 100644 --- a/api/db/migrations/20220915083737_add-new-column-referer-to-certification-centers-memberships.js +++ b/api/db/migrations/20220915083737_add-new-column-referer-to-certification-centers-memberships.js @@ -1,22 +1,16 @@ const TABLE_NAME = 'certification-center-memberships'; const COLUMN_NAME = 'isReferer'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.boolean(COLUMN_NAME).defaultTo(false); }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220920091611_add-message-columns-to-complementary-certification-badges.js b/api/db/migrations/20220920091611_add-message-columns-to-complementary-certification-badges.js index 5c8887ca2c4..29b072ae9fc 100644 --- a/api/db/migrations/20220920091611_add-message-columns-to-complementary-certification-badges.js +++ b/api/db/migrations/20220920091611_add-message-columns-to-complementary-certification-badges.js @@ -1,10 +1,10 @@ -const bluebird = require('bluebird'); +import bluebird from 'bluebird'; const TABLE_NAME = 'complementary-certification-badges'; const MESSAGE_COLUMN_NAME = 'certificateMessage'; const TEMP_MESSAGE_COLUMN_NAME = 'temporaryCertificateMessage'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.string(MESSAGE_COLUMN_NAME).nullable(); table.string(TEMP_MESSAGE_COLUMN_NAME).nullable(); @@ -29,9 +29,11 @@ exports.up = async function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(MESSAGE_COLUMN_NAME); table.dropColumn(TEMP_MESSAGE_COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220922141959_modify-messages-in-complementary-certification-badges.js b/api/db/migrations/20220922141959_modify-messages-in-complementary-certification-badges.js index f361ea60b0f..d11274f155e 100644 --- a/api/db/migrations/20220922141959_modify-messages-in-complementary-certification-badges.js +++ b/api/db/migrations/20220922141959_modify-messages-in-complementary-certification-badges.js @@ -1,4 +1,6 @@ -const bluebird = require('bluebird'); +import bluebird from 'bluebird'; +import { badges } from '../constants.js'; + const { PIX_EDU_FORMATION_INITIALE_2ND_DEGRE_INITIE, PIX_EDU_FORMATION_INITIALE_2ND_DEGRE_CONFIRME, @@ -10,12 +12,9 @@ const { PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_CONFIRME, PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_AVANCE, PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_EXPERT, -} = require('../constants').badges.keys; -/** - * @param { import('knex').Knex } knex - * @returns { Promise } - */ -exports.up = async function (knex) { +} = badges.keys; + +const up = async function (knex) { const badges = await knex('complementary-certification-badges') .select('complementary-certification-badges.id', 'key') .join('badges', 'badges.id', 'complementary-certification-badges.badgeId') @@ -61,11 +60,6 @@ exports.up = async function (knex) { .where({ id }); }); }; - -/** - * @param { import('knex').Knex } knex - * @returns { Promise } - */ -exports.down = function () { - // do nothing. -}; +// eslint-disable-next-line no-empty-function +const down = function () {}; +export { up, down }; diff --git a/api/db/migrations/20220923141951_create-data-protection-officers-table.js b/api/db/migrations/20220923141951_create-data-protection-officers-table.js index cac80553675..c4030566e23 100644 --- a/api/db/migrations/20220923141951_create-data-protection-officers-table.js +++ b/api/db/migrations/20220923141951_create-data-protection-officers-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'data-protection-officers'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.bigIncrements().primary(); t.string('firstName').nullable(); @@ -19,6 +19,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20220926084112_create_trainings_table.js b/api/db/migrations/20220926084112_create_trainings_table.js index 90282eeea8e..35c443688bc 100644 --- a/api/db/migrations/20220926084112_create_trainings_table.js +++ b/api/db/migrations/20220926084112_create_trainings_table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'trainings'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.string('title').notNullable(); @@ -13,6 +13,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20220926091617_create_target_profile_trainings_table.js b/api/db/migrations/20220926091617_create_target_profile_trainings_table.js index f6910c98ebb..525a0518cbb 100644 --- a/api/db/migrations/20220926091617_create_target_profile_trainings_table.js +++ b/api/db/migrations/20220926091617_create_target_profile_trainings_table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'target-profile-trainings'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('targetProfileId').references('target-profiles.id').notNullable(); @@ -10,6 +10,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20220927073844_add-column-sticker-url-to-table-complementary-certification-badges.js b/api/db/migrations/20220927073844_add-column-sticker-url-to-table-complementary-certification-badges.js index 77bc2a07490..07e86ba7978 100644 --- a/api/db/migrations/20220927073844_add-column-sticker-url-to-table-complementary-certification-badges.js +++ b/api/db/migrations/20220927073844_add-column-sticker-url-to-table-complementary-certification-badges.js @@ -1,4 +1,4 @@ -const bluebird = require('bluebird'); +import bluebird from 'bluebird'; const STICKERS_URL_BY_BADGE_KEY = { PIX_EMPLOI_CLEA: 'https://images.pix.fr/stickers/macaron_clea.pdf', @@ -19,11 +19,7 @@ const STICKERS_URL_BY_BADGE_KEY = { PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_EXPERT: 'https://images.pix.fr/stickers/macaron_edu_1er_expert.pdf', }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.alterTable('complementary-certification-badges', (table) => { table.string('stickerUrl'); }); @@ -39,12 +35,10 @@ exports.up = async function (knex) { }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.alterTable('complementary-certification-badges', (table) => { table.dropColumn('stickerUrl'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20220927130058_create-certification-center-invitations-table.js b/api/db/migrations/20220927130058_create-certification-center-invitations-table.js index 95487c63132..fa31793d03a 100644 --- a/api/db/migrations/20220927130058_create-certification-center-invitations-table.js +++ b/api/db/migrations/20220927130058_create-certification-center-invitations-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'certification-center-invitations'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (table) => { table.bigIncrements('id').primary(); table.bigInteger('certificationCenterId').references('certification-centers.id').index(); @@ -13,6 +13,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20221010075029_add-index-to-target-profile-tube.js b/api/db/migrations/20221010075029_add-index-to-target-profile-tube.js index 3617b8931bd..c922759619e 100644 --- a/api/db/migrations/20221010075029_add-index-to-target-profile-tube.js +++ b/api/db/migrations/20221010075029_add-index-to-target-profile-tube.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'target-profile_tubes'; const COLUMN_NAME = 'targetProfileId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20221014135401_add-column-capped-tubes-json-in-badge-criteria-table.js b/api/db/migrations/20221014135401_add-column-capped-tubes-json-in-badge-criteria-table.js index 88b2083ae39..87ca569404a 100644 --- a/api/db/migrations/20221014135401_add-column-capped-tubes-json-in-badge-criteria-table.js +++ b/api/db/migrations/20221014135401_add-column-capped-tubes-json-in-badge-criteria-table.js @@ -1,22 +1,16 @@ const TABLE_NAME = 'badge-criteria'; const COLUMN_NAME = 'cappedTubes'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.jsonb(COLUMN_NAME); }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20221017085933_create-user-recommended-trainings.js b/api/db/migrations/20221017085933_create-user-recommended-trainings.js index a5598a9f5d5..f1a36cc7fe3 100644 --- a/api/db/migrations/20221017085933_create-user-recommended-trainings.js +++ b/api/db/migrations/20221017085933_create-user-recommended-trainings.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'user-recommended-trainings'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('userId').references('users.id').notNullable(); @@ -12,6 +12,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20221018192501_add-column-pix-certification-status-in-certification-courses-table.js b/api/db/migrations/20221018192501_add-column-pix-certification-status-in-certification-courses-table.js index 5125c7bca51..9071c67bf65 100644 --- a/api/db/migrations/20221018192501_add-column-pix-certification-status-in-certification-courses-table.js +++ b/api/db/migrations/20221018192501_add-column-pix-certification-status-in-certification-courses-table.js @@ -1,22 +1,16 @@ const TABLE_NAME = 'certification-courses'; const COLUMN_NAME = 'pixCertificationStatus'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.string(COLUMN_NAME).defaultTo(null); }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20221121154233_cpf-import-status-migration.js b/api/db/migrations/20221121154233_cpf-import-status-migration.js index 39eff5d7eed..87e6a377682 100644 --- a/api/db/migrations/20221121154233_cpf-import-status-migration.js +++ b/api/db/migrations/20221121154233_cpf-import-status-migration.js @@ -1,22 +1,16 @@ const TABLE_NAME = 'certification-courses'; const COLUMN_NAME = 'cpfImportStatus'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.string(COLUMN_NAME).defaultTo(null); }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20221123110348_remove-NULL-postalCodes.js b/api/db/migrations/20221123110348_remove-NULL-postalCodes.js index 6fac3cd8042..4f1477d4593 100644 --- a/api/db/migrations/20221123110348_remove-NULL-postalCodes.js +++ b/api/db/migrations/20221123110348_remove-NULL-postalCodes.js @@ -1,8 +1,7 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex('certification-candidates').where({ birthPostalCode: 'NULL' }).update({ birthPostalCode: null }); await knex('certification-candidates').where({ birthINSEECode: 'NULL' }).update({ birthINSEECode: null }); }; - -exports.down = function () { - // do nothing. -}; +// eslint-disable-next-line no-empty-function +const down = function () {}; +export { up, down }; diff --git a/api/db/migrations/20221123144416_add-fwb-identity-provider-to-authentication-methods-table.js b/api/db/migrations/20221123144416_add-fwb-identity-provider-to-authentication-methods-table.js index cd4dc5eda7c..27b710d3e4d 100644 --- a/api/db/migrations/20221123144416_add-fwb-identity-provider-to-authentication-methods-table.js +++ b/api/db/migrations/20221123144416_add-fwb-identity-provider-to-authentication-methods-table.js @@ -1,4 +1,4 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw( 'ALTER TABLE "authentication-methods" DROP CONSTRAINT "authentication_methods_identityProvider_check" ' ); @@ -7,7 +7,7 @@ exports.up = async function (knex) { ); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.raw( 'ALTER TABLE "authentication-methods" DROP CONSTRAINT "authentication_methods_identityProvider_check" ' ); @@ -15,3 +15,5 @@ exports.down = async function (knex) { "ALTER TABLE \"authentication-methods\" ADD CONSTRAINT \"authentication_methods_identityProvider_check\" CHECK ( \"identityProvider\" IN ('PIX', 'GAR', 'POLE_EMPLOI', 'CNAV') )" ); }; + +export { up, down }; diff --git a/api/db/migrations/20221124093117_create-user-logins-table.js b/api/db/migrations/20221124093117_create-user-logins-table.js index 06d0782ca9a..34aa7fecd0a 100644 --- a/api/db/migrations/20221124093117_create-user-logins-table.js +++ b/api/db/migrations/20221124093117_create-user-logins-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'user-logins'; -exports.up = (knex) => { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.bigIncrements().primary(); t.bigInteger('userId').references('users.id').notNullable().unique(); @@ -12,6 +12,8 @@ exports.up = (knex) => { }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20221130100911_add-issue-report-categories.js b/api/db/migrations/20221130100911_add-issue-report-categories.js index bac266f5196..34300921564 100644 --- a/api/db/migrations/20221130100911_add-issue-report-categories.js +++ b/api/db/migrations/20221130100911_add-issue-report-categories.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'issue-report-categories'; -exports.up = async (knex) => { +const up = async function (knex) { await knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.string('name').notNullable(); @@ -158,6 +158,8 @@ exports.up = async (knex) => { ]); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20221130143941_add-last-assessment-result-id-to-certif-course.js b/api/db/migrations/20221130143941_add-last-assessment-result-id-to-certif-course.js index 3f20d4acd2b..eb876758744 100644 --- a/api/db/migrations/20221130143941_add-last-assessment-result-id-to-certif-course.js +++ b/api/db/migrations/20221130143941_add-last-assessment-result-id-to-certif-course.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'certification-courses-last-assessment-results'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, function (table) { table .integer('certificationCourseId') @@ -11,6 +11,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20221205153130_add-column-updatedByUserId-to-certification-center-memberships-table.js b/api/db/migrations/20221205153130_add-column-updatedByUserId-to-certification-center-memberships-table.js index e277632cd48..019c1b6dcdb 100644 --- a/api/db/migrations/20221205153130_add-column-updatedByUserId-to-certification-center-memberships-table.js +++ b/api/db/migrations/20221205153130_add-column-updatedByUserId-to-certification-center-memberships-table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'certification-center-memberships'; const COLUMN_NAME = 'updatedByUserId'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.bigInteger(COLUMN_NAME).index().references('users.id'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20221207095714_add-badge-criteria-name-column.js b/api/db/migrations/20221207095714_add-badge-criteria-name-column.js index 6d531f68489..f87279e9f17 100644 --- a/api/db/migrations/20221207095714_add-badge-criteria-name-column.js +++ b/api/db/migrations/20221207095714_add-badge-criteria-name-column.js @@ -1,22 +1,16 @@ const TABLE_NAME = 'badge-criteria'; const COLUMN_NAME = 'name'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.string(COLUMN_NAME).defaultTo(null); }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20221208141139_update-certification-issue-report.js b/api/db/migrations/20221208141139_update-certification-issue-report.js index 20f9c12e657..614d179ada7 100644 --- a/api/db/migrations/20221208141139_update-certification-issue-report.js +++ b/api/db/migrations/20221208141139_update-certification-issue-report.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'certification-issue-reports'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.alterTable(TABLE_NAME, (table) => { table.integer('categoryId').references('issue-report-categories.id'); }); }; -exports.down = async function (knex) { +const down = async function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('categoryId'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20221209101502_add_lastDataProtectionPolicySeenAt_to_users_table.js b/api/db/migrations/20221209101502_add_lastDataProtectionPolicySeenAt_to_users_table.js index 3bfd76f593b..506c254ad61 100644 --- a/api/db/migrations/20221209101502_add_lastDataProtectionPolicySeenAt_to_users_table.js +++ b/api/db/migrations/20221209101502_add_lastDataProtectionPolicySeenAt_to_users_table.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'lastDataProtectionPolicySeenAt'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dateTime(COLUMN_NAME); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20221212100331_add-training-editor-name-logo-column.js b/api/db/migrations/20221212100331_add-training-editor-name-logo-column.js index 49a89836630..97dfe78ffd9 100644 --- a/api/db/migrations/20221212100331_add-training-editor-name-logo-column.js +++ b/api/db/migrations/20221212100331_add-training-editor-name-logo-column.js @@ -5,24 +5,18 @@ const editorName = "Ministère de l'Éducation nationale et de la Jeunesse. Libe const editorLogoUrl = 'https://images.pix.fr/contenu-formatif/editeur/logo-ministere-education-nationale-et-jeunesse.svg'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.string(EDITOR_NAME_COLUMN).default(editorName).notNullable(); table.string(EDITOR_LOGO_URL_COLUMN).default(editorLogoUrl).notNullable(); }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(EDITOR_NAME_COLUMN); table.dropColumn(EDITOR_LOGO_URL_COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20221226100427_add-column-migration-status-on-target-profiles-table.js b/api/db/migrations/20221226100427_add-column-migration-status-on-target-profiles-table.js index bcd063c6d2a..a62f2d046ae 100644 --- a/api/db/migrations/20221226100427_add-column-migration-status-on-target-profiles-table.js +++ b/api/db/migrations/20221226100427_add-column-migration-status-on-target-profiles-table.js @@ -1,11 +1,7 @@ const TABLE_NAME = 'target-profiles'; const COLUMN = 'migration_status'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.string(COLUMN).default('N/A').notNullable(); }); @@ -16,12 +12,10 @@ exports.up = async function (knex) { }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN); }); }; + +export { up, down }; diff --git a/api/db/migrations/20221228135724_add-hasBeenAnonymised-and-hasBeenAnonymisedBy-to-users-table.js b/api/db/migrations/20221228135724_add-hasBeenAnonymised-and-hasBeenAnonymisedBy-to-users-table.js index cc12b15cdc2..ad1d127ad8d 100644 --- a/api/db/migrations/20221228135724_add-hasBeenAnonymised-and-hasBeenAnonymisedBy-to-users-table.js +++ b/api/db/migrations/20221228135724_add-hasBeenAnonymised-and-hasBeenAnonymisedBy-to-users-table.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'users'; const HAS_BEEN_ANONYMISED_COLUMN_NAME = 'hasBeenAnonymised'; const HAS_BEEN_ANONYMISED_BY_COLUMN_NAME = 'hasBeenAnonymisedBy'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.boolean(HAS_BEEN_ANONYMISED_COLUMN_NAME).defaultTo(false); table.integer(HAS_BEEN_ANONYMISED_BY_COLUMN_NAME).defaultTo(null); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(HAS_BEEN_ANONYMISED_COLUMN_NAME); table.dropColumn(HAS_BEEN_ANONYMISED_BY_COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20230103093529_set-date-for-hasBeenAnonymised-column-on-users-table.js b/api/db/migrations/20230103093529_set-date-for-hasBeenAnonymised-column-on-users-table.js index 021a6c92db0..dfc91cdeada 100644 --- a/api/db/migrations/20230103093529_set-date-for-hasBeenAnonymised-column-on-users-table.js +++ b/api/db/migrations/20230103093529_set-date-for-hasBeenAnonymised-column-on-users-table.js @@ -1,9 +1,11 @@ const TABLE_NAME = 'users'; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME).whereILike('email', 'email\\_%@example.net').update({ hasBeenAnonymised: true }); }; -exports.down = function (knex) { +const down = function (knex) { return knex(TABLE_NAME).whereILike('email', 'email\\_%@example.net').update({ hasBeenAnonymised: false }); }; + +export { up, down }; diff --git a/api/db/migrations/20230110144114_add_columns_prerequisiteThreshold_goalThreshold_to_trainings_table.js b/api/db/migrations/20230110144114_add_columns_prerequisiteThreshold_goalThreshold_to_trainings_table.js index e14fd089bbc..4202738da97 100644 --- a/api/db/migrations/20230110144114_add_columns_prerequisiteThreshold_goalThreshold_to_trainings_table.js +++ b/api/db/migrations/20230110144114_add_columns_prerequisiteThreshold_goalThreshold_to_trainings_table.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'trainings'; const COLUMN_NAME_PREREQUISITE_THRESHOLD = 'prerequisiteThreshold'; const COLUMN_NAME_GOAL_THRESHOLD = 'goalThreshold'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.integer(COLUMN_NAME_PREREQUISITE_THRESHOLD).nullable().defaultTo(null); table.integer(COLUMN_NAME_GOAL_THRESHOLD).nullable().defaultTo(null); }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME_PREREQUISITE_THRESHOLD); table.dropColumn(COLUMN_NAME_GOAL_THRESHOLD); }); }; + +export { up, down }; diff --git a/api/db/migrations/20230112103200_cancel-pending-organization-invitations-with-an-updatedAt-greater-than-a-year.js b/api/db/migrations/20230112103200_cancel-pending-organization-invitations-with-an-updatedAt-greater-than-a-year.js index 14e0fd8bf86..d6f0de2c9ef 100644 --- a/api/db/migrations/20230112103200_cancel-pending-organization-invitations-with-an-updatedAt-greater-than-a-year.js +++ b/api/db/migrations/20230112103200_cancel-pending-organization-invitations-with-an-updatedAt-greater-than-a-year.js @@ -1,13 +1,13 @@ -const dayjs = require('dayjs'); -const { StatusType } = require('../../lib/domain/models/OrganizationInvitation'); +import dayjs from 'dayjs'; +import { statuses as StatusType } from '../../lib/domain/models/OrganizationInvitation.js'; -exports.up = function (knex) { +const up = function (knex) { return knex('organization-invitations') .update({ status: StatusType.CANCELLED, updatedAt: new Date() }) .where('status', StatusType.PENDING) .andWhere('updatedAt', '<', dayjs().subtract(1, 'year')); }; -exports.down = function () { - // do nothing. -}; +// eslint-disable-next-line no-empty-function +const down = function () {}; +export { up, down }; diff --git a/api/db/migrations/20230112224527_drop-column-end-test-screen-removal.js b/api/db/migrations/20230112224527_drop-column-end-test-screen-removal.js index 62938b16c01..a199be239f6 100644 --- a/api/db/migrations/20230112224527_drop-column-end-test-screen-removal.js +++ b/api/db/migrations/20230112224527_drop-column-end-test-screen-removal.js @@ -1,12 +1,12 @@ const TABLE_NAME = 'certification-centers'; const COLUMN_NAME = 'isSupervisorAccessEnabled'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; -exports.down = async function () { - // do nothing. -}; +// eslint-disable-next-line no-empty-function +const down = async function () {}; +export { up, down }; diff --git a/api/db/migrations/20230124090916_add-fwb-identity-provider-to-organization-table.js b/api/db/migrations/20230124090916_add-fwb-identity-provider-to-organization-table.js index 27a0033a6fc..fc0e682f898 100644 --- a/api/db/migrations/20230124090916_add-fwb-identity-provider-to-organization-table.js +++ b/api/db/migrations/20230124090916_add-fwb-identity-provider-to-organization-table.js @@ -1,13 +1,15 @@ -exports.up = async function (knex) { +const up = async function (knex) { await knex.raw('ALTER TABLE "organizations" DROP CONSTRAINT "organizations_identityProviderForCampaigns_check" '); return knex.raw( "ALTER TABLE \"organizations\" ADD CONSTRAINT \"organizations_identityProviderForCampaigns_check\" CHECK ( \"identityProviderForCampaigns\" IN ('POLE_EMPLOI', 'CNAV', 'GAR', 'FWB') )" ); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.raw('ALTER TABLE "organizations" DROP CONSTRAINT "organizations_identityProviderForCampaigns_check" '); return knex.raw( 'ALTER TABLE "organizations" ADD CONSTRAINT "organizations_identityProviderForCampaigns_check" CHECK ( "identityProviderForCampaigns" IN (\'POLE_EMPLOI\', \'CNAV\', \'GAR\') )' ); }; + +export { up, down }; diff --git a/api/db/migrations/20230124103059_update-connection-or-end-screen-category-to-deprecated.js b/api/db/migrations/20230124103059_update-connection-or-end-screen-category-to-deprecated.js index 16351f1c7b6..69c93993370 100644 --- a/api/db/migrations/20230124103059_update-connection-or-end-screen-category-to-deprecated.js +++ b/api/db/migrations/20230124103059_update-connection-or-end-screen-category-to-deprecated.js @@ -1,9 +1,11 @@ const TABLE_NAME = 'issue-report-categories'; -exports.up = function (knex) { +const up = function (knex) { return knex(TABLE_NAME).update({ isDeprecated: true }).where('name', 'CONNECTION_OR_END_SCREEN'); }; -exports.down = function (knex) { +const down = function (knex) { return knex(TABLE_NAME).update({ isDeprecated: false }).where('name', 'CONNECTION_OR_END_SCREEN'); }; + +export { up, down }; diff --git a/api/db/migrations/20230201130836_create-training-triggers-table.js b/api/db/migrations/20230201130836_create-training-triggers-table.js index ab6678f4f9c..2c261294125 100644 --- a/api/db/migrations/20230201130836_create-training-triggers-table.js +++ b/api/db/migrations/20230201130836_create-training-triggers-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'training-triggers'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('trainingId').references('trainings.id').notNullable(); @@ -12,6 +12,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20230201130846_create-training-trigger-tubes-table.js b/api/db/migrations/20230201130846_create-training-trigger-tubes-table.js index bc61cf7c955..698a39ee870 100644 --- a/api/db/migrations/20230201130846_create-training-trigger-tubes-table.js +++ b/api/db/migrations/20230201130846_create-training-trigger-tubes-table.js @@ -1,6 +1,6 @@ const TABLE_NAME = 'training-trigger-tubes'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.createTable(TABLE_NAME, (t) => { t.increments().primary(); t.integer('trainingTriggerId').references('training-triggers.id').notNullable(); @@ -12,6 +12,8 @@ exports.up = function (knex) { }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropTable(TABLE_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20230209132840_add-created-at-index-on-pole-emploi-sendings.js b/api/db/migrations/20230209132840_add-created-at-index-on-pole-emploi-sendings.js index c14dfc3a4b4..563847c3661 100644 --- a/api/db/migrations/20230209132840_add-created-at-index-on-pole-emploi-sendings.js +++ b/api/db/migrations/20230209132840_add-created-at-index-on-pole-emploi-sendings.js @@ -1,22 +1,16 @@ const TABLE_NAME = 'pole-emploi-sendings'; const COLUMN_NAME = 'createdAt'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.index(COLUMN_NAME); }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropIndex(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20230209172400_create-unique-constrain-for-target-profile-trainings-table.js b/api/db/migrations/20230209172400_create-unique-constrain-for-target-profile-trainings-table.js index fc5ae3aa9eb..f84ae0be6ce 100644 --- a/api/db/migrations/20230209172400_create-unique-constrain-for-target-profile-trainings-table.js +++ b/api/db/migrations/20230209172400_create-unique-constrain-for-target-profile-trainings-table.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'target-profile-trainings'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (t) { t.unique(['targetProfileId', 'trainingId']); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropUnique(['targetProfileId', 'trainingId']); }); }; + +export { up, down }; diff --git a/api/db/migrations/20230301100017_add-is-first-skill-column-on-stage.js b/api/db/migrations/20230301100017_add-is-first-skill-column-on-stage.js index d05d620590b..cc28b1e012f 100644 --- a/api/db/migrations/20230301100017_add-is-first-skill-column-on-stage.js +++ b/api/db/migrations/20230301100017_add-is-first-skill-column-on-stage.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'stages'; const IS_FIRST_SKILL = 'isFirstSkill'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.boolean(IS_FIRST_SKILL).defaultTo(false); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(IS_FIRST_SKILL); }); }; + +export { up, down }; diff --git a/api/db/migrations/20230307144120_add-locale-column-to-users-table.js b/api/db/migrations/20230307144120_add-locale-column-to-users-table.js index fe9c4154624..1cafe779f1b 100644 --- a/api/db/migrations/20230307144120_add-locale-column-to-users-table.js +++ b/api/db/migrations/20230307144120_add-locale-column-to-users-table.js @@ -1,7 +1,7 @@ const TABLE_NAME = 'users'; const COLUMN_NAME = 'locale'; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.string(COLUMN_NAME).defaultTo(null); }); @@ -11,8 +11,10 @@ exports.up = async function (knex) { ); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20230316155007_add-unicity-constraint-on-column-code-campaign.js b/api/db/migrations/20230316155007_add-unicity-constraint-on-column-code-campaign.js index 255aff7b3d6..f1ce6eff10e 100644 --- a/api/db/migrations/20230316155007_add-unicity-constraint-on-column-code-campaign.js +++ b/api/db/migrations/20230316155007_add-unicity-constraint-on-column-code-campaign.js @@ -1,13 +1,15 @@ const TABLE_NAME = 'campaigns'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.alterTable(TABLE_NAME, function (t) { t.unique('code'); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropUnique('code'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20230404075638_add-constraint-on-lang-column-from-users-table.js b/api/db/migrations/20230404075638_add-constraint-on-lang-column-from-users-table.js index 4dc9e13d97e..eaca05d23f4 100644 --- a/api/db/migrations/20230404075638_add-constraint-on-lang-column-from-users-table.js +++ b/api/db/migrations/20230404075638_add-constraint-on-lang-column-from-users-table.js @@ -1,7 +1,9 @@ -exports.up = async function (knex) { +const up = async function (knex) { return knex.raw('ALTER TABLE "users" ADD CONSTRAINT "users_lang_check" CHECK ( "lang" IN (\'fr\', \'en\') )'); }; -exports.down = async function (knex) { +const down = async function (knex) { return knex.raw('ALTER TABLE "users" DROP CONSTRAINT "users_lang_check"'); }; + +export { up, down }; diff --git a/api/db/migrations/20230404151231_add-features-table.js b/api/db/migrations/20230404151231_add-features-table.js index ca1d13472d2..f204ef9516a 100644 --- a/api/db/migrations/20230404151231_add-features-table.js +++ b/api/db/migrations/20230404151231_add-features-table.js @@ -1,7 +1,7 @@ const TABLE_NAME_FEATURES = 'features'; const TABLE_NAME_ORGANIZATION_FEATURES = 'organization-features'; -exports.up = async (knex) => { +const up = async function (knex) { await knex.schema.createTable(TABLE_NAME_FEATURES, (t) => { t.bigIncrements().primary(); t.string('key').notNullable().unique(); @@ -15,8 +15,10 @@ exports.up = async (knex) => { }); }; -exports.down = async (knex) => { +const down = async function (knex) { await knex.schema.dropTable(TABLE_NAME_FEATURES); return knex.schema.dropTable(TABLE_NAME_ORGANIZATION_FEATURES); }; + +export { up, down }; diff --git a/api/db/migrations/20230407090348_add-multiple-sending-feature.js b/api/db/migrations/20230407090348_add-multiple-sending-feature.js index edbbf9ca7f4..a5a333f464c 100644 --- a/api/db/migrations/20230407090348_add-multiple-sending-feature.js +++ b/api/db/migrations/20230407090348_add-multiple-sending-feature.js @@ -1,20 +1,15 @@ const TABLE_NAME = 'features'; const MULTIPLE_SENDING_KEY = 'MULTIPLE_SENDING_ASSESSMENT'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = function (knex) { + +const up = function (knex) { return knex(TABLE_NAME).insert({ key: MULTIPLE_SENDING_KEY, description: "Permet d'activer l'envoi multiple sur les campagnes d'évaluation", }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { +const down = function (knex) { return knex(TABLE_NAME).where({ key: MULTIPLE_SENDING_KEY }).delete(); }; + +export { up, down }; diff --git a/api/db/migrations/20230413141704_add-deleted-on-organization-learners.js b/api/db/migrations/20230413141704_add-deleted-on-organization-learners.js index 2aba2da16b6..32ff55e1ef7 100644 --- a/api/db/migrations/20230413141704_add-deleted-on-organization-learners.js +++ b/api/db/migrations/20230413141704_add-deleted-on-organization-learners.js @@ -1,22 +1,17 @@ const TABLE_NAME = 'organization-learners'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = async function (knex) { + +const up = async function (knex) { await knex.schema.table(TABLE_NAME, function (table) { table.dateTime('deletedAt').nullable(); table.bigInteger('deletedBy').index().references('users.id').nullable(); }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn('deletedAt'); table.dropColumn('deletedBy'); }); }; + +export { up, down }; diff --git a/api/db/migrations/20230419155621_add-view-for-not-deleted-learners.js b/api/db/migrations/20230419155621_add-view-for-not-deleted-learners.js index 2541ee377db..3f9e384dec5 100644 --- a/api/db/migrations/20230419155621_add-view-for-not-deleted-learners.js +++ b/api/db/migrations/20230419155621_add-view-for-not-deleted-learners.js @@ -1,20 +1,14 @@ const VIEW_NAME = 'view-active-organization-learners'; const REFERENCE_TABLE_NAME = 'organization-learners'; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.createView(VIEW_NAME, function (view) { view.as(knex(REFERENCE_TABLE_NAME).whereNull('deletedAt')); }); }; -/** - * @param { import("knex").Knex } knex - * @returns { Promise } - */ -exports.down = function (knex) { +const down = function (knex) { return knex.schema.dropView(VIEW_NAME); }; + +export { up, down }; diff --git a/api/db/migrations/20230425073218_remove-useless-trainings-columns.js b/api/db/migrations/20230425073218_remove-useless-trainings-columns.js index d4d47d30438..67da8e7b990 100644 --- a/api/db/migrations/20230425073218_remove-useless-trainings-columns.js +++ b/api/db/migrations/20230425073218_remove-useless-trainings-columns.js @@ -2,16 +2,18 @@ const TABLE_NAME = 'trainings'; const COLUMN_NAME_PREREQUISITE_THRESHOLD = 'prerequisiteThreshold'; const COLUMN_NAME_GOAL_THRESHOLD = 'goalThreshold'; -exports.up = function (knex) { +const up = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.dropColumn(COLUMN_NAME_PREREQUISITE_THRESHOLD); table.dropColumn(COLUMN_NAME_GOAL_THRESHOLD); }); }; -exports.down = function (knex) { +const down = function (knex) { return knex.schema.table(TABLE_NAME, function (table) { table.integer(COLUMN_NAME_PREREQUISITE_THRESHOLD).nullable().defaultTo(null); table.integer(COLUMN_NAME_GOAL_THRESHOLD).nullable().defaultTo(null); }); }; + +export { up, down }; diff --git a/api/db/migrations/20230428085103_add-constraint-feature-organizations.js b/api/db/migrations/20230428085103_add-constraint-feature-organizations.js index 3eb6e033a0a..fd2ba77c82e 100644 --- a/api/db/migrations/20230428085103_add-constraint-feature-organizations.js +++ b/api/db/migrations/20230428085103_add-constraint-feature-organizations.js @@ -1,14 +1,16 @@ const TABLE_NAME = 'organization-features'; const CONSTRAINT_NAME = 'organizationId_featureId_unique'; -exports.up = async (knex) => { +const up = async function (knex) { return knex.schema.alterTable(TABLE_NAME, (table) => { table.unique(['organizationId', 'featureId'], CONSTRAINT_NAME); }); }; -exports.down = (knex) => { +const down = function (knex) { return knex.schema.table(TABLE_NAME, (table) => { table.dropUnique(['organizationId', 'featureId'], CONSTRAINT_NAME); }); }; + +export { up, down }; diff --git a/api/db/migrations/20230509103000_add-complementary-certifications-extratime.js b/api/db/migrations/20230509103000_add-complementary-certifications-extratime.js index b297639d89a..d8ad426a440 100644 --- a/api/db/migrations/20230509103000_add-complementary-certifications-extratime.js +++ b/api/db/migrations/20230509103000_add-complementary-certifications-extratime.js @@ -4,7 +4,7 @@ const COLUMN_CERTIFICATION_EXTRATIME = 'certificationExtraTime'; const VALUE_PIXPLUS_KEYS = ['DROIT', 'EDU_1ER_DEGRE', 'EDU_2ND_DEGRE']; const VALUE_PIX_PLUS_EXTRATIME_MINUTES = 45; -exports.up = async function (knex) { +const up = async function (knex) { await knex.schema.table(TABLE_COMPLEMENTARY_CERTIFICATIONS, function (table) { table.integer(COLUMN_CERTIFICATION_EXTRATIME).defaultTo(0).notNullable(); }); @@ -14,8 +14,10 @@ exports.up = async function (knex) { .update({ [COLUMN_CERTIFICATION_EXTRATIME]: VALUE_PIX_PLUS_EXTRATIME_MINUTES }); }; -exports.down = async function (knex) { +const down = async function (knex) { await knex.schema.table(TABLE_COMPLEMENTARY_CERTIFICATIONS, function (table) { table.dropColumn(COLUMN_CERTIFICATION_EXTRATIME); }); }; + +export { up, down }; diff --git a/api/db/pgsql-errors.js b/api/db/pgsql-errors.js index 30db02610d0..bd24c2cf6c0 100644 --- a/api/db/pgsql-errors.js +++ b/api/db/pgsql-errors.js @@ -3,7 +3,7 @@ const PGSQL_NON_EXISTENT_DATABASE_ERROR = '3D000'; const PGSQL_UNIQUE_CONSTRAINT_VIOLATION_ERROR = '23505'; const PGSQL_FOREIGN_KEY_VIOLATION_ERROR = '23503'; -module.exports = { +export { PGSQL_DUPLICATE_DATABASE_ERROR, PGSQL_NON_EXISTENT_DATABASE_ERROR, PGSQL_UNIQUE_CONSTRAINT_VIOLATION_ERROR, diff --git a/api/db/seeds/.eslintrc.yaml b/api/db/seeds/.eslintrc.yaml index 2cb0fd7ff33..de2e8530ad6 100644 --- a/api/db/seeds/.eslintrc.yaml +++ b/api/db/seeds/.eslintrc.yaml @@ -1,4 +1,4 @@ -extends: ../../../.eslintrc.yaml +extends: ../../.eslintrc.yaml rules: no-restricted-syntax: off diff --git a/api/db/seeds/data/answers-builder.js b/api/db/seeds/data/answers-builder.js index 6ede6644910..67e83c30d05 100644 --- a/api/db/seeds/data/answers-builder.js +++ b/api/db/seeds/data/answers-builder.js @@ -1,7 +1,6 @@ -module.exports = function answersBuilder({ databaseBuilder }) { - +const answersBuilder = function ({ databaseBuilder }) { databaseBuilder.factory.buildAnswer({ - value: 'Num1: \'4\'\nNum2: \'1\'\nNum3: \'5\'\n', + value: "Num1: '4'\nNum2: '1'\nNum3: '5'\n", result: 'ok', assessmentId: 1, challengeId: 'recLJCLC2oFbCmcxB', @@ -29,7 +28,7 @@ module.exports = function answersBuilder({ databaseBuilder }) { resultDetails: 'null', }); databaseBuilder.factory.buildAnswer({ - value: 'num1: \'2\'\nnum2: \'6\'\nnum3: \'7\'\nnum4: \'11\'\nnum5: \'12\'\nnum6: \'14\'\n', + value: "num1: '2'\nnum2: '6'\nnum3: '7'\nnum4: '11'\nnum5: '12'\nnum6: '14'\n", result: 'ok', assessmentId: 1, challengeId: 'recQk6B0xxvvorRzr', @@ -43,7 +42,7 @@ module.exports = function answersBuilder({ databaseBuilder }) { resultDetails: 'null', }); databaseBuilder.factory.buildAnswer({ - value: 'nb1: \'3\'\nnb2: \'2\'\nnb3: \'3\'\n', + value: "nb1: '3'\nnb2: '2'\nnb3: '3'\n", result: 'ok', assessmentId: 1, challengeId: 'recukHSP5ieZyB196', @@ -57,7 +56,7 @@ module.exports = function answersBuilder({ databaseBuilder }) { resultDetails: 'null', }); databaseBuilder.factory.buildAnswer({ - value: 'marc: \'2\'\ndeborah: B\n', + value: "marc: '2'\ndeborah: B\n", result: 'ok', assessmentId: 1, challengeId: 'recyz0bzFhouQl4I7', @@ -85,14 +84,14 @@ module.exports = function answersBuilder({ databaseBuilder }) { resultDetails: 'null', }); databaseBuilder.factory.buildAnswer({ - value: 'Penses-tu que \xe7a l\'emb\xeatera ?', + value: "Penses-tu que \xe7a l'emb\xeatera ?", result: 'ok', assessmentId: 2, challengeId: 'recd5XFUKpLcIdQsS', resultDetails: 'null', }); databaseBuilder.factory.buildAnswer({ - value: 'retrait: \'2\'\navant: \'9\'\napres: \'9\'\n', + value: "retrait: '2'\navant: '9'\napres: '9'\n", result: 'ok', assessmentId: 2, challengeId: 'recbTdMpoiALypx17', @@ -242,7 +241,8 @@ module.exports = function answersBuilder({ databaseBuilder }) { resultDetails: 'null', }); databaseBuilder.factory.buildAnswer({ - value: 'directeur: Emmanuel Giannesini\nresponsable: Mission de la communication du CNOUS\nhebergeur: V-Technologies\n', + value: + 'directeur: Emmanuel Giannesini\nresponsable: Mission de la communication du CNOUS\nhebergeur: V-Technologies\n', result: 'ok', assessmentId: 3, challengeId: 'reccAbZXt0i5NH4cL', @@ -305,7 +305,7 @@ module.exports = function answersBuilder({ databaseBuilder }) { resultDetails: 'station1: true\nstation2: true\n', }); databaseBuilder.factory.buildAnswer({ - value: 'an: \'2006\'\ntit: F\xe9d\xe9ration Hospitali\xe8re de France\n', + value: "an: '2006'\ntit: F\xe9d\xe9ration Hospitali\xe8re de France\n", result: 'ok', assessmentId: 3, challengeId: 'recTstqP2DAooIwOk', @@ -410,7 +410,8 @@ module.exports = function answersBuilder({ databaseBuilder }) { resultDetails: 'null', }); databaseBuilder.factory.buildAnswer({ - value: 'nb1: fausse r\xe9ponse\nnb2: fausse r\xe9ponse\nnb3: fausse r\xe9ponse\nnb4: fausse r\xe9ponse\nnb5: fausse r\xe9ponse\n', + value: + 'nb1: fausse r\xe9ponse\nnb2: fausse r\xe9ponse\nnb3: fausse r\xe9ponse\nnb4: fausse r\xe9ponse\nnb5: fausse r\xe9ponse\n', result: 'ko', assessmentId: 4, challengeId: 'receT1FE9cfqn6C4V', @@ -564,3 +565,5 @@ module.exports = function answersBuilder({ databaseBuilder }) { resultDetails: 'null', }); }; + +export { answersBuilder }; diff --git a/api/db/seeds/data/assessments-builder.js b/api/db/seeds/data/assessments-builder.js index b84b6409b3a..e6da673e445 100644 --- a/api/db/seeds/data/assessments-builder.js +++ b/api/db/seeds/data/assessments-builder.js @@ -1,5 +1,4 @@ -module.exports = function assessmentsBuilder({ databaseBuilder }) { - +const assessmentsBuilder = function ({ databaseBuilder }) { // PLACEMENT databaseBuilder.factory.buildAssessment({ id: 1, @@ -62,3 +61,5 @@ module.exports = function assessmentsBuilder({ databaseBuilder }) { state: 'started', }); }; + +export { assessmentsBuilder }; diff --git a/api/db/seeds/data/badges-builder.js b/api/db/seeds/data/badges-builder.js index 6c66e901750..69d646410b4 100644 --- a/api/db/seeds/data/badges-builder.js +++ b/api/db/seeds/data/badges-builder.js @@ -19,9 +19,10 @@ const PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_AVANCE_BADGE_ID = 127; const PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_EXPERT_BADGE_ID = 128; const PIX_EMPLOI_CLEA_BADGE_ID_V3 = 129; -const BadgeCriterion = require('../../../lib/domain/models/BadgeCriterion'); -const { badges } = require('../../constants'); -const { +import { BadgeCriterion } from '../../../lib/domain/models/BadgeCriterion.js'; +import { badges } from '../../constants.js'; + +import { targetProfileSkillIdsForCleaBadgeV1, targetProfileSkillIdsForCleaBadgeV2, targetProfileSkillIdsForCleaBadgeV3, @@ -35,7 +36,7 @@ const { TARGET_PROFILE_PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE, TARGET_PROFILE_PIX_EDU_FORMATION_INITIALE_1ER_DEGRE, TARGET_PROFILE_PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE, -} = require('./target-profiles-builder'); +} from './target-profiles-builder.js'; function badgesBuilder({ databaseBuilder }) { _createBasicsBadge(databaseBuilder); @@ -113,7 +114,7 @@ function _createBasicsBadge(databaseBuilder) { imageUrl: 'https://images.pix.fr/badges/socle-de-base.svg', key: 'Basics', message: - 'Bravo ! Vous maîtrisez quelques bases du numérique comme le vocabulaire, la manipulation basique ou l\'utilisation d\'outils', + "Bravo ! Vous maîtrisez quelques bases du numérique comme le vocabulaire, la manipulation basique ou l'utilisation d'outils", targetProfileId: TARGET_PROFILE_STAGES_BADGES_ID, }); @@ -159,7 +160,7 @@ function _createManipBadge(databaseBuilder) { imageUrl: 'https://images.pix.fr/badges/office.svg', key: 'Manip', message: - 'Vous maîtrisez les gestes de base : le clic, la saisie de texte et la navigation entre onglets d\'un navigateur WEB', + "Vous maîtrisez les gestes de base : le clic, la saisie de texte et la navigation entre onglets d'un navigateur WEB", targetProfileId: TARGET_PROFILE_STAGES_BADGES_ID, }); @@ -398,14 +399,14 @@ function _createPixDroitBadge(databaseBuilder) { const skillSetsMasterIds = _associatePixDroitMasterSkillSets( databaseBuilder, targetProfileSkillIdsForPixDroitBadge, - pixDroitMasterBadge, + pixDroitMasterBadge ); _associatePixDroitMasterBadgeCriteria(databaseBuilder, pixDroitMasterBadge, skillSetsMasterIds); const skillSetsExpertIds = _associatePixDroitExpertSkillSets( databaseBuilder, targetProfileSkillIdsForPixDroitBadge, - pixDroitExpertBadge, + pixDroitExpertBadge ); _associatePixDroitExpertBadgeCriteria(databaseBuilder, pixDroitExpertBadge, skillSetsExpertIds); } @@ -512,7 +513,7 @@ function _createPixEduBadges(databaseBuilder) { databaseBuilder, skillIdsForPixEduDomain1, skillIdsForPixEduDomain2, - pixEduFormationInitiale2ndDegreInitieBadge, + pixEduFormationInitiale2ndDegreInitieBadge ); databaseBuilder.factory.buildBadgeCriterion({ scope: BadgeCriterion.SCOPES.SKILL_SET, @@ -541,7 +542,7 @@ function _createPixEduBadges(databaseBuilder) { databaseBuilder, skillIdsForPixEduDomain1, skillIdsForPixEduDomain2, - pixEduFormationInitiale1erDegreInitieBadge, + pixEduFormationInitiale1erDegreInitieBadge ); databaseBuilder.factory.buildBadgeCriterion({ scope: BadgeCriterion.SCOPES.SKILL_SET, @@ -566,12 +567,13 @@ function _createPixEduBadges(databaseBuilder) { isCertifiable: true, targetProfileId: TARGET_PROFILE_PIX_EDU_FORMATION_INITIALE_2ND_DEGRE, }); - const [domain1Confirme2ndDegreSkillSetId, domain2Confirme2ndDegreSkillSetId] = _associatePixEduFormationInitialeSkillSets( - databaseBuilder, - skillIdsForPixEduDomain1, - skillIdsForPixEduDomain2, - pixEduFormationInitiale2ndDegreConfirmeBadge, - ); + const [domain1Confirme2ndDegreSkillSetId, domain2Confirme2ndDegreSkillSetId] = + _associatePixEduFormationInitialeSkillSets( + databaseBuilder, + skillIdsForPixEduDomain1, + skillIdsForPixEduDomain2, + pixEduFormationInitiale2ndDegreConfirmeBadge + ); databaseBuilder.factory.buildBadgeCriterion({ scope: BadgeCriterion.SCOPES.SKILL_SET, threshold: 60, @@ -595,12 +597,13 @@ function _createPixEduBadges(databaseBuilder) { isCertifiable: true, targetProfileId: TARGET_PROFILE_PIX_EDU_FORMATION_INITIALE_1ER_DEGRE, }); - const [domain1Confirme1erDegreSkillSetId, domain2Confirme1erDegreSkillSetId] = _associatePixEduFormationInitialeSkillSets( - databaseBuilder, - skillIdsForPixEduDomain1, - skillIdsForPixEduDomain2, - pixEduFormationInitiale1erDegreConfirmeBadge, - ); + const [domain1Confirme1erDegreSkillSetId, domain2Confirme1erDegreSkillSetId] = + _associatePixEduFormationInitialeSkillSets( + databaseBuilder, + skillIdsForPixEduDomain1, + skillIdsForPixEduDomain2, + pixEduFormationInitiale1erDegreConfirmeBadge + ); databaseBuilder.factory.buildBadgeCriterion({ scope: BadgeCriterion.SCOPES.SKILL_SET, threshold: 60, @@ -627,7 +630,7 @@ function _createPixEduBadges(databaseBuilder) { const [domain3Confirme2ndDegreSkillSetId] = _associatePixEduFormationContinueSkillSets( databaseBuilder, skillIdsForPixEduDomain3, - pixEduFormationContinue2ndDegreConfirmeBadge, + pixEduFormationContinue2ndDegreConfirmeBadge ); databaseBuilder.factory.buildBadgeCriterion({ scope: BadgeCriterion.SCOPES.SKILL_SET, @@ -649,7 +652,7 @@ function _createPixEduBadges(databaseBuilder) { const [domain3Confirme1erDegreSkillSetId] = _associatePixEduFormationContinueSkillSets( databaseBuilder, skillIdsForPixEduDomain3, - pixEduFormationContinue1erDegreConfirmeBadge, + pixEduFormationContinue1erDegreConfirmeBadge ); databaseBuilder.factory.buildBadgeCriterion({ scope: BadgeCriterion.SCOPES.SKILL_SET, @@ -671,7 +674,7 @@ function _createPixEduBadges(databaseBuilder) { const [domain3Avance2ndDegreSkillSetId] = _associatePixEduFormationContinueSkillSets( databaseBuilder, skillIdsForPixEduDomain3, - pixEduFormationContinue2ndDegreAvanceBadge, + pixEduFormationContinue2ndDegreAvanceBadge ); databaseBuilder.factory.buildBadgeCriterion({ scope: BadgeCriterion.SCOPES.SKILL_SET, @@ -693,7 +696,7 @@ function _createPixEduBadges(databaseBuilder) { const [domain3Avance1erDegreSkillSetId] = _associatePixEduFormationContinueSkillSets( databaseBuilder, skillIdsForPixEduDomain3, - pixEduFormationContinue1erDegreAvanceBadge, + pixEduFormationContinue1erDegreAvanceBadge ); databaseBuilder.factory.buildBadgeCriterion({ scope: BadgeCriterion.SCOPES.SKILL_SET, @@ -715,7 +718,7 @@ function _createPixEduBadges(databaseBuilder) { const [domain3Expert2ndDegreSkillSetId] = _associatePixEduFormationContinueSkillSets( databaseBuilder, skillIdsForPixEduDomain3, - pixEduFormationContinue2ndDegreExpertBadge, + pixEduFormationContinue2ndDegreExpertBadge ); databaseBuilder.factory.buildBadgeCriterion({ scope: BadgeCriterion.SCOPES.SKILL_SET, @@ -737,7 +740,7 @@ function _createPixEduBadges(databaseBuilder) { const [domain3Expert1erDegreSkillSetId] = _associatePixEduFormationContinueSkillSets( databaseBuilder, skillIdsForPixEduDomain3, - pixEduFormationContinue1erDegreExpertBadge, + pixEduFormationContinue1erDegreExpertBadge ); databaseBuilder.factory.buildBadgeCriterion({ scope: BadgeCriterion.SCOPES.SKILL_SET, @@ -772,7 +775,7 @@ function _associateSkillSets(databaseBuilder, targetProfileSkillIds, badge) { name: 'Partager sur les réseaux sociaux', skillIds: targetProfileSkillIds[3].map((id) => id), badgeId: badge.id, - }), + }) ); } @@ -815,7 +818,7 @@ function _associatePixDroitMasterSkillSets(databaseBuilder, targetProfileSkillId name: 'Domaine Pix+ Droit Domaine 10', skillIds: targetProfileSkillIds[3].map((id) => id), badgeId: badge.id, - }), + }) ); } @@ -843,7 +846,7 @@ function _associatePixDroitExpertSkillSets(databaseBuilder, targetProfileSkillId name: 'Domaine Pix+ Droit Domaine 10', skillIds: targetProfileSkillIds[3].map((id) => id), badgeId: badge.id, - }), + }) ); } @@ -893,7 +896,7 @@ function _associatePixEduFormationInitialeSkillSets( databaseBuilder, skillIdsForPixEduDomain1, skillIdsForPixEduDomain2, - badge, + badge ) { return _returnIds( databaseBuilder.factory.buildSkillSet({ @@ -905,7 +908,7 @@ function _associatePixEduFormationInitialeSkillSets( name: 'Domaine Pix+ Édu Domaine 2', skillIds: skillIdsForPixEduDomain2.map((id) => id), badgeId: badge.id, - }), + }) ); } @@ -915,11 +918,11 @@ function _associatePixEduFormationContinueSkillSets(databaseBuilder, skillIdsFor name: 'Domaine Pix+ Édu Domaine 3', skillIds: skillIdsForPixEduDomain3.map((id) => id), badgeId: badge.id, - }), + }) ); } -module.exports = { +export { badgesBuilder, PIX_EMPLOI_CLEA_BADGE_ID_V1, PIX_EMPLOI_CLEA_BADGE_ID_V2, diff --git a/api/db/seeds/data/campaign-participations-builder.js b/api/db/seeds/data/campaign-participations-builder.js index 955035fd876..30c2a41f82d 100644 --- a/api/db/seeds/data/campaign-participations-builder.js +++ b/api/db/seeds/data/campaign-participations-builder.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const Assessment = require('../../../lib/domain/models/Assessment'); -const CampaignParticipationStatuses = require('../../../lib/domain/models/CampaignParticipationStatuses'); -const KnowledgeElement = require('../../../lib/domain/models/KnowledgeElement'); -const { PIX_SUPER_ADMIN_ID } = require('./users-builder'); +import _ from 'lodash'; +import { Assessment } from '../../../lib/domain/models/Assessment.js'; +import { CampaignParticipationStatuses } from '../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { KnowledgeElement } from '../../../lib/domain/models/KnowledgeElement.js'; +import { PIX_SUPER_ADMIN_ID } from './users-builder.js'; const { SHARED, STARTED } = CampaignParticipationStatuses; @@ -89,7 +89,15 @@ function _buildAssessmentAndAnswer({ databaseBuilder, userId, campaignParticipat }); } -function participateToAssessmentCampaign({ databaseBuilder, campaignId, user, organizationLearnerId, status, isImprovingOldParticipation = false, deleted = false }) { +function participateToAssessmentCampaign({ + databaseBuilder, + campaignId, + user, + organizationLearnerId, + status, + isImprovingOldParticipation = false, + deleted = false, +}) { const today = new Date(); const sharedAt = status === SHARED ? today : null; const deletedAt = deleted ? today : null; @@ -108,7 +116,13 @@ function participateToAssessmentCampaign({ databaseBuilder, campaignId, user, or deletedBy, }); - _buildAssessmentAndAnswer({ databaseBuilder, userId, campaignParticipationId, status, hasSomeFailures: _.sample([true, false]) }); + _buildAssessmentAndAnswer({ + databaseBuilder, + userId, + campaignParticipationId, + status, + hasSomeFailures: _.sample([true, false]), + }); if (isImprovingOldParticipation) { const { id: oldCampaignParticipationId } = databaseBuilder.factory.buildCampaignParticipation({ @@ -121,12 +135,28 @@ function participateToAssessmentCampaign({ databaseBuilder, campaignId, user, or sharedAt: user.createdAt, isImproved: true, }); - _buildAssessmentAndAnswer({ databaseBuilder, userId, campaignParticipationId: oldCampaignParticipationId, status: SHARED, hasSomeFailures: true }); + _buildAssessmentAndAnswer({ + databaseBuilder, + userId, + campaignParticipationId: oldCampaignParticipationId, + status: SHARED, + hasSomeFailures: true, + }); } return campaignParticipationId; } -function participateToProfilesCollectionCampaign({ databaseBuilder, campaignId, user, organizationLearnerId, status, isImprovingOldParticipation = false, deleted = false, isCertifiable = null, sharedAt = null }) { +function participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId, + user, + organizationLearnerId, + status, + isImprovingOldParticipation = false, + deleted = false, + isCertifiable = null, + sharedAt = null, +}) { const today = new Date(); sharedAt = status === SHARED && sharedAt === null ? today : sharedAt; const deletedAt = deleted ? today : null; @@ -161,7 +191,4 @@ function participateToProfilesCollectionCampaign({ databaseBuilder, campaignId, } } -module.exports = { - participateToAssessmentCampaign, - participateToProfilesCollectionCampaign, -}; +export { participateToAssessmentCampaign, participateToProfilesCollectionCampaign }; diff --git a/api/db/seeds/data/campaigns-pro-builder.js b/api/db/seeds/data/campaigns-pro-builder.js index fd7f927dfca..fddf4130400 100644 --- a/api/db/seeds/data/campaigns-pro-builder.js +++ b/api/db/seeds/data/campaigns-pro-builder.js @@ -1,4 +1,4 @@ -const { +import { TARGET_PROFILE_PIC_DIAG_INITIAL_ID, TARGET_PROFILE_STAGES_BADGES_ID, TARGET_PROFILE_ONE_COMPETENCE_ID, @@ -6,30 +6,29 @@ const { TARGET_PROFILE_PIX_EMPLOI_CLEA_ID_V3, TARGET_PROFILE_PIX_DROIT_ID, TARGET_PROFILE_CNAV_ID, -} = require('./target-profiles-builder'); -const { +} from './target-profiles-builder.js'; + +import { CERTIF_REGULAR_USER1_ID, CERTIF_REGULAR_USER2_ID, CERTIF_REGULAR_USER3_ID, CERTIF_REGULAR_USER4_ID, CERTIF_REGULAR_USER5_ID, -} = require('./certification/users'); -const { PRO_BASICS_BADGE_ID, PRO_TOOLS_BADGE_ID } = require('./badges-builder'); -const { PRO_COMPANY_ID, PRO_POLE_EMPLOI_ID, PRO_MED_NUM_ID, PRO_CNAV_ID } = require('./organizations-pro-builder'); -const { DEFAULT_PASSWORD } = require('./users-builder'); -const { +} from './certification/users.js'; + +import { PRO_BASICS_BADGE_ID, PRO_TOOLS_BADGE_ID } from './badges-builder.js'; +import { PRO_COMPANY_ID, PRO_POLE_EMPLOI_ID, PRO_MED_NUM_ID, PRO_CNAV_ID } from './organizations-pro-builder.js'; +import { DEFAULT_PASSWORD } from './users-builder.js'; +import { participateToAssessmentCampaign, participateToProfilesCollectionCampaign, -} = require('./campaign-participations-builder'); -const CampaignParticipationStatuses = require('../../../lib/domain/models/CampaignParticipationStatuses'); +} from './campaign-participations-builder.js'; +import { CampaignParticipationStatuses } from '../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED, TO_SHARE, STARTED } = CampaignParticipationStatuses; const POLE_EMPLOI_CAMPAIGN_ID = 5; -module.exports = { - campaignsProBuilder, - POLE_EMPLOI_CAMPAIGN_ID, -}; +export { campaignsProBuilder, POLE_EMPLOI_CAMPAIGN_ID }; function campaignsProBuilder({ databaseBuilder }) { _buildCampaigns({ databaseBuilder }); @@ -350,23 +349,32 @@ __Plus d'infos :)__ } function _buildParticipations({ databaseBuilder }) { - const users = _buildUsers({ databaseBuilder, users: [ - { firstName: 'Jaune', lastName: 'Attend', email: 'jaune.attend@example.net', createdAt: new Date('2022-01-01') }, - { firstName: 'Mélanie', lastName: 'Darboo', createdAt: new Date('2022-01-02') }, - { firstName: 'Matteo', lastName: 'Lorenzio', createdAt: new Date('2022-01-03') }, - { firstName: 'Jérémy', lastName: 'Bugietta', createdAt: new Date('2022-01-03') }, - { firstName: 'Léo', lastName: 'Subzéro', createdAt: new Date('2022-01-05') }, - { firstName: 'Forster', lastName: 'Gillay Djones', createdAt: new Date('2022-01-05') }, - { firstName: 'Thierry', lastName: 'Donckele', createdAt: new Date('2022-01-07') }, - { firstName: 'Stéphan', lastName: 'Deumonaco', createdAt: new Date('2022-01-08') }, - { firstName: 'Lise', lastName: 'Nelkay', createdAt: new Date('2022-01-09') }, - { firstName: 'Sébastien', lastName: 'Serra Oupas', createdAt: new Date('2022-02-03') }, - { firstName: 'Thomas', lastName: 'Whiskas', createdAt: new Date('2022-02-06') }, - { firstName: 'Antoine', lastName: 'Boiduvin', createdAt: new Date('2022-02-07') }, - { firstName: 'Brandone', lastName: 'Bro', createdAt: new Date('2022-02-07') }, - { firstName: 'Jean', lastName: 'Sérien', createdAt: new Date('2022-02-07') }, - { firstName: 'Alex', lastName: 'Deleted', createdAt: new Date('2022-02-07'), deletedBy: 1, deletedAt: new Date('2023-05-01') }, - ] }); + const users = _buildUsers({ + databaseBuilder, + users: [ + { firstName: 'Jaune', lastName: 'Attend', email: 'jaune.attend@example.net', createdAt: new Date('2022-01-01') }, + { firstName: 'Mélanie', lastName: 'Darboo', createdAt: new Date('2022-01-02') }, + { firstName: 'Matteo', lastName: 'Lorenzio', createdAt: new Date('2022-01-03') }, + { firstName: 'Jérémy', lastName: 'Bugietta', createdAt: new Date('2022-01-03') }, + { firstName: 'Léo', lastName: 'Subzéro', createdAt: new Date('2022-01-05') }, + { firstName: 'Forster', lastName: 'Gillay Djones', createdAt: new Date('2022-01-05') }, + { firstName: 'Thierry', lastName: 'Donckele', createdAt: new Date('2022-01-07') }, + { firstName: 'Stéphan', lastName: 'Deumonaco', createdAt: new Date('2022-01-08') }, + { firstName: 'Lise', lastName: 'Nelkay', createdAt: new Date('2022-01-09') }, + { firstName: 'Sébastien', lastName: 'Serra Oupas', createdAt: new Date('2022-02-03') }, + { firstName: 'Thomas', lastName: 'Whiskas', createdAt: new Date('2022-02-06') }, + { firstName: 'Antoine', lastName: 'Boiduvin', createdAt: new Date('2022-02-07') }, + { firstName: 'Brandone', lastName: 'Bro', createdAt: new Date('2022-02-07') }, + { firstName: 'Jean', lastName: 'Sérien', createdAt: new Date('2022-02-07') }, + { + firstName: 'Alex', + lastName: 'Deleted', + createdAt: new Date('2022-02-07'), + deletedBy: 1, + deletedAt: new Date('2023-05-01'), + }, + ], + }); _buildParticipationsInDifferentStatus({ databaseBuilder, user: users[0] }); _buildAssessmentParticipations({ databaseBuilder, users }); @@ -378,19 +386,71 @@ function _buildParticipations({ databaseBuilder }) { function _buildUsers({ databaseBuilder, users }) { return users.map((user) => { const databaseUser = databaseBuilder.factory.buildUser.withRawPassword({ ...user, rawPassword: DEFAULT_PASSWORD }); - databaseBuilder.factory.buildOrganizationLearner({ firstName: user.firstName + '-Prescrit', lastName: user.lastName + '-Prescrit', id: databaseUser.id, userId: databaseUser.id, organizationId: PRO_COMPANY_ID, deletedBy: user.deletedBy, deletedAt: user.deletedAt }); + databaseBuilder.factory.buildOrganizationLearner({ + firstName: user.firstName + '-Prescrit', + lastName: user.lastName + '-Prescrit', + id: databaseUser.id, + userId: databaseUser.id, + organizationId: PRO_COMPANY_ID, + deletedBy: user.deletedBy, + deletedAt: user.deletedAt, + }); return databaseUser; }); } function _buildParticipationsInDifferentStatus({ databaseBuilder, user }) { - participateToAssessmentCampaign({ databaseBuilder, campaignId: 22, user, organizationLearnerId: user.id, status: STARTED, deleted: true }); //deleted + started - participateToAssessmentCampaign({ databaseBuilder, campaignId: 21, user, organizationLearnerId: user.id, status: SHARED, deleted: true }); //deleted + shared - participateToAssessmentCampaign({ databaseBuilder, campaignId: 2, user, organizationLearnerId: user.id, status: STARTED }); //started - participateToAssessmentCampaign({ databaseBuilder, campaignId: 12, user, organizationLearnerId: user.id, status: TO_SHARE }); //to share - participateToAssessmentCampaign({ databaseBuilder, campaignId: 13, user, organizationLearnerId: user.id, status: SHARED });//archived + shared - participateToAssessmentCampaign({ databaseBuilder, campaignId: 14, user, organizationLearnerId: user.id, status: STARTED });//archived + started - participateToAssessmentCampaign({ databaseBuilder, campaignId: 15, user, organizationLearnerId: user.id, status: SHARED });//archived + shared + badges + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 22, + user, + organizationLearnerId: user.id, + status: STARTED, + deleted: true, + }); //deleted + started + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 21, + user, + organizationLearnerId: user.id, + status: SHARED, + deleted: true, + }); //deleted + shared + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 2, + user, + organizationLearnerId: user.id, + status: STARTED, + }); //started + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 12, + user, + organizationLearnerId: user.id, + status: TO_SHARE, + }); //to share + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 13, + user, + organizationLearnerId: user.id, + status: SHARED, + }); //archived + shared + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 14, + user, + organizationLearnerId: user.id, + status: STARTED, + }); //archived + started + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 15, + user, + organizationLearnerId: user.id, + status: SHARED, + }); //archived + shared + badges } function _buildAssessmentParticipations({ databaseBuilder, users }) { @@ -401,29 +461,129 @@ function _buildAssessmentParticipations({ databaseBuilder, users }) { const userIdsCompletedShared2 = [users[0], users[9]]; const userIdsCompletedSharedWith2Badges = [users[3], users[11]]; - userIdsNotCompleted.forEach((user) => participateToAssessmentCampaign({ databaseBuilder, campaignId: 1, user, organizationLearnerId: user.id, status: STARTED })); - userIdsNotShared.forEach((user) => participateToAssessmentCampaign({ databaseBuilder, campaignId: 1, user, organizationLearnerId: user.id, status: TO_SHARE })); + userIdsNotCompleted.forEach((user) => + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 1, + user, + organizationLearnerId: user.id, + status: STARTED, + }) + ); + userIdsNotShared.forEach((user) => + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 1, + user, + organizationLearnerId: user.id, + status: TO_SHARE, + }) + ); userIdsNotShared2.forEach((user) => { - const campaignParticipationId = participateToAssessmentCampaign({ databaseBuilder, campaignId: 1, user, organizationLearnerId: user.id, status: TO_SHARE }); - databaseBuilder.factory.buildBadgeAcquisition({ userId: user.id, badgeId: PRO_BASICS_BADGE_ID, campaignParticipationId }); + const campaignParticipationId = participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 1, + user, + organizationLearnerId: user.id, + status: TO_SHARE, + }); + databaseBuilder.factory.buildBadgeAcquisition({ + userId: user.id, + badgeId: PRO_BASICS_BADGE_ID, + campaignParticipationId, + }); }); - userIdsCompletedShared.forEach((user) => participateToAssessmentCampaign({ databaseBuilder, campaignId: 1, user, organizationLearnerId: user.id, status: SHARED })); + userIdsCompletedShared.forEach((user) => + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 1, + user, + organizationLearnerId: user.id, + status: SHARED, + }) + ); userIdsCompletedShared2.forEach((user) => { - const campaignParticipationId = participateToAssessmentCampaign({ databaseBuilder, campaignId: 1, user, organizationLearnerId: user.id, status: SHARED }); - databaseBuilder.factory.buildBadgeAcquisition({ userId: user.id, badgeId: PRO_TOOLS_BADGE_ID, campaignParticipationId }); + const campaignParticipationId = participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 1, + user, + organizationLearnerId: user.id, + status: SHARED, + }); + databaseBuilder.factory.buildBadgeAcquisition({ + userId: user.id, + badgeId: PRO_TOOLS_BADGE_ID, + campaignParticipationId, + }); }); userIdsCompletedSharedWith2Badges.forEach((user) => { - const campaignParticipationId = participateToAssessmentCampaign({ databaseBuilder, campaignId: 1, user, organizationLearnerId: user.id, status: SHARED }); - databaseBuilder.factory.buildBadgeAcquisition({ userId: user.id, badgeId: PRO_BASICS_BADGE_ID, campaignParticipationId }); - databaseBuilder.factory.buildBadgeAcquisition({ userId: user.id, badgeId: PRO_TOOLS_BADGE_ID, campaignParticipationId }); + const campaignParticipationId = participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 1, + user, + organizationLearnerId: user.id, + status: SHARED, + }); + databaseBuilder.factory.buildBadgeAcquisition({ + userId: user.id, + badgeId: PRO_BASICS_BADGE_ID, + campaignParticipationId, + }); + databaseBuilder.factory.buildBadgeAcquisition({ + userId: user.id, + badgeId: PRO_TOOLS_BADGE_ID, + campaignParticipationId, + }); }); //multiple sendings profiles collection campaign - userIdsNotCompleted.forEach((user) => participateToAssessmentCampaign({ databaseBuilder, campaignId: 16, user, organizationLearnerId: user.id, status: STARTED })); - userIdsNotShared.forEach((user) => participateToAssessmentCampaign({ databaseBuilder, campaignId: 16, user, organizationLearnerId: user.id, status: TO_SHARE })); - userIdsNotShared2.forEach((user) => participateToAssessmentCampaign({ databaseBuilder, campaignId: 16, user, organizationLearnerId: user.id, status: TO_SHARE, isImprovingOldParticipation: true })); - userIdsCompletedShared.forEach((user) => participateToAssessmentCampaign({ databaseBuilder, campaignId: 16, user, organizationLearnerId: user.id, status: SHARED })); - userIdsCompletedShared2.forEach((user) => participateToAssessmentCampaign({ databaseBuilder, campaignId: 16, user, organizationLearnerId: user.id, status: SHARED, isImprovingOldParticipation: true })); + userIdsNotCompleted.forEach((user) => + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 16, + user, + organizationLearnerId: user.id, + status: STARTED, + }) + ); + userIdsNotShared.forEach((user) => + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 16, + user, + organizationLearnerId: user.id, + status: TO_SHARE, + }) + ); + userIdsNotShared2.forEach((user) => + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 16, + user, + organizationLearnerId: user.id, + status: TO_SHARE, + isImprovingOldParticipation: true, + }) + ); + userIdsCompletedShared.forEach((user) => + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 16, + user, + organizationLearnerId: user.id, + status: SHARED, + }) + ); + userIdsCompletedShared2.forEach((user) => + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 16, + user, + organizationLearnerId: user.id, + status: SHARED, + isImprovingOldParticipation: true, + }) + ); } function _buildProfilesCollectionParticipations({ databaseBuilder, users }) { @@ -436,26 +596,106 @@ function _buildProfilesCollectionParticipations({ databaseBuilder, users }) { const certifRegularUser5 = { id: CERTIF_REGULAR_USER5_ID, createdAt: new Date('2022-02-07') }; const userIdsNotShared = [users[1], users[2], users[3], users[4], users[5], users[6], users[7], users[8]]; const userIdsShared = [users[0], users[9], users[10], users[11], users[12]]; - const userIdsCertifiable = [users[10].id, users[11].id, users[12].id, certifRegularUser1.id, certifRegularUser2.id, certifRegularUser3.id]; - - [certifRegularUser1, certifRegularUser2, certifRegularUser3, certifRegularUser4, certifRegularUser5].forEach((certifUser, index) => { - databaseBuilder.factory.buildOrganizationLearner({ lastName: `Certif${index}`, firstName: `User${index}`, id: certifUser.id, userId: certifUser.id, organizationId: PRO_COMPANY_ID }); - }); - - [...userIdsNotShared, certifRegularUser4, certifRegularUser5].forEach((user) => participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 6, user, organizationLearnerId: user.id, status: TO_SHARE })); - [...userIdsShared, certifRegularUser1, certifRegularUser2, certifRegularUser3].forEach((user) => participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 6, user, organizationLearnerId: user.id, status: SHARED, sharedAt })); + const userIdsCertifiable = [ + users[10].id, + users[11].id, + users[12].id, + certifRegularUser1.id, + certifRegularUser2.id, + certifRegularUser3.id, + ]; + + [certifRegularUser1, certifRegularUser2, certifRegularUser3, certifRegularUser4, certifRegularUser5].forEach( + (certifUser, index) => { + databaseBuilder.factory.buildOrganizationLearner({ + lastName: `Certif${index}`, + firstName: `User${index}`, + id: certifUser.id, + userId: certifUser.id, + organizationId: PRO_COMPANY_ID, + }); + } + ); + + [...userIdsNotShared, certifRegularUser4, certifRegularUser5].forEach((user) => + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 6, + user, + organizationLearnerId: user.id, + status: TO_SHARE, + }) + ); + [...userIdsShared, certifRegularUser1, certifRegularUser2, certifRegularUser3].forEach((user) => + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 6, + user, + organizationLearnerId: user.id, + status: SHARED, + sharedAt, + }) + ); //multiple sendings profiles collection campaign - userIdsShared.forEach((user) => participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 18, user, organizationLearnerId: user.id, status: SHARED, isCertifiable: userIdsCertifiable.includes(user.id) })); - userIdsNotShared.forEach((user) => participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 18, user, organizationLearnerId: user.id, status: TO_SHARE, isImprovingOldParticipation: true, isCertifiable: null })); - [certifRegularUser1, certifRegularUser2, certifRegularUser3, certifRegularUser4, certifRegularUser5].forEach((user) => participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 18, user, organizationLearnerId: user.id, status: SHARED, isImprovingOldParticipation: true })); + userIdsShared.forEach((user) => + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 18, + user, + organizationLearnerId: user.id, + status: SHARED, + isCertifiable: userIdsCertifiable.includes(user.id), + }) + ); + userIdsNotShared.forEach((user) => + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 18, + user, + organizationLearnerId: user.id, + status: TO_SHARE, + isImprovingOldParticipation: true, + isCertifiable: null, + }) + ); + [certifRegularUser1, certifRegularUser2, certifRegularUser3, certifRegularUser4, certifRegularUser5].forEach((user) => + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 18, + user, + organizationLearnerId: user.id, + status: SHARED, + isImprovingOldParticipation: true, + }) + ); //deleted participations - participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 25, user: users[0], organizationLearnerId: users[0].id, status: TO_SHARE, deleted: true }); - participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 26, user: users[0], organizationLearnerId: users[0].id, status: TO_SHARE, deleted: true }); + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 25, + user: users[0], + organizationLearnerId: users[0].id, + status: TO_SHARE, + deleted: true, + }); + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 26, + user: users[0], + organizationLearnerId: users[0].id, + status: TO_SHARE, + deleted: true, + }); //certificability not shared - participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 18, user: users[13], organizationLearnerId: users[13].id, status: TO_SHARE }); + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 18, + user: users[13], + organizationLearnerId: users[13].id, + status: TO_SHARE, + }); } function _buildMedNumAssessmentParticipations({ databaseBuilder }) { @@ -473,5 +713,11 @@ function _buildMedNumAssessmentParticipations({ databaseBuilder }) { userId: anonymousUser.id, organizationId: PRO_MED_NUM_ID, }); - participateToAssessmentCampaign({ databaseBuilder, campaignId: 11, user: anonymousUser, organizationLearnerId: anonymousOrganizationLearner.id, status: SHARED }); + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 11, + user: anonymousUser, + organizationLearnerId: anonymousOrganizationLearner.id, + status: SHARED, + }); } diff --git a/api/db/seeds/data/campaigns-sco-builder.js b/api/db/seeds/data/campaigns-sco-builder.js index d155ed29e10..5eafaa216e8 100644 --- a/api/db/seeds/data/campaigns-sco-builder.js +++ b/api/db/seeds/data/campaigns-sco-builder.js @@ -1,17 +1,32 @@ -const { +import { TARGET_PROFILE_STAGES_BADGES_ID, TARGET_PROFILE_PIX_EDU_FORMATION_INITIALE_2ND_DEGRE, TARGET_PROFILE_PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE, -} = require('./target-profiles-builder'); -const { PRO_BASICS_BADGE_ID, PRO_TOOLS_BADGE_ID } = require('./badges-builder'); -const { SCO_MIDDLE_SCHOOL_ID, SCO_HIGH_SCHOOL_ID, SCO_AGRI_ID, SCO_AEFE_ID, SCO_STUDENT_ID, SCO_FRENCH_USER_ID, SCO_FOREIGNER_USER_ID, SCO_FOREIGNER_USER_ID_IN_ANOTHER_ORGANIZATION, SCO_DISABLED_USER_ID, SCO_STUDENT_NOT_CERTIFIABLE_ID } = require('./organizations-sco-builder'); -const { participateToAssessmentCampaign, participateToProfilesCollectionCampaign } = require('./campaign-participations-builder'); -const CampaignParticipationStatuses = require('../../../lib/domain/models/CampaignParticipationStatuses'); +} from './target-profiles-builder.js'; + +import { PRO_BASICS_BADGE_ID, PRO_TOOLS_BADGE_ID } from './badges-builder.js'; + +import { + SCO_MIDDLE_SCHOOL_ID, + SCO_HIGH_SCHOOL_ID, + SCO_AGRI_ID, + SCO_AEFE_ID, + SCO_STUDENT_ID, + SCO_FRENCH_USER_ID, + SCO_FOREIGNER_USER_ID, + SCO_FOREIGNER_USER_ID_IN_ANOTHER_ORGANIZATION, + SCO_DISABLED_USER_ID, + SCO_STUDENT_NOT_CERTIFIABLE_ID, +} from './organizations-sco-builder.js'; + +import { + participateToAssessmentCampaign, + participateToProfilesCollectionCampaign, +} from './campaign-participations-builder.js'; +import { CampaignParticipationStatuses } from '../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED, TO_SHARE, STARTED } = CampaignParticipationStatuses; -module.exports = { - campaignsScoBuilder, -}; +export { campaignsScoBuilder }; function campaignsScoBuilder({ databaseBuilder }) { _buildCampaigns({ databaseBuilder }); @@ -136,15 +151,53 @@ function _buildScoAssessmentParticipations({ databaseBuilder }) { const scoStudentForeigner = { id: SCO_FOREIGNER_USER_ID, createdAt: new Date('2022-02-05') }; const scoStudentDisabled = { id: SCO_DISABLED_USER_ID, createdAt: new Date('2022-02-06') }; - const campaignParticipationId = participateToAssessmentCampaign({ databaseBuilder, campaignId: 4, user: scoStudent, organizationLearnerId: SCO_STUDENT_ID, status: SHARED }); - databaseBuilder.factory.buildBadgeAcquisition({ userId: SCO_STUDENT_ID, badgeId: PRO_BASICS_BADGE_ID, campaignParticipationId }); - databaseBuilder.factory.buildBadgeAcquisition({ userId: SCO_STUDENT_ID, badgeId: PRO_TOOLS_BADGE_ID, campaignParticipationId }); + const campaignParticipationId = participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 4, + user: scoStudent, + organizationLearnerId: SCO_STUDENT_ID, + status: SHARED, + }); + databaseBuilder.factory.buildBadgeAcquisition({ + userId: SCO_STUDENT_ID, + badgeId: PRO_BASICS_BADGE_ID, + campaignParticipationId, + }); + databaseBuilder.factory.buildBadgeAcquisition({ + userId: SCO_STUDENT_ID, + badgeId: PRO_TOOLS_BADGE_ID, + campaignParticipationId, + }); - participateToAssessmentCampaign({ databaseBuilder, campaignId: 4, user: scoStudentFrench, organizationLearnerId: SCO_FRENCH_USER_ID, status: TO_SHARE }); - participateToAssessmentCampaign({ databaseBuilder, campaignId: 4, user: scoStudentForeigner, organizationLearnerId: SCO_FOREIGNER_USER_ID, status: STARTED }); - participateToAssessmentCampaign({ databaseBuilder, campaignId: 4, user: scoStudentDisabled, organizationLearnerId: SCO_DISABLED_USER_ID, status: SHARED }); + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 4, + user: scoStudentFrench, + organizationLearnerId: SCO_FRENCH_USER_ID, + status: TO_SHARE, + }); + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 4, + user: scoStudentForeigner, + organizationLearnerId: SCO_FOREIGNER_USER_ID, + status: STARTED, + }); + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 4, + user: scoStudentDisabled, + organizationLearnerId: SCO_DISABLED_USER_ID, + status: SHARED, + }); - participateToAssessmentCampaign({ databaseBuilder, campaignId: 8, user: scoStudentForeigner, organizationLearnerId: SCO_FOREIGNER_USER_ID_IN_ANOTHER_ORGANIZATION, status: SHARED }); + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 8, + user: scoStudentForeigner, + organizationLearnerId: SCO_FOREIGNER_USER_ID_IN_ANOTHER_ORGANIZATION, + status: SHARED, + }); } function _buildScoProfilesCollectionParticipations({ databaseBuilder }) { @@ -154,9 +207,39 @@ function _buildScoProfilesCollectionParticipations({ databaseBuilder }) { const scoStudentDisabled = { id: SCO_DISABLED_USER_ID, createdAt: new Date('2022-02-07') }; const scoStudentNotCertifiable = { id: SCO_STUDENT_NOT_CERTIFIABLE_ID, createdAt: new Date('2022-02-08') }; - participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 7, user: scoStudent, organizationLearnerId: SCO_STUDENT_ID, status: SHARED }); - participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 7, user: scoStudentFrench, organizationLearnerId: SCO_FRENCH_USER_ID, status: SHARED }); - participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 7, user: scoStudentForeigner, organizationLearnerId: SCO_FOREIGNER_USER_ID, status: TO_SHARE }); - participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 7, user: scoStudentDisabled, organizationLearnerId: SCO_DISABLED_USER_ID, status: SHARED }); - participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 7, user: scoStudentNotCertifiable, organizationLearnerId: SCO_STUDENT_NOT_CERTIFIABLE_ID, status: SHARED }); + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 7, + user: scoStudent, + organizationLearnerId: SCO_STUDENT_ID, + status: SHARED, + }); + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 7, + user: scoStudentFrench, + organizationLearnerId: SCO_FRENCH_USER_ID, + status: SHARED, + }); + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 7, + user: scoStudentForeigner, + organizationLearnerId: SCO_FOREIGNER_USER_ID, + status: TO_SHARE, + }); + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 7, + user: scoStudentDisabled, + organizationLearnerId: SCO_DISABLED_USER_ID, + status: SHARED, + }); + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 7, + user: scoStudentNotCertifiable, + organizationLearnerId: SCO_STUDENT_NOT_CERTIFIABLE_ID, + status: SHARED, + }); } diff --git a/api/db/seeds/data/campaigns-sup-builder.js b/api/db/seeds/data/campaigns-sup-builder.js index f879de08adb..20999d88ec3 100644 --- a/api/db/seeds/data/campaigns-sup-builder.js +++ b/api/db/seeds/data/campaigns-sup-builder.js @@ -1,15 +1,20 @@ -const { - TARGET_PROFILE_PIC_DIAG_INITIAL_ID, - TARGET_PROFILE_PIX_DROIT_ID, -} = require('./target-profiles-builder'); -const { SUP_UNIVERSITY_ID, SUP_STUDENT_ASSOCIATED_ID, SUP_STUDENT_DISABLED_ID, SUP_STUDENT_CERTIFIABLE } = require('./organizations-sup-builder'); -const { participateToAssessmentCampaign, participateToProfilesCollectionCampaign } = require('./campaign-participations-builder'); -const CampaignParticipationStatuses = require('../../../lib/domain/models/CampaignParticipationStatuses'); +import { TARGET_PROFILE_PIC_DIAG_INITIAL_ID, TARGET_PROFILE_PIX_DROIT_ID } from './target-profiles-builder.js'; + +import { + SUP_UNIVERSITY_ID, + SUP_STUDENT_ASSOCIATED_ID, + SUP_STUDENT_DISABLED_ID, + SUP_STUDENT_CERTIFIABLE, +} from './organizations-sup-builder.js'; + +import { + participateToAssessmentCampaign, + participateToProfilesCollectionCampaign, +} from './campaign-participations-builder.js'; +import { CampaignParticipationStatuses } from '../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED, TO_SHARE, STARTED } = CampaignParticipationStatuses; -module.exports = { - campaignsSupBuilder, -}; +export { campaignsSupBuilder }; function campaignsSupBuilder({ databaseBuilder }) { _buildCampaigns({ databaseBuilder }); @@ -50,7 +55,7 @@ function _buildCampaigns({ databaseBuilder }) { databaseBuilder.factory.buildCampaign({ id: 20, - name: 'Sup - Campagne d\'évaluation Pix+ Droit', + name: "Sup - Campagne d'évaluation Pix+ Droit", code: 'SUPDROIT1', type: 'ASSESSMENT', organizationId: SUP_UNIVERSITY_ID, @@ -68,15 +73,46 @@ function _buildCampaigns({ databaseBuilder }) { function _buildSupAssessmentParticipations({ databaseBuilder }) { const supStudentAssociated = { id: SUP_STUDENT_ASSOCIATED_ID, createdAt: new Date('2022-02-04') }; const supStudentDisabled = { id: SUP_STUDENT_DISABLED_ID, createdAt: new Date('2022-02-05') }; - participateToAssessmentCampaign({ databaseBuilder, campaignId: 3, user: supStudentAssociated, organizationLearnerId: SUP_STUDENT_ASSOCIATED_ID, status: SHARED }); - participateToAssessmentCampaign({ databaseBuilder, campaignId: 3, user: supStudentDisabled, organizationLearnerId: SUP_STUDENT_DISABLED_ID, status: STARTED }); + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 3, + user: supStudentAssociated, + organizationLearnerId: SUP_STUDENT_ASSOCIATED_ID, + status: SHARED, + }); + participateToAssessmentCampaign({ + databaseBuilder, + campaignId: 3, + user: supStudentDisabled, + organizationLearnerId: SUP_STUDENT_DISABLED_ID, + status: STARTED, + }); } function _buildSupProfilesCollectionParticipations({ databaseBuilder }) { const supStudentAssociated = { id: SUP_STUDENT_ASSOCIATED_ID, createdAt: new Date('2022-02-06') }; const supStudentDisabled = { id: SUP_STUDENT_DISABLED_ID, createdAt: new Date('2022-02-07') }; const supStudentCertifiable = { id: SUP_STUDENT_CERTIFIABLE, createdAt: new Date('2022-02-08') }; - participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 10, user: supStudentAssociated, organizationLearnerId: SUP_STUDENT_ASSOCIATED_ID, status: SHARED }); - participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 10, user: supStudentDisabled, organizationLearnerId: SUP_STUDENT_DISABLED_ID, status: TO_SHARE }); - participateToProfilesCollectionCampaign({ databaseBuilder, campaignId: 10, user: supStudentCertifiable, organizationLearnerId: SUP_STUDENT_CERTIFIABLE, status: SHARED, isCertifiable: true }); + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 10, + user: supStudentAssociated, + organizationLearnerId: SUP_STUDENT_ASSOCIATED_ID, + status: SHARED, + }); + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 10, + user: supStudentDisabled, + organizationLearnerId: SUP_STUDENT_DISABLED_ID, + status: TO_SHARE, + }); + participateToProfilesCollectionCampaign({ + databaseBuilder, + campaignId: 10, + user: supStudentCertifiable, + organizationLearnerId: SUP_STUDENT_CERTIFIABLE, + status: SHARED, + isCertifiable: true, + }); } diff --git a/api/db/seeds/data/certification/badge-acquisition-builder.js b/api/db/seeds/data/certification/badge-acquisition-builder.js index a09cb1e1df2..65ec0cd3a10 100644 --- a/api/db/seeds/data/certification/badge-acquisition-builder.js +++ b/api/db/seeds/data/certification/badge-acquisition-builder.js @@ -1,4 +1,4 @@ -const { +import { PIX_EMPLOI_CLEA_BADGE_ID_V1, PIX_EMPLOI_CLEA_BADGE_ID_V2, PIX_EMPLOI_CLEA_BADGE_ID_V3, @@ -6,8 +6,9 @@ const { PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE_AVANCE_BADGE_ID, PIX_EDU_FORMATION_INITIALE_1ER_DEGRE_CONFIRME_BADGE_ID, PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_AVANCE_BADGE_ID, -} = require('../badges-builder'); -const { +} from '../badges-builder.js'; + +import { CERTIF_REGULAR_USER1_ID, CERTIF_SUCCESS_USER_ID, CERTIF_FAILURE_USER_ID, @@ -15,10 +16,11 @@ const { CERTIF_EDU_FORMATION_CONTINUE_2ND_DEGRE_USER_ID, CERTIF_EDU_FORMATION_INITIALE_1ER_DEGRE_USER_ID, CERTIF_EDU_FORMATION_CONTINUE_1ER_DEGRE_USER_ID, -} = require('./users'); +} from './users.js'; + +import { participateToAssessmentCampaign } from '../campaign-participations-builder.js'; -const { participateToAssessmentCampaign } = require('../campaign-participations-builder'); -const { +import { TARGET_PROFILE_PIX_EMPLOI_CLEA_ID, TARGET_PROFILE_PIX_EMPLOI_CLEA_ID_V2, TARGET_PROFILE_PIX_EMPLOI_CLEA_ID_V3, @@ -26,9 +28,10 @@ const { TARGET_PROFILE_PIX_EDU_FORMATION_CONTINUE_2ND_DEGRE, TARGET_PROFILE_PIX_EDU_FORMATION_INITIALE_1ER_DEGRE, TARGET_PROFILE_PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE, -} = require('../target-profiles-builder'); -const { PRO_COMPANY_ID, PRO_LEARNER_ASSOCIATED_ID } = require('../organizations-pro-builder'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +} from '../target-profiles-builder.js'; + +import { PRO_COMPANY_ID, PRO_LEARNER_ASSOCIATED_ID } from '../organizations-pro-builder.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED } = CampaignParticipationStatuses; function badgeAcquisitionBuilder({ databaseBuilder }) { @@ -98,9 +101,7 @@ function badgeAcquisitionBuilder({ databaseBuilder }) { }); } -module.exports = { - badgeAcquisitionBuilder, -}; +export { badgeAcquisitionBuilder }; function _buildBadgeAcquisition({ campaignName, campaignCode, targetProfileId, userId, badgeId, databaseBuilder }) { const campaignParticipationId = _buildRequiredCampaignData({ diff --git a/api/db/seeds/data/certification/certification-candidates-builder.js b/api/db/seeds/data/certification/certification-candidates-builder.js index 608d47a2efc..8aea628b542 100644 --- a/api/db/seeds/data/certification/certification-candidates-builder.js +++ b/api/db/seeds/data/certification/certification-candidates-builder.js @@ -1,5 +1,6 @@ -const _ = require('lodash'); -const { +import _ from 'lodash'; + +import { STARTED_SESSION_ID, STARTED_SESSION_WITH_LOT_OF_CANDIDATES_ID, TO_FINALIZE_SESSION_ID, @@ -10,21 +11,26 @@ const { SCO_NO_MANAGING_STUDENTS_AEFE_SESSION_ID, PIX_DROIT_SESSION_ID, COMPLEMENTARY_CERTIFICATIONS_SESSION_ID, -} = require('./certification-sessions-builder'); -const { SCO_STUDENT_ID: SCO_STUDENT_ORGANIZATION_LEARNER_ID } = require('../organizations-sco-builder'); -const { +} from './certification-sessions-builder.js'; + +import { SCO_STUDENT_ID as SCO_STUDENT_ORGANIZATION_LEARNER_ID } from '../organizations-sco-builder.js'; + +import { CERTIF_SUCCESS_USER_ID, CERTIF_FAILED_USER_ID, CERTIF_REGULAR_USER5_ID, CERTIF_SCO_STUDENT_ID, -} = require('./users'); -const { +} from './users.js'; + +import { CLEA_COMPLEMENTARY_CERTIFICATION_ID, PIX_DROIT_COMPLEMENTARY_CERTIFICATION_ID, PIX_EDU_2ND_DEGRE_COMPLEMENTARY_CERTIFICATION_ID, -} = require('./certification-centers-builder'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const { BILLING_MODES } = require('../../../../lib/domain/models/CertificationCandidate'); +} from './certification-centers-builder.js'; + +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { CertificationCandidate } from '../../../../lib/domain/models/CertificationCandidate.js'; +const { BILLING_MODES } = CertificationCandidate; const A_LOT_OF_CANDIDATES_COUNT = 150; const SUCCESS_CANDIDATE_IN_SESSION_TO_FINALIZE_ID = 1; @@ -297,7 +303,7 @@ function certificationCandidatesBuilder({ databaseBuilder }) { }); } -module.exports = { +export { certificationCandidatesBuilder, SUCCESS_CANDIDATE_IN_SESSION_TO_FINALIZE_ID, FAILURE_CANDIDATE_IN_SESSION_TO_FINALIZE_ID, diff --git a/api/db/seeds/data/certification/certification-center-invitations-builder.js b/api/db/seeds/data/certification/certification-center-invitations-builder.js index b294fd944a1..11a2e196616 100644 --- a/api/db/seeds/data/certification/certification-center-invitations-builder.js +++ b/api/db/seeds/data/certification/certification-center-invitations-builder.js @@ -1,6 +1,4 @@ -const { - SUP_CERTIF_CENTER_ID, -} = require('./certification-centers-builder'); +import { SUP_CERTIF_CENTER_ID } from './certification-centers-builder.js'; function certificationCenterInvitationsBuilder({ databaseBuilder }) { databaseBuilder.factory.buildCertificationCenterInvitation({ @@ -28,6 +26,4 @@ function certificationCenterInvitationsBuilder({ databaseBuilder }) { }); } -module.exports = { - certificationCenterInvitationsBuilder, -}; +export { certificationCenterInvitationsBuilder }; diff --git a/api/db/seeds/data/certification/certification-center-memberships-builder.js b/api/db/seeds/data/certification/certification-center-memberships-builder.js index 7a8fda98326..e7fdb23a483 100644 --- a/api/db/seeds/data/certification/certification-center-memberships-builder.js +++ b/api/db/seeds/data/certification/certification-center-memberships-builder.js @@ -1,4 +1,4 @@ -const { +import { SCO_COLLEGE_CERTIF_CENTER_ID, SCO_LYCEE_CERTIF_CENTER_ID, PRO_CERTIF_CENTER_ID, @@ -6,16 +6,17 @@ const { DROIT_CERTIF_CENTER_ID, SCO_NO_MANAGING_STUDENTS_CERTIF_CENTER_ID, AGRI_SCO_MANAGING_STUDENT_ID, -} = require('./certification-centers-builder'); -const { +} from './certification-centers-builder.js'; + +import { PIX_SCO_CERTIF_USER_ID, PIX_PRO_CERTIF_USER_ID, PIX_SUP_CERTIF_USER_ID, CERTIF_REGULAR_USER1_ID, CERTIF_DROIT_USER5_ID, -} = require('./users'); +} from './users.js'; -module.exports = function certificationCenterMembershipsBuilder({ databaseBuilder }) { +const certificationCenterMembershipsBuilder = function ({ databaseBuilder }) { databaseBuilder.factory.buildCertificationCenterMembership({ certificationCenterId: SCO_COLLEGE_CERTIF_CENTER_ID, userId: PIX_SCO_CERTIF_USER_ID, @@ -37,7 +38,18 @@ module.exports = function certificationCenterMembershipsBuilder({ databaseBuilde userId: PIX_SCO_CERTIF_USER_ID, }); - databaseBuilder.factory.buildCertificationCenterMembership({ userId: PIX_PRO_CERTIF_USER_ID, certificationCenterId: PRO_CERTIF_CENTER_ID }); - databaseBuilder.factory.buildCertificationCenterMembership({ userId: PIX_SUP_CERTIF_USER_ID, certificationCenterId: SUP_CERTIF_CENTER_ID }); - databaseBuilder.factory.buildCertificationCenterMembership({ userId: CERTIF_DROIT_USER5_ID, certificationCenterId: DROIT_CERTIF_CENTER_ID }); + databaseBuilder.factory.buildCertificationCenterMembership({ + userId: PIX_PRO_CERTIF_USER_ID, + certificationCenterId: PRO_CERTIF_CENTER_ID, + }); + databaseBuilder.factory.buildCertificationCenterMembership({ + userId: PIX_SUP_CERTIF_USER_ID, + certificationCenterId: SUP_CERTIF_CENTER_ID, + }); + databaseBuilder.factory.buildCertificationCenterMembership({ + userId: CERTIF_DROIT_USER5_ID, + certificationCenterId: DROIT_CERTIF_CENTER_ID, + }); }; + +export { certificationCenterMembershipsBuilder }; diff --git a/api/db/seeds/data/certification/certification-centers-builder.js b/api/db/seeds/data/certification/certification-centers-builder.js index e82bc383c7b..1c4d36bfd3f 100644 --- a/api/db/seeds/data/certification/certification-centers-builder.js +++ b/api/db/seeds/data/certification/certification-centers-builder.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const { DEFAULT_PASSWORD } = require('../users-builder'); +import _ from 'lodash'; +import { DEFAULT_PASSWORD } from '../users-builder.js'; const SCO_COLLEGE_CERTIF_CENTER_ID = 1; const GREAT_OAK_CERTIF_CENTER_ID = 23; @@ -32,7 +32,7 @@ const PIX_DROIT_COMPLEMENTARY_CERTIFICATION_ID = 53; const PIX_EDU_1ER_DEGRE_COMPLEMENTARY_CERTIFICATION_ID = 54; const PIX_EDU_2ND_DEGRE_COMPLEMENTARY_CERTIFICATION_ID = 55; -const { +import { PIX_EMPLOI_CLEA_BADGE_ID_V1, PIX_EMPLOI_CLEA_BADGE_ID_V2, PIX_EMPLOI_CLEA_BADGE_ID_V3, @@ -48,7 +48,7 @@ const { PIX_EDU_FORMATION_INITIALE_1ER_DEGRE_INITIE_BADGE_ID, PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_CONFIRME_BADGE_ID, PIX_EDU_FORMATION_CONTINUE_1ER_DEGRE_EXPERT_BADGE_ID, -} = require('../badges-builder'); +} from '../badges-builder.js'; function certificationCentersBuilder({ databaseBuilder }) { databaseBuilder.factory.buildComplementaryCertification.clea({ @@ -314,7 +314,7 @@ function certificationCentersBuilder({ databaseBuilder }) { }); } -module.exports = { +export { certificationCentersBuilder, SCO_COLLEGE_CERTIF_CENTER_ID, SCO_COLLEGE_CERTIF_CENTER_NAME, diff --git a/api/db/seeds/data/certification/certification-courses-builder.js b/api/db/seeds/data/certification/certification-courses-builder.js index 71ab1dcdf5e..f002521a95f 100644 --- a/api/db/seeds/data/certification/certification-courses-builder.js +++ b/api/db/seeds/data/certification/certification-courses-builder.js @@ -1,33 +1,33 @@ -const _ = require('lodash'); -const { +import _ from 'lodash'; + +import { CERTIF_SUCCESS_USER_ID, CERTIF_SCO_STUDENT_ID, CERTIF_FAILURE_USER_ID, CERTIF_REGULAR_USER5_ID, CERTIF_EDU_FORMATION_INITIALE_1ER_DEGRE_USER_ID, -} = require('./users'); -const { +} from './users.js'; + +import { TO_FINALIZE_SESSION_ID, NO_PROBLEM_FINALIZED_SESSION_ID, PROBLEMS_FINALIZED_SESSION_ID, PUBLISHED_SESSION_ID, PUBLISHED_SCO_SESSION_ID, -} = require('./certification-sessions-builder'); -const { +} from './certification-sessions-builder.js'; + +import { CANDIDATE_DATA_SUCCESS, CANDIDATE_DATA_FAILURE, CANDIDATE_DATA_STARTED, CANDIDATE_SCO_DATA_SUCCESS, CANDIDATE_DATA_EDU, -} = require('./certification-candidates-builder'); -const { CERTIFICATION_CHALLENGES_DATA } = require('./certification-data'); -const { - CertificationIssueReportCategories, -} = require('./../../../../lib/domain/models/CertificationIssueReportCategory'); -const { - generateCertificateVerificationCode, -} = require('../../../../lib/domain/services/verify-certificate-code-service'); -const AssessmentResult = require('../../../../lib/domain/models/AssessmentResult'); +} from './certification-candidates-builder.js'; + +import { CERTIFICATION_CHALLENGES_DATA } from './certification-data.js'; +import { CertificationIssueReportCategory } from './../../../../lib/domain/models/CertificationIssueReportCategory.js'; +import { generateCertificateVerificationCode } from '../../../../lib/domain/services/verify-certificate-code-service.js'; +import { AssessmentResult } from '../../../../lib/domain/models/AssessmentResult.js'; const ASSESSMENT_SUCCESS_IN_SESSION_TO_FINALIZE_ID = 100; const ASSESSMENT_FAILURE_IN_SESSION_TO_FINALIZE_ID = 101; @@ -157,17 +157,19 @@ async function certificationCoursesBuilder({ databaseBuilder }) { } } -async function _buildCertificationCourse(databaseBuilder, { - id, - assessmentId, - userId, - sessionId, - candidateData, - examinerComment, - hasSeenEndTestScreen, - isPublished, - pixCertificationStatus, -}, +async function _buildCertificationCourse( + databaseBuilder, + { + id, + assessmentId, + userId, + sessionId, + candidateData, + examinerComment, + hasSeenEndTestScreen, + isPublished, + pixCertificationStatus, + } ) { const createdAt = new Date('2020-01-31T00:00:00Z'); const verificationCode = await generateCertificateVerificationCode(); @@ -187,18 +189,18 @@ async function _buildCertificationCourse(databaseBuilder, { if (examinerComment) { databaseBuilder.factory.buildCertificationIssueReport({ certificationCourseId, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, description: examinerComment + ' (deuxième fois)', }); databaseBuilder.factory.buildCertificationIssueReport({ certificationCourseId, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, description: examinerComment + ' (première fois)', resolvedAt: '2020-05-01T00:00:00Z', }); databaseBuilder.factory.buildCertificationIssueReport({ certificationCourseId, - category: CertificationIssueReportCategories.SIGNATURE_ISSUE, + category: CertificationIssueReportCategory.SIGNATURE_ISSUE, description: examinerComment, }); } @@ -227,7 +229,7 @@ async function _buildCertificationCourse(databaseBuilder, { }); } -module.exports = { +export { certificationCoursesBuilder, ASSESSMENT_SUCCESS_IN_SESSION_TO_FINALIZE_ID, ASSESSMENT_FAILURE_IN_SESSION_TO_FINALIZE_ID, diff --git a/api/db/seeds/data/certification/certification-data.js b/api/db/seeds/data/certification/certification-data.js index 073c0fa6131..5ac04dd7f34 100644 --- a/api/db/seeds/data/certification/certification-data.js +++ b/api/db/seeds/data/certification/certification-data.js @@ -1787,7 +1787,7 @@ const PIX_EDU_FORMATION_CONTINUE_FORMATEUR_PROFILE_DATA_OBJECTS_FOR_BUILDING_ANS }, ]; -module.exports = { +export { WEAK_CERTIFIABLE_PROFILE_DATA_OBJECTS_FOR_BUILDING_ANSWERS_AND_KNOWLEDGE_ELEMENTS, WEAK_CERTIFIABLE_WITH_TIMED_CHALLENGE_PROFILE_DATA_OBJECTS_FOR_BUILDING_ANSWERS_AND_KNOWLEDGE_ELEMENTS, CERTIFICATION_CHALLENGES_DATA, diff --git a/api/db/seeds/data/certification/certification-scores-builder.js b/api/db/seeds/data/certification/certification-scores-builder.js index 4f009f2fdf3..0b9921cc53f 100644 --- a/api/db/seeds/data/certification/certification-scores-builder.js +++ b/api/db/seeds/data/certification/certification-scores-builder.js @@ -1,5 +1,6 @@ -const _ = require('lodash'); -const { +import _ from 'lodash'; + +import { ASSESSMENT_SUCCESS_IN_SESSION_TO_FINALIZE_ID, ASSESSMENT_FAILURE_IN_SESSION_TO_FINALIZE_ID, ASSESSMENT_SUCCESS_IN_NO_PROBLEM_FINALIZED_SESSION_ID, @@ -11,13 +12,14 @@ const { ASSESSMENT_SUCCESS_PUBLISHED_SESSION_SCO_ID, ASSESSMENT_FAILURE_PUBLISHED_SESSION_ID, ASSESSMENT_SUCCESS_EDU_PUBLISHED_SESSION_ID, -} = require('./certification-courses-builder'); -const { +} from './certification-courses-builder.js'; + +import { CERTIFICATION_FAILURE_ANSWERS_DATA, CERTIFICATION_SUCCESS_ANSWERS_DATA, CERTIFICATION_FAILURE_COMPETENCE_MARKS_DATA, CERTIFICATION_SUCCESS_COMPETENCE_MARKS_DATA, -} = require('./certification-data'); +} from './certification-data.js'; function certificationScoresBuilder({ databaseBuilder }) { // Each certification present the same scores per user. @@ -35,7 +37,7 @@ function certificationScoresBuilder({ databaseBuilder }) { ], (assessmentId) => { _buildSuccessScore(databaseBuilder, createdAt, assessmentId); - }, + } ); _.each( [ @@ -46,7 +48,8 @@ function certificationScoresBuilder({ databaseBuilder }) { ], (assessmentId) => { _buildFailureScore(databaseBuilder, createdAt, assessmentId); - }); + } + ); // Special case : build answers only, has for this one, the assessment has not been completed _buildAnswers({ @@ -74,8 +77,16 @@ function _addTenSeconds(date) { function _buildSuccessScore(databaseBuilder, createdAt, assessmentId) { _buildAnswers({ answerData: CERTIFICATION_SUCCESS_ANSWERS_DATA, databaseBuilder, assessmentId, createdAt }); const assessmentResultId = databaseBuilder.factory.buildAssessmentResult({ - level: null, pixScore: 518, emitter: 'PIX-ALGO', status: 'validated', commentForJury: null, - commentForCandidate: null, commentForOrganization: null, juryId: null, assessmentId, createdAt, + level: null, + pixScore: 518, + emitter: 'PIX-ALGO', + status: 'validated', + commentForJury: null, + commentForCandidate: null, + commentForOrganization: null, + juryId: null, + assessmentId, + createdAt, }).id; _.each(CERTIFICATION_SUCCESS_COMPETENCE_MARKS_DATA, (competenceMarkData) => { databaseBuilder.factory.buildCompetenceMark({ ...competenceMarkData, assessmentResultId, createdAt }); @@ -85,12 +96,20 @@ function _buildSuccessScore(databaseBuilder, createdAt, assessmentId) { function _buildFailureScore(databaseBuilder, createdAt, assessmentId) { _buildAnswers({ answerData: CERTIFICATION_FAILURE_ANSWERS_DATA, databaseBuilder, assessmentId, createdAt }); const assessmentResultId = databaseBuilder.factory.buildAssessmentResult({ - level: -1, pixScore: 0, emitter: 'PIX-ALGO', status: 'rejected', commentForJury: null, - commentForCandidate: null, commentForOrganization: null, juryId: null, assessmentId, createdAt, + level: -1, + pixScore: 0, + emitter: 'PIX-ALGO', + status: 'rejected', + commentForJury: null, + commentForCandidate: null, + commentForOrganization: null, + juryId: null, + assessmentId, + createdAt, }).id; _.each(CERTIFICATION_FAILURE_COMPETENCE_MARKS_DATA, (competenceMarkData) => { databaseBuilder.factory.buildCompetenceMark({ ...competenceMarkData, assessmentResultId, createdAt }); }); } -module.exports = certificationScoresBuilder; +export { certificationScoresBuilder }; diff --git a/api/db/seeds/data/certification/certification-sessions-builder.js b/api/db/seeds/data/certification/certification-sessions-builder.js index 358d549a0d8..59666846275 100644 --- a/api/db/seeds/data/certification/certification-sessions-builder.js +++ b/api/db/seeds/data/certification/certification-sessions-builder.js @@ -1,4 +1,4 @@ -const { +import { SCO_COLLEGE_CERTIF_CENTER_ID, SCO_COLLEGE_CERTIF_CENTER_NAME, SCO_NO_MANAGING_STUDENTS_CERTIF_CENTER_ID, @@ -7,8 +7,9 @@ const { DROIT_CERTIF_CENTER_NAME, SUP_CERTIF_CENTER_NAME, SUP_CERTIF_CENTER_ID, -} = require('./certification-centers-builder'); -const { PIX_SUPER_ADMIN_ID } = require('./../users-builder'); +} from './certification-centers-builder.js'; + +import { PIX_SUPER_ADMIN_ID } from './../users-builder.js'; const EMPTY_SESSION_ID = 1; const STARTED_SESSION_ID = 2; const STARTED_SESSION_WITH_LOT_OF_CANDIDATES_ID = 3; @@ -33,7 +34,13 @@ function certificationSessionsBuilder({ databaseBuilder }) { databaseBuilder.factory.buildSession({ id: EMPTY_SESSION_ID, - certificationCenter, certificationCenterId, address, room, examiner: `${examiner}-empty`, date, time, + certificationCenter, + certificationCenterId, + address, + room, + examiner: `${examiner}-empty`, + date, + time, description: 'Session pas commencée avec ZERO candidat inscrit.', accessCode: 'ANNE01', examinerGlobalComment: null, @@ -41,7 +48,13 @@ function certificationSessionsBuilder({ databaseBuilder }) { databaseBuilder.factory.buildSession({ id: STARTED_SESSION_ID, - certificationCenter, certificationCenterId, address, room, examiner: `${examiner}-started`, date, time, + certificationCenter, + certificationCenterId, + address, + room, + examiner: `${examiner}-started`, + date, + time, description: 'Session pas commencée avec quelques candidats inscrits non liés.', accessCode: 'ANNE02', examinerGlobalComment: null, @@ -49,7 +62,13 @@ function certificationSessionsBuilder({ databaseBuilder }) { databaseBuilder.factory.buildSession({ id: STARTED_SESSION_WITH_LOT_OF_CANDIDATES_ID, - certificationCenter, certificationCenterId, address, room, examiner: `${examiner}-lot-of-candidates`, date, time, + certificationCenter, + certificationCenterId, + address, + room, + examiner: `${examiner}-lot-of-candidates`, + date, + time, description: 'Session pas commencée avec des candidats inscrits non liés.', accessCode: 'ANNE03', examinerGlobalComment: null, @@ -57,7 +76,13 @@ function certificationSessionsBuilder({ databaseBuilder }) { databaseBuilder.factory.buildSession({ id: TO_FINALIZE_SESSION_ID, - certificationCenter, certificationCenterId, address, room, examiner: `${examiner}-to-finalize`, date, time, + certificationCenter, + certificationCenterId, + address, + room, + examiner: `${examiner}-to-finalize`, + date, + time, description: 'Session pas encore finalisée, avec des candidats ayant passés leur test de certification.', accessCode: 'ANNE04', examinerGlobalComment: null, @@ -65,8 +90,15 @@ function certificationSessionsBuilder({ databaseBuilder }) { databaseBuilder.factory.buildSession({ id: NO_PROBLEM_FINALIZED_SESSION_ID, - certificationCenter, certificationCenterId, address, room, examiner: `${examiner}-no-problem`, date, time, - description: 'Session finalisée sans problème, donc aucun commentaire et le surveillant a vu tous les écrans de fin de test.', + certificationCenter, + certificationCenterId, + address, + room, + examiner: `${examiner}-no-problem`, + date, + time, + description: + 'Session finalisée sans problème, donc aucun commentaire et le surveillant a vu tous les écrans de fin de test.', accessCode: 'ANNE05', examinerGlobalComment: null, finalizedAt: new Date('2020-04-15T15:00:34Z'), @@ -77,19 +109,27 @@ function certificationSessionsBuilder({ databaseBuilder }) { certificationCenterName: certificationCenter, isPublishable: true, publishedAt: null, - date, time, + date, + time, finalizedAt: new Date('2020-04-15T15:00:34Z'), }); databaseBuilder.factory.buildSession({ id: PROBLEMS_FINALIZED_SESSION_ID, - certificationCenter, certificationCenterId, address, room, examiner: `${examiner}-problems`, date, time, + certificationCenter, + certificationCenterId, + address, + room, + examiner: `${examiner}-problems`, + date, + time, description: 'Session finalisée à problèmes et assignée !', accessCode: 'ANNE06', examinerGlobalComment: 'Une météorite est tombée sur le centre de certification pendant la session !!', finalizedAt: new Date('2020-05-05T15:00:34Z'), assignedCertificationOfficerId: PIX_SUPER_ADMIN_ID, - juryComment: 'Tu te rends compte, si on n’avait pas perdu une heure et quart, on serait là depuis une heure et quart !', + juryComment: + 'Tu te rends compte, si on n’avait pas perdu une heure et quart, on serait là depuis une heure et quart !', juryCommentAuthorId: PIX_SUPER_ADMIN_ID, juryCommentedAt: new Date('2021-04-28T00:42:03Z'), }); @@ -99,15 +139,21 @@ function certificationSessionsBuilder({ databaseBuilder }) { certificationCenterName: certificationCenter, isPublishable: false, publishedAt: null, - date, time, + date, + time, finalizedAt: new Date('2020-05-05T15:00:34Z'), assignedCertificationOfficerName: 'Super Admin', }); databaseBuilder.factory.buildSession({ id: NO_CERTIF_CENTER_SESSION_ID, - certificationCenterId: null, certificationCenter: 'Centre de certif pas dans la BDD !', - address, room, examiner, date, time, + certificationCenterId: null, + certificationCenter: 'Centre de certif pas dans la BDD !', + address, + room, + examiner, + date, + time, description: 'Session sans vrai certification center !', accessCode: 'ANNE07', examinerGlobalComment: 'Salut les zouzous', @@ -116,7 +162,13 @@ function certificationSessionsBuilder({ databaseBuilder }) { databaseBuilder.factory.buildSession({ id: PUBLISHED_SESSION_ID, - certificationCenter, certificationCenterId, address, room, examiner: `${examiner}-published`, date, time, + certificationCenter, + certificationCenterId, + address, + room, + examiner: `${examiner}-published`, + date, + time, description: 'Session publiée', accessCode: 'ANNE08', finalizedAt: new Date('2020-05-05T15:00:34Z'), @@ -127,14 +179,21 @@ function certificationSessionsBuilder({ databaseBuilder }) { sessionId: PUBLISHED_SESSION_ID, certificationCenterName: certificationCenter, isPublishable: true, - date, time, + date, + time, finalizedAt: new Date('2020-05-05T15:00:34Z'), publishedAt: new Date('2020-06-05T15:00:34Z'), }); databaseBuilder.factory.buildSession({ id: PUBLISHED_SCO_SESSION_ID, - certificationCenter, certificationCenterId, address, room, examiner: `${examiner}-published-sco`, date, time, + certificationCenter, + certificationCenterId, + address, + room, + examiner: `${examiner}-published-sco`, + date, + time, description: 'Session publiée', accessCode: 'ANNE08', finalizedAt: new Date('2020-05-05T15:00:34Z'), @@ -145,7 +204,8 @@ function certificationSessionsBuilder({ databaseBuilder }) { sessionId: PUBLISHED_SCO_SESSION_ID, certificationCenterName: certificationCenter, isPublishable: true, - date, time, + date, + time, finalizedAt: new Date('2020-05-05T15:00:34Z'), publishedAt: new Date('2020-06-05T15:00:34Z'), }); @@ -154,18 +214,27 @@ function certificationSessionsBuilder({ databaseBuilder }) { id: COMPLEMENTARY_CERTIFICATIONS_SESSION_ID, certificationCenterName: SUP_CERTIF_CENTER_NAME, certificationCenterId: SUP_CERTIF_CENTER_ID, - date, time, + date, + time, description: 'Candidats avec des certifications complémentaires', }); // Some sessions to illustrate paginated sessions list order in PixAdmin databaseBuilder.factory.buildSession({ - certificationCenter, certificationCenterId, address, room, examiner: `${examiner}-1`, date, time, + certificationCenter, + certificationCenterId, + address, + room, + examiner: `${examiner}-1`, + date, + time, finalizedAt: null, publishedAt: null, }); const finalizedSession = databaseBuilder.factory.buildSession({ - certificationCenter, certificationCenterId, address, + certificationCenter, + certificationCenterId, + address, createdAt: new Date('2018-01-01T00:00:00Z'), date: '2018-01-02', finalizedAt: new Date('2018-01-03T00:00:00Z'), @@ -175,19 +244,27 @@ function certificationSessionsBuilder({ databaseBuilder }) { sessionId: finalizedSession.id, certificationCenterName: certificationCenter, isPublishable: true, - date: '2018-01-02', time, + date: '2018-01-02', + time, finalizedAt: new Date('2018-01-03T00:00:00Z'), publishedAt: null, }); databaseBuilder.factory.buildSession({ - certificationCenter, certificationCenterId, + certificationCenter, + certificationCenterId, finalizedAt: new Date('2018-01-02T00:00:00Z'), publishedAt: null, resultsSentToPrescriberAt: new Date('2018-01-04T00:00:00Z'), }); databaseBuilder.factory.buildSession({ - certificationCenter, certificationCenterId, address, room, examiner: `${examiner}-2`, date, time, + certificationCenter, + certificationCenterId, + address, + room, + examiner: `${examiner}-2`, + date, + time, finalizedAt: new Date('2018-01-02T00:00:00Z'), publishedAt: new Date('2018-01-03T00:00:00Z'), }); @@ -209,7 +286,12 @@ function certificationSessionsBuilder({ databaseBuilder }) { databaseBuilder.factory.buildSession({ id: PIX_DROIT_SESSION_ID, certificationCenter: DROIT_CERTIF_CENTER_NAME, - certificationCenterId: DROIT_CERTIF_CENTER_ID, address, room, examiner: `${examiner}-3`, date, time, + certificationCenterId: DROIT_CERTIF_CENTER_ID, + address, + room, + examiner: `${examiner}-3`, + date, + time, description: 'Certif avec pix+droit', accessCode: 'DROI01', finalizedAt: null, @@ -217,7 +299,7 @@ function certificationSessionsBuilder({ databaseBuilder }) { }); } -module.exports = { +export { certificationSessionsBuilder, EMPTY_SESSION_ID, STARTED_SESSION_ID, diff --git a/api/db/seeds/data/certification/complementary-certification-course-results-builder.js b/api/db/seeds/data/certification/complementary-certification-course-results-builder.js index e13b8d4204d..2b41aa31550 100644 --- a/api/db/seeds/data/certification/complementary-certification-course-results-builder.js +++ b/api/db/seeds/data/certification/complementary-certification-course-results-builder.js @@ -1,23 +1,27 @@ -const { badges } = require('../../../constants'); -const { +import { badges } from '../../../constants.js'; + +import { CERTIFICATION_COURSE_SUCCESS_ID, CERTIFICATION_COURSE_FAILURE_ID, CERTIFICATION_COURSE_EDU_ID, -} = require('./certification-courses-builder'); -const { PIX_DROIT_MAITRE_BADGE_ID } = require('../badges-builder'); -const { CERTIF_DROIT_USER5_ID } = require('./users'); -const { +} from './certification-courses-builder.js'; + +import { PIX_DROIT_MAITRE_BADGE_ID } from '../badges-builder.js'; +import { CERTIF_DROIT_USER5_ID } from './users.js'; + +import { CLEA_COMPLEMENTARY_CERTIFICATION_ID, PIX_DROIT_COMPLEMENTARY_CERTIFICATION_ID, PIX_EDU_1ER_DEGRE_COMPLEMENTARY_CERTIFICATION_ID, PIX_CLEA_V3_COMPLEMENTARY_CERTIFICATION_BADGE_ID, PIX_DROIT_MAITRE_COMPLEMENTARY_CERTIFICATION_BADGE_ID, PIX_EDU_1ER_INITIE_COMPLEMENTARY_CERTIFICATION_BADGE_ID, -} = require('./certification-centers-builder'); -const { participateToAssessmentCampaign } = require('../campaign-participations-builder'); -const { TARGET_PROFILE_PIX_DROIT_ID } = require('../target-profiles-builder'); -const { SUP_STUDENT_ASSOCIATED_ID, SUP_UNIVERSITY_ID } = require('../organizations-sup-builder'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +} from './certification-centers-builder.js'; + +import { participateToAssessmentCampaign } from '../campaign-participations-builder.js'; +import { TARGET_PROFILE_PIX_DROIT_ID } from '../target-profiles-builder.js'; +import { SUP_STUDENT_ASSOCIATED_ID, SUP_UNIVERSITY_ID } from '../organizations-sup-builder.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED } = CampaignParticipationStatuses; function complementaryCertificationCourseResultsBuilder({ databaseBuilder }) { @@ -67,7 +71,7 @@ function complementaryCertificationCourseResultsBuilder({ databaseBuilder }) { certificationCourseId: CERTIFICATION_COURSE_SUCCESS_ID, complementaryCertificationId: PIX_DROIT_COMPLEMENTARY_CERTIFICATION_ID, complementaryCertificationBadgeId: PIX_DROIT_MAITRE_COMPLEMENTARY_CERTIFICATION_BADGE_ID, - }, + } ); databaseBuilder.factory.buildComplementaryCertificationCourseResult({ complementaryCertificationCourseId: complementaryCertifCourseSuccessDroitId, @@ -87,6 +91,4 @@ function complementaryCertificationCourseResultsBuilder({ databaseBuilder }) { }); } -module.exports = { - complementaryCertificationCourseResultsBuilder, -}; +export { complementaryCertificationCourseResultsBuilder }; diff --git a/api/db/seeds/data/certification/issue-report-categories-builder.js b/api/db/seeds/data/certification/issue-report-categories-builder.js index b23f40c1274..7717f3a24c0 100644 --- a/api/db/seeds/data/certification/issue-report-categories-builder.js +++ b/api/db/seeds/data/certification/issue-report-categories-builder.js @@ -137,4 +137,4 @@ function issueReportCategoriesBuilder({ databaseBuilder }) { }); } -module.exports = { issueReportCategoriesBuilder }; +export { issueReportCategoriesBuilder }; diff --git a/api/db/seeds/data/certification/tooling.js b/api/db/seeds/data/certification/tooling.js index 9bec3193547..4af6deaf5eb 100644 --- a/api/db/seeds/data/certification/tooling.js +++ b/api/db/seeds/data/certification/tooling.js @@ -1,12 +1,12 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); -const skillRepository = require('../../../../lib/infrastructure/repositories/skill-repository'); -const competenceRepository = require('../../../../lib/infrastructure/repositories/competence-repository'); -const challengeRepository = require('../../../../lib/infrastructure/repositories/challenge-repository'); -const badgeRepository = require('../../../../lib/infrastructure/repositories/badge-repository'); -const logger = require('../../../../lib/infrastructure/logger'); -const { knex } = require('../../../../db/knex-database-connection'); -const ComplementaryCertification = require('../../../../lib/domain/models/ComplementaryCertification'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import * as skillRepository from '../../../../lib/infrastructure/repositories/skill-repository.js'; +import * as competenceRepository from '../../../../lib/infrastructure/repositories/competence-repository.js'; +import * as challengeRepository from '../../../../lib/infrastructure/repositories/challenge-repository.js'; +import * as badgeRepository from '../../../../lib/infrastructure/repositories/badge-repository.js'; +import { logger } from '../../../../lib/infrastructure/logger.js'; +import { knex } from '../../../../db/knex-database-connection.js'; +import { ComplementaryCertification } from '../../../../lib/domain/models/ComplementaryCertification.js'; let allChallenges = []; let allPixCompetences = []; @@ -49,7 +49,7 @@ async function makeUserCleaCertifiable({ userId, databaseBuilder }) { .innerJoin( 'complementary-certifications', 'complementary-certifications.id', - 'complementary-certification-badges.complementaryCertificationId', + 'complementary-certification-badges.complementaryCertificationId' ) .where({ 'complementary-certifications.key': ComplementaryCertification.CLEA }) .orderBy('complementary-certification-badges.level', 'desc'); @@ -154,9 +154,4 @@ function _findFirstChallengeValidatedBySkillId(skillId) { return _.find(allChallenges, { status: 'validé', skill: { id: skillId } }); } -module.exports = { - makeUserPixCertifiable, - makeUserPixDroitCertifiable, - makeUserCleaCertifiable, - makeUserPixEduCertifiable, -}; +export { makeUserPixCertifiable, makeUserPixDroitCertifiable, makeUserCleaCertifiable, makeUserPixEduCertifiable }; diff --git a/api/db/seeds/data/certification/user-profiles-builder.js b/api/db/seeds/data/certification/user-profiles-builder.js index 2ade00e7243..a8c6534d5e7 100644 --- a/api/db/seeds/data/certification/user-profiles-builder.js +++ b/api/db/seeds/data/certification/user-profiles-builder.js @@ -1,6 +1,7 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); -const { +import _ from 'lodash'; +import bluebird from 'bluebird'; + +import { CERTIF_SUCCESS_USER_ID, CERTIF_FAILURE_USER_ID, CERTIF_REGULAR_USER1_ID, @@ -15,14 +16,17 @@ const { CERTIF_EDU_FORMATION_CONTINUE_2ND_DEGRE_USER_ID, CERTIF_EDU_FORMATION_INITIALE_1ER_DEGRE_USER_ID, CERTIF_EDU_FORMATION_CONTINUE_1ER_DEGRE_USER_ID, -} = require('./users'); -const { makeUserPixCertifiable, makeUserPixDroitCertifiable } = require('./tooling'); -const { +} from './users.js'; + +import { makeUserPixCertifiable, makeUserPixDroitCertifiable } from './tooling.js'; + +import { WEAK_CERTIFIABLE_WITH_TIMED_CHALLENGE_PROFILE_DATA_OBJECTS_FOR_BUILDING_ANSWERS_AND_KNOWLEDGE_ELEMENTS, PIX_EDU_FORMATION_INITIALE_AVANCE_PROFILE_DATA_OBJECTS_FOR_BUILDING_ANSWERS_AND_KNOWLEDGE_ELEMENTS, PIX_EDU_FORMATION_CONTINUE_FORMATEUR_PROFILE_DATA_OBJECTS_FOR_BUILDING_ANSWERS_AND_KNOWLEDGE_ELEMENTS, -} = require('./certification-data'); -const { SCO_FOREIGNER_USER_ID, SCO_FRENCH_USER_ID } = require('../organizations-sco-builder'); +} from './certification-data.js'; + +import { SCO_FOREIGNER_USER_ID, SCO_FRENCH_USER_ID } from '../organizations-sco-builder.js'; async function certificationUserProfilesBuilder({ databaseBuilder }) { const createdAt = new Date('2019-12-31T00:00:00Z'); @@ -61,7 +65,7 @@ async function certificationUserProfilesBuilder({ databaseBuilder }) { countCertifiableCompetences: 5, levelOnEachCompetence: 1, }); - }, + } ); // Pix+ Droit @@ -96,7 +100,7 @@ async function certificationUserProfilesBuilder({ databaseBuilder }) { userId: CERTIF_REGULAR_USER_WITH_TIMED_CHALLENGE_ID, assessmentId, }); - }, + } ); // Pix+ EDU @@ -184,7 +188,7 @@ async function certificationUserProfilesBuilder({ databaseBuilder }) { userId: CERTIF_EDU_FORMATION_CONTINUE_2ND_DEGRE_USER_ID, assessmentId: assessmentIdForPixEduFormationContinue2ndDegre, }); - }, + } ); await makeUserPixCertifiable({ @@ -215,10 +219,8 @@ async function certificationUserProfilesBuilder({ databaseBuilder }) { userId: CERTIF_EDU_FORMATION_CONTINUE_1ER_DEGRE_USER_ID, assessmentId: assessmentIdForPixEduFormationContinue1erDegre, }); - }, + } ); } -module.exports = { - certificationUserProfilesBuilder, -}; +export { certificationUserProfilesBuilder }; diff --git a/api/db/seeds/data/certification/users.js b/api/db/seeds/data/certification/users.js index 2628f1905d2..9af4d8df87a 100644 --- a/api/db/seeds/data/certification/users.js +++ b/api/db/seeds/data/certification/users.js @@ -15,9 +15,8 @@ const CERTIF_EDU_FORMATION_INITIALE_2ND_DEGRE_USER_ID = 113; const CERTIF_EDU_FORMATION_CONTINUE_2ND_DEGRE_USER_ID = 114; const CERTIF_EDU_FORMATION_INITIALE_1ER_DEGRE_USER_ID = 115; const CERTIF_EDU_FORMATION_CONTINUE_1ER_DEGRE_USER_ID = 116; -const { DEFAULT_PASSWORD } = require('../users-builder'); - -const { SCO_STUDENT_ID } = require('../organizations-sco-builder'); +import { DEFAULT_PASSWORD } from '../users-builder.js'; +import { SCO_STUDENT_ID } from '../organizations-sco-builder.js'; function certificationUsersBuilder({ databaseBuilder }) { databaseBuilder.factory.buildUser.withRawPassword({ @@ -174,10 +173,13 @@ function certificationUsersBuilder({ databaseBuilder }) { }); } -module.exports = { +const CERTIF_SCO_STUDENT_ID = SCO_STUDENT_ID; +const CERTIF_FAILED_USER_ID = CERTIF_FAILURE_USER_ID; + +export { certificationUsersBuilder, PIX_SCO_CERTIF_USER_ID, - CERTIF_SCO_STUDENT_ID: SCO_STUDENT_ID, + CERTIF_SCO_STUDENT_ID, PIX_PRO_CERTIF_USER_ID, PIX_SUP_CERTIF_USER_ID, PIX_NONE_CERTIF_USER_ID, @@ -194,4 +196,5 @@ module.exports = { CERTIF_EDU_FORMATION_CONTINUE_2ND_DEGRE_USER_ID, CERTIF_EDU_FORMATION_INITIALE_1ER_DEGRE_USER_ID, CERTIF_EDU_FORMATION_CONTINUE_1ER_DEGRE_USER_ID, + CERTIF_FAILED_USER_ID, }; diff --git a/api/db/seeds/data/common/common-builder.js b/api/db/seeds/data/common/common-builder.js index 9713b876ddf..de945856096 100644 --- a/api/db/seeds/data/common/common-builder.js +++ b/api/db/seeds/data/common/common-builder.js @@ -1,4 +1,6 @@ -const { ROLES } = require('../../../../lib/domain/constants').PIX_ADMIN; +import { PIX_ADMIN } from '../../../../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; // IDS /// USERS @@ -34,7 +36,7 @@ const PIX_EDU_1ER_DEGRE_CONFIRME_COMPLEMENTARY_CERTIFICATION_BADGE_ID = 73; const PIX_EDU_2ND_DEGRE_INITIE_COMPLEMENTARY_CERTIFICATION_BADGE_ID = 74; const PIX_EDU_2ND_DEGRE_CONFIRME_COMPLEMENTARY_CERTIFICATION_BADGE_ID = 75; -module.exports = { +export { commonBuilder, CLEA_COMPLEMENTARY_CERTIFICATION_ID, PIX_DROIT_COMPLEMENTARY_CERTIFICATION_ID, @@ -410,7 +412,7 @@ function _createDroit(databaseBuilder) { id: PIX_DROIT_MAITRE_CERTIFIABLE_BADGE_ID, targetProfileId: PIX_DROIT_TARGET_PROFILE_ID, message: - 'Félicitations ! Votre profil est prêt pour vous présenter à une certification Pix+Droit de niveau Avancé. Vous avez fait preuve d\'une maîtrise des compétences numériques nécessaires à l\'exercice des métiers du droit dans tous les domaines. En perfectionnant encore vos compétences, vous pourrez obtenir le niveau Expert.', + "Félicitations ! Votre profil est prêt pour vous présenter à une certification Pix+Droit de niveau Avancé. Vous avez fait preuve d'une maîtrise des compétences numériques nécessaires à l'exercice des métiers du droit dans tous les domaines. En perfectionnant encore vos compétences, vous pourrez obtenir le niveau Expert.", altMessage: 'Pix+Droit niveau Avancé', imageUrl: 'https://images.pix.fr/badges/badge_pix-PIX_DROIT_silver%20copy.svg', key: 'PIX_PIX_DROIT_MAITRE_CERTIF', @@ -488,7 +490,7 @@ function _createDroit(databaseBuilder) { id: PIX_DROIT_EXPERT_CERTIFIABLE_BADGE_ID, targetProfileId: PIX_DROIT_TARGET_PROFILE_ID, message: - 'Félicitations ! Votre profil est prêt pour vous présenter à une certification Pix+Droit de niveau Expert. Les compétences numériques nécessaires à l\'exercice des métiers du droit n\'ont plus de secret pour vous.', + "Félicitations ! Votre profil est prêt pour vous présenter à une certification Pix+Droit de niveau Expert. Les compétences numériques nécessaires à l'exercice des métiers du droit n'ont plus de secret pour vous.", altMessage: 'Pix+Droit niveau Expert', imageUrl: 'https://images.pix.fr/badges/badge_pix-PIX_DROIT_gold%20copy.svg', key: 'PIX_PIX_DROIT_EXPERT_CERTIF', @@ -538,7 +540,7 @@ function _createDroit(databaseBuilder) { id: PIX_DROIT_INITIE_CERTIFIABLE_BADGE_ID, targetProfileId: PIX_DROIT_TARGET_PROFILE_ID, message: - 'Félicitations ! Votre profil est prêt pour vous présenter à une certification Pix+Droit de niveau Initié. Vous avez fait preuve d\'une maîtrise des compétences numériques nécessaires à l\'exercice des métiers du droit dans tous les domaines. En perfectionnant encore vos compétences, vous pourrez obtenir un niveau Avancé.', + "Félicitations ! Votre profil est prêt pour vous présenter à une certification Pix+Droit de niveau Initié. Vous avez fait preuve d'une maîtrise des compétences numériques nécessaires à l'exercice des métiers du droit dans tous les domaines. En perfectionnant encore vos compétences, vous pourrez obtenir un niveau Avancé.", altMessage: 'Pix+Droit niveau Initié', imageUrl: 'https://images.pix.fr/badges/Pix_plus_Droit- Pret-certif_Bronze--Initie.svg', key: 'PIX_PIX_DROIT_INITIE_CERTIF', @@ -1238,4 +1240,3 @@ function _createCities(databaseBuilder) { INSEECode: '97101', }); } - diff --git a/api/db/seeds/data/common/tooling/campaign-tooling.js b/api/db/seeds/data/common/tooling/campaign-tooling.js index 17fd148df19..330d4df2a6a 100644 --- a/api/db/seeds/data/common/tooling/campaign-tooling.js +++ b/api/db/seeds/data/common/tooling/campaign-tooling.js @@ -1,15 +1,12 @@ -const _ = require('lodash'); -const dayjs = require('dayjs'); -const learningContent = require('./learning-content'); -const profileTooling = require('./profile-tooling'); -const generic = require('./generic'); -const CampaignParticipationStatuses = require('../../../../../lib/domain/models/CampaignParticipationStatuses'); -const Assessment = require('../../../../../lib/domain/models/Assessment'); +import _ from 'lodash'; +import dayjs from 'dayjs'; +import * as learningContent from './learning-content.js'; +import * as profileTooling from './profile-tooling.js'; +import * as generic from './generic.js'; +import { CampaignParticipationStatuses } from '../../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { Assessment } from '../../../../../lib/domain/models/Assessment.js'; -module.exports = { - createAssessmentCampaign, - createProfilesCollectionCampaign, -}; +export { createAssessmentCampaign, createProfilesCollectionCampaign }; /** * Fonction générique pour créer une campagne d'évaluation selon une configuration donnée. @@ -100,7 +97,7 @@ async function createAssessmentCampaign({ const skillsCapped = skillsForTube.filter((skill) => skill.level <= parseInt(cappedTube.level)); skillCount += skillsCapped.length; skillsCapped.map((skill) => - databaseBuilder.factory.buildCampaignSkill({ campaignId: realCampaignId, skillId: skill.id }), + databaseBuilder.factory.buildCampaignSkill({ campaignId: realCampaignId, skillId: skill.id }) ); } const badgeIds = await databaseBuilder.knex('badges').pluck('id').where({ targetProfileId }); @@ -108,7 +105,7 @@ async function createAssessmentCampaign({ const userAndLearnerIds = await _createOrRetrieveUsersAndLearners( databaseBuilder, realOrganizationId, - configCampaign.participantCount, + configCampaign.participantCount ); const answersAndKnowledgeElementsForProfile = await _getProfile('PERFECT'); @@ -166,7 +163,7 @@ async function createAssessmentCampaign({ userId, ...keData, createdAt: dayjs().subtract(1, 'day'), - }), + }) ); } for (const badgeId of badgeIds) { @@ -189,7 +186,7 @@ async function createAssessmentCampaign({ userId, ...keData, createdAt: dayjs().subtract(1, 'day'), - }), + }) ); } databaseBuilder.factory.buildKnowledgeElementSnapshot({ @@ -283,7 +280,7 @@ async function createProfilesCollectionCampaign({ const userAndLearnerIds = await _createOrRetrieveUsersAndLearners( databaseBuilder, realOrganizationId, - configCampaign.participantCount, + configCampaign.participantCount ); const profileDistribution = [ ...Array(configCampaign.profileDistribution.beginner || 0).fill('BEGINNER'), @@ -333,7 +330,7 @@ async function createProfilesCollectionCampaign({ userId, ...keData, createdAt: dayjs().subtract(1, 'day'), - }), + }) ); } databaseBuilder.factory.buildKnowledgeElementSnapshot({ diff --git a/api/db/seeds/data/common/tooling/certification-center-tooling.js b/api/db/seeds/data/common/tooling/certification-center-tooling.js index 049bb9338f9..e0f37b0ee96 100644 --- a/api/db/seeds/data/common/tooling/certification-center-tooling.js +++ b/api/db/seeds/data/common/tooling/certification-center-tooling.js @@ -1,6 +1,4 @@ -module.exports = { - createCertificationCenter, -}; +export { createCertificationCenter }; /** * Fonction générique pour créer un centre de certification selon une configuration donnée. @@ -62,7 +60,7 @@ function _buildCertificationCenterHabilitations({ databaseBuilder.factory.buildComplementaryCertificationHabilitation({ certificationCenterId, complementaryCertificationId, - }), + }) ); } @@ -73,7 +71,7 @@ function _buildCertificationCenterMemberships({ databaseBuilder, certificationCe certificationCenterId, createdAt: new Date(), isReferer: false, - }), + }) ); } diff --git a/api/db/seeds/data/common/tooling/generic.js b/api/db/seeds/data/common/tooling/generic.js index 17ac3a64d7e..afea7d2fc96 100644 --- a/api/db/seeds/data/common/tooling/generic.js +++ b/api/db/seeds/data/common/tooling/generic.js @@ -1,9 +1,6 @@ -const _ = require('lodash'); +import _ from 'lodash'; -module.exports = { - pickRandomAmong, - pickOneRandomAmong, -}; +export { pickRandomAmong, pickOneRandomAmong }; function pickRandomAmong(collection, howMuch) { const shuffledCollection = _.sortBy(collection, () => _.random(0, 100)); diff --git a/api/db/seeds/data/common/tooling/index.js b/api/db/seeds/data/common/tooling/index.js index 4e0a61939a8..2592fb2f87b 100644 --- a/api/db/seeds/data/common/tooling/index.js +++ b/api/db/seeds/data/common/tooling/index.js @@ -1,17 +1,9 @@ -const campaign = require('./campaign-tooling'); -const session = require('./session-tooling'); -const profile = require('./profile-tooling'); -const targetProfile = require('./target-profile-tooling'); -const training = require('./training-tooling'); -const organization = require('./organization-tooling'); -const certificationCenter = require('./certification-center-tooling'); +import * as campaign from './campaign-tooling.js'; +import * as session from './session-tooling.js'; +import * as profile from './profile-tooling.js'; +import * as targetProfile from './target-profile-tooling.js'; +import * as training from './training-tooling.js'; +import * as organization from './organization-tooling.js'; +import * as certificationCenter from './certification-center-tooling.js'; -module.exports = { - campaign, - certificationCenter, - organization, - session, - targetProfile, - training, - profile, -}; +export { campaign, certificationCenter, organization, session, targetProfile, training, profile }; diff --git a/api/db/seeds/data/common/tooling/learning-content.js b/api/db/seeds/data/common/tooling/learning-content.js index fe6b4e1dae0..6ba6c5ed13e 100644 --- a/api/db/seeds/data/common/tooling/learning-content.js +++ b/api/db/seeds/data/common/tooling/learning-content.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); -const competenceRepository = require('../../../../../lib/infrastructure/repositories/competence-repository'); -const challengeRepository = require('../../../../../lib/infrastructure/repositories/challenge-repository'); -const { skillDatasource } = require('../../../../../lib/infrastructure/datasources/learning-content/skill-datasource'); +import _ from 'lodash'; +import * as competenceRepository from '../../../../../lib/infrastructure/repositories/competence-repository.js'; +import * as challengeRepository from '../../../../../lib/infrastructure/repositories/challenge-repository.js'; +import { skillDatasource } from '../../../../../lib/infrastructure/datasources/learning-content/skill-datasource.js'; let ALL_COMPETENCES, ALL_ACTIVE_SKILLS, ALL_CHALLENGES, ACTIVE_SKILLS_BY_COMPETENCE, ACTIVE_SKILLS_BY_TUBE; let VALIDATED_CHALLENGES_BY_SKILL; @@ -85,7 +85,7 @@ async function findActiveSkillsByFrameworkName(frameworkName) { return _.filter(activeSkills, (activeSkill) => competenceIds.includes(activeSkill.competenceId)); } -module.exports = { +export { getAllCompetences, getCoreCompetences, findActiveSkillsByCompetenceId, diff --git a/api/db/seeds/data/common/tooling/organization-tooling.js b/api/db/seeds/data/common/tooling/organization-tooling.js index e5c2e1dc5d7..62bcfbe9fda 100644 --- a/api/db/seeds/data/common/tooling/organization-tooling.js +++ b/api/db/seeds/data/common/tooling/organization-tooling.js @@ -1,6 +1,4 @@ -module.exports = { - createOrganization, -}; +export { createOrganization }; /** * Fonction générique pour créer une organisation selon une configuration donnée. @@ -153,7 +151,7 @@ function _buildOrganizationFeatures({ databaseBuilder, organizationId, featureId databaseBuilder.factory.buildOrganizationFeature({ organizationId, featureId, - }), + }) ); } @@ -162,7 +160,7 @@ function _buildOrganizationTags({ databaseBuilder, organizationId, tagIds }) { databaseBuilder.factory.buildOrganizationTag({ organizationId, tagId, - }), + }) ); } @@ -180,7 +178,7 @@ function _buildMemberships({ databaseBuilder, organizationId, adminUserId, membe userId: memberId, organizationId, organizationRole: 'MEMBER', - }), + }) ); } diff --git a/api/db/seeds/data/common/tooling/profile-tooling.js b/api/db/seeds/data/common/tooling/profile-tooling.js index c1bed0cb64c..b3b6f2feeae 100644 --- a/api/db/seeds/data/common/tooling/profile-tooling.js +++ b/api/db/seeds/data/common/tooling/profile-tooling.js @@ -1,12 +1,12 @@ -const _ = require('lodash'); -const learningContent = require('./learning-content'); -const generic = require('./generic'); -const Assessment = require('../../../../../lib/domain/models/Assessment'); -const CompetenceEvaluation = require('../../../../../lib/domain/models/CompetenceEvaluation'); -const { PIX_COUNT_BY_LEVEL } = require('../../../../../lib/domain/constants'); +import _ from 'lodash'; +import * as learningContent from './learning-content.js'; +import * as generic from './generic.js'; +import { Assessment } from '../../../../../lib/domain/models/Assessment.js'; +import { CompetenceEvaluation } from '../../../../../lib/domain/models/CompetenceEvaluation.js'; +import { PIX_COUNT_BY_LEVEL } from '../../../../../lib/domain/constants.js'; const UNREACHABLE_PIX_SCORE = 999999; -module.exports = { +export { createCertifiableProfile, createPerfectProfile, getAnswersAndKnowledgeElementsForAdvancedProfile, @@ -167,7 +167,7 @@ function _makeCompetenceEvaluation({ databaseBuilder, userId, competenceId }) { function _makeUserReachPixScoreForCompetences({ databaseBuilder, userId, answersAndKnowledgeElementsCollection }) { const answersAndKnowledgeElementsByCompetenceId = _.groupBy( answersAndKnowledgeElementsCollection, - ({ keData }) => keData.competenceId, + ({ keData }) => keData.competenceId ); for (const [competenceId, answersAndKnowledgeElements] of Object.entries(answersAndKnowledgeElementsByCompetenceId)) { const assessmentId = _makeCompetenceEvaluation({ databaseBuilder, userId, competenceId }); diff --git a/api/db/seeds/data/common/tooling/session-tooling.js b/api/db/seeds/data/common/tooling/session-tooling.js index ed9b28c2a4c..93af6eb8f28 100644 --- a/api/db/seeds/data/common/tooling/session-tooling.js +++ b/api/db/seeds/data/common/tooling/session-tooling.js @@ -1,22 +1,18 @@ -const _ = require('lodash'); -const learningContent = require('./learning-content'); -const campaignTooling = require('./campaign-tooling'); -const generic = require('./generic'); -const { +import _ from 'lodash'; +import * as learningContent from './learning-content.js'; +import * as campaignTooling from './campaign-tooling.js'; +import * as generic from './generic.js'; + +import { CLEA_COMPLEMENTARY_CERTIFICATION_ID, PIX_DROIT_COMPLEMENTARY_CERTIFICATION_ID, PIX_EDU_1ER_DEGRE_COMPLEMENTARY_CERTIFICATION_ID, PIX_EDU_2ND_DEGRE_COMPLEMENTARY_CERTIFICATION_ID, -} = require('../common-builder'); +} from '../common-builder.js'; let verifCodeCount = 0; -module.exports = { - createDraftScoSession, - createPublishedScoSession, - createDraftSession, - createPublishedSession, -}; +export { createDraftScoSession, createPublishedScoSession, createDraftSession, createPublishedSession }; /** * Fonction générique pour créer une session sco avec candidats non démarrée selon une configuration donnée. @@ -378,14 +374,14 @@ async function createPublishedSession({ const { coreProfileData, complementaryCertificationsProfileData } = await _makeCandidatesCertifiable( databaseBuilder, - certificationCandidates, + certificationCandidates ); await _makeCandidatesPassCertification( databaseBuilder, sessionId, certificationCandidates, coreProfileData, - complementaryCertificationsProfileData, + complementaryCertificationsProfileData ); return { sessionId }; @@ -409,7 +405,7 @@ async function _registerOrganizationLearnersToSession({ databaseBuilder, sessionId, extraTimePercentages, - hasJoinSession, + hasJoinSession ); } return certificationCandidates; @@ -421,7 +417,7 @@ function _addCertificationCandidatesToScoSession( databaseBuilder, sessionId, extraTimePercentages, - hasJoinSession, + hasJoinSession ) { organizationLearners.forEach((organizationLearner, index) => { certificationCandidates.push( @@ -444,7 +440,7 @@ function _addCertificationCandidatesToScoSession( authorizedToStart: false, billingMode: null, prepaymentCode: null, - }), + }) ); }); } @@ -558,7 +554,7 @@ async function _getComplementaryCertificationIdsFromCertificationCenterHabilitat ...(await databaseBuilder .knex('complementary-certification-habilitations') .pluck('complementaryCertificationId') - .where('certificationCenterId', certificationCenterId)), + .where('certificationCenterId', certificationCenterId)) ); } @@ -623,7 +619,7 @@ async function _makeCandidatesCertifiable(databaseBuilder, certificationCandidat coreProfileData: await _makeCandidatesCoreCertifiable(databaseBuilder, certificationCandidates), complementaryCertificationsProfileData: await _makeCandidatesComplementaryCertifiable( databaseBuilder, - certificationCandidates, + certificationCandidates ), }; } @@ -675,7 +671,7 @@ async function _makeCandidatesCoreCertifiable(databaseBuilder, certificationCand } coreProfileData[competence.id].threeMostDifficultSkillsAndChallenges = _.takeRight( coreProfileData[competence.id].threeMostDifficultSkillsAndChallenges, - 3, + 3 ); coreProfileData[competence.id].pixScore = Math.ceil(coreProfileData[competence.id].pixScore); } @@ -692,7 +688,7 @@ async function _makeCandidatesComplementaryCertifiable(databaseBuilder, certific ]) { const certificationCandidatesWithSubscription = certificationCandidates.filter( (certificationCandidate) => - certificationCandidate.complementaryCertificationSubscribedId === complementaryCertificationId, + certificationCandidate.complementaryCertificationSubscribedId === complementaryCertificationId ); if (certificationCandidatesWithSubscription.length > 0) { complementaryCertificationsProfileData[complementaryCertificationId] = @@ -700,7 +696,7 @@ async function _makeCandidatesComplementaryCertifiable(databaseBuilder, certific databaseBuilder, complementaryCertificationId, frameworkName, - certificationCandidatesWithSubscription, + certificationCandidatesWithSubscription ); } } @@ -711,7 +707,7 @@ async function _makeCandidatesComplementaryCertificationCertifiable( databaseBuilder, complementaryCertificationId, frameworkName, - certificationCandidates, + certificationCandidates ) { const [targetProfileId] = await databaseBuilder .knex('complementary-certification-badges') @@ -802,11 +798,11 @@ async function _makeCandidatesComplementaryCertificationCertifiable( for (const [areaId, { fourMostDifficultSkillsAndChallenges }] of Object.entries(complementaryProfileData)) { complementaryProfileData[areaId].fourMostDifficultSkillsAndChallenges = _.orderBy( fourMostDifficultSkillsAndChallenges, - ({ skill }) => skill.level, + ({ skill }) => skill.level ); complementaryProfileData[areaId].fourMostDifficultSkillsAndChallenges = _.takeRight( complementaryProfileData[areaId].fourMostDifficultSkillsAndChallenges, - 4, + 4 ); } @@ -818,7 +814,7 @@ function _makeCandidatesPassCertification( sessionId, certificationCandidates, coreProfileData, - complementaryCertificationsProfileData, + complementaryCertificationsProfileData ) { for (const certificationCandidate of certificationCandidates) { const certificationCourseId = databaseBuilder.factory.buildCertificationCourse({ diff --git a/api/db/seeds/data/common/tooling/target-profile-tooling.js b/api/db/seeds/data/common/tooling/target-profile-tooling.js index 8877d3c47bf..66ed7812053 100644 --- a/api/db/seeds/data/common/tooling/target-profile-tooling.js +++ b/api/db/seeds/data/common/tooling/target-profile-tooling.js @@ -1,12 +1,8 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); -const learningContent = require('./learning-content'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import * as learningContent from './learning-content.js'; -module.exports = { - createTargetProfile, - createBadge, - createStages, -}; +export { createTargetProfile, createBadge, createStages }; let frameworkNames; const tubeIdsByFramework = {}; /** @@ -66,7 +62,7 @@ async function createTargetProfile({ .uniq() .value(); }, - { concurrency: 3 }, + { concurrency: 3 } ); frameworkNames = Object.keys(tubeIdsByFramework); } @@ -186,7 +182,7 @@ function createStages({ value: null, isFirstSkill: true, shouldInsertPrescriberTitleAndDescription, - }), + }) ); --currentCountStages; } @@ -210,7 +206,7 @@ function createStages({ value, isFirstSkill: false, shouldInsertPrescriberTitleAndDescription, - }), + }) ); } return { stageIds }; @@ -246,7 +242,7 @@ function _createTargetProfile({ databaseBuilder.factory.buildTargetProfileShare({ targetProfileId, organizationId, - }), + }) ); } @@ -307,7 +303,7 @@ function _createTargetProfileTubes({ databaseBuilder, targetProfileId, configTar for (let i = 0; i < framework.countTubes; ++i) { const tubeId = _pickRandomTube( frameworkName, - cappedTubesDTO.map(({ id }) => id), + cappedTubesDTO.map(({ id }) => id) ); if (tubeId) { const level = _.random(framework.minLevel, framework.maxLevel); diff --git a/api/db/seeds/data/common/tooling/training-tooling.js b/api/db/seeds/data/common/tooling/training-tooling.js index 5b94ddcaed8..d17bff36314 100644 --- a/api/db/seeds/data/common/tooling/training-tooling.js +++ b/api/db/seeds/data/common/tooling/training-tooling.js @@ -1,10 +1,8 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); -const learningContent = require('./learning-content'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import * as learningContent from './learning-content.js'; -module.exports = { - createTraining, -}; +export { createTraining }; const tubeIdsByFramework = {}; let frameworkNames; @@ -66,7 +64,7 @@ async function createTraining({ .uniq() .value(); }, - { concurrency: 3 }, + { concurrency: 3 } ); frameworkNames = Object.keys(tubeIdsByFramework); } @@ -84,7 +82,7 @@ async function createTraining({ databaseBuilder.factory.buildTargetProfileTraining({ targetProfileId, trainingId, - }), + }) ); const cappedTubesDTO = []; for (const configTrigger of configTriggers) { @@ -98,7 +96,7 @@ async function createTraining({ for (let i = 0; i < framework.countTubes; ++i) { const tubeId = _pickRandomTube( frameworkName, - cappedTubesDTO.map(({ id }) => id), + cappedTubesDTO.map(({ id }) => id) ); if (tubeId) { const level = _.random(framework.minLevel, framework.maxLevel); diff --git a/api/db/seeds/data/feature/feature-builder.js b/api/db/seeds/data/feature/feature-builder.js index 1f8ae267864..62d95c34f00 100644 --- a/api/db/seeds/data/feature/feature-builder.js +++ b/api/db/seeds/data/feature/feature-builder.js @@ -1,8 +1,9 @@ -const apps = require('../../../../lib/domain/constants.js'); - -module.exports = function featuresBuilder({ databaseBuilder }) { +import * as apps from '../../../../lib/domain/constants.js'; +const featuresBuilder = function ({ databaseBuilder }) { databaseBuilder.factory.buildFeature({ key: apps.ORGANIZATION_FEATURE.MULTIPLE_SENDING_ASSESSMENT, }); }; + +export { featuresBuilder }; diff --git a/api/db/seeds/data/fill-campaign-skills.js b/api/db/seeds/data/fill-campaign-skills.js index 7e3a30895e5..13dc571b153 100644 --- a/api/db/seeds/data/fill-campaign-skills.js +++ b/api/db/seeds/data/fill-campaign-skills.js @@ -1,5 +1,5 @@ -const { knex } = require('../../../db/knex-database-connection'); -const skillRepository = require('../../../lib/infrastructure/repositories/skill-repository'); +import { knex } from '../../../db/knex-database-connection.js'; +import * as skillRepository from '../../../lib/infrastructure/repositories/skill-repository.js'; async function fillCampaignSkills() { const campaigns = await knex('campaigns') @@ -35,6 +35,4 @@ async function fillCampaignSkills() { } } -module.exports = { - fillCampaignSkills, -}; +export { fillCampaignSkills }; diff --git a/api/db/seeds/data/organization-places-pro-builder.js b/api/db/seeds/data/organization-places-pro-builder.js index 754f3455931..84fd4ac6312 100644 --- a/api/db/seeds/data/organization-places-pro-builder.js +++ b/api/db/seeds/data/organization-places-pro-builder.js @@ -1,5 +1,5 @@ -const { PRO_COMPANY_ID } = require('./organizations-pro-builder'); -const { PIX_SUPER_ADMIN_ID } = require('./users-builder'); +import { PRO_COMPANY_ID } from './organizations-pro-builder.js'; +import { PIX_SUPER_ADMIN_ID } from './users-builder.js'; function organizationPlacesProBuilder({ databaseBuilder }) { const activationDate = new Date(); const expirationDate = new Date(); @@ -91,6 +91,4 @@ function organizationPlacesProBuilder({ databaseBuilder }) { }); } -module.exports = { - organizationPlacesProBuilder, -}; +export { organizationPlacesProBuilder }; diff --git a/api/db/seeds/data/organizations-pro-builder.js b/api/db/seeds/data/organizations-pro-builder.js index 03e1e76d16d..fb309956f35 100644 --- a/api/db/seeds/data/organizations-pro-builder.js +++ b/api/db/seeds/data/organizations-pro-builder.js @@ -1,9 +1,12 @@ -const Membership = require('../../../lib/domain/models/Membership'); -const OrganizationInvitation = require('../../../lib/domain/models/OrganizationInvitation'); -const { ROLES } = require('../../../lib/domain/constants').PIX_ADMIN; -const { DEFAULT_PASSWORD, PIX_ALL_ORGA_ID } = require('./users-builder'); -const OidcIdentityProviders = require('../../../lib/domain/constants/oidc-identity-providers'); +import { Membership } from '../../../lib/domain/models/Membership.js'; +import { OrganizationInvitation } from '../../../lib/domain/models/OrganizationInvitation.js'; +import { PIX_ADMIN } from '../../../lib/domain/constants.js'; +const { ROLES } = PIX_ADMIN; + +import { DEFAULT_PASSWORD, PIX_ALL_ORGA_ID } from './users-builder.js'; +import * as OidcIdentityProviders from '../../../lib/domain/constants/oidc-identity-providers.js'; +import { logoUrl } from '../src/dragonAndCoBase64.js'; const PRO_COMPANY_ID = 1; const PRO_POLE_EMPLOI_ID = 4; const PRO_CNAV_ID = 17; @@ -46,7 +49,7 @@ function organizationsProBuilder({ databaseBuilder }) { id: PRO_COMPANY_ID, type: 'PRO', name: 'Dragon & Co', - logoUrl: require('../src/dragonAndCoBase64'), + logoUrl, createdBy: privateCompanyCreator.id, credit: 100, externalId: null, @@ -244,7 +247,7 @@ function organizationsProBuilder({ databaseBuilder }) { }); } -module.exports = { +export { organizationsProBuilder, PRO_COMPANY_ID, PRO_POLE_EMPLOI_ID, diff --git a/api/db/seeds/data/organizations-sco-builder.js b/api/db/seeds/data/organizations-sco-builder.js index 34dab50d209..d755525d230 100644 --- a/api/db/seeds/data/organizations-sco-builder.js +++ b/api/db/seeds/data/organizations-sco-builder.js @@ -1,15 +1,18 @@ -const Membership = require('../../../lib/domain/models/Membership'); -const { DEFAULT_PASSWORD, PIX_ALL_ORGA_ID } = require('./users-builder'); -const { SamlIdentityProviders } = require('../../../lib/domain/constants/saml-identity-providers'); -const { ROLES } = require('../../../lib/domain/constants').PIX_ADMIN; -const { +import { Membership } from '../../../lib/domain/models/Membership.js'; +import { DEFAULT_PASSWORD, PIX_ALL_ORGA_ID } from './users-builder.js'; +import { SamlIdentityProviders } from '../../../lib/domain/constants/saml-identity-providers.js'; +import { PIX_ADMIN } from '../../../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; + +import { SCO_COLLEGE_EXTERNAL_ID, SCO_LYCEE_EXTERNAL_ID, SCO_AGRI_EXTERNAL_ID, SCO_NO_MANAGING_STUDENTS_EXTERNAL_ID, SCO_COLLEGE_WITHOUT_STUDENT_EXTERNAL_ID, GREAT_OAK_CERTIF_CENTER_EXTERNAL_ID, -} = require('../data/certification/certification-centers-builder'); +} from '../data/certification/certification-centers-builder.js'; const SCO_MIDDLE_SCHOOL_ID = 3; const SCO_HIGH_SCHOOL_ID = 6; @@ -546,7 +549,7 @@ function _buildAEFE({ databaseBuilder }) { }); } -module.exports = { +export { organizationsScoBuilder, SCO_MIDDLE_SCHOOL_ID, SCO_HIGH_SCHOOL_ID, diff --git a/api/db/seeds/data/organizations-sup-builder.js b/api/db/seeds/data/organizations-sup-builder.js index 7df8042e6bc..fe880705eea 100644 --- a/api/db/seeds/data/organizations-sup-builder.js +++ b/api/db/seeds/data/organizations-sup-builder.js @@ -1,6 +1,9 @@ -const Membership = require('../../../lib/domain/models/Membership'); -const { ROLES } = require('../../../lib/domain/constants').PIX_ADMIN; -const { DEFAULT_PASSWORD, PIX_ALL_ORGA_ID } = require('./users-builder'); +import { Membership } from '../../../lib/domain/models/Membership.js'; +import { PIX_ADMIN } from '../../../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; + +import { DEFAULT_PASSWORD, PIX_ALL_ORGA_ID } from './users-builder.js'; const SUP_UNIVERSITY_ID = 2; const SUP_STUDENT_ASSOCIATED_ID = 888; @@ -154,11 +157,10 @@ function organizationsSupBuilder({ databaseBuilder }) { }); } -module.exports = { +export { organizationsSupBuilder, SUP_UNIVERSITY_ID, SUP_STUDENT_ASSOCIATED_ID, SUP_STUDENT_DISABLED_ID, SUP_STUDENT_CERTIFIABLE, - }; diff --git a/api/db/seeds/data/pix-admin-roles-builder.js b/api/db/seeds/data/pix-admin-roles-builder.js index 34df52c2d8f..409c586ab1c 100644 --- a/api/db/seeds/data/pix-admin-roles-builder.js +++ b/api/db/seeds/data/pix-admin-roles-builder.js @@ -1,14 +1,13 @@ -const { - PIX_SUPER_ADMIN_ID, - PIX_SUPPORT_ID, - PIX_METIER_ID, - PIX_CERTIF_ID, -} = require('./users-builder'); -const { ROLES } = require('../../../lib/domain/constants').PIX_ADMIN; +import { PIX_SUPER_ADMIN_ID, PIX_SUPPORT_ID, PIX_METIER_ID, PIX_CERTIF_ID } from './users-builder.js'; +import { PIX_ADMIN } from '../../../lib/domain/constants.js'; -module.exports = function pixAdminRolesBuilder({ databaseBuilder }) { +const { ROLES } = PIX_ADMIN; + +const pixAdminRolesBuilder = function ({ databaseBuilder }) { databaseBuilder.factory.buildPixAdminRole({ userId: PIX_SUPER_ADMIN_ID, role: ROLES.SUPER_ADMIN }); databaseBuilder.factory.buildPixAdminRole({ userId: PIX_SUPPORT_ID, role: ROLES.SUPPORT }); databaseBuilder.factory.buildPixAdminRole({ userId: PIX_METIER_ID, role: ROLES.METIER }); databaseBuilder.factory.buildPixAdminRole({ userId: PIX_CERTIF_ID, role: ROLES.CERTIF }); }; + +export { pixAdminRolesBuilder }; diff --git a/api/db/seeds/data/pix-aile-profile-builder.js b/api/db/seeds/data/pix-aile-profile-builder.js index a73afd25bac..757e83595d3 100644 --- a/api/db/seeds/data/pix-aile-profile-builder.js +++ b/api/db/seeds/data/pix-aile-profile-builder.js @@ -1,14 +1,22 @@ -const Assessment = require('../../../lib/domain/models/Assessment'); -const CompetenceEvaluation = require('../../../lib/domain/models/CompetenceEvaluation'); -const KnowledgeElement = require('../../../lib/domain/models/KnowledgeElement'); -const moment = require('moment'); -const _ = require('lodash'); - -module.exports = function buildPixAileProfilev2({ databaseBuilder }) { +import { Assessment } from '../../../lib/domain/models/Assessment.js'; +import { CompetenceEvaluation } from '../../../lib/domain/models/CompetenceEvaluation.js'; +import { KnowledgeElement } from '../../../lib/domain/models/KnowledgeElement.js'; +import moment from 'moment'; +import _ from 'lodash'; +const buildPixAileProfilev2 = function ({ databaseBuilder }) { const userId = 1; - const _buildKnowledgeElement = ({ competenceId, answerId, skillId, assessmentId, keStatus, keSource, remainingDays, remainingHours }) => { + const _buildKnowledgeElement = ({ + competenceId, + answerId, + skillId, + assessmentId, + keStatus, + keSource, + remainingDays, + remainingHours, + }) => { const delay = 7 - remainingDays; databaseBuilder.factory.buildKnowledgeElement({ source: keSource, @@ -23,7 +31,6 @@ module.exports = function buildPixAileProfilev2({ databaseBuilder }) { }; const buildCompetenceEvaluation = ({ competenceId, assessmentState }) => { - const { id: assessmentId } = databaseBuilder.factory.buildAssessment({ userId, competenceId, @@ -34,20 +41,28 @@ module.exports = function buildPixAileProfilev2({ databaseBuilder }) { databaseBuilder.factory.buildCompetenceEvaluation({ assessmentId, competenceId, - status: assessmentState === Assessment.states.COMPLETED ? CompetenceEvaluation.statuses.COMPLETED : CompetenceEvaluation.statuses.STARTED, + status: + assessmentState === Assessment.states.COMPLETED + ? CompetenceEvaluation.statuses.COMPLETED + : CompetenceEvaluation.statuses.STARTED, userId, }); return { assessmentId }; }; - const buildCompetencePlacement = ({ competenceId, assessmentState, challengeSkillMap, remainingDays, remainingHours }) => { + const buildCompetencePlacement = ({ + competenceId, + assessmentState, + challengeSkillMap, + remainingDays, + remainingHours, + }) => { const { assessmentId } = buildCompetenceEvaluation({ competenceId, assessmentState, }); _.map(challengeSkillMap, (challengeSkill) => { - const { id: answerId } = databaseBuilder.factory.buildAnswer({ result: 'ok', assessmentId, @@ -89,7 +104,9 @@ module.exports = function buildPixAileProfilev2({ databaseBuilder }) { { challengeId: 'recwWzTquPlvIl4So', skillId: 'recUDrCWD76fp5MsE', inferredSkillIds: ['rec4Gvnh9kV1NeMsw'] }, { challengeId: 'rec6ZOkRMNlJNAKgl', skillId: 'recYLxHqrLVUBjF2a', inferredSkillIds: ['recRPl7tXR8n2D5xU'] }, { - challengeId: 'recX3USEK62h8rACE', skillId: 'recfO8994EvSQV9Ip', inferredSkillIds: ['rec0aOgRFRJ1qPG0b'], + challengeId: 'recX3USEK62h8rACE', + skillId: 'recfO8994EvSQV9Ip', + inferredSkillIds: ['rec0aOgRFRJ1qPG0b'], knowledgeElementStatus: KnowledgeElement.StatusType.INVALIDATED, }, ], @@ -102,7 +119,11 @@ module.exports = function buildPixAileProfilev2({ databaseBuilder }) { remainingDays: 0, challengeSkillMap: [ { challengeId: 'recPVnm4VSMQUJmq3', skillId: 'recJKLhRCjl9zizHr', inferredSkillIds: ['recdmDASRPMTzOmVc'] }, - { challengeId: 'rec7b0FTFINsQ5u6t', skillId: 'recPiCGFhfgervqr5', inferredSkillIds: ['reckyBHOf8yIl2UGq', 'recfRe4luCCP8GoVA', 'recmMMVns3LEFkHeO'] }, + { + challengeId: 'rec7b0FTFINsQ5u6t', + skillId: 'recPiCGFhfgervqr5', + inferredSkillIds: ['reckyBHOf8yIl2UGq', 'recfRe4luCCP8GoVA', 'recmMMVns3LEFkHeO'], + }, ], }); @@ -114,7 +135,11 @@ module.exports = function buildPixAileProfilev2({ databaseBuilder }) { challengeSkillMap: [ { challengeId: 'reczK5XPKm5CKImGj', skillId: 'recUDrhjEYqmfahRX', inferredSkillIds: [] }, { challengeId: 'recChtlIRd8xOz3aP', skillId: 'rec0tk8dZWOzSQbaQ', inferredSkillIds: ['recPGDVdX0LSOWQQC'] }, - { challengeId: 'rec9e4StT33VC0V6M', skillId: 'rec1TZRdq2lKyLEaR', inferredSkillIds: ['recTR73NgMRmrKRhT', 'recl2LAo6vB6BOgUd'] }, + { + challengeId: 'rec9e4StT33VC0V6M', + skillId: 'rec1TZRdq2lKyLEaR', + inferredSkillIds: ['recTR73NgMRmrKRhT', 'recl2LAo6vB6BOgUd'], + }, ], }); @@ -125,7 +150,11 @@ module.exports = function buildPixAileProfilev2({ databaseBuilder }) { remainingDays: 0, challengeSkillMap: [ { challengeId: 'recXN6TmIEgv2w6EC', skillId: 'recZLbpY9xhnR1XaX', inferredSkillIds: [] }, - { challengeId: 'recZVmpmCSMBpxPzl', skillId: 'recdY2TTdWEFz59T1', inferredSkillIds: ['recMG1dWPxaQ3OeZ8', 'recMG1uOZwLGuVyxP', 'recKWLJSisAK7f0Cy'] }, + { + challengeId: 'recZVmpmCSMBpxPzl', + skillId: 'recdY2TTdWEFz59T1', + inferredSkillIds: ['recMG1dWPxaQ3OeZ8', 'recMG1uOZwLGuVyxP', 'recKWLJSisAK7f0Cy'], + }, ], }); @@ -135,9 +164,19 @@ module.exports = function buildPixAileProfilev2({ databaseBuilder }) { assessmentState: Assessment.states.COMPLETED, remainingDays: 0, challengeSkillMap: [ - { challengeId: 'rec6fKT1tmlqI6AT6', skillId: 'rectVTDWtVIT59Dy1', inferredSkillIds: ['recXSjRtUP31qRvun', 'recBeo3fIb35FXtmF', 'recipfF8DQqJjv9pI'] }, - { challengeId: 'recijE4sMaS0mkjVu', skillId: 'recGHY2N1qq1FYH4J', inferredSkillIds: ['recTmjG8ygtFjGfP9', 'rechLuj5ydZs48koG', 'recjaPxapJkF1cx5k', 'recRJyPT0FBEeVkzR'] }, + { + challengeId: 'rec6fKT1tmlqI6AT6', + skillId: 'rectVTDWtVIT59Dy1', + inferredSkillIds: ['recXSjRtUP31qRvun', 'recBeo3fIb35FXtmF', 'recipfF8DQqJjv9pI'], + }, + { + challengeId: 'recijE4sMaS0mkjVu', + skillId: 'recGHY2N1qq1FYH4J', + inferredSkillIds: ['recTmjG8ygtFjGfP9', 'rechLuj5ydZs48koG', 'recjaPxapJkF1cx5k', 'recRJyPT0FBEeVkzR'], + }, { challengeId: 'recZjuf1caEli6BHp', skillId: 'recW0pab7QV7dlB97', inferredSkillIds: [] }, ], }); }; + +export { buildPixAileProfilev2 }; diff --git a/api/db/seeds/data/pole-emploi-sendings-builder.js b/api/db/seeds/data/pole-emploi-sendings-builder.js index 8921aea3552..627ac29a1b2 100644 --- a/api/db/seeds/data/pole-emploi-sendings-builder.js +++ b/api/db/seeds/data/pole-emploi-sendings-builder.js @@ -1,10 +1,13 @@ -const _ = require('lodash'); -const { POLE_EMPLOI_CAMPAIGN_ID } = require('./campaigns-pro-builder'); -const { PRO_POLE_EMPLOI_ID } = require('./organizations-pro-builder'); +import _ from 'lodash'; +import { POLE_EMPLOI_CAMPAIGN_ID } from './campaigns-pro-builder.js'; +import { PRO_POLE_EMPLOI_ID } from './organizations-pro-builder.js'; -module.exports = function poleEmploiSendingsBuilder({ databaseBuilder }) { +const poleEmploiSendingsBuilder = function ({ databaseBuilder }) { const _generateStatus = () => { - const possibleChoices = [{ isSuccessful: true, responseCode: '200' }, { isSuccessful: false, responseCode: '400' }]; + const possibleChoices = [ + { isSuccessful: true, responseCode: '200' }, + { isSuccessful: false, responseCode: '400' }, + ]; return _.sample(possibleChoices); }; @@ -14,54 +17,87 @@ module.exports = function poleEmploiSendingsBuilder({ databaseBuilder }) { }; _.times(10, async (index) => { - const user = await databaseBuilder.factory.buildUser({ firstName: `FirstName-${index}`, lastName: `LastName-${index}` }); - await databaseBuilder.factory.buildAuthenticationMethod.withPoleEmploiAsIdentityProvider({ userId: user.id, externalIdentifier: `externalUserId${user.id}` }); - const organizationLearnerId = await databaseBuilder.factory.buildOrganizationLearner({ organizationId: PRO_POLE_EMPLOI_ID }).id; - const campaignParticipationId = await databaseBuilder.factory.buildCampaignParticipation({ userId: user.id, campaignId: POLE_EMPLOI_CAMPAIGN_ID, status: 'TO_SHARE', organizationLearnerId }).id; - await databaseBuilder.factory.buildAssessment({ userId: user.id, campaignParticipationId, type: 'CAMPAIGN', state: 'completed', method: 'SMART_RANDOM' }); - await databaseBuilder.factory.poleEmploiSendingFactory.build({ ..._generateStatus(), campaignParticipationId, type: 'CAMPAIGN_PARTICIPATION_START', createdAt: _generateDate(index), payload: { - campagne: { - nom: 'Campagne PE', - dateDebut: '2019-08-01T00:00:00.000Z', - type: 'EVALUATION', - codeCampagne: 'QWERTY789', - urlCampagne: 'https://app.pix.fr/campagnes/QWERTY789', - nomOrganisme: 'Pix', - typeOrganisme: 'externe', + const user = await databaseBuilder.factory.buildUser({ + firstName: `FirstName-${index}`, + lastName: `LastName-${index}`, + }); + await databaseBuilder.factory.buildAuthenticationMethod.withPoleEmploiAsIdentityProvider({ + userId: user.id, + externalIdentifier: `externalUserId${user.id}`, + }); + const organizationLearnerId = await databaseBuilder.factory.buildOrganizationLearner({ + organizationId: PRO_POLE_EMPLOI_ID, + }).id; + const campaignParticipationId = await databaseBuilder.factory.buildCampaignParticipation({ + userId: user.id, + campaignId: POLE_EMPLOI_CAMPAIGN_ID, + status: 'TO_SHARE', + organizationLearnerId, + }).id; + await databaseBuilder.factory.buildAssessment({ + userId: user.id, + campaignParticipationId, + type: 'CAMPAIGN', + state: 'completed', + method: 'SMART_RANDOM', + }); + await databaseBuilder.factory.poleEmploiSendingFactory.build({ + ..._generateStatus(), + campaignParticipationId, + type: 'CAMPAIGN_PARTICIPATION_START', + createdAt: _generateDate(index), + payload: { + campagne: { + nom: 'Campagne PE', + dateDebut: '2019-08-01T00:00:00.000Z', + type: 'EVALUATION', + codeCampagne: 'QWERTY789', + urlCampagne: 'https://app.pix.fr/campagnes/QWERTY789', + nomOrganisme: 'Pix', + typeOrganisme: 'externe', + }, + individu: { + nom: user.lastName, + prenom: user.firstName, + }, + test: { + etat: 2, + typeTest: 'DI', + referenceExterne: campaignParticipationId, + dateDebut: '2019-09-01T00:00:00.000Z', + elementsEvalues: [], + }, }, - individu: { - nom: user.lastName, - prenom: user.firstName, + }); + await databaseBuilder.factory.poleEmploiSendingFactory.build({ + ..._generateStatus(), + campaignParticipationId, + type: 'CAMPAIGN_PARTICIPATION_COMPLETION', + createdAt: _generateDate(index), + payload: { + campagne: { + nom: 'Campagne PE', + dateDebut: '2019-08-01T00:00:00.000Z', + type: 'EVALUATION', + codeCampagne: 'QWERTY789', + urlCampagne: 'https://app.pix.fr/campagnes/QWERTY789', + nomOrganisme: 'Pix', + typeOrganisme: 'externe', + }, + individu: { + nom: user.lastName, + prenom: user.firstName, + }, + test: { + etat: 3, + typeTest: 'DI', + referenceExterne: campaignParticipationId, + dateDebut: '2019-09-01T00:00:00.000Z', + elementsEvalues: [], + }, }, - test: { - etat: 2, - typeTest: 'DI', - referenceExterne: campaignParticipationId, - dateDebut: '2019-09-01T00:00:00.000Z', - elementsEvalues: [], - }, - } }); - await databaseBuilder.factory.poleEmploiSendingFactory.build({ ..._generateStatus(), campaignParticipationId, type: 'CAMPAIGN_PARTICIPATION_COMPLETION', createdAt: _generateDate(index), payload: { - campagne: { - nom: 'Campagne PE', - dateDebut: '2019-08-01T00:00:00.000Z', - type: 'EVALUATION', - codeCampagne: 'QWERTY789', - urlCampagne: 'https://app.pix.fr/campagnes/QWERTY789', - nomOrganisme: 'Pix', - typeOrganisme: 'externe', - }, - individu: { - nom: user.lastName, - prenom: user.firstName, - }, - test: { - etat: 3, - typeTest: 'DI', - referenceExterne: campaignParticipationId, - dateDebut: '2019-09-01T00:00:00.000Z', - elementsEvalues: [], - }, - } }); + }); }); }; + +export { poleEmploiSendingsBuilder }; diff --git a/api/db/seeds/data/stages-builder.js b/api/db/seeds/data/stages-builder.js index fee064f8f23..9f3fd9d4a52 100644 --- a/api/db/seeds/data/stages-builder.js +++ b/api/db/seeds/data/stages-builder.js @@ -1,19 +1,59 @@ -const { TARGET_PROFILE_STAGES_BADGES_ID, TARGET_PROFILE_STAGES_LEVEL_ID, TARGET_PROFILE_ONE_COMPETENCE_ID } = require('./target-profiles-builder'); +import { + TARGET_PROFILE_STAGES_BADGES_ID, + TARGET_PROFILE_STAGES_LEVEL_ID, + TARGET_PROFILE_ONE_COMPETENCE_ID, +} from './target-profiles-builder.js'; -module.exports = function stagesBuilder({ databaseBuilder }) { +const stagesBuilder = function ({ databaseBuilder }) { _buildStagesForTargetProfileId(databaseBuilder, TARGET_PROFILE_ONE_COMPETENCE_ID); _buildStagesForTargetProfileId(databaseBuilder, TARGET_PROFILE_STAGES_BADGES_ID); _buildStagesWithLevelForTargetProfileId(databaseBuilder, TARGET_PROFILE_STAGES_LEVEL_ID); }; +export { stagesBuilder }; + function _buildStagesForTargetProfileId(databaseBuilder, targetProfileId) { const stages = [ - { title: 'Super !', message: 'Tu as validé ton premier acquis', prescriberTitle: 'Premier Acquis', prescriberDescription: 'Un petit effort', isFirstSkill: true, threshold: null, targetProfileId }, + { + title: 'Super !', + message: 'Tu as validé ton premier acquis', + prescriberTitle: 'Premier Acquis', + prescriberDescription: 'Un petit effort', + isFirstSkill: true, + threshold: null, + targetProfileId, + }, { title: 'Bravo !', message: 'Tu as le palier 1', threshold: 0, targetProfileId }, - { title: 'Félicitations !', message: 'Tu as le palier 2', prescriberTitle: 'palier 2', prescriberDescription: 'Maîtrise partielle', threshold: 5, targetProfileId }, - { title: 'Bien joué !', message: 'Tu as le palier 3', prescriberTitle: 'palier 3', prescriberDescription: 'Maîtrise complète', threshold: 15, targetProfileId }, - { title: 'Trop fort(e) !', message: 'Tu as le palier 4', prescriberTitle: 'palier 4', threshold: 60, targetProfileId }, - { title: 'Quel(le) expert(e) !', message: 'Tu as le palier 5', prescriberDescription: 'Maîtrise absolue', threshold: 80, targetProfileId }, + { + title: 'Félicitations !', + message: 'Tu as le palier 2', + prescriberTitle: 'palier 2', + prescriberDescription: 'Maîtrise partielle', + threshold: 5, + targetProfileId, + }, + { + title: 'Bien joué !', + message: 'Tu as le palier 3', + prescriberTitle: 'palier 3', + prescriberDescription: 'Maîtrise complète', + threshold: 15, + targetProfileId, + }, + { + title: 'Trop fort(e) !', + message: 'Tu as le palier 4', + prescriberTitle: 'palier 4', + threshold: 60, + targetProfileId, + }, + { + title: 'Quel(le) expert(e) !', + message: 'Tu as le palier 5', + prescriberDescription: 'Maîtrise absolue', + threshold: 80, + targetProfileId, + }, ]; stages.forEach((stage) => databaseBuilder.factory.buildStage(stage)); @@ -21,12 +61,46 @@ function _buildStagesForTargetProfileId(databaseBuilder, targetProfileId) { function _buildStagesWithLevelForTargetProfileId(databaseBuilder, targetProfileId) { const stages = [ - { title: 'Super !', message: 'Tu as validé ton premier acquis', prescriberTitle: 'Premier Acquis', prescriberDescription: 'Un petit effort', isFirstSkill: true, level: null, targetProfileId }, + { + title: 'Super !', + message: 'Tu as validé ton premier acquis', + prescriberTitle: 'Premier Acquis', + prescriberDescription: 'Un petit effort', + isFirstSkill: true, + level: null, + targetProfileId, + }, { title: 'Pas mal mais pas max', message: 'Tu as le palier 1', level: 0, targetProfileId }, - { title: 'Félicitations !', message: 'Tu as le palier 2', prescriberTitle: 'équivalent niveau 2', prescriberDescription: 'Maîtrise partielle', level: 2, targetProfileId }, - { title: 'Bien joué !', message: 'Tu as le palier 3', prescriberTitle: 'équivalent niveau 3', prescriberDescription: 'Maîtrise complète', level: 3, targetProfileId }, - { title: 'Trop fort(e) !', message: 'Tu as le palier 4', prescriberTitle: 'équivalent niveau 4', level: 4, targetProfileId }, - { title: 'Quel(le) expert(e) !', message: 'Tu as le palier 5', prescriberDescription: 'Maîtrise absolue', level: 5, targetProfileId }, + { + title: 'Félicitations !', + message: 'Tu as le palier 2', + prescriberTitle: 'équivalent niveau 2', + prescriberDescription: 'Maîtrise partielle', + level: 2, + targetProfileId, + }, + { + title: 'Bien joué !', + message: 'Tu as le palier 3', + prescriberTitle: 'équivalent niveau 3', + prescriberDescription: 'Maîtrise complète', + level: 3, + targetProfileId, + }, + { + title: 'Trop fort(e) !', + message: 'Tu as le palier 4', + prescriberTitle: 'équivalent niveau 4', + level: 4, + targetProfileId, + }, + { + title: 'Quel(le) expert(e) !', + message: 'Tu as le palier 5', + prescriberDescription: 'Maîtrise absolue', + level: 5, + targetProfileId, + }, ]; stages.forEach((stage) => databaseBuilder.factory.buildStage.withLevel(stage)); diff --git a/api/db/seeds/data/tags-builder.js b/api/db/seeds/data/tags-builder.js index 8e311854f67..b2969034fdc 100644 --- a/api/db/seeds/data/tags-builder.js +++ b/api/db/seeds/data/tags-builder.js @@ -1,4 +1,4 @@ -module.exports = function tagsBuilder({ databaseBuilder }) { +const tagsBuilder = function ({ databaseBuilder }) { databaseBuilder.factory.buildTag({ id: 1, name: 'AGRICULTURE' }); databaseBuilder.factory.buildTag({ id: 2, name: 'PUBLIC' }); databaseBuilder.factory.buildTag({ id: 3, name: 'PRIVE' }); @@ -9,3 +9,5 @@ module.exports = function tagsBuilder({ databaseBuilder }) { databaseBuilder.factory.buildTag({ id: 8, name: 'COLLEGE' }); databaseBuilder.factory.buildTag({ id: 9, name: 'LYCEE' }); }; + +export { tagsBuilder }; diff --git a/api/db/seeds/data/target-profiles-builder.js b/api/db/seeds/data/target-profiles-builder.js index f5590fb4e93..21ae3a1a7ac 100644 --- a/api/db/seeds/data/target-profiles-builder.js +++ b/api/db/seeds/data/target-profiles-builder.js @@ -1,6 +1,7 @@ -const { PRO_COMPANY_ID, PRO_POLE_EMPLOI_ID, PRO_MED_NUM_ID } = require('./organizations-pro-builder'); -const identity = require('lodash/identity'); -const { SUP_UNIVERSITY_ID } = require('./organizations-sup-builder'); +import { PRO_COMPANY_ID, PRO_POLE_EMPLOI_ID, PRO_MED_NUM_ID } from './organizations-pro-builder.js'; +import lodash from 'lodash'; +const { identity } = lodash; +import { SUP_UNIVERSITY_ID } from './organizations-sup-builder.js'; const skillIdsForSkillSet1 = [ 'recMOy4S8XnaWblYI', @@ -247,7 +248,7 @@ function _buildTargetProfileOneCompetence(databaseBuilder) { category: 'COMPETENCES', ownerOrganizationId: PRO_COMPANY_ID, description: - 'Ce profil cible permet d\'**évaluer** sur la compétence 5.1. Le résultat est exprimé en ***pourcentage***', + "Ce profil cible permet d'**évaluer** sur la compétence 5.1. Le résultat est exprimé en ***pourcentage***", comment: 'Privé : Contient la ***compétence 5.1***.', }); @@ -886,7 +887,7 @@ function _buildTargetProfileCnav(databaseBuilder) { }); } -module.exports = { +export { targetProfilesBuilder, TARGET_PROFILE_PIC_DIAG_INITIAL_ID, TARGET_PROFILE_ONE_COMPETENCE_ID, diff --git a/api/db/seeds/data/team-certification/data-builder.js b/api/db/seeds/data/team-certification/data-builder.js index 0dee7ae8424..35bfcf421e3 100644 --- a/api/db/seeds/data/team-certification/data-builder.js +++ b/api/db/seeds/data/team-certification/data-builder.js @@ -1,10 +1,11 @@ -const tooling = require('../common/tooling'); -const { +import * as tooling from '../common/tooling/index.js'; + +import { CLEA_COMPLEMENTARY_CERTIFICATION_ID, PIX_DROIT_COMPLEMENTARY_CERTIFICATION_ID, PIX_EDU_1ER_DEGRE_COMPLEMENTARY_CERTIFICATION_ID, PIX_EDU_2ND_DEGRE_COMPLEMENTARY_CERTIFICATION_ID, -} = require('../common/common-builder'); +} from '../common/common-builder.js'; const TEAM_CERTIFICATION_OFFSET_ID = 7000; // IDS @@ -38,12 +39,9 @@ async function teamCertificationDataBuilder({ databaseBuilder }) { await _createPublishedScoSession({ databaseBuilder }); await _createSession({ databaseBuilder }); await _createPublishedSession({ databaseBuilder }); - } -module.exports = { - teamCertificationDataBuilder, -}; +export { teamCertificationDataBuilder }; function _createScoCertificationCenter({ databaseBuilder }) { databaseBuilder.factory.buildUser.withRawPassword({ diff --git a/api/db/seeds/data/team-contenu/data-builder.js b/api/db/seeds/data/team-contenu/data-builder.js index d1c43247408..f0826b38d50 100644 --- a/api/db/seeds/data/team-contenu/data-builder.js +++ b/api/db/seeds/data/team-contenu/data-builder.js @@ -1,4 +1,4 @@ -const tooling = require('../common/tooling'); +import * as tooling from '../common/tooling/index.js'; const TEAM_CONTENU_OFFSET_ID = 5000; // IDS @@ -32,9 +32,7 @@ async function teamContenuDataBuilder({ databaseBuilder }) { await _createPerfectProfileUser(databaseBuilder); } -module.exports = { - teamContenuDataBuilder, -}; +export { teamContenuDataBuilder }; function _createProOrganization(databaseBuilder) { databaseBuilder.factory.buildOrganization({ diff --git a/api/db/seeds/data/trainings-builder.js b/api/db/seeds/data/trainings-builder.js index 796ebb44b66..ca486aaed7d 100644 --- a/api/db/seeds/data/trainings-builder.js +++ b/api/db/seeds/data/trainings-builder.js @@ -1,8 +1,8 @@ -const { TARGET_PROFILE_PIX_EDU_FORMATION_INITIALE_2ND_DEGRE } = require('./target-profiles-builder'); +import { TARGET_PROFILE_PIX_EDU_FORMATION_INITIALE_2ND_DEGRE } from './target-profiles-builder.js'; function trainingBuilder({ databaseBuilder }) { const training1 = databaseBuilder.factory.buildTraining({ - title: 'Apprendre en s\'amusant', + title: "Apprendre en s'amusant", link: 'http://www.example.net', type: 'webinaire', duration: '06:00:00', @@ -32,7 +32,7 @@ function trainingBuilder({ databaseBuilder }) { locale: 'fr-fr', }); const training5 = databaseBuilder.factory.buildTraining({ - title: 'Manger bun\'s tous les midis', + title: "Manger bun's tous les midis", link: 'http://www.example5.net', type: 'webinaire', duration: '06:00:00', @@ -157,6 +157,4 @@ function trainingBuilder({ databaseBuilder }) { }); } -module.exports = { - trainingBuilder, -}; +export { trainingBuilder }; diff --git a/api/db/seeds/data/user-logins-builder.js b/api/db/seeds/data/user-logins-builder.js index 4c4701c1c6b..1006415022e 100644 --- a/api/db/seeds/data/user-logins-builder.js +++ b/api/db/seeds/data/user-logins-builder.js @@ -1,5 +1,5 @@ -const { DEFAULT_PASSWORD } = require('./users-builder'); -const { SCO_MIDDLE_SCHOOL_ID } = require('./organizations-sco-builder'); +import { DEFAULT_PASSWORD } from './users-builder.js'; +import { SCO_MIDDLE_SCHOOL_ID } from './organizations-sco-builder.js'; function userLoginsBuilder({ databaseBuilder }) { _buildBlockedUser({ databaseBuilder }); @@ -62,6 +62,4 @@ function _buildTemporaryBlockedUser({ databaseBuilder }) { }); } -module.exports = { - userLoginsBuilder, -}; +export { userLoginsBuilder }; diff --git a/api/db/seeds/data/users-builder.js b/api/db/seeds/data/users-builder.js index 8f25c373a45..b9857131250 100644 --- a/api/db/seeds/data/users-builder.js +++ b/api/db/seeds/data/users-builder.js @@ -1,4 +1,4 @@ -const OidcIdentityProviders = require('../../../lib/domain/constants/oidc-identity-providers'); +import * as OidcIdentityProviders from '../../../lib/domain/constants/oidc-identity-providers.js'; const PIX_SUPER_ADMIN_ID = 199; const PIX_SUPPORT_ID = 200; @@ -8,7 +8,6 @@ const PIX_ALL_ORGA_ID = 203; const DEFAULT_PASSWORD = 'pix123'; function usersBuilder({ databaseBuilder }) { - const now = new Date('2022-06-10'); databaseBuilder.factory.buildUser.withRawPassword({ id: 1, @@ -230,7 +229,7 @@ function usersBuilder({ databaseBuilder }) { }); } -module.exports = { +export { usersBuilder, PIX_SUPER_ADMIN_ID, PIX_SUPPORT_ID, diff --git a/api/db/seeds/seed.js b/api/db/seeds/seed.js index 8477ef0d8dd..af35e68366c 100644 --- a/api/db/seeds/seed.js +++ b/api/db/seeds/seed.js @@ -1,58 +1,48 @@ -'use strict'; -const DatabaseBuilder = require('../database-builder/database-builder'); - -const featuresBuilder = require('./data/feature/feature-builder'); - -const answersBuilder = require('./data/answers-builder'); -const assessmentsBuilder = require('./data/assessments-builder'); -const buildPixAileProfile = require('./data/pix-aile-profile-builder'); -const { campaignsProBuilder } = require('./data/campaigns-pro-builder'); -const { campaignsSupBuilder } = require('./data/campaigns-sup-builder'); -const { campaignsScoBuilder } = require('./data/campaigns-sco-builder'); -const { certificationCandidatesBuilder } = require('./data/certification/certification-candidates-builder'); -const { badgeAcquisitionBuilder } = require('./data/certification/badge-acquisition-builder'); -const { - complementaryCertificationCourseResultsBuilder, -} = require('./data/certification/complementary-certification-course-results-builder'); -const { certificationCentersBuilder } = require('./data/certification/certification-centers-builder'); -const { - certificationCenterInvitationsBuilder, -} = require('./data/certification/certification-center-invitations-builder'); -const { certificationCoursesBuilder } = require('./data/certification/certification-courses-builder'); -const certificationScoresBuilder = require('./data/certification/certification-scores-builder'); -const { certificationSessionsBuilder } = require('./data/certification/certification-sessions-builder'); -const { certificationUsersBuilder } = require('./data/certification/users'); -const { certificationUserProfilesBuilder } = require('./data/certification/user-profiles-builder'); -const certificationCenterMembershipsBuilder = require('./data/certification/certification-center-memberships-builder'); -const { organizationsProBuilder } = require('./data/organizations-pro-builder'); -const { organizationsScoBuilder } = require('./data/organizations-sco-builder'); -const { organizationsSupBuilder } = require('./data/organizations-sup-builder'); -const { organizationPlacesProBuilder } = require('./data/organization-places-pro-builder'); -const tagsBuilder = require('./data/tags-builder'); -const { badgesBuilder } = require('./data/badges-builder'); -const { targetProfilesBuilder } = require('./data/target-profiles-builder'); -const { usersBuilder } = require('./data/users-builder'); -const { userLoginsBuilder } = require('./data/user-logins-builder'); -const pixAdminRolesBuilder = require('./data/pix-admin-roles-builder'); -const stagesBuilder = require('./data/stages-builder'); -const { issueReportCategoriesBuilder } = require('./data/certification/issue-report-categories-builder'); -const { +import { DatabaseBuilder } from '../database-builder/database-builder.js'; +import { featuresBuilder } from './data/feature/feature-builder.js'; +import { answersBuilder } from './data/answers-builder.js'; +import { assessmentsBuilder } from './data/assessments-builder.js'; +import { buildPixAileProfilev2 as buildPixAileProfile } from './data/pix-aile-profile-builder.js'; +import { campaignsProBuilder } from './data/campaigns-pro-builder.js'; +import { campaignsSupBuilder } from './data/campaigns-sup-builder.js'; +import { campaignsScoBuilder } from './data/campaigns-sco-builder.js'; +import { certificationCandidatesBuilder } from './data/certification/certification-candidates-builder.js'; +import { badgeAcquisitionBuilder } from './data/certification/badge-acquisition-builder.js'; +import { complementaryCertificationCourseResultsBuilder } from './data/certification/complementary-certification-course-results-builder.js'; +import { certificationCentersBuilder } from './data/certification/certification-centers-builder.js'; +import { certificationCenterInvitationsBuilder } from './data/certification/certification-center-invitations-builder.js'; +import { certificationCoursesBuilder } from './data/certification/certification-courses-builder.js'; +import { certificationScoresBuilder } from './data/certification/certification-scores-builder.js'; +import { certificationSessionsBuilder } from './data/certification/certification-sessions-builder.js'; +import { certificationUsersBuilder } from './data/certification/users.js'; +import { certificationUserProfilesBuilder } from './data/certification/user-profiles-builder.js'; +import { certificationCenterMembershipsBuilder } from './data/certification/certification-center-memberships-builder.js'; +import { organizationsProBuilder } from './data/organizations-pro-builder.js'; +import { organizationsScoBuilder } from './data/organizations-sco-builder.js'; +import { organizationsSupBuilder } from './data/organizations-sup-builder.js'; +import { organizationPlacesProBuilder } from './data/organization-places-pro-builder.js'; +import { tagsBuilder } from './data/tags-builder.js'; +import { badgesBuilder } from './data/badges-builder.js'; +import { targetProfilesBuilder } from './data/target-profiles-builder.js'; +import { usersBuilder } from './data/users-builder.js'; +import { userLoginsBuilder } from './data/user-logins-builder.js'; +import { pixAdminRolesBuilder } from './data/pix-admin-roles-builder.js'; +import { stagesBuilder } from './data/stages-builder.js'; +import { issueReportCategoriesBuilder } from './data/certification/issue-report-categories-builder.js'; +import { getEligibleCampaignParticipations, generateKnowledgeElementSnapshots, -} = require('../../scripts/prod/generate-knowledge-element-snapshots-for-campaigns'); -const computeParticipationsResults = require('../../scripts/prod/compute-participation-results'); +} from '../../scripts/prod/generate-knowledge-element-snapshots-for-campaigns.js'; +import { computeParticipantResultsShared as computeParticipationsResults } from '../../scripts/prod/compute-participation-results.js'; +import { poleEmploiSendingsBuilder } from './data/pole-emploi-sendings-builder.js'; +import { trainingBuilder } from './data/trainings-builder.js'; +import { fillCampaignSkills } from './data/fill-campaign-skills.js'; +import { addLastAssessmentResultCertificationCourse } from '../../scripts/certification/fill-last-assessment-result-certification-course-table.js'; +import { commonBuilder } from './data/common/common-builder.js'; +import { teamContenuDataBuilder } from './data/team-contenu/data-builder.js'; +import { teamCertificationDataBuilder } from './data/team-certification/data-builder.js'; -const poleEmploiSendingsBuilder = require('./data/pole-emploi-sendings-builder'); -const { trainingBuilder } = require('./data/trainings-builder'); -const { fillCampaignSkills } = require('./data/fill-campaign-skills'); -const { - addLastAssessmentResultCertificationCourse, -} = require('../../scripts/certification/fill-last-assessment-result-certification-course-table'); -const { commonBuilder } = require('./data/common/common-builder'); -const { teamContenuDataBuilder } = require('./data/team-contenu/data-builder'); -const { teamCertificationDataBuilder } = require('./data/team-certification/data-builder'); - -exports.seed = async (knex) => { +const seed = async function (knex) { const shouldUseNewSeeds = process.env.USE_NEW_SEEDS === 'true'; const databaseBuilder = new DatabaseBuilder({ knex }); if (shouldUseNewSeeds) { @@ -123,3 +113,5 @@ exports.seed = async (knex) => { await computeParticipationsResults(10, false); } }; + +export { seed }; diff --git a/api/db/seeds/src/dragonAndCoBase64.js b/api/db/seeds/src/dragonAndCoBase64.js index bcdf9ea3a64..ebb95f87bb6 100644 --- a/api/db/seeds/src/dragonAndCoBase64.js +++ b/api/db/seeds/src/dragonAndCoBase64.js @@ -1 +1,4 @@ -module.exports = 'data:image/png;base64,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'; +const logoUrl = + 'data:image/png;base64,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'; + +export { logoUrl }; diff --git a/api/index.js b/api/index.js index 575eae21e0d..0193306fa61 100644 --- a/api/index.js +++ b/api/index.js @@ -1,15 +1,14 @@ -const dotenv = require('dotenv'); +import * as dotenv from 'dotenv'; dotenv.config(); -const validateEnvironmentVariables = require('./lib/infrastructure/validate-environment-variables'); +import { validateEnvironmentVariables } from './lib/infrastructure/validate-environment-variables.js'; validateEnvironmentVariables(); -const createServer = require('./server'); -const logger = require('./lib/infrastructure/logger'); -const { disconnect } = require('./db/knex-database-connection'); -const { learningContentCache } = require('./lib/infrastructure/caches/learning-content-cache'); - -const { temporaryStorage } = require('./lib/infrastructure/temporary-storage/index'); -const { redisMonitor } = require('./lib/infrastructure/utils/redis-monitor'); +import { createServer } from './server.js'; +import { logger } from './lib/infrastructure/logger.js'; +import { disconnect } from './db/knex-database-connection.js'; +import { learningContentCache } from './lib/infrastructure/caches/learning-content-cache.js'; +import { temporaryStorage } from './lib/infrastructure/temporary-storage/index.js'; +import { redisMonitor } from './lib/infrastructure/utils/redis-monitor.js'; let server; @@ -48,7 +47,8 @@ process.on('SIGINT', () => { try { await start(); if (process.env.START_JOB_IN_WEB_PROCESS) { - require('./worker.js'); + // eslint-disable-next-line node/no-unsupported-features/es-syntax + import('./worker.js'); } } catch (error) { logger.error(error); diff --git a/api/lib/.eslintrc.js b/api/lib/.eslintrc.cjs similarity index 69% rename from api/lib/.eslintrc.js rename to api/lib/.eslintrc.cjs index e503f189305..407708eb90e 100644 --- a/api/lib/.eslintrc.js +++ b/api/lib/.eslintrc.cjs @@ -1,5 +1,7 @@ +// eslint-disable-next-line eslint-comments/disable-enable-pair +/* eslint-disable no-undef */ module.exports = { - extends: ['../.eslintrc.yaml', 'plugin:node/recommended-script'], + extends: ['../.eslintrc.yaml'], rules: { 'no-restricted-modules': [ 'error', diff --git a/api/lib/application/.eslintrc.js b/api/lib/application/.eslintrc.cjs similarity index 71% rename from api/lib/application/.eslintrc.js rename to api/lib/application/.eslintrc.cjs index c4a46816b9c..fe3e9fe3fe6 100644 --- a/api/lib/application/.eslintrc.js +++ b/api/lib/application/.eslintrc.cjs @@ -1,5 +1,7 @@ +// eslint-disable-next-line eslint-comments/disable-enable-pair +/* eslint-disable no-undef */ module.exports = { - extends: '../.eslintrc.js', + extends: '../.eslintrc.cjs', rules: { 'no-restricted-syntax': [ 'error', diff --git a/api/lib/application/account-recovery/account-recovery-controller.js b/api/lib/application/account-recovery/account-recovery-controller.js index 363b3f89bcc..8b97ae4c6f2 100644 --- a/api/lib/application/account-recovery/account-recovery-controller.js +++ b/api/lib/application/account-recovery/account-recovery-controller.js @@ -1,34 +1,50 @@ -const usecases = require('../../domain/usecases/index.js'); -const studentInformationForAccountRecoverySerializer = require('../../infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); - -module.exports = { - async sendEmailForAccountRecovery(request, h) { - const studentInformation = await studentInformationForAccountRecoverySerializer.deserialize(request.payload); - - await usecases.sendEmailForAccountRecovery({ studentInformation }); - - return h.response().code(204); - }, - - async checkAccountRecoveryDemand(request, h, dependencies = { studentInformationForAccountRecoverySerializer }) { - const temporaryKey = request.params.temporaryKey; - const studentInformation = await usecases.getAccountRecoveryDetails({ temporaryKey }); - return dependencies.studentInformationForAccountRecoverySerializer.serializeAccountRecovery(studentInformation); - }, - - async updateUserAccountFromRecoveryDemand(request, h) { - const temporaryKey = request.payload.data.attributes['temporary-key']; - const password = request.payload.data.attributes.password; - - await DomainTransaction.execute(async (domainTransaction) => { - await usecases.updateUserForAccountRecovery({ - password, - temporaryKey, - domainTransaction, - }); +import { usecases } from '../../domain/usecases/index.js'; +import * as studentInformationForAccountRecoverySerializer from '../../infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; + +const sendEmailForAccountRecovery = async function ( + request, + h, + dependencies = { studentInformationForAccountRecoverySerializer } +) { + const studentInformation = await dependencies.studentInformationForAccountRecoverySerializer.deserialize( + request.payload + ); + + await usecases.sendEmailForAccountRecovery({ studentInformation }); + + return h.response().code(204); +}; + +const checkAccountRecoveryDemand = async function ( + request, + h, + dependencies = { studentInformationForAccountRecoverySerializer } +) { + const temporaryKey = request.params.temporaryKey; + const studentInformation = await usecases.getAccountRecoveryDetails({ temporaryKey }); + return dependencies.studentInformationForAccountRecoverySerializer.serializeAccountRecovery(studentInformation); +}; + +const updateUserAccountFromRecoveryDemand = async function (request, h) { + const temporaryKey = request.payload.data.attributes['temporary-key']; + const password = request.payload.data.attributes.password; + + await DomainTransaction.execute(async (domainTransaction) => { + await usecases.updateUserForAccountRecovery({ + password, + temporaryKey, + domainTransaction, }); + }); - return h.response().code(204); - }, + return h.response().code(204); }; + +const accountRecoveryController = { + sendEmailForAccountRecovery, + checkAccountRecoveryDemand, + updateUserAccountFromRecoveryDemand, +}; + +export { accountRecoveryController }; diff --git a/api/lib/application/account-recovery/index.js b/api/lib/application/account-recovery/index.js index 3ca75ee40d4..3d2ae21f25b 100644 --- a/api/lib/application/account-recovery/index.js +++ b/api/lib/application/account-recovery/index.js @@ -1,15 +1,17 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const XRegExp = require('xregexp'); +import XRegExp from 'xregexp'; const inePattern = new RegExp('^[0-9]{9}[a-zA-Z]{2}$'); const inaPattern = new RegExp('^[0-9]{10}[a-zA-Z]{1}$'); -const accountRecoveryController = require('./account-recovery-controller.js'); +import { accountRecoveryController } from './account-recovery-controller.js'; -const { passwordValidationPattern } = require('../../config.js').account; +import { config } from '../../config.js'; -exports.register = async function (server) { +const { passwordValidationPattern } = config.account; + +const register = async function (server) { server.route([ { method: 'POST', @@ -84,4 +86,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'account-recovery-api'; +const name = 'account-recovery-api'; +export { register, name }; diff --git a/api/lib/application/admin-members/admin-member-controller.js b/api/lib/application/admin-members/admin-member-controller.js index 4b14c4b1739..fa6395bd94b 100644 --- a/api/lib/application/admin-members/admin-member-controller.js +++ b/api/lib/application/admin-members/admin-member-controller.js @@ -1,34 +1,41 @@ -const adminMemberSerializer = require('../../infrastructure/serializers/jsonapi/admin-member-serializer.js'); -const usecases = require('../../domain/usecases/index.js'); +import * as adminMemberSerializer from '../../infrastructure/serializers/jsonapi/admin-member-serializer.js'; +import { usecases } from '../../domain/usecases/index.js'; -module.exports = { - async findAll() { - const adminMembers = await usecases.getAdminMembers(); - return adminMemberSerializer.serialize(adminMembers); - }, +const findAll = async function (request, h, dependencies = { adminMemberSerializer }) { + const adminMembers = await usecases.getAdminMembers(); + return dependencies.adminMemberSerializer.serialize(adminMembers); +}; + +const getCurrentAdminMember = async function (request, h, dependencies = { adminMemberSerializer }) { + const authenticatedUserId = request.auth.credentials.userId; + const userDetailsForAdmin = await usecases.getAdminMemberDetails({ userId: authenticatedUserId }); + return dependencies.adminMemberSerializer.serialize(userDetailsForAdmin); +}; - async getCurrentAdminMember(request) { - const authenticatedUserId = request.auth.credentials.userId; - const userDetailsForAdmin = await usecases.getAdminMemberDetails({ userId: authenticatedUserId }); - return adminMemberSerializer.serialize(userDetailsForAdmin); - }, +const updateAdminMember = async function (request, h, dependencies = { adminMemberSerializer }) { + const id = request.params.id; + const { role } = await adminMemberSerializer.deserialize(request.payload); + const updatedAdminMember = await usecases.updateAdminMember({ id, role }); + return dependencies.adminMemberSerializer.serialize(updatedAdminMember); +}; - async updateAdminMember(request) { - const id = request.params.id; - const { role } = await adminMemberSerializer.deserialize(request.payload); - const updatedAdminMember = await usecases.updateAdminMember({ id, role }); - return adminMemberSerializer.serialize(updatedAdminMember); - }, +const deactivateAdminMember = async function (request, h) { + const id = request.params.id; + await usecases.deactivateAdminMember({ id }); + return h.response().code(204); +}; - async deactivateAdminMember(request, h) { - const id = request.params.id; - await usecases.deactivateAdminMember({ id }); - return h.response().code(204); - }, +const saveAdminMember = async function (request, h, dependencies = { adminMemberSerializer }) { + const attributes = await adminMemberSerializer.deserialize(request.payload); + const savedAdminMember = await usecases.saveAdminMember(attributes); + return h.response(dependencies.adminMemberSerializer.serialize(savedAdminMember)).created(); +}; - async saveAdminMember(request, h) { - const attributes = await adminMemberSerializer.deserialize(request.payload); - const savedAdminMember = await usecases.saveAdminMember(attributes); - return h.response(adminMemberSerializer.serialize(savedAdminMember)).created(); - }, +const adminMemberController = { + findAll, + getCurrentAdminMember, + updateAdminMember, + deactivateAdminMember, + saveAdminMember, }; +export { adminMemberController }; diff --git a/api/lib/application/admin-members/index.js b/api/lib/application/admin-members/index.js index 1ebe6a35a19..40d607db89f 100644 --- a/api/lib/application/admin-members/index.js +++ b/api/lib/application/admin-members/index.js @@ -1,9 +1,9 @@ -const adminMemberController = require('./admin-member-controller.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const Joi = require('joi'); +import { adminMemberController } from './admin-member-controller.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import Joi from 'joi'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'GET', @@ -123,4 +123,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'admin-members-api'; +const name = 'admin-members-api'; +export { register, name }; diff --git a/api/lib/application/answers/answer-controller.js b/api/lib/application/answers/answer-controller.js index d88d0541767..775ce90988e 100644 --- a/api/lib/application/answers/answer-controller.js +++ b/api/lib/application/answers/answer-controller.js @@ -1,69 +1,71 @@ -const answerSerializer = require('../../infrastructure/serializers/jsonapi/answer-serializer.js'); -const answerPix1dSerializer = require('../../infrastructure/serializers/jsonapi/answer-pix1d-serializer.js'); -const correctionSerializer = require('../../infrastructure/serializers/jsonapi/correction-serializer.js'); -const usecases = require('../../domain/usecases/index.js'); -const requestResponseUtils = require('../../infrastructure/utils/request-response-utils.js'); +import * as answerSerializer from '../../infrastructure/serializers/jsonapi/answer-serializer.js'; +import * as answerPix1dSerializer from '../../infrastructure/serializers/jsonapi/answer-pix1d-serializer.js'; +import * as correctionSerializer from '../../infrastructure/serializers/jsonapi/correction-serializer.js'; +import { usecases } from '../../domain/usecases/index.js'; +import * as requestResponseUtils from '../../infrastructure/utils/request-response-utils.js'; -module.exports = { - async save(request, h, dependencies = { answerSerializer, requestResponseUtils }) { - const answer = dependencies.answerSerializer.deserialize(request.payload); - const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - const createdAnswer = await usecases.correctAnswerThenUpdateAssessment({ answer, userId, locale }); +const save = async function (request, h, dependencies = { answerSerializer, requestResponseUtils }) { + const answer = dependencies.answerSerializer.deserialize(request.payload); + const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + const createdAnswer = await usecases.correctAnswerThenUpdateAssessment({ answer, userId, locale }); - return h.response(dependencies.answerSerializer.serialize(createdAnswer)).created(); - }, + return h.response(dependencies.answerSerializer.serialize(createdAnswer)).created(); +}; - async saveForPix1D(request, h, dependencies = { answerPix1dSerializer }) { - const answer = dependencies.answerPix1dSerializer.deserialize(request.payload); - const challengeId = answer.challengeId; - const createdAnswer = await usecases.correctAnswer({ answer, challengeId }); +const saveForPix1D = async function (request, h, dependencies = { answerPix1dSerializer }) { + const answer = dependencies.answerPix1dSerializer.deserialize(request.payload); + const challengeId = answer.challengeId; + const createdAnswer = await usecases.correctAnswer({ answer, challengeId }); - return h.response(answerPix1dSerializer.serialize(createdAnswer)).created(); - }, + return h.response(answerPix1dSerializer.serialize(createdAnswer)).created(); +}; - async get(request, _h, dependencies = { requestResponseUtils }) { - const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); - const answerId = request.params.id; - const answer = await usecases.getAnswer({ answerId, userId }); +const get = async function (request, _h, dependencies = { requestResponseUtils }) { + const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); + const answerId = request.params.id; + const answer = await usecases.getAnswer({ answerId, userId }); - return answerSerializer.serialize(answer); - }, + return answerSerializer.serialize(answer); +}; - async update(request, _h, dependencies = { requestResponseUtils }) { - const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); - const answerId = request.params.id; - const answer = await usecases.getAnswer({ answerId, userId }); +const update = async function (request, _h, dependencies = { requestResponseUtils }) { + const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); + const answerId = request.params.id; + const answer = await usecases.getAnswer({ answerId, userId }); - return answerSerializer.serialize(answer); - }, + return answerSerializer.serialize(answer); +}; - async find(request, _h, dependencies = { requestResponseUtils }) { - const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); - const challengeId = request.query.challengeId; - const assessmentId = request.query.assessmentId; - let answers = []; - if (challengeId && assessmentId) { - answers = await usecases.findAnswerByChallengeAndAssessment({ challengeId, assessmentId, userId }); - } - if (assessmentId && !challengeId) { - answers = await usecases.findAnswerByAssessment({ assessmentId, userId }); - } +const find = async function (request, _h, dependencies = { requestResponseUtils }) { + const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); + const challengeId = request.query.challengeId; + const assessmentId = request.query.assessmentId; + let answers = []; + if (challengeId && assessmentId) { + answers = await usecases.findAnswerByChallengeAndAssessment({ challengeId, assessmentId, userId }); + } + if (assessmentId && !challengeId) { + answers = await usecases.findAnswerByAssessment({ assessmentId, userId }); + } - return answerSerializer.serialize(answers); - }, + return answerSerializer.serialize(answers); +}; - async getCorrection(request, _h, dependencies = { correctionSerializer, requestResponseUtils }) { - const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - const answerId = request.params.id; +const getCorrection = async function (request, _h, dependencies = { correctionSerializer, requestResponseUtils }) { + const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + const answerId = request.params.id; - const correction = await usecases.getCorrectionForAnswer({ - answerId, - userId, - locale, - }); + const correction = await usecases.getCorrectionForAnswer({ + answerId, + userId, + locale, + }); - return dependencies.correctionSerializer.serialize(correction); - }, + return dependencies.correctionSerializer.serialize(correction); }; + +const answerController = { save, saveForPix1D, get, update, find, getCorrection }; + +export { answerController }; diff --git a/api/lib/application/answers/index.js b/api/lib/application/answers/index.js index ff590d56a70..92c77803654 100644 --- a/api/lib/application/answers/index.js +++ b/api/lib/application/answers/index.js @@ -1,9 +1,9 @@ -const Joi = require('joi'); -const answerController = require('./answer-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const { NotFoundError } = require('../../domain/errors.js'); +import Joi from 'joi'; +import { answerController } from './answer-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import { NotFoundError } from '../../domain/errors.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'POST', @@ -135,4 +135,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'answers-api'; +const name = 'answers-api'; +export { register, name }; diff --git a/api/lib/application/assessment-results/assessment-result-controller.js b/api/lib/application/assessment-results/assessment-result-controller.js index 061c94d862f..d8c1205497e 100644 --- a/api/lib/application/assessment-results/assessment-result-controller.js +++ b/api/lib/application/assessment-results/assessment-result-controller.js @@ -1,6 +1,6 @@ -const AssessmentResult = require('../../domain/models/AssessmentResult.js'); -const CompetenceMark = require('../../domain/models/CompetenceMark.js'); -const assessmentResultService = require('../../domain/services/assessment-result-service.js'); +import { AssessmentResult } from '../../domain/models/AssessmentResult.js'; +import { CompetenceMark } from '../../domain/models/CompetenceMark.js'; +import * as assessmentResultService from '../../domain/services/assessment-result-service.js'; // TODO: Should be removed and replaced by a real serializer function _deserializeResultsAdd(json) { @@ -26,13 +26,15 @@ function _deserializeResultsAdd(json) { return { assessmentResult, competenceMarks }; } -module.exports = { - async save(request, h, dependencies = { assessmentResultService }) { - const jsonResult = request.payload.data.attributes; - const { assessmentResult, competenceMarks } = _deserializeResultsAdd(jsonResult); - const juryId = request.auth.credentials.userId; - // FIXME (re)calculate partner certifications which may be invalidated/validated - await dependencies.assessmentResultService.save({ ...assessmentResult, juryId }, competenceMarks); - return null; - }, +const save = async function (request, h, dependencies = { assessmentResultService }) { + const jsonResult = request.payload.data.attributes; + const { assessmentResult, competenceMarks } = _deserializeResultsAdd(jsonResult); + const juryId = request.auth.credentials.userId; + // FIXME (re)calculate partner certifications which may be invalidated/validated + await dependencies.assessmentResultService.save({ ...assessmentResult, juryId }, competenceMarks); + return null; }; + +const assessmentResultController = { save }; + +export { assessmentResultController }; diff --git a/api/lib/application/assessment-results/index.js b/api/lib/application/assessment-results/index.js index 67a81da1fd9..fb63da7069c 100644 --- a/api/lib/application/assessment-results/index.js +++ b/api/lib/application/assessment-results/index.js @@ -1,7 +1,7 @@ -const AssessmentResultController = require('./assessment-result-controller.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); +import { assessmentResultController } from './assessment-result-controller.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'POST', @@ -18,11 +18,12 @@ exports.register = async (server) => { assign: 'hasAuthorizationToAccessAdminScope', }, ], - handler: AssessmentResultController.save, + handler: assessmentResultController.save, tags: ['api'], }, }, ]); }; -exports.name = 'assessments-results-api'; +const name = 'assessments-results-api'; +export { register, name }; diff --git a/api/lib/application/assessments/assessment-controller.js b/api/lib/application/assessments/assessment-controller.js index 2842fe985a5..c5428e5fd19 100644 --- a/api/lib/application/assessments/assessment-controller.js +++ b/api/lib/application/assessments/assessment-controller.js @@ -1,154 +1,165 @@ -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); - -const JSONAPISerializer = require('jsonapi-serializer').Serializer; -const { AssessmentEndedError } = require('../../domain/errors.js'); -const usecases = require('../../domain/usecases/index.js'); -const events = require('../../domain/events/index.js'); -const logger = require('../../infrastructure/logger.js'); -const assessmentRepository = require('../../infrastructure/repositories/assessment-repository.js'); -const assessmentSerializer = require('../../infrastructure/serializers/jsonapi/assessment-serializer.js'); -const challengeSerializer = require('../../infrastructure/serializers/jsonapi/challenge-serializer.js'); -const competenceEvaluationSerializer = require('../../infrastructure/serializers/jsonapi/competence-evaluation-serializer.js'); -const { +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; +import { Serializer as JSONAPISerializer } from 'jsonapi-serializer'; +import { AssessmentEndedError } from '../../domain/errors.js'; +import { usecases } from '../../domain/usecases/index.js'; +import * as events from '../../domain/events/index.js'; +import { logger } from '../../infrastructure/logger.js'; +import * as assessmentRepository from '../../infrastructure/repositories/assessment-repository.js'; +import * as assessmentSerializer from '../../infrastructure/serializers/jsonapi/assessment-serializer.js'; +import * as challengeSerializer from '../../infrastructure/serializers/jsonapi/challenge-serializer.js'; +import * as competenceEvaluationSerializer from '../../infrastructure/serializers/jsonapi/competence-evaluation-serializer.js'; +import { extractLocaleFromRequest, extractUserIdFromRequest, -} = require('../../infrastructure/utils/request-response-utils.js'); -const certificationChallengeRepository = require('../../infrastructure/repositories/certification-challenge-repository.js'); +} from '../../infrastructure/utils/request-response-utils.js'; +import * as certificationChallengeRepository from '../../infrastructure/repositories/certification-challenge-repository.js'; + +import { Examiner } from '../../domain/models/Examiner.js'; +import { ValidatorAlwaysOK } from '../../domain/models/ValidatorAlwaysOK.js'; + +const save = async function (request, h, dependencies = { assessmentRepository }) { + const assessment = assessmentSerializer.deserialize(request.payload); + assessment.userId = extractUserIdFromRequest(request); + assessment.state = 'started'; + const createdAssessment = await dependencies.assessmentRepository.save({ assessment }); + return h.response(assessmentSerializer.serialize(createdAssessment)).created(); +}; -const Examiner = require('../../domain/models/Examiner.js'); -const ValidatorAlwaysOK = require('../../domain/models/ValidatorAlwaysOK.js'); +const get = async function (request, _, dependencies = { assessmentSerializer }) { + const assessmentId = request.params.id; + const locale = extractLocaleFromRequest(request); -module.exports = { - async save(request, h, dependencies = { assessmentRepository }) { - const assessment = assessmentSerializer.deserialize(request.payload); - assessment.userId = extractUserIdFromRequest(request); - assessment.state = 'started'; - const createdAssessment = await dependencies.assessmentRepository.save({ assessment }); - return h.response(assessmentSerializer.serialize(createdAssessment)).created(); - }, + const assessment = await usecases.getAssessment({ assessmentId, locale }); - async get(request, _, dependencies = { assessmentSerializer }) { - const assessmentId = request.params.id; - const locale = extractLocaleFromRequest(request); + return dependencies.assessmentSerializer.serialize(assessment); +}; - const assessment = await usecases.getAssessment({ assessmentId, locale }); +const getLastChallengeId = async function (request, h) { + const assessmentId = request.params.id; - return dependencies.assessmentSerializer.serialize(assessment); - }, + const lastChallengeId = await usecases.getLastChallengeIdFromAssessmentId({ assessmentId }); - async getLastChallengeId(request, h) { - const assessmentId = request.params.id; + return h.response(lastChallengeId).code(200); +}; - const lastChallengeId = await usecases.getLastChallengeIdFromAssessmentId({ assessmentId }); +const getChallengeForPixAutoAnswer = async function (request, h) { + const assessmentId = request.params.id; - return h.response(lastChallengeId).code(200); - }, + const challenge = await usecases.getChallengeForPixAutoAnswer({ assessmentId }); - async getChallengeForPixAutoAnswer(request, h) { - const assessmentId = request.params.id; + return h.response(challenge).code(200); +}; - const challenge = await usecases.getChallengeForPixAutoAnswer({ assessmentId }); +const getNextChallenge = async function ( + request, + h, + dependencies = { + usecases, + assessmentRepository, + certificationChallengeRepository, + } +) { + const assessmentId = request.params.id; + + const logContext = { + zone: 'assessmentController.getNextChallenge', + type: 'controller', + assessmentId, + }; + logger.trace(logContext, 'tracing assessmentController.getNextChallenge()'); + + try { + const assessment = await dependencies.assessmentRepository.get(assessmentId); + logContext.assessmentType = assessment.type; + logger.trace(logContext, 'assessment loaded'); + + const challenge = await _getChallenge(assessment, request, dependencies); + logContext.challenge = challenge; + logger.trace(logContext, 'replying with challenge'); + + return challengeSerializer.serialize(challenge); + } catch (error) { + if (error instanceof AssessmentEndedError) { + const object = new JSONAPISerializer('', {}); + return object.serialize(null); + } + throw error; + } +}; - return h.response(challenge).code(200); - }, +const completeAssessment = async function (request) { + const assessmentId = request.params.id; + const locale = extractLocaleFromRequest(request); - async getNextChallenge( - request, - h, - dependencies = { - usecases, - assessmentRepository, - certificationChallengeRepository, - } - ) { - const assessmentId = request.params.id; - - const logContext = { - zone: 'assessmentController.getNextChallenge', - type: 'controller', - assessmentId, - }; - logger.trace(logContext, 'tracing assessmentController.getNextChallenge()'); - - try { - const assessment = await dependencies.assessmentRepository.get(assessmentId); - logContext.assessmentType = assessment.type; - logger.trace(logContext, 'assessment loaded'); - - const challenge = await _getChallenge(assessment, request, dependencies); - logContext.challenge = challenge; - logger.trace(logContext, 'replying with challenge'); - - return challengeSerializer.serialize(challenge); - } catch (error) { - if (error instanceof AssessmentEndedError) { - const object = new JSONAPISerializer('', {}); - return object.serialize(null); - } - throw error; - } - }, - - async completeAssessment(request) { - const assessmentId = request.params.id; - const locale = extractLocaleFromRequest(request); - - let event; - await DomainTransaction.execute(async (domainTransaction) => { - const result = await usecases.completeAssessment({ assessmentId, domainTransaction }); - await usecases.handleBadgeAcquisition({ assessment: result.assessment, domainTransaction }); - await usecases.handleTrainingRecommendation({ assessment: result.assessment, locale, domainTransaction }); - event = result.event; - }); - - await events.eventDispatcher.dispatch(event); - - return null; - }, - - async updateLastChallengeState(request) { - const assessmentId = request.params.id; - const lastQuestionState = request.params.state; - const challengeId = request.payload?.data?.attributes?.['challenge-id']; - - await DomainTransaction.execute(async (domainTransaction) => { - await usecases.updateLastQuestionState({ assessmentId, challengeId, lastQuestionState, domainTransaction }); - }); - - return null; - }, - - async findCompetenceEvaluations(request) { - const userId = request.auth.credentials.userId; - const assessmentId = request.params.id; - - const competenceEvaluations = await usecases.findCompetenceEvaluationsByAssessment({ userId, assessmentId }); - - return competenceEvaluationSerializer.serialize(competenceEvaluations); - }, - - async autoValidateNextChallenge(request, h) { - const assessmentId = request.params.id; - const locale = extractLocaleFromRequest(request); - const assessment = await usecases.getAssessment({ assessmentId, locale }); - const userId = assessment.userId; - const fakeAnswer = { - assessmentId, - challengeId: assessment.lastChallengeId, - value: 'FAKE_ANSWER_WITH_AUTO_VALIDATE_NEXT_CHALLENGE', - }; - const validatorAlwaysOK = new ValidatorAlwaysOK(); - const alwaysTrueExaminer = new Examiner({ validator: validatorAlwaysOK }); - await usecases.correctAnswerThenUpdateAssessment({ - answer: fakeAnswer, - userId, - locale, - examiner: alwaysTrueExaminer, - }); - return h.response().code(204); - }, + let event; + await DomainTransaction.execute(async (domainTransaction) => { + const result = await usecases.completeAssessment({ assessmentId, domainTransaction }); + await usecases.handleBadgeAcquisition({ assessment: result.assessment, domainTransaction }); + await usecases.handleTrainingRecommendation({ assessment: result.assessment, locale, domainTransaction }); + event = result.event; + }); + + await events.eventDispatcher.dispatch(event); + + return null; }; +const updateLastChallengeState = async function (request) { + const assessmentId = request.params.id; + const lastQuestionState = request.params.state; + const challengeId = request.payload?.data?.attributes?.['challenge-id']; + + await DomainTransaction.execute(async (domainTransaction) => { + await usecases.updateLastQuestionState({ assessmentId, challengeId, lastQuestionState, domainTransaction }); + }); + + return null; +}; + +const findCompetenceEvaluations = async function (request) { + const userId = request.auth.credentials.userId; + const assessmentId = request.params.id; + + const competenceEvaluations = await usecases.findCompetenceEvaluationsByAssessment({ userId, assessmentId }); + + return competenceEvaluationSerializer.serialize(competenceEvaluations); +}; + +const autoValidateNextChallenge = async function (request, h) { + const assessmentId = request.params.id; + const locale = extractLocaleFromRequest(request); + const assessment = await usecases.getAssessment({ assessmentId, locale }); + const userId = assessment.userId; + const fakeAnswer = { + assessmentId, + challengeId: assessment.lastChallengeId, + value: 'FAKE_ANSWER_WITH_AUTO_VALIDATE_NEXT_CHALLENGE', + }; + const validatorAlwaysOK = new ValidatorAlwaysOK(); + const alwaysTrueExaminer = new Examiner({ validator: validatorAlwaysOK }); + await usecases.correctAnswerThenUpdateAssessment({ + answer: fakeAnswer, + userId, + locale, + examiner: alwaysTrueExaminer, + }); + return h.response().code(204); +}; + +const assessmentController = { + save, + get, + getLastChallengeId, + getChallengeForPixAutoAnswer, + getNextChallenge, + completeAssessment, + updateLastChallengeState, + findCompetenceEvaluations, + autoValidateNextChallenge, +}; + +export { assessmentController }; + async function _getChallenge(assessment, request, dependencies) { if (assessment.isStarted()) { await dependencies.assessmentRepository.updateLastQuestionDate({ id: assessment.id, lastQuestionDate: new Date() }); diff --git a/api/lib/application/assessments/index.js b/api/lib/application/assessments/index.js index 72564c38948..44bdd658f93 100644 --- a/api/lib/application/assessments/index.js +++ b/api/lib/application/assessments/index.js @@ -1,11 +1,13 @@ -const Joi = require('joi'); -const { featureToggles } = require('../../config.js'); -const assessmentController = require('./assessment-controller.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const assessmentAuthorization = require('../preHandlers/assessment-authorization.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import Joi from 'joi'; +import { config } from '../../config.js'; +import { assessmentController } from './assessment-controller.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { assessmentAuthorization } from '../preHandlers/assessment-authorization.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async (server) => { +const { featureToggles } = config; + +const register = async function (server) { const routes = [ { method: 'POST', @@ -206,4 +208,5 @@ exports.register = async (server) => { server.route(routes); }; -exports.name = 'assessments-api'; +const name = 'assessments-api'; +export { register, name }; diff --git a/api/lib/application/authentication/authentication-controller.js b/api/lib/application/authentication/authentication-controller.js index 17aea1aefb3..755a29f9eac 100644 --- a/api/lib/application/authentication/authentication-controller.js +++ b/api/lib/application/authentication/authentication-controller.js @@ -1,112 +1,117 @@ -const { BadRequestError } = require('../http-errors.js'); -const tokenService = require('../../domain/services/token-service.js'); -const usecases = require('../../domain/usecases/index.js'); - -module.exports = { - /** - * @see https://tools.ietf.org/html/rfc6749#section-4.3 - */ - async createToken(request, h, dependencies = { tokenService }) { - let accessToken, refreshToken; - let expirationDelaySeconds; - - if (request.payload.grant_type === 'refresh_token') { - refreshToken = request.payload.refresh_token; - const accessTokenAndExpirationDelaySeconds = await usecases.createAccessTokenFromRefreshToken({ refreshToken }); - accessToken = accessTokenAndExpirationDelaySeconds.accessToken; - expirationDelaySeconds = accessTokenAndExpirationDelaySeconds.expirationDelaySeconds; - } else if (request.payload.grant_type === 'password') { - const { username, password, scope } = request.payload; - const localeFromCookie = request.state?.locale; - - const source = 'pix'; - const tokensAndExpirationDelaySeconds = await usecases.authenticateUser({ - username, - password, - scope, - source, - localeFromCookie, - }); - accessToken = tokensAndExpirationDelaySeconds.accessToken; - refreshToken = tokensAndExpirationDelaySeconds.refreshToken; - expirationDelaySeconds = tokensAndExpirationDelaySeconds.expirationDelaySeconds; - } else { - throw new BadRequestError('Invalid grant type'); - } - - return h - .response({ - token_type: 'bearer', - access_token: accessToken, - user_id: dependencies.tokenService.extractUserId(accessToken), - refresh_token: refreshToken, - expires_in: expirationDelaySeconds, - }) - .code(200) - .header('Content-Type', 'application/json;charset=UTF-8') - .header('Cache-Control', 'no-store') - .header('Pragma', 'no-cache'); - }, - - async authenticateExternalUser(request, h) { - const { - username, - password, - 'external-user-token': externalUserToken, - 'expected-user-id': expectedUserId, - } = request.payload.data.attributes; +import { BadRequestError } from '../http-errors.js'; +import { tokenService } from '../../domain/services/token-service.js'; +import { usecases } from '../../domain/usecases/index.js'; + +const createToken = async function (request, h, dependencies = { tokenService }) { + let accessToken, refreshToken; + let expirationDelaySeconds; - const accessToken = await usecases.authenticateExternalUser({ + if (request.payload.grant_type === 'refresh_token') { + refreshToken = request.payload.refresh_token; + const accessTokenAndExpirationDelaySeconds = await usecases.createAccessTokenFromRefreshToken({ refreshToken }); + accessToken = accessTokenAndExpirationDelaySeconds.accessToken; + expirationDelaySeconds = accessTokenAndExpirationDelaySeconds.expirationDelaySeconds; + } else if (request.payload.grant_type === 'password') { + const { username, password, scope } = request.payload; + const localeFromCookie = request.state?.locale; + + const source = 'pix'; + const tokensAndExpirationDelaySeconds = await usecases.authenticateUser({ username, password, - externalUserToken, - expectedUserId, + scope, + source, + localeFromCookie, }); + accessToken = tokensAndExpirationDelaySeconds.accessToken; + refreshToken = tokensAndExpirationDelaySeconds.refreshToken; + expirationDelaySeconds = tokensAndExpirationDelaySeconds.expirationDelaySeconds; + } else { + throw new BadRequestError('Invalid grant type'); + } - const response = { - data: { - attributes: { - 'access-token': accessToken, - }, - type: 'external-user-authentication-requests', + return h + .response({ + token_type: 'bearer', + access_token: accessToken, + user_id: dependencies.tokenService.extractUserId(accessToken), + refresh_token: refreshToken, + expires_in: expirationDelaySeconds, + }) + .code(200) + .header('Content-Type', 'application/json;charset=UTF-8') + .header('Cache-Control', 'no-store') + .header('Pragma', 'no-cache'); +}; + +const authenticateExternalUser = async function (request, h) { + const { + username, + password, + 'external-user-token': externalUserToken, + 'expected-user-id': expectedUserId, + } = request.payload.data.attributes; + + const accessToken = await usecases.authenticateExternalUser({ + username, + password, + externalUserToken, + expectedUserId, + }); + + const response = { + data: { + attributes: { + 'access-token': accessToken, }, - }; - return h.response(response).code(200); - }, + type: 'external-user-authentication-requests', + }, + }; + return h.response(response).code(200); +}; - async authenticateAnonymousUser(request, h) { - const { campaign_code: campaignCode, lang } = request.payload; - const accessToken = await usecases.authenticateAnonymousUser({ campaignCode, lang }); +const authenticateAnonymousUser = async function (request, h) { + const { campaign_code: campaignCode, lang } = request.payload; + const accessToken = await usecases.authenticateAnonymousUser({ campaignCode, lang }); - const response = { + const response = { + token_type: 'bearer', + access_token: accessToken, + }; + + return h.response(response).code(200); +}; + +const authenticateApplication = async function (request, h) { + const { client_id: clientId, client_secret: clientSecret, scope } = request.payload; + + const accessToken = await usecases.authenticateApplication({ clientId, clientSecret, scope }); + + return h + .response({ token_type: 'bearer', access_token: accessToken, - }; - - return h.response(response).code(200); - }, - - async authenticateApplication(request, h) { - const { client_id: clientId, client_secret: clientSecret, scope } = request.payload; - - const accessToken = await usecases.authenticateApplication({ clientId, clientSecret, scope }); - - return h - .response({ - token_type: 'bearer', - access_token: accessToken, - client_id: clientId, - }) - .code(200) - .header('Content-Type', 'application/json;charset=UTF-8') - .header('Cache-Control', 'no-store') - .header('Pragma', 'no-cache'); - }, - - async revokeToken(request, h) { - if (request.payload.token_type_hint === 'access_token') return null; - - await usecases.revokeRefreshToken({ refreshToken: request.payload.token }); - return h.response().code(204); - }, + client_id: clientId, + }) + .code(200) + .header('Content-Type', 'application/json;charset=UTF-8') + .header('Cache-Control', 'no-store') + .header('Pragma', 'no-cache'); }; + +const revokeToken = async function (request, h) { + if (request.payload.token_type_hint === 'access_token') return null; + + await usecases.revokeRefreshToken({ refreshToken: request.payload.token }); + return h.response().code(204); +}; + +const authenticationController = { + createToken, + authenticateExternalUser, + authenticateAnonymousUser, + authenticateApplication, + revokeToken, +}; + +export { authenticationController }; diff --git a/api/lib/application/authentication/index.js b/api/lib/application/authentication/index.js index 38d569127ed..836c996cd98 100644 --- a/api/lib/application/authentication/index.js +++ b/api/lib/application/authentication/index.js @@ -1,11 +1,11 @@ -const Joi = require('joi'); -const { sendJsonApiError, BadRequestError } = require('../http-errors.js'); -const AuthenticationController = require('./authentication-controller.js'); -const responseAuthenticationObjectDoc = require('../../infrastructure/open-api-doc/authentication/response-authentication-doc.js'); -const responseErrorObjectDoc = require('../../infrastructure/open-api-doc/livret-scolaire/response-object-error-doc.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); +import Joi from 'joi'; +import { sendJsonApiError, BadRequestError } from '../http-errors.js'; +import { authenticationController as AuthenticationController } from './authentication-controller.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { responseAuthenticationDoc } from '../../infrastructure/open-api-doc/authentication/response-authentication-doc.js'; +import { responseObjectErrorDoc } from '../../infrastructure/open-api-doc/livret-scolaire/response-object-error-doc.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'POST', @@ -72,9 +72,9 @@ exports.register = async (server) => { response: { failAction: 'log', status: { - 200: responseAuthenticationObjectDoc, - 401: responseErrorObjectDoc, - 403: responseErrorObjectDoc, + 200: responseAuthenticationDoc, + 401: responseObjectErrorDoc, + 403: responseObjectErrorDoc, }, }, handler: AuthenticationController.authenticateApplication, @@ -155,4 +155,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'authentication-api'; +const name = 'authentication-api'; +export { register, name }; diff --git a/api/lib/application/authentication/oidc/index.js b/api/lib/application/authentication/oidc/index.js index 7045a0e63ab..8c6cfbc6af1 100644 --- a/api/lib/application/authentication/oidc/index.js +++ b/api/lib/application/authentication/oidc/index.js @@ -1,10 +1,10 @@ -const Joi = require('joi'); -const OidcIdentityProviders = require('../../../domain/constants/oidc-identity-providers.js'); -const oidcController = require('./oidc-controller.js'); +import Joi from 'joi'; +import * as OidcIdentityProviders from '../../../domain/constants/oidc-identity-providers.js'; +import { oidcController } from './oidc-controller.js'; const validProviders = Object.values(OidcIdentityProviders).map((provider) => provider.service.code); -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'GET', @@ -171,4 +171,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'oidc-authentication-api'; +const name = 'oidc-authentication-api'; +export { register, name }; diff --git a/api/lib/application/authentication/oidc/oidc-controller.js b/api/lib/application/authentication/oidc/oidc-controller.js index 1e5abf6a4cc..18d6e8cb86d 100644 --- a/api/lib/application/authentication/oidc/oidc-controller.js +++ b/api/lib/application/authentication/oidc/oidc-controller.js @@ -1,137 +1,147 @@ -const authenticationServiceRegistry = require('../../../domain/services/authentication/authentication-service-registry.js'); -const serializer = require('../../../infrastructure/serializers/jsonapi/oidc-identity-providers-serializer.js'); -const usecases = require('../../../domain/usecases/index.js'); -const { UnauthorizedError } = require('../../http-errors.js'); -const oidcSerializer = require('../../../infrastructure/serializers/jsonapi/oidc-serializer.js'); - -module.exports = { - async getIdentityProviders(request, h) { - const identityProviders = usecases.getIdentityProviders(); - return h.response(serializer.serialize(identityProviders)).code(200); - }, - - async getRedirectLogoutUrl( - request, - h, - dependencies = { - authenticationServiceRegistry, - } - ) { - const userId = request.auth.credentials.userId; - const { identity_provider: identityProvider, logout_url_uuid: logoutUrlUUID } = request.query; - const oidcAuthenticationService = - dependencies.authenticationServiceRegistry.lookupAuthenticationService(identityProvider); - const redirectLogoutUrl = await oidcAuthenticationService.getRedirectLogoutUrl({ - userId, - logoutUrlUUID, - }); - - return h.response({ redirectLogoutUrl }).code(200); - }, - - async findUserForReconciliation( - request, - h, - dependencies = { - oidcSerializer, - } - ) { - const { email, password, identityProvider, authenticationKey } = request.deserializedPayload; - - const result = await usecases.findUserForOidcReconciliation({ - email, - password, - identityProvider, - authenticationKey, - }); - - return h.response(dependencies.oidcSerializer.serialize(result)).code(200); - }, - - async reconcileUser( - request, - h, - dependencies = { - authenticationServiceRegistry, - } - ) { - const { identityProvider, authenticationKey } = request.deserializedPayload; - const oidcAuthenticationService = - dependencies.authenticationServiceRegistry.lookupAuthenticationService(identityProvider); - - const result = await usecases.reconcileOidcUser({ - authenticationKey, - oidcAuthenticationService, - }); - - return h.response({ access_token: result.accessToken, logout_url_uuid: result.logoutUrlUUID }).code(200); - }, - - async getAuthenticationUrl( - request, - h, - dependencies = { - authenticationServiceRegistry, - } - ) { - const { identity_provider: identityProvider } = request.query; - const oidcAuthenticationService = - dependencies.authenticationServiceRegistry.lookupAuthenticationService(identityProvider); - const result = oidcAuthenticationService.getAuthenticationUrl({ redirectUri: request.query['redirect_uri'] }); - return h.response(result).code(200); - }, - - async authenticateUser( - request, - h, - dependencies = { - authenticationServiceRegistry, - } - ) { - const { code, identityProvider, redirectUri, stateSent, stateReceived } = request.deserializedPayload; - - const oidcAuthenticationService = - dependencies.authenticationServiceRegistry.lookupAuthenticationService(identityProvider); - - const result = await usecases.authenticateOidcUser({ - code, - redirectUri, - stateReceived, - stateSent, - oidcAuthenticationService, - }); - - if (result.isAuthenticationComplete) { - return h.response({ access_token: result.pixAccessToken, logout_url_uuid: result.logoutUrlUUID }).code(200); - } else { - const message = "L'utilisateur n'a pas de compte Pix"; - const responseCode = 'SHOULD_VALIDATE_CGU'; - const { authenticationKey, givenName, familyName } = result; - const meta = { authenticationKey, givenName, familyName }; - throw new UnauthorizedError(message, responseCode, meta); - } - }, - - async createUser( - request, - h, - dependencies = { - authenticationServiceRegistry, - } - ) { - const { identityProvider, authenticationKey } = request.deserializedPayload; - const localeFromCookie = request.state?.locale; - - const oidcAuthenticationService = - dependencies.authenticationServiceRegistry.lookupAuthenticationService(identityProvider); - const { accessToken, logoutUrlUUID } = await usecases.createOidcUser({ - authenticationKey, - identityProvider, - localeFromCookie, - oidcAuthenticationService, - }); - - const response = { access_token: accessToken, logout_url_uuid: logoutUrlUUID }; - return h.response(response).code(200); - }, +import * as authenticationServiceRegistry from '../../../domain/services/authentication/authentication-service-registry.js'; +import * as serializer from '../../../infrastructure/serializers/jsonapi/oidc-identity-providers-serializer.js'; +import { usecases } from '../../../domain/usecases/index.js'; +import { UnauthorizedError } from '../../http-errors.js'; +import * as oidcSerializer from '../../../infrastructure/serializers/jsonapi/oidc-serializer.js'; + +const getIdentityProviders = async function (request, h) { + const identityProviders = usecases.getIdentityProviders(); + return h.response(serializer.serialize(identityProviders)).code(200); }; + +const getRedirectLogoutUrl = async function ( + request, + h, + dependencies = { + authenticationServiceRegistry, + } +) { + const userId = request.auth.credentials.userId; + const { identity_provider: identityProvider, logout_url_uuid: logoutUrlUUID } = request.query; + const oidcAuthenticationService = + dependencies.authenticationServiceRegistry.lookupAuthenticationService(identityProvider); + const redirectLogoutUrl = await oidcAuthenticationService.getRedirectLogoutUrl({ + userId, + logoutUrlUUID, + }); + + return h.response({ redirectLogoutUrl }).code(200); +}; + +const findUserForReconciliation = async function ( + request, + h, + dependencies = { + oidcSerializer, + } +) { + const { email, password, identityProvider, authenticationKey } = request.deserializedPayload; + + const result = await usecases.findUserForOidcReconciliation({ + email, + password, + identityProvider, + authenticationKey, + }); + + return h.response(dependencies.oidcSerializer.serialize(result)).code(200); +}; + +const reconcileUser = async function ( + request, + h, + dependencies = { + authenticationServiceRegistry, + } +) { + const { identityProvider, authenticationKey } = request.deserializedPayload; + const oidcAuthenticationService = + dependencies.authenticationServiceRegistry.lookupAuthenticationService(identityProvider); + + const result = await usecases.reconcileOidcUser({ + authenticationKey, + oidcAuthenticationService, + }); + + return h.response({ access_token: result.accessToken, logout_url_uuid: result.logoutUrlUUID }).code(200); +}; + +const getAuthenticationUrl = async function ( + request, + h, + dependencies = { + authenticationServiceRegistry, + } +) { + const { identity_provider: identityProvider } = request.query; + const oidcAuthenticationService = + dependencies.authenticationServiceRegistry.lookupAuthenticationService(identityProvider); + const result = oidcAuthenticationService.getAuthenticationUrl({ redirectUri: request.query['redirect_uri'] }); + return h.response(result).code(200); +}; + +const authenticateUser = async function ( + request, + h, + dependencies = { + authenticationServiceRegistry, + } +) { + const { code, identityProvider, redirectUri, stateSent, stateReceived } = request.deserializedPayload; + + const oidcAuthenticationService = + dependencies.authenticationServiceRegistry.lookupAuthenticationService(identityProvider); + + const result = await usecases.authenticateOidcUser({ + code, + redirectUri, + stateReceived, + stateSent, + oidcAuthenticationService, + }); + + if (result.isAuthenticationComplete) { + return h.response({ access_token: result.pixAccessToken, logout_url_uuid: result.logoutUrlUUID }).code(200); + } else { + const message = "L'utilisateur n'a pas de compte Pix"; + const responseCode = 'SHOULD_VALIDATE_CGU'; + const { authenticationKey, givenName, familyName } = result; + const meta = { authenticationKey, givenName, familyName }; + throw new UnauthorizedError(message, responseCode, meta); + } +}; + +const createUser = async function ( + request, + h, + dependencies = { + authenticationServiceRegistry, + } +) { + const { identityProvider, authenticationKey } = request.deserializedPayload; + const localeFromCookie = request.state?.locale; + + const oidcAuthenticationService = + dependencies.authenticationServiceRegistry.lookupAuthenticationService(identityProvider); + const { accessToken, logoutUrlUUID } = await usecases.createOidcUser({ + authenticationKey, + identityProvider, + localeFromCookie, + oidcAuthenticationService, + }); + + const response = { access_token: accessToken, logout_url_uuid: logoutUrlUUID }; + return h.response(response).code(200); +}; + +const oidcController = { + getIdentityProviders, + getRedirectLogoutUrl, + findUserForReconciliation, + reconcileUser, + getAuthenticationUrl, + authenticateUser, + createUser, +}; + +export { oidcController }; diff --git a/api/lib/application/badges/badges-controller.js b/api/lib/application/badges/badges-controller.js index 6ddc622abe3..fa94c25672e 100644 --- a/api/lib/application/badges/badges-controller.js +++ b/api/lib/application/badges/badges-controller.js @@ -1,20 +1,22 @@ -const usecases = require('../../domain/usecases/index.js'); -const badgeSerializer = require('../../infrastructure/serializers/jsonapi/badge-serializer.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as badgeSerializer from '../../infrastructure/serializers/jsonapi/badge-serializer.js'; -module.exports = { - async updateBadge(request, h) { - const badgeId = request.params.id; - const badge = badgeSerializer.deserialize(request.payload); +const updateBadge = async function (request, h) { + const badgeId = request.params.id; + const badge = badgeSerializer.deserialize(request.payload); - const updatedBadge = await usecases.updateBadge({ badgeId, badge }); + const updatedBadge = await usecases.updateBadge({ badgeId, badge }); - return h.response(badgeSerializer.serialize(updatedBadge)).code(204); - }, + return h.response(badgeSerializer.serialize(updatedBadge)).code(204); +}; - async deleteUnassociatedBadge(request, h) { - const badgeId = request.params.id; - await usecases.deleteUnassociatedBadge({ badgeId }); +const deleteUnassociatedBadge = async function (request, h) { + const badgeId = request.params.id; + await usecases.deleteUnassociatedBadge({ badgeId }); - return h.response().code(204); - }, + return h.response().code(204); }; + +const badgesController = { updateBadge, deleteUnassociatedBadge }; + +export { badgesController }; diff --git a/api/lib/application/badges/index.js b/api/lib/application/badges/index.js index 16d7f8f0b6d..4581bf8cc22 100644 --- a/api/lib/application/badges/index.js +++ b/api/lib/application/badges/index.js @@ -1,9 +1,9 @@ -const Joi = require('joi'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const badgesController = require('./badges-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import Joi from 'joi'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { badgesController } from './badges-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'PATCH', @@ -84,4 +84,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'badges-api'; +const name = 'badges-api'; +export { register, name }; diff --git a/api/lib/application/cache/cache-controller.js b/api/lib/application/cache/cache-controller.js index de57e8aa6bb..bc19c5fc2e3 100644 --- a/api/lib/application/cache/cache-controller.js +++ b/api/lib/application/cache/cache-controller.js @@ -1,21 +1,24 @@ -const LearningContentDatasources = require('../../infrastructure/datasources/learning-content/index.js'); -const learningContentDatasource = require('../../infrastructure/datasources/learning-content/datasource.js'); -const logger = require('../../infrastructure/logger.js'); -const _ = require('lodash'); +import * as LearningContentDatasources from '../../infrastructure/datasources/learning-content/index.js'; +import * as learningContentDatasource from '../../infrastructure/datasources/learning-content/datasource.js'; +import { logger } from '../../infrastructure/logger.js'; +import _ from 'lodash'; -module.exports = { - refreshCacheEntries(_, h, dependencies = { learningContentDatasource }) { - dependencies.learningContentDatasource - .refreshLearningContentCacheRecords() - .catch((e) => logger.error('Error while reloading cache', e)); - return h.response({}).code(202); - }, +const refreshCacheEntries = function (_, h, dependencies = { learningContentDatasource }) { + dependencies.learningContentDatasource + .refreshLearningContentCacheRecords() + .catch((e) => logger.error('Error while reloading cache', e)); + return h.response({}).code(202); +}; - refreshCacheEntry(request) { - const updatedRecord = request.payload; - const recordId = request.params.id; - const datasource = - LearningContentDatasources[_.findKey(LearningContentDatasources, { modelName: request.params.model })]; - return datasource.refreshLearningContentCacheRecord(recordId, updatedRecord).then(() => null); - }, +const refreshCacheEntry = function (request) { + const updatedRecord = request.payload; + const recordId = request.params.id; + const datasource = + // eslint-disable-next-line import/namespace + LearningContentDatasources[_.findKey(LearningContentDatasources, { modelName: request.params.model })]; + return datasource.refreshLearningContentCacheRecord(recordId, updatedRecord).then(() => null); }; + +const cacheController = { refreshCacheEntries, refreshCacheEntry }; + +export { cacheController }; diff --git a/api/lib/application/cache/index.js b/api/lib/application/cache/index.js index 4d74d113c70..adb20595e15 100644 --- a/api/lib/application/cache/index.js +++ b/api/lib/application/cache/index.js @@ -1,7 +1,7 @@ -const securityPreHandlers = require('../security-pre-handlers.js'); -const CacheController = require('./cache-controller.js'); +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { cacheController } from './cache-controller.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'PATCH', @@ -13,7 +13,7 @@ exports.register = async function (server) { assign: 'hasRoleSuperAdmin', }, ], - handler: CacheController.refreshCacheEntry, + handler: cacheController.refreshCacheEntry, tags: ['api', 'cache'], notes: [ 'Cette route est restreinte aux utilisateurs authentifiés avec le rôle Super Admin', @@ -32,7 +32,7 @@ exports.register = async function (server) { assign: 'hasRoleSuperAdmin', }, ], - handler: CacheController.refreshCacheEntries, + handler: cacheController.refreshCacheEntries, tags: ['api', 'cache'], notes: [ 'Cette route est restreinte aux utilisateurs authentifiés avec le rôle Super Admin', @@ -43,4 +43,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'cache-api'; +const name = 'cache-api'; +export { register, name }; diff --git a/api/lib/application/campaign-participations/campaign-participation-controller.js b/api/lib/application/campaign-participations/campaign-participation-controller.js index fcfd45ef568..b0458ac7fb9 100644 --- a/api/lib/application/campaign-participations/campaign-participation-controller.js +++ b/api/lib/application/campaign-participations/campaign-participation-controller.js @@ -1,187 +1,202 @@ -const monitoringTools = require('../../infrastructure/monitoring-tools.js'); -const usecases = require('../../domain/usecases/index.js'); -const events = require('../../domain/events/index.js'); -const queryParamsUtils = require('../../infrastructure/utils/query-params-utils.js'); -const campaignParticipationSerializer = require('../../infrastructure/serializers/jsonapi/campaign-participation-serializer.js'); -const campaignAnalysisSerializer = require('../../infrastructure/serializers/jsonapi/campaign-analysis-serializer.js'); -const campaignAssessmentParticipationSerializer = require('../../infrastructure/serializers/jsonapi/campaign-assessment-participation-serializer.js'); -const campaignAssessmentParticipationResultSerializer = require('../../infrastructure/serializers/jsonapi/campaign-assessment-participation-result-serializer.js'); -const campaignProfileSerializer = require('../../infrastructure/serializers/jsonapi/campaign-profile-serializer.js'); -const campaignAssessmentResultMinimalSerializer = require('../../infrastructure/serializers/jsonapi/campaign-assessment-result-minimal-serializer.js'); -const trainingSerializer = require('../../infrastructure/serializers/jsonapi/training-serializer.js'); -const requestResponseUtils = require('../../infrastructure/utils/request-response-utils.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); -const { extractLocaleFromRequest } = require('../../infrastructure/utils/request-response-utils.js'); - -module.exports = { - async save(request, h, dependencies = { campaignParticipationSerializer, monitoringTools }) { - const userId = request.auth.credentials.userId; - const campaignParticipation = await dependencies.campaignParticipationSerializer.deserialize(request.payload); - - const { event, campaignParticipation: campaignParticipationCreated } = await DomainTransaction.execute( - (domainTransaction) => { - return usecases.startCampaignParticipation({ campaignParticipation, userId, domainTransaction }); - } - ); - - events.eventDispatcher - .dispatch(event) - .catch((error) => dependencies.monitoringTools.logErrorWithCorrelationIds({ message: error })); - - return h.response(dependencies.campaignParticipationSerializer.serialize(campaignParticipationCreated)).created(); - }, - - async shareCampaignResult(request) { - const userId = request.auth.credentials.userId; - const campaignParticipationId = request.params.id; - - await DomainTransaction.execute(async (domainTransaction) => { - const event = await usecases.shareCampaignResult({ - userId, - campaignParticipationId, - domainTransaction, - }); - await events.eventBus.publish(event, domainTransaction); - return event; - }); +import { monitoringTools } from '../../infrastructure/monitoring-tools.js'; +import { usecases } from '../../domain/usecases/index.js'; +import * as events from '../../domain/events/index.js'; +import { extractParameters } from '../../infrastructure/utils/query-params-utils.js'; +import * as campaignParticipationSerializer from '../../infrastructure/serializers/jsonapi/campaign-participation-serializer.js'; +import * as campaignAnalysisSerializer from '../../infrastructure/serializers/jsonapi/campaign-analysis-serializer.js'; +import * as campaignAssessmentParticipationSerializer from '../../infrastructure/serializers/jsonapi/campaign-assessment-participation-serializer.js'; +import * as campaignAssessmentParticipationResultSerializer from '../../infrastructure/serializers/jsonapi/campaign-assessment-participation-result-serializer.js'; +import * as campaignProfileSerializer from '../../infrastructure/serializers/jsonapi/campaign-profile-serializer.js'; +import * as campaignAssessmentResultMinimalSerializer from '../../infrastructure/serializers/jsonapi/campaign-assessment-result-minimal-serializer.js'; +import * as trainingSerializer from '../../infrastructure/serializers/jsonapi/training-serializer.js'; +import { + extractUserIdFromRequest, + extractLocaleFromRequest, +} from '../../infrastructure/utils/request-response-utils.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; + +const save = async function (request, h, dependencies = { campaignParticipationSerializer, monitoringTools }) { + const userId = request.auth.credentials.userId; + const campaignParticipation = await dependencies.campaignParticipationSerializer.deserialize(request.payload); + + const { event, campaignParticipation: campaignParticipationCreated } = await DomainTransaction.execute( + (domainTransaction) => { + return usecases.startCampaignParticipation({ campaignParticipation, userId, domainTransaction }); + } + ); - return null; - }, - - async beginImprovement(request) { - const userId = request.auth.credentials.userId; - const campaignParticipationId = request.params.id; - - return DomainTransaction.execute(async (domainTransaction) => { - await usecases.beginCampaignParticipationImprovement({ - campaignParticipationId, - userId, - domainTransaction, - }); - return null; - }); - }, + events.eventDispatcher + .dispatch(event) + .catch((error) => dependencies.monitoringTools.logErrorWithCorrelationIds({ message: error })); + + return h.response(dependencies.campaignParticipationSerializer.serialize(campaignParticipationCreated)).created(); +}; - async getAnalysis(request, h, dependencies = { campaignAnalysisSerializer }) { - const { userId } = request.auth.credentials; - const campaignParticipationId = request.params.id; - const locale = extractLocaleFromRequest(request); +const shareCampaignResult = async function (request) { + const userId = request.auth.credentials.userId; + const campaignParticipationId = request.params.id; - const campaignAnalysis = await usecases.computeCampaignParticipationAnalysis({ + await DomainTransaction.execute(async (domainTransaction) => { + const event = await usecases.shareCampaignResult({ userId, campaignParticipationId, - locale, + domainTransaction, + }); + await events.eventBus.publish(event, domainTransaction); + return event; + }); + + return null; +}; + +const beginImprovement = async function (request) { + const userId = request.auth.credentials.userId; + const campaignParticipationId = request.params.id; + + return DomainTransaction.execute(async (domainTransaction) => { + await usecases.beginCampaignParticipationImprovement({ + campaignParticipationId, + userId, + domainTransaction, }); - return dependencies.campaignAnalysisSerializer.serialize(campaignAnalysis); - }, + return null; + }); +}; - async getCampaignProfile(request, h, dependencies = { campaignProfileSerializer }) { - const { userId } = request.auth.credentials; - const { campaignId, campaignParticipationId } = request.params; - const locale = extractLocaleFromRequest(request); +const getAnalysis = async function (request, h, dependencies = { campaignAnalysisSerializer }) { + const { userId } = request.auth.credentials; + const campaignParticipationId = request.params.id; + const locale = extractLocaleFromRequest(request); + + const campaignAnalysis = await usecases.computeCampaignParticipationAnalysis({ + userId, + campaignParticipationId, + locale, + }); + return dependencies.campaignAnalysisSerializer.serialize(campaignAnalysis); +}; + +const getCampaignProfile = async function (request, h, dependencies = { campaignProfileSerializer }) { + const { userId } = request.auth.credentials; + const { campaignId, campaignParticipationId } = request.params; + const locale = extractLocaleFromRequest(request); - const campaignProfile = await usecases.getCampaignProfile({ userId, campaignId, campaignParticipationId, locale }); - return dependencies.campaignProfileSerializer.serialize(campaignProfile); - }, + const campaignProfile = await usecases.getCampaignProfile({ userId, campaignId, campaignParticipationId, locale }); + return dependencies.campaignProfileSerializer.serialize(campaignProfile); +}; - async getCampaignAssessmentParticipation(request) { - const { userId } = request.auth.credentials; - const { campaignId, campaignParticipationId } = request.params; +const getCampaignAssessmentParticipation = async function (request) { + const { userId } = request.auth.credentials; + const { campaignId, campaignParticipationId } = request.params; + + const campaignAssessmentParticipation = await usecases.getCampaignAssessmentParticipation({ + userId, + campaignId, + campaignParticipationId, + }); + return campaignAssessmentParticipationSerializer.serialize(campaignAssessmentParticipation); +}; - const campaignAssessmentParticipation = await usecases.getCampaignAssessmentParticipation({ +const deleteParticipation = async function (request, h) { + const { userId } = request.auth.credentials; + const { id, campaignParticipationId } = request.params; + await DomainTransaction.execute(async (domainTransaction) => { + await usecases.deleteCampaignParticipation({ userId, - campaignId, + campaignId: id, campaignParticipationId, + domainTransaction, }); - return campaignAssessmentParticipationSerializer.serialize(campaignAssessmentParticipation); - }, - - async deleteParticipation(request, h) { - const { userId } = request.auth.credentials; - const { id, campaignParticipationId } = request.params; - await DomainTransaction.execute(async (domainTransaction) => { - await usecases.deleteCampaignParticipation({ - userId, - campaignId: id, - campaignParticipationId, - domainTransaction, - }); - }); - return h.response({}).code(204); - }, - - async getCampaignAssessmentParticipationResult( - request, - h, - dependencies = { campaignAssessmentParticipationResultSerializer } - ) { - const { userId } = request.auth.credentials; - const { campaignId, campaignParticipationId } = request.params; - const locale = extractLocaleFromRequest(request); - - const campaignAssessmentParticipationResult = await usecases.getCampaignAssessmentParticipationResult({ + }); + return h.response({}).code(204); +}; + +const getCampaignAssessmentParticipationResult = async function ( + request, + h, + dependencies = { campaignAssessmentParticipationResultSerializer } +) { + const { userId } = request.auth.credentials; + const { campaignId, campaignParticipationId } = request.params; + const locale = extractLocaleFromRequest(request); + + const campaignAssessmentParticipationResult = await usecases.getCampaignAssessmentParticipationResult({ + userId, + campaignId, + campaignParticipationId, + locale, + }); + return dependencies.campaignAssessmentParticipationResultSerializer.serialize(campaignAssessmentParticipationResult); +}; + +const findAssessmentParticipationResults = async function (request) { + const campaignId = request.params.id; + const { page, filter: filters } = extractParameters(request.query); + if (filters.divisions && !Array.isArray(filters.divisions)) { + filters.divisions = [filters.divisions]; + } + if (filters.groups && !Array.isArray(filters.groups)) { + filters.groups = [filters.groups]; + } + if (filters.badges && !Array.isArray(filters.badges)) { + filters.badges = [filters.badges]; + } + if (filters.stages && !Array.isArray(filters.stages)) { + filters.stages = [filters.stages]; + } + const currentUserId = extractUserIdFromRequest(request); + const paginatedParticipations = await usecases.findAssessmentParticipationResultList({ + userId: currentUserId, + campaignId, + page, + filters, + }); + return campaignAssessmentResultMinimalSerializer.serialize(paginatedParticipations); +}; + +const updateParticipantExternalId = async function (request, h) { + const campaignParticipationId = request.params.id; + const participantExternalId = request.payload.data.attributes['participant-external-id']; + + await usecases.updateParticipantExternalId({ campaignParticipationId, participantExternalId }); + return h.response({}).code(204); +}; + +const deleteCampaignParticipationForAdmin = async function (request, h) { + const { userId } = request.auth.credentials; + const { id: campaignParticipationId } = request.params; + await DomainTransaction.execute(async (domainTransaction) => { + await usecases.deleteCampaignParticipationForAdmin({ userId, - campaignId, campaignParticipationId, - locale, + domainTransaction, }); - return dependencies.campaignAssessmentParticipationResultSerializer.serialize( - campaignAssessmentParticipationResult - ); - }, - - async findAssessmentParticipationResults(request) { - const campaignId = request.params.id; - const { page, filter: filters } = queryParamsUtils.extractParameters(request.query); - if (filters.divisions && !Array.isArray(filters.divisions)) { - filters.divisions = [filters.divisions]; - } - if (filters.groups && !Array.isArray(filters.groups)) { - filters.groups = [filters.groups]; - } - if (filters.badges && !Array.isArray(filters.badges)) { - filters.badges = [filters.badges]; - } - if (filters.stages && !Array.isArray(filters.stages)) { - filters.stages = [filters.stages]; - } - const currentUserId = requestResponseUtils.extractUserIdFromRequest(request); - const paginatedParticipations = await usecases.findAssessmentParticipationResultList({ - userId: currentUserId, - campaignId, - page, - filters, - }); - return campaignAssessmentResultMinimalSerializer.serialize(paginatedParticipations); - }, - - async updateParticipantExternalId(request, h) { - const campaignParticipationId = request.params.id; - const participantExternalId = request.payload.data.attributes['participant-external-id']; - - await usecases.updateParticipantExternalId({ campaignParticipationId, participantExternalId }); - return h.response({}).code(204); - }, - - async deleteCampaignParticipationForAdmin(request, h) { - const { userId } = request.auth.credentials; - const { id: campaignParticipationId } = request.params; - await DomainTransaction.execute(async (domainTransaction) => { - await usecases.deleteCampaignParticipationForAdmin({ - userId, - campaignParticipationId, - domainTransaction, - }); - }); - return h.response({}).code(204); - }, + }); + return h.response({}).code(204); +}; - async findTrainings(request, h, dependencies = { trainingSerializer }) { - const { userId } = request.auth.credentials; - const { id: campaignParticipationId } = request.params; - const locale = extractLocaleFromRequest(request); +const findTrainings = async function (request, h, dependencies = { trainingSerializer }) { + const { userId } = request.auth.credentials; + const { id: campaignParticipationId } = request.params; + const locale = extractLocaleFromRequest(request); - const trainings = await usecases.findCampaignParticipationTrainings({ userId, campaignParticipationId, locale }); - return dependencies.trainingSerializer.serialize(trainings); - }, + const trainings = await usecases.findCampaignParticipationTrainings({ userId, campaignParticipationId, locale }); + return dependencies.trainingSerializer.serialize(trainings); }; + +const campaignParticipationController = { + save, + shareCampaignResult, + beginImprovement, + getAnalysis, + getCampaignProfile, + getCampaignAssessmentParticipation, + deleteParticipation, + getCampaignAssessmentParticipationResult, + findAssessmentParticipationResults, + updateParticipantExternalId, + deleteCampaignParticipationForAdmin, + findTrainings, +}; + +export { campaignParticipationController }; diff --git a/api/lib/application/campaign-participations/index.js b/api/lib/application/campaign-participations/index.js index 747bec9d9b9..42a2117245c 100644 --- a/api/lib/application/campaign-participations/index.js +++ b/api/lib/application/campaign-participations/index.js @@ -1,9 +1,9 @@ -const Joi = require('joi'); -const campaignParticipationController = require('./campaign-participation-controller.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import Joi from 'joi'; +import { campaignParticipationController } from './campaign-participation-controller.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'PATCH', @@ -256,4 +256,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'campaign-participations-api'; +const name = 'campaign-participations-api'; +export { register, name }; diff --git a/api/lib/application/campaigns-administration/campaign-controller.js b/api/lib/application/campaigns-administration/campaign-controller.js index cbced17312f..43deec62854 100644 --- a/api/lib/application/campaigns-administration/campaign-controller.js +++ b/api/lib/application/campaigns-administration/campaign-controller.js @@ -1,16 +1,18 @@ -const usecases = require('../../domain/usecases/index.js'); -const csvCampaignsIdsParser = require('../../infrastructure/serializers/csv/campaigns-administration/csv-campaigns-ids-parser.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as csvCampaignsIdsParser from '../../infrastructure/serializers/csv/campaigns-administration/csv-campaigns-ids-parser.js'; -module.exports = { - async archiveCampaigns(request, h, dependencies = { csvCampaignsIdsParser }) { - const { userId } = request.auth.credentials; - const campaignIds = await dependencies.csvCampaignsIdsParser.extractCampaignsIds(request.payload.path); +const archiveCampaigns = async function (request, h, dependencies = { csvCampaignsIdsParser }) { + const { userId } = request.auth.credentials; + const campaignIds = await dependencies.csvCampaignsIdsParser.extractCampaignsIds(request.payload.path); - await usecases.campaignAdministrationArchiveCampaign({ - userId, - campaignIds, - }); + await usecases.archiveCampaigns({ + userId, + campaignIds, + }); - return h.response(null).code(204); - }, + return h.response(null).code(204); }; + +const campaignController = { archiveCampaigns }; + +export { campaignController }; diff --git a/api/lib/application/campaigns-administration/index.js b/api/lib/application/campaigns-administration/index.js index b582ba35489..1d541aa92d9 100644 --- a/api/lib/application/campaigns-administration/index.js +++ b/api/lib/application/campaigns-administration/index.js @@ -1,13 +1,13 @@ -const { sendJsonApiError, PayloadTooLargeError } = require('../http-errors.js'); - -const campaignController = require('./campaign-controller.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); +import { sendJsonApiError, PayloadTooLargeError } from '../http-errors.js'; +import { campaignController } from './campaign-controller.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; const TWENTY_MEGABYTES = 1048576 * 20; const ERRORS = { PAYLOAD_TOO_LARGE: 'PAYLOAD_TOO_LARGE', }; -exports.register = async function (server) { + +const register = async function (server) { server.route([ { method: 'POST', @@ -47,4 +47,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'campaigns-administration-api'; +const name = 'campaigns-administration-api'; +export { register, name }; diff --git a/api/lib/application/campaigns/campaign-controller.js b/api/lib/application/campaigns/campaign-controller.js index b67f2aaea95..435164dcbbe 100644 --- a/api/lib/application/campaigns/campaign-controller.js +++ b/api/lib/application/campaigns/campaign-controller.js @@ -1,246 +1,268 @@ -const _ = require('lodash'); -const { PassThrough } = require('stream'); - -const { MissingQueryParamError } = require('../http-errors.js'); -const usecases = require('../../domain/usecases/index.js'); -const tokenService = require('../../../lib/domain/services/token-service.js'); - -const campaignToJoinSerializer = require('../../infrastructure/serializers/jsonapi/campaign-to-join-serializer.js'); -const campaignAnalysisSerializer = require('../../infrastructure/serializers/jsonapi/campaign-analysis-serializer.js'); -const campaignReportSerializer = require('../../infrastructure/serializers/jsonapi/campaign-report-serializer.js'); -const campaignCollectiveResultSerializer = require('../../infrastructure/serializers/jsonapi/campaign-collective-result-serializer.js'); -const campaignProfilesCollectionParticipationSummarySerializer = require('../../infrastructure/serializers/jsonapi/campaign-profiles-collection-participation-summary-serializer.js'); -const campaignParticipantsActivitySerializer = require('../../infrastructure/serializers/jsonapi/campaign-participant-activity-serializer.js'); -const divisionSerializer = require('../../infrastructure/serializers/jsonapi/division-serializer.js'); -const groupSerializer = require('../../infrastructure/serializers/jsonapi/group-serializer.js'); - -const queryParamsUtils = require('../../infrastructure/utils/query-params-utils.js'); -const requestResponseUtils = require('../../infrastructure/utils/request-response-utils.js'); -const { extractLocaleFromRequest } = require('../../infrastructure/utils/request-response-utils.js'); -const { ForbiddenAccess } = require('../../domain/errors.js'); - -module.exports = { - async save(request, h, dependencies = { campaignReportSerializer }) { - const { userId: creatorId } = request.auth.credentials; - const { - name, - type, - title, - 'multiple-sendings': multipleSendings, - 'id-pix-label': idPixLabel, - 'custom-landing-page-text': customLandingPageText, - 'owner-id': ownerId, - } = request.payload.data.attributes; - // eslint-disable-next-line no-restricted-syntax - const targetProfileId = parseInt(_.get(request, 'payload.data.relationships.target-profile.data.id')) || null; - // eslint-disable-next-line no-restricted-syntax - const organizationId = parseInt(_.get(request, 'payload.data.relationships.organization.data.id')) || null; - - const campaign = { - name, - type, - title, - idPixLabel, - customLandingPageText, - creatorId, - ownerId: _getOwnerId(ownerId, creatorId), - organizationId, - targetProfileId, - multipleSendings, - }; - - const createdCampaign = await usecases.createCampaign({ campaign }); - return h.response(dependencies.campaignReportSerializer.serialize(createdCampaign)).created(); - }, - - async getByCode(request) { - const filters = queryParamsUtils.extractParameters(request.query).filter; - await _validateFilters(filters); - - const campaignToJoin = await usecases.getCampaignByCode({ code: filters.code }); - return campaignToJoinSerializer.serialize(campaignToJoin); - }, - - async getById( - request, - h, - dependencies = { - campaignReportSerializer, - tokenService, - } - ) { - const { userId } = request.auth.credentials; - const campaignId = request.params.id; - - const tokenForCampaignResults = dependencies.tokenService.createTokenForCampaignResults({ userId, campaignId }); - - const campaign = await usecases.getCampaign({ campaignId, userId }); - return dependencies.campaignReportSerializer.serialize(campaign, {}, { tokenForCampaignResults }); - }, - - async getCsvAssessmentResults(request, h, dependencies = { tokenService }) { - const token = request.query.accessToken; - const { userId, campaignId: extractedCampaignId } = - dependencies.tokenService.extractCampaignResultsTokenContent(token); - const campaignId = request.params.id; - - if (extractedCampaignId !== campaignId) { - throw new ForbiddenAccess(); - } - - const writableStream = new PassThrough(); - - const { fileName } = await usecases.startWritingCampaignAssessmentResultsToStream({ - userId, - campaignId, - writableStream, - i18n: request.i18n, - }); - const escapedFileName = requestResponseUtils.escapeFileName(fileName); - - writableStream.headers = { - 'content-type': 'text/csv;charset=utf-8', - 'content-disposition': `attachment; filename="${escapedFileName}"`, - - // WHY: to avoid compression because when compressing, the server buffers - // for too long causing a response timeout. - 'content-encoding': 'identity', - }; - - return writableStream; - }, - - async getCsvProfilesCollectionResults(request, h, dependencies = { tokenService }) { - const token = request.query.accessToken; - const { userId, campaignId: extractedCampaignId } = - dependencies.tokenService.extractCampaignResultsTokenContent(token); - const campaignId = request.params.id; - - if (extractedCampaignId !== campaignId) { - throw new ForbiddenAccess(); - } - - const writableStream = new PassThrough(); - - const { fileName } = await usecases.startWritingCampaignProfilesCollectionResultsToStream({ - userId, - campaignId, - writableStream, - i18n: request.i18n, - }); - const escapedFileName = requestResponseUtils.escapeFileName(fileName); - - writableStream.headers = { - 'content-type': 'text/csv;charset=utf-8', - 'content-disposition': `attachment; filename="${escapedFileName}"`, - - // WHY: to avoid compression because when compressing, the server buffers - // for too long causing a response timeout. - 'content-encoding': 'identity', - }; - - return writableStream; - }, - - update(request, h, dependencies = { campaignReportSerializer }) { - const { userId } = request.auth.credentials; - const campaignId = request.params.id; - - return usecases - .updateCampaign({ userId, campaignId, ...request.deserializedPayload }) - .then(dependencies.campaignReportSerializer.serialize); - }, - - archiveCampaign(request, h, dependencies = { campaignReportSerializer }) { - const { userId } = request.auth.credentials; - const campaignId = request.params.id; - - return usecases.archiveCampaign({ userId, campaignId }).then(dependencies.campaignReportSerializer.serialize); - }, - - unarchiveCampaign(request, h, dependencies = { campaignReportSerializer }) { - const { userId } = request.auth.credentials; - const campaignId = request.params.id; - - return usecases.unarchiveCampaign({ userId, campaignId }).then(dependencies.campaignReportSerializer.serialize); - }, - - async getCollectiveResult(request, h, dependencies = { campaignCollectiveResultSerializer }) { - const { userId } = request.auth.credentials; - const campaignId = request.params.id; - const locale = extractLocaleFromRequest(request); - - const campaignCollectiveResult = await usecases.computeCampaignCollectiveResult({ userId, campaignId, locale }); - return dependencies.campaignCollectiveResultSerializer.serialize(campaignCollectiveResult); - }, - - async getAnalysis(request, h, dependencies = { campaignAnalysisSerializer }) { - const { userId } = request.auth.credentials; - const campaignId = request.params.id; - const locale = extractLocaleFromRequest(request); - - const campaignAnalysis = await usecases.computeCampaignAnalysis({ userId, campaignId, locale }); - return dependencies.campaignAnalysisSerializer.serialize(campaignAnalysis); - }, - - async findProfilesCollectionParticipations(request) { - const { userId } = request.auth.credentials; - const campaignId = request.params.id; - const { page, filter: filters } = queryParamsUtils.extractParameters(request.query); - if (filters.divisions && !Array.isArray(filters.divisions)) { - filters.divisions = [filters.divisions]; - } - if (filters.groups && !Array.isArray(filters.groups)) { - filters.groups = [filters.groups]; - } - const results = await usecases.findCampaignProfilesCollectionParticipationSummaries({ - userId, - campaignId, - page, - filters, - }); - return campaignProfilesCollectionParticipationSummarySerializer.serialize(results); - }, - - async findParticipantsActivity(request, h, dependencies = { campaignParticipantsActivitySerializer }) { - const campaignId = request.params.id; - - const { page, filter: filters } = queryParamsUtils.extractParameters(request.query); - if (filters.divisions && !Array.isArray(filters.divisions)) { - filters.divisions = [filters.divisions]; - } - if (filters.groups && !Array.isArray(filters.groups)) { - filters.groups = [filters.groups]; - } - - const { userId } = request.auth.credentials; - const paginatedParticipations = await usecases.findPaginatedCampaignParticipantsActivities({ - userId, - campaignId, - page, - filters, - }); - - return dependencies.campaignParticipantsActivitySerializer.serialize(paginatedParticipations); - }, - - async division(request) { - const { userId } = request.auth.credentials; - const campaignId = request.params.id; - - const divisions = await usecases.getParticipantsDivision({ userId, campaignId }); - return divisionSerializer.serialize(divisions); - }, - - async getGroups(request) { - const { userId } = request.auth.credentials; - const campaignId = request.params.id; - - const groups = await usecases.getParticipantsGroup({ userId, campaignId }); - return groupSerializer.serialize(groups); - }, +import _ from 'lodash'; +import stream from 'stream'; + +const { PassThrough } = stream; + +import { MissingQueryParamError } from '../http-errors.js'; +import { usecases } from '../../domain/usecases/index.js'; +import { tokenService } from '../../../lib/domain/services/token-service.js'; + +import * as campaignToJoinSerializer from '../../infrastructure/serializers/jsonapi/campaign-to-join-serializer.js'; +import * as campaignAnalysisSerializer from '../../infrastructure/serializers/jsonapi/campaign-analysis-serializer.js'; +import * as campaignReportSerializer from '../../infrastructure/serializers/jsonapi/campaign-report-serializer.js'; +import * as campaignCollectiveResultSerializer from '../../infrastructure/serializers/jsonapi/campaign-collective-result-serializer.js'; +import * as campaignProfilesCollectionParticipationSummarySerializer from '../../infrastructure/serializers/jsonapi/campaign-profiles-collection-participation-summary-serializer.js'; +import * as campaignParticipantsActivitySerializer from '../../infrastructure/serializers/jsonapi/campaign-participant-activity-serializer.js'; +import * as divisionSerializer from '../../infrastructure/serializers/jsonapi/division-serializer.js'; +import * as groupSerializer from '../../infrastructure/serializers/jsonapi/group-serializer.js'; + +import { extractParameters } from '../../infrastructure/utils/query-params-utils.js'; +import { escapeFileName, extractLocaleFromRequest } from '../../infrastructure/utils/request-response-utils.js'; +import { ForbiddenAccess } from '../../domain/errors.js'; + +const save = async function (request, h, dependencies = { campaignReportSerializer }) { + const { userId: creatorId } = request.auth.credentials; + const { + name, + type, + title, + 'multiple-sendings': multipleSendings, + 'id-pix-label': idPixLabel, + 'custom-landing-page-text': customLandingPageText, + 'owner-id': ownerId, + } = request.payload.data.attributes; + // eslint-disable-next-line no-restricted-syntax + const targetProfileId = parseInt(_.get(request, 'payload.data.relationships.target-profile.data.id')) || null; + // eslint-disable-next-line no-restricted-syntax + const organizationId = parseInt(_.get(request, 'payload.data.relationships.organization.data.id')) || null; + + const campaign = { + name, + type, + title, + idPixLabel, + customLandingPageText, + creatorId, + ownerId: _getOwnerId(ownerId, creatorId), + organizationId, + targetProfileId, + multipleSendings, + }; + + const createdCampaign = await usecases.createCampaign({ campaign }); + return h.response(dependencies.campaignReportSerializer.serialize(createdCampaign)).created(); }; +const getByCode = async function (request) { + const filters = extractParameters(request.query).filter; + await _validateFilters(filters); + + const campaignToJoin = await usecases.getCampaignByCode({ code: filters.code }); + return campaignToJoinSerializer.serialize(campaignToJoin); +}; + +const getById = async function ( + request, + h, + dependencies = { + campaignReportSerializer, + tokenService, + } +) { + const { userId } = request.auth.credentials; + const campaignId = request.params.id; + + const tokenForCampaignResults = dependencies.tokenService.createTokenForCampaignResults({ userId, campaignId }); + + const campaign = await usecases.getCampaign({ campaignId, userId }); + return dependencies.campaignReportSerializer.serialize(campaign, {}, { tokenForCampaignResults }); +}; + +const getCsvAssessmentResults = async function (request, h, dependencies = { tokenService }) { + const token = request.query.accessToken; + const { userId, campaignId: extractedCampaignId } = + dependencies.tokenService.extractCampaignResultsTokenContent(token); + const campaignId = request.params.id; + + if (extractedCampaignId !== campaignId) { + throw new ForbiddenAccess(); + } + + const writableStream = new PassThrough(); + + const { fileName } = await usecases.startWritingCampaignAssessmentResultsToStream({ + userId, + campaignId, + writableStream, + i18n: request.i18n, + }); + const escapedFileName = escapeFileName(fileName); + + writableStream.headers = { + 'content-type': 'text/csv;charset=utf-8', + 'content-disposition': `attachment; filename="${escapedFileName}"`, + + // WHY: to avoid compression because when compressing, the server buffers + // for too long causing a response timeout. + 'content-encoding': 'identity', + }; + + return writableStream; +}; + +const getCsvProfilesCollectionResults = async function (request, h, dependencies = { tokenService }) { + const token = request.query.accessToken; + const { userId, campaignId: extractedCampaignId } = + dependencies.tokenService.extractCampaignResultsTokenContent(token); + const campaignId = request.params.id; + + if (extractedCampaignId !== campaignId) { + throw new ForbiddenAccess(); + } + + const writableStream = new PassThrough(); + + const { fileName } = await usecases.startWritingCampaignProfilesCollectionResultsToStream({ + userId, + campaignId, + writableStream, + i18n: request.i18n, + }); + const escapedFileName = escapeFileName(fileName); + + writableStream.headers = { + 'content-type': 'text/csv;charset=utf-8', + 'content-disposition': `attachment; filename="${escapedFileName}"`, + + // WHY: to avoid compression because when compressing, the server buffers + // for too long causing a response timeout. + 'content-encoding': 'identity', + }; + + return writableStream; +}; + +const update = function (request, h, dependencies = { campaignReportSerializer }) { + const { userId } = request.auth.credentials; + const campaignId = request.params.id; + + return usecases + .updateCampaign({ userId, campaignId, ...request.deserializedPayload }) + .then(dependencies.campaignReportSerializer.serialize); +}; + +const archiveCampaign = function (request, h, dependencies = { campaignReportSerializer }) { + const { userId } = request.auth.credentials; + const campaignId = request.params.id; + + return usecases.archiveCampaign({ userId, campaignId }).then(dependencies.campaignReportSerializer.serialize); +}; + +const unarchiveCampaign = function (request, h, dependencies = { campaignReportSerializer }) { + const { userId } = request.auth.credentials; + const campaignId = request.params.id; + + return usecases.unarchiveCampaign({ userId, campaignId }).then(dependencies.campaignReportSerializer.serialize); +}; + +const getCollectiveResult = async function (request, h, dependencies = { campaignCollectiveResultSerializer }) { + const { userId } = request.auth.credentials; + const campaignId = request.params.id; + const locale = extractLocaleFromRequest(request); + + const campaignCollectiveResult = await usecases.computeCampaignCollectiveResult({ userId, campaignId, locale }); + return dependencies.campaignCollectiveResultSerializer.serialize(campaignCollectiveResult); +}; + +const getAnalysis = async function (request, h, dependencies = { campaignAnalysisSerializer }) { + const { userId } = request.auth.credentials; + const campaignId = request.params.id; + const locale = extractLocaleFromRequest(request); + + const campaignAnalysis = await usecases.computeCampaignAnalysis({ userId, campaignId, locale }); + return dependencies.campaignAnalysisSerializer.serialize(campaignAnalysis); +}; + +const findProfilesCollectionParticipations = async function (request) { + const { userId } = request.auth.credentials; + const campaignId = request.params.id; + const { page, filter: filters } = extractParameters(request.query); + if (filters.divisions && !Array.isArray(filters.divisions)) { + filters.divisions = [filters.divisions]; + } + if (filters.groups && !Array.isArray(filters.groups)) { + filters.groups = [filters.groups]; + } + const results = await usecases.findCampaignProfilesCollectionParticipationSummaries({ + userId, + campaignId, + page, + filters, + }); + return campaignProfilesCollectionParticipationSummarySerializer.serialize(results); +}; + +const findParticipantsActivity = async function ( + request, + h, + dependencies = { campaignParticipantsActivitySerializer } +) { + const campaignId = request.params.id; + + const { page, filter: filters } = extractParameters(request.query); + if (filters.divisions && !Array.isArray(filters.divisions)) { + filters.divisions = [filters.divisions]; + } + if (filters.groups && !Array.isArray(filters.groups)) { + filters.groups = [filters.groups]; + } + + const { userId } = request.auth.credentials; + const paginatedParticipations = await usecases.findPaginatedCampaignParticipantsActivities({ + userId, + campaignId, + page, + filters, + }); + + return dependencies.campaignParticipantsActivitySerializer.serialize(paginatedParticipations); +}; + +const division = async function (request) { + const { userId } = request.auth.credentials; + const campaignId = request.params.id; + + const divisions = await usecases.getParticipantsDivision({ userId, campaignId }); + return divisionSerializer.serialize(divisions); +}; + +const getGroups = async function (request) { + const { userId } = request.auth.credentials; + const campaignId = request.params.id; + + const groups = await usecases.getParticipantsGroup({ userId, campaignId }); + return groupSerializer.serialize(groups); +}; + +const campaignController = { + save, + getByCode, + getById, + getCsvAssessmentResults, + getCsvProfilesCollectionResults, + update, + archiveCampaign, + unarchiveCampaign, + getCollectiveResult, + getAnalysis, + findProfilesCollectionParticipations, + findParticipantsActivity, + division, + getGroups, +}; + +export { campaignController }; + function _validateFilters(filters) { if (typeof filters.code === 'undefined') { throw new MissingQueryParamError('filter.code'); diff --git a/api/lib/application/campaigns/campaign-management-controller.js b/api/lib/application/campaigns/campaign-management-controller.js index 42b4dd1f8e2..618f2538c31 100644 --- a/api/lib/application/campaigns/campaign-management-controller.js +++ b/api/lib/application/campaigns/campaign-management-controller.js @@ -1,36 +1,42 @@ -const usecases = require('../../domain/usecases/index.js'); -const queryParamsUtils = require('../../infrastructure/utils/query-params-utils.js'); -const campaignDetailsManagementSerializer = require('../../infrastructure/serializers/jsonapi/campaign-details-management-serializer.js'); -const participationForCampaignManagementSerializer = require('../../infrastructure/serializers/jsonapi/participation-for-campaign-management-serializer.js'); -const commonDeserializer = require('../../infrastructure/serializers/jsonapi/deserializer.js'); +import { usecases } from '../../domain/usecases/index.js'; +import { extractParameters } from '../../infrastructure/utils/query-params-utils.js'; +import * as campaignDetailsManagementSerializer from '../../infrastructure/serializers/jsonapi/campaign-details-management-serializer.js'; +import * as participationForCampaignManagementSerializer from '../../infrastructure/serializers/jsonapi/participation-for-campaign-management-serializer.js'; +import { deserializer } from '../../infrastructure/serializers/jsonapi/deserializer.js'; -module.exports = { - async getCampaignDetails(request) { - const campaignId = request.params.id; - const campaign = await usecases.getCampaignDetailsManagement({ campaignId }); - return campaignDetailsManagementSerializer.serialize(campaign); - }, - - async findPaginatedParticipationsForCampaignManagement(request) { - const campaignId = request.params.id; - const { page } = queryParamsUtils.extractParameters(request.query); - - const { models: participationsForCampaignManagement, meta } = - await usecases.findPaginatedParticipationsForCampaignManagement({ - campaignId, - page, - }); - return participationForCampaignManagementSerializer.serialize(participationsForCampaignManagement, meta); - }, +const getCampaignDetails = async function (request) { + const campaignId = request.params.id; + const campaign = await usecases.getCampaignDetailsManagement({ campaignId }); + return campaignDetailsManagementSerializer.serialize(campaign); +}; - async updateCampaignDetailsManagement(request, h) { - const campaignId = request.params.id; +const findPaginatedParticipationsForCampaignManagement = async function (request) { + const campaignId = request.params.id; + const { page } = extractParameters(request.query); - const campaignDetailsManagement = await commonDeserializer.deserialize(request.payload); - await usecases.updateCampaignDetailsManagement({ + const { models: participationsForCampaignManagement, meta } = + await usecases.findPaginatedParticipationsForCampaignManagement({ campaignId, - ...campaignDetailsManagement, + page, }); - return h.response({}).code(204); - }, + return participationForCampaignManagementSerializer.serialize(participationsForCampaignManagement, meta); }; + +const updateCampaignDetailsManagement = async function (request, h) { + const campaignId = request.params.id; + + const campaignDetailsManagement = await deserializer.deserialize(request.payload); + await usecases.updateCampaignDetailsManagement({ + campaignId, + ...campaignDetailsManagement, + }); + return h.response({}).code(204); +}; + +const campaignManagementController = { + getCampaignDetails, + findPaginatedParticipationsForCampaignManagement, + updateCampaignDetailsManagement, +}; + +export { campaignManagementController }; diff --git a/api/lib/application/campaigns/campaign-stats-controller.js b/api/lib/application/campaigns/campaign-stats-controller.js index 189b9c4cd39..091b8487384 100644 --- a/api/lib/application/campaigns/campaign-stats-controller.js +++ b/api/lib/application/campaigns/campaign-stats-controller.js @@ -1,55 +1,62 @@ -const usecases = require('../../domain/usecases/index.js'); -const participationsByStageSerializer = require('../../infrastructure/serializers/jsonapi/campaign-participations-count-by-stage-serializer.js'); -const participationsByStatusSerializer = require('../../infrastructure/serializers/jsonapi/campaign-participations-counts-by-status-serializer.js'); -const participationsByDaySerializer = require('../../infrastructure/serializers/jsonapi/campaign-participations-counts-by-day-serializer.js'); -const participationsCountByMasteryRateSerializer = require('../../infrastructure/serializers/jsonapi/participations-count-by-mastery-rate.js'); - -module.exports = { - async getParticipationsByStage(request) { - const { userId } = request.auth.credentials; - const campaignId = request.params.id; - - const participationsByStage = await usecases.getCampaignParticipationsCountByStage({ userId, campaignId }); - - return participationsByStageSerializer.serialize({ - campaignId, - data: participationsByStage, - }); - }, - - async getParticipationsByStatus(request) { - const { userId } = request.auth.credentials; - const campaignId = request.params.id; - - const participantsCounts = await usecases.getCampaignParticipationsCountsByStatus({ userId, campaignId }); - - return participationsByStatusSerializer.serialize({ - campaignId, - ...participantsCounts, - }); - }, - - async getParticipationsByDay(request) { - const { userId } = request.auth.credentials; - const campaignId = request.params.id; - - const participantsCounts = await usecases.getCampaignParticipationsActivityByDay({ userId, campaignId }); - - return participationsByDaySerializer.serialize({ - campaignId, - ...participantsCounts, - }); - }, - - async getParticipationsCountByMasteryRate(request) { - const { userId } = request.auth.credentials; - const campaignId = request.params.id; - - const resultDistribution = await usecases.getParticipationsCountByMasteryRate({ userId, campaignId }); - - return participationsCountByMasteryRateSerializer.serialize({ - campaignId, - resultDistribution, - }); - }, +import { usecases } from '../../domain/usecases/index.js'; +import * as participationsByStageSerializer from '../../infrastructure/serializers/jsonapi/campaign-participations-count-by-stage-serializer.js'; +import * as participationsByStatusSerializer from '../../infrastructure/serializers/jsonapi/campaign-participations-counts-by-status-serializer.js'; +import * as participationsByDaySerializer from '../../infrastructure/serializers/jsonapi/campaign-participations-counts-by-day-serializer.js'; +import * as participationsCountByMasteryRateSerializer from '../../infrastructure/serializers/jsonapi/participations-count-by-mastery-rate.js'; + +const getParticipationsByStage = async function (request) { + const { userId } = request.auth.credentials; + const campaignId = request.params.id; + + const participationsByStage = await usecases.getCampaignParticipationsCountByStage({ userId, campaignId }); + + return participationsByStageSerializer.serialize({ + campaignId, + data: participationsByStage, + }); }; + +const getParticipationsByStatus = async function (request) { + const { userId } = request.auth.credentials; + const campaignId = request.params.id; + + const participantsCounts = await usecases.getCampaignParticipationsCountsByStatus({ userId, campaignId }); + + return participationsByStatusSerializer.serialize({ + campaignId, + ...participantsCounts, + }); +}; + +const getParticipationsByDay = async function (request) { + const { userId } = request.auth.credentials; + const campaignId = request.params.id; + + const participantsCounts = await usecases.getCampaignParticipationsActivityByDay({ userId, campaignId }); + + return participationsByDaySerializer.serialize({ + campaignId, + ...participantsCounts, + }); +}; + +const getParticipationsCountByMasteryRate = async function (request) { + const { userId } = request.auth.credentials; + const campaignId = request.params.id; + + const resultDistribution = await usecases.getParticipationsCountByMasteryRate({ userId, campaignId }); + + return participationsCountByMasteryRateSerializer.serialize({ + campaignId, + resultDistribution, + }); +}; + +const campaignStatsController = { + getParticipationsByStage, + getParticipationsByStatus, + getParticipationsByDay, + getParticipationsCountByMasteryRate, +}; + +export { campaignStatsController }; diff --git a/api/lib/application/campaigns/index.js b/api/lib/application/campaigns/index.js index 96b337b0dfe..cdb051ba834 100644 --- a/api/lib/application/campaigns/index.js +++ b/api/lib/application/campaigns/index.js @@ -1,14 +1,14 @@ -const Joi = require('joi'); -const campaignController = require('./campaign-controller.js'); -const campaignManagementController = require('./campaign-management-controller.js'); -const campaignStatsController = require('./campaign-stats-controller.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const CampaignParticipationStatuses = require('../../domain/models/CampaignParticipationStatuses.js'); +import Joi from 'joi'; +import { campaignController } from './campaign-controller.js'; +import { campaignManagementController } from './campaign-management-controller.js'; +import { campaignStatsController } from './campaign-stats-controller.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import { CampaignParticipationStatuses } from '../../domain/models/CampaignParticipationStatuses.js'; const campaignParticipationStatuses = Object.values(CampaignParticipationStatuses); -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'POST', @@ -440,4 +440,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'campaigns-api'; +const name = 'campaigns-api'; +export { register, name }; diff --git a/api/lib/application/certification-candidates/certification-candidates-controller.js b/api/lib/application/certification-candidates/certification-candidates-controller.js index 1791502d415..3432bf04351 100644 --- a/api/lib/application/certification-candidates/certification-candidates-controller.js +++ b/api/lib/application/certification-candidates/certification-candidates-controller.js @@ -1,42 +1,49 @@ -const usecases = require('../../domain/usecases/index.js'); -const certificationCandidateSubscriptionSerializer = require('../../infrastructure/serializers/jsonapi/certification-candidate-subscription-serializer.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as certificationCandidateSubscriptionSerializer from '../../infrastructure/serializers/jsonapi/certification-candidate-subscription-serializer.js'; -module.exports = { - async authorizeToStart(request, h) { - const certificationCandidateForSupervisingId = request.params.id; +const authorizeToStart = async function (request, h) { + const certificationCandidateForSupervisingId = request.params.id; - const authorizedToStart = request.payload['authorized-to-start']; - await usecases.authorizeCertificationCandidateToStart({ - certificationCandidateForSupervisingId, - authorizedToStart, - }); + const authorizedToStart = request.payload['authorized-to-start']; + await usecases.authorizeCertificationCandidateToStart({ + certificationCandidateForSupervisingId, + authorizedToStart, + }); - return h.response().code(204); - }, + return h.response().code(204); +}; + +const authorizeToResume = async function (request, h) { + const certificationCandidateId = request.params.id; - async authorizeToResume(request, h) { - const certificationCandidateId = request.params.id; + await usecases.authorizeCertificationCandidateToResume({ + certificationCandidateId, + }); - await usecases.authorizeCertificationCandidateToResume({ - certificationCandidateId, - }); + return h.response().code(204); +}; - return h.response().code(204); - }, +const getSubscriptions = async function (request) { + const certificationCandidateId = request.params.id; + const certificationCandidateSubscription = await usecases.getCertificationCandidateSubscription({ + certificationCandidateId, + }); + return certificationCandidateSubscriptionSerializer.serialize(certificationCandidateSubscription); +}; - async getSubscriptions(request) { - const certificationCandidateId = request.params.id; - const certificationCandidateSubscription = await usecases.getCertificationCandidateSubscription({ - certificationCandidateId, - }); - return certificationCandidateSubscriptionSerializer.serialize(certificationCandidateSubscription); - }, +const endAssessmentBySupervisor = async function (request) { + const certificationCandidateId = request.params.id; - async endAssessmentBySupervisor(request) { - const certificationCandidateId = request.params.id; + await usecases.endAssessmentBySupervisor({ certificationCandidateId }); - await usecases.endAssessmentBySupervisor({ certificationCandidateId }); + return null; +}; - return null; - }, +const certificationCandidatesController = { + authorizeToStart, + authorizeToResume, + getSubscriptions, + endAssessmentBySupervisor, }; + +export { certificationCandidatesController }; diff --git a/api/lib/application/certification-candidates/index.js b/api/lib/application/certification-candidates/index.js index 34e6ae166f1..c1288ace109 100644 --- a/api/lib/application/certification-candidates/index.js +++ b/api/lib/application/certification-candidates/index.js @@ -1,9 +1,9 @@ -const certificationCandidatesController = require('./certification-candidates-controller.js'); -const assessmentSupervisorAuthorization = require('../preHandlers/session-supervisor-authorization.js'); -const Joi = require('joi'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { certificationCandidatesController } from './certification-candidates-controller.js'; +import { assessmentSupervisorAuthorization } from '../preHandlers/session-supervisor-authorization.js'; +import Joi from 'joi'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'POST', @@ -93,4 +93,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'certification-candidates-api'; +const name = 'certification-candidates-api'; +export { register, name }; diff --git a/api/lib/application/certification-center-invitations/certification-center-invitation-controller.js b/api/lib/application/certification-center-invitations/certification-center-invitation-controller.js index d0cf6360148..d188d247418 100644 --- a/api/lib/application/certification-center-invitations/certification-center-invitation-controller.js +++ b/api/lib/application/certification-center-invitations/certification-center-invitation-controller.js @@ -1,36 +1,42 @@ -const usecases = require('../../domain/usecases/index.js'); -const certificationCenterInvitationSerializer = require('../../infrastructure/serializers/jsonapi/certification-center-invitation-serializer.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as certificationCenterInvitationSerializer from '../../infrastructure/serializers/jsonapi/certification-center-invitation-serializer.js'; -module.exports = { - async acceptCertificationCenterInvitation(request, h) { - const certificationCenterInvitationId = request.params.id; - const { code, email: rawEmail } = request.deserializedPayload; - const localeFromCookie = request.state?.locale; - const email = rawEmail.trim().toLowerCase(); +const acceptCertificationCenterInvitation = async function (request, h) { + const certificationCenterInvitationId = request.params.id; + const { code, email: rawEmail } = request.deserializedPayload; + const localeFromCookie = request.state?.locale; + const email = rawEmail.trim().toLowerCase(); - await usecases.acceptCertificationCenterInvitation({ - certificationCenterInvitationId, - code, - email, - localeFromCookie, - }); - return h.response({}).code(204); - }, + await usecases.acceptCertificationCenterInvitation({ + certificationCenterInvitationId, + code, + email, + localeFromCookie, + }); + return h.response({}).code(204); +}; - async getCertificationCenterInvitation(request) { - const certificationCenterInvitationId = request.params.id; - const certificationCenterInvitationCode = request.query.code; +const getCertificationCenterInvitation = async function (request) { + const certificationCenterInvitationId = request.params.id; + const certificationCenterInvitationCode = request.query.code; - const certificationCenterInvitation = await usecases.getCertificationCenterInvitation({ - certificationCenterInvitationId, - certificationCenterInvitationCode, - }); - return certificationCenterInvitationSerializer.serialize(certificationCenterInvitation); - }, + const certificationCenterInvitation = await usecases.getCertificationCenterInvitation({ + certificationCenterInvitationId, + certificationCenterInvitationCode, + }); + return certificationCenterInvitationSerializer.serialize(certificationCenterInvitation); +}; - async cancelCertificationCenterInvitation(request, h) { - const certificationCenterInvitationId = request.params.certificationCenterInvitationId; - await usecases.cancelCertificationCenterInvitation({ certificationCenterInvitationId }); - return h.response().code(204); - }, +const cancelCertificationCenterInvitation = async function (request, h) { + const certificationCenterInvitationId = request.params.certificationCenterInvitationId; + await usecases.cancelCertificationCenterInvitation({ certificationCenterInvitationId }); + return h.response().code(204); }; + +const certificationCenterInvitationController = { + acceptCertificationCenterInvitation, + getCertificationCenterInvitation, + cancelCertificationCenterInvitation, +}; + +export { certificationCenterInvitationController }; diff --git a/api/lib/application/certification-center-invitations/index.js b/api/lib/application/certification-center-invitations/index.js index e653d782001..a690a54c951 100644 --- a/api/lib/application/certification-center-invitations/index.js +++ b/api/lib/application/certification-center-invitations/index.js @@ -1,10 +1,10 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const certificationCenterInvitationController = require('./certification-center-invitation-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); +import { certificationCenterInvitationController } from './certification-center-invitation-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'POST', @@ -81,4 +81,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'certification-center-invitations-api'; +const name = 'certification-center-invitations-api'; +export { register, name }; diff --git a/api/lib/application/certification-center-memberships/certification-center-membership-controller.js b/api/lib/application/certification-center-memberships/certification-center-membership-controller.js index b6e8810f3cb..5a2269f9b24 100644 --- a/api/lib/application/certification-center-memberships/certification-center-membership-controller.js +++ b/api/lib/application/certification-center-memberships/certification-center-membership-controller.js @@ -1,11 +1,13 @@ -const usecases = require('../../domain/usecases/index.js'); +import { usecases } from '../../domain/usecases/index.js'; -module.exports = { - async disable(request, h) { - const certificationCenterMembershipId = request.params.id; - await usecases.disableCertificationCenterMembership({ - certificationCenterMembershipId, - }); - return h.response().code(204); - }, +const disable = async function (request, h) { + const certificationCenterMembershipId = request.params.id; + await usecases.disableCertificationCenterMembership({ + certificationCenterMembershipId, + }); + return h.response().code(204); }; + +const certificationCenterMembershipController = { disable }; + +export { certificationCenterMembershipController }; diff --git a/api/lib/application/certification-center-memberships/index.js b/api/lib/application/certification-center-memberships/index.js index fe978349474..0f213556a0c 100644 --- a/api/lib/application/certification-center-memberships/index.js +++ b/api/lib/application/certification-center-memberships/index.js @@ -1,7 +1,7 @@ -const certificationCenterMembershipController = require('./certification-center-membership-controller.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); +import { certificationCenterMembershipController } from './certification-center-membership-controller.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; -exports.register = async function (server) { +const register = async function (server) { const adminRoutes = [ { method: 'DELETE', @@ -32,4 +32,5 @@ exports.register = async function (server) { server.route([...adminRoutes]); }; -exports.name = 'certification-center-memberships-api'; +const name = 'certification-center-memberships-api'; +export { register, name }; diff --git a/api/lib/application/certification-centers/certification-center-controller.js b/api/lib/application/certification-centers/certification-center-controller.js index cb3243860bf..a11bc921f1c 100644 --- a/api/lib/application/certification-centers/certification-center-controller.js +++ b/api/lib/application/certification-centers/certification-center-controller.js @@ -1,236 +1,263 @@ -const usecases = require('../../domain/usecases/index.js'); - -const certificationCenterSerializer = require('../../infrastructure/serializers/jsonapi/certification-center-serializer.js'); -const certificationCenterForAdminSerializer = require('../../infrastructure/serializers/jsonapi/certification-center-for-admin-serializer.js'); -const certificationCenterMembershipSerializer = require('../../infrastructure/serializers/jsonapi/certification-center-membership-serializer.js'); -const divisionSerializer = require('../../infrastructure/serializers/jsonapi/division-serializer.js'); -const studentCertificationSerializer = require('../../infrastructure/serializers/jsonapi/student-certification-serializer.js'); -const sessionSummarySerializer = require('../../infrastructure/serializers/jsonapi/session-summary-serializer.js'); -const certificationCenterInvitationSerializer = require('../../infrastructure/serializers/jsonapi/certification-center-invitation-serializer.js'); -const sessionSerializer = require('../../infrastructure/serializers/jsonapi/session-serializer.js'); - -const queryParamsUtils = require('../../infrastructure/utils/query-params-utils.js'); -const map = require('lodash/map'); -const csvHelpers = require('../../../scripts/helpers/csvHelpers.js'); -const csvSerializer = require('../../infrastructure/serializers/csv/csv-serializer.js'); -const { getHeaders } = require('../../infrastructure/files/sessions-import.js'); - -module.exports = { - async saveSession(request, _h, dependencies = { sessionSerializer }) { - const userId = request.auth.credentials.userId; - const session = dependencies.sessionSerializer.deserialize(request.payload); - - const newSession = await usecases.createSession({ userId, session }); - - return dependencies.sessionSerializer.serialize({ session: newSession }); - }, - - async create(request) { - const certificationCenter = certificationCenterForAdminSerializer.deserialize(request.payload); - const complementaryCertificationIds = map(request.payload.data.relationships?.habilitations?.data, 'id'); - const createdCertificationCenter = await usecases.createCertificationCenter({ - certificationCenter, - complementaryCertificationIds, - }); - return certificationCenterForAdminSerializer.serialize(createdCertificationCenter); - }, - - async update(request) { - const certificationCenter = certificationCenterForAdminSerializer.deserialize(request.payload); - const complementaryCertificationIds = map(request.payload.data.relationships?.habilitations?.data, 'id'); - const updatedCertificationCenter = await usecases.updateCertificationCenter({ - certificationCenter, - complementaryCertificationIds, - }); - return certificationCenterForAdminSerializer.serialize(updatedCertificationCenter); - }, +import { usecases } from '../../domain/usecases/index.js'; - async getCertificationCenterDetails(request) { - const certificationCenterId = request.params.id; +import * as certificationCenterSerializer from '../../infrastructure/serializers/jsonapi/certification-center-serializer.js'; +import * as certificationCenterForAdminSerializer from '../../infrastructure/serializers/jsonapi/certification-center-for-admin-serializer.js'; +import * as certificationCenterMembershipSerializer from '../../infrastructure/serializers/jsonapi/certification-center-membership-serializer.js'; +import * as divisionSerializer from '../../infrastructure/serializers/jsonapi/division-serializer.js'; +import * as studentCertificationSerializer from '../../infrastructure/serializers/jsonapi/student-certification-serializer.js'; +import * as sessionSummarySerializer from '../../infrastructure/serializers/jsonapi/session-summary-serializer.js'; +import * as certificationCenterInvitationSerializer from '../../infrastructure/serializers/jsonapi/certification-center-invitation-serializer.js'; +import * as sessionSerializer from '../../infrastructure/serializers/jsonapi/session-serializer.js'; - const certificationCenterDetails = await usecases.getCertificationCenterForAdmin({ id: certificationCenterId }); - return certificationCenterForAdminSerializer.serialize(certificationCenterDetails); - }, +import { extractParameters } from '../../infrastructure/utils/query-params-utils.js'; +import lodash from 'lodash'; - async findPaginatedFilteredCertificationCenters(request) { - const options = queryParamsUtils.extractParameters(request.query); - const { models: organizations, pagination } = await usecases.findPaginatedFilteredCertificationCenters({ - filter: options.filter, - page: options.page, - }); +const { map } = lodash; - return certificationCenterSerializer.serialize(organizations, pagination); - }, +import * as csvHelpers from './csvHelpers.js'; +import * as csvSerializer from '../../infrastructure/serializers/csv/csv-serializer.js'; +import { getHeaders } from '../../infrastructure/files/sessions-import.js'; - async findPaginatedSessionSummaries(request) { - const certificationCenterId = request.params.id; - const userId = request.auth.credentials.userId; - const options = queryParamsUtils.extractParameters(request.query); +const saveSession = async function (request, _h, dependencies = { sessionSerializer }) { + const userId = request.auth.credentials.userId; + const session = dependencies.sessionSerializer.deserialize(request.payload); - const { models: sessionSummaries, meta } = await usecases.findPaginatedCertificationCenterSessionSummaries({ - userId, - certificationCenterId, - page: options.page, - }); + const newSession = await usecases.createSession({ userId, session }); - return sessionSummarySerializer.serialize(sessionSummaries, meta); - }, + return dependencies.sessionSerializer.serialize({ session: newSession }); +}; - async getStudents(request) { - const certificationCenterId = request.params.certificationCenterId; - const sessionId = request.params.sessionId; +const create = async function (request) { + const certificationCenter = certificationCenterForAdminSerializer.deserialize(request.payload); + const complementaryCertificationIds = map(request.payload.data.relationships?.habilitations?.data, 'id'); + const createdCertificationCenter = await usecases.createCertificationCenter({ + certificationCenter, + complementaryCertificationIds, + }); + return certificationCenterForAdminSerializer.serialize(createdCertificationCenter); +}; - const { filter, page } = queryParamsUtils.extractParameters(request.query); - if (filter.divisions && !Array.isArray(filter.divisions)) { - filter.divisions = [filter.divisions]; - } +const update = async function (request) { + const certificationCenter = certificationCenterForAdminSerializer.deserialize(request.payload); + const complementaryCertificationIds = map(request.payload.data.relationships?.habilitations?.data, 'id'); + const updatedCertificationCenter = await usecases.updateCertificationCenter({ + certificationCenter, + complementaryCertificationIds, + }); + return certificationCenterForAdminSerializer.serialize(updatedCertificationCenter); +}; - const { data, pagination } = await usecases.findStudentsForEnrolment({ - certificationCenterId, - sessionId, - page, - filter, - }); - return studentCertificationSerializer.serialize(data, pagination); - }, +const getCertificationCenterDetails = async function (request) { + const certificationCenterId = request.params.id; - async getDivisions(request) { - const certificationCenterId = request.params.certificationCenterId; - const divisions = await usecases.findDivisionsByCertificationCenter({ - certificationCenterId, - }); + const certificationCenterDetails = await usecases.getCertificationCenterForAdmin({ id: certificationCenterId }); + return certificationCenterForAdminSerializer.serialize(certificationCenterDetails); +}; - return divisionSerializer.serialize(divisions); - }, +const findPaginatedFilteredCertificationCenters = async function (request) { + const options = extractParameters(request.query); + const { models: organizations, pagination } = await usecases.findPaginatedFilteredCertificationCenters({ + filter: options.filter, + page: options.page, + }); - async findCertificationCenterMembershipsByCertificationCenter( - request, - h, - dependencies = { certificationCenterMembershipSerializer } - ) { - const certificationCenterId = request.params.certificationCenterId; - const certificationCenterMemberships = await usecases.findCertificationCenterMembershipsByCertificationCenter({ - certificationCenterId, - }); + return certificationCenterSerializer.serialize(organizations, pagination); +}; - return dependencies.certificationCenterMembershipSerializer.serialize(certificationCenterMemberships); - }, +const findPaginatedSessionSummaries = async function (request) { + const certificationCenterId = request.params.id; + const userId = request.auth.credentials.userId; + const options = extractParameters(request.query); - async findCertificationCenterMemberships(request, h, dependencies = { certificationCenterMembershipSerializer }) { - const certificationCenterId = request.params.certificationCenterId; - const certificationCenterMemberships = await usecases.findCertificationCenterMembershipsByCertificationCenter({ - certificationCenterId, - }); + const { models: sessionSummaries, meta } = await usecases.findPaginatedCertificationCenterSessionSummaries({ + userId, + certificationCenterId, + page: options.page, + }); - return dependencies.certificationCenterMembershipSerializer.serializeMembers(certificationCenterMemberships); - }, + return sessionSummarySerializer.serialize(sessionSummaries, meta); +}; - async createCertificationCenterMembershipByEmail( - request, - h, - dependencies = { certificationCenterMembershipSerializer } - ) { - const certificationCenterId = request.params.certificationCenterId; - const { email } = request.payload; +const getStudents = async function (request) { + const certificationCenterId = request.params.certificationCenterId; + const sessionId = request.params.sessionId; + + const { filter, page } = extractParameters(request.query); + if (filter.divisions && !Array.isArray(filter.divisions)) { + filter.divisions = [filter.divisions]; + } + + const { data, pagination } = await usecases.findStudentsForEnrolment({ + certificationCenterId, + sessionId, + page, + filter, + }); + return studentCertificationSerializer.serialize(data, pagination); +}; - const certificationCenterMembership = await usecases.createCertificationCenterMembershipByEmail({ - certificationCenterId, - email, - }); - return h - .response(dependencies.certificationCenterMembershipSerializer.serialize(certificationCenterMembership)) - .created(); - }, +const getDivisions = async function (request) { + const certificationCenterId = request.params.certificationCenterId; + const divisions = await usecases.findDivisionsByCertificationCenter({ + certificationCenterId, + }); - async findPendingInvitationsForAdmin(request, h) { - const certificationCenterId = request.params.certificationCenterId; + return divisionSerializer.serialize(divisions); +}; - const certificationCenterInvitations = await usecases.findPendingCertificationCenterInvitations({ - certificationCenterId, - }); - return h.response(certificationCenterInvitationSerializer.serializeForAdmin(certificationCenterInvitations)); - }, +const findCertificationCenterMembershipsByCertificationCenter = async function ( + request, + h, + dependencies = { certificationCenterMembershipSerializer } +) { + const certificationCenterId = request.params.certificationCenterId; + const certificationCenterMemberships = await usecases.findCertificationCenterMembershipsByCertificationCenter({ + certificationCenterId, + }); + + return dependencies.certificationCenterMembershipSerializer.serialize(certificationCenterMemberships); +}; - async updateReferer(request, h) { - const certificationCenterId = request.params.certificationCenterId; - const { userId, isReferer } = request.payload.data.attributes; +const findCertificationCenterMemberships = async function ( + request, + h, + dependencies = { certificationCenterMembershipSerializer } +) { + const certificationCenterId = request.params.certificationCenterId; + const certificationCenterMemberships = await usecases.findCertificationCenterMembershipsByCertificationCenter({ + certificationCenterId, + }); + + return dependencies.certificationCenterMembershipSerializer.serializeMembers(certificationCenterMemberships); +}; - await usecases.updateCertificationCenterReferer({ - userId, - certificationCenterId, - isReferer, - }); - return h.response().code(204); - }, - - async sendInvitationForAdmin(request, h, dependencies = { certificationCenterInvitationSerializer }) { - const certificationCenterId = request.params.certificationCenterId; - const invitationInformation = await certificationCenterInvitationSerializer.deserializeForAdmin(request.payload); - - const { certificationCenterInvitation, isInvitationCreated } = - await usecases.createOrUpdateCertificationCenterInvitationForAdmin({ - email: invitationInformation.email, - locale: invitationInformation.language, - certificationCenterId, - }); - - const serializedCertificationCenterInvitation = - dependencies.certificationCenterInvitationSerializer.serializeForAdmin(certificationCenterInvitation); - if (isInvitationCreated) { - return h.response(serializedCertificationCenterInvitation).created(); - } - return h.response(serializedCertificationCenterInvitation); - }, - - async getSessionsImportTemplate(request, h) { - const certificationCenterId = request.params.certificationCenterId; - const habilitationLabels = await usecases.getImportSessionComplementaryCertificationHabilitationsLabels({ - certificationCenterId, - }); - const certificationCenter = await usecases.getCertificationCenter({ id: certificationCenterId }); - const headers = getHeaders({ - habilitationLabels, - shouldDisplayBillingModeColumns: certificationCenter.hasBillingMode, - }); - return h - .response(headers) - .header('Content-Type', 'text/csv; charset=utf-8') - .header('content-disposition', 'filename=import-sessions') - .code(200); - }, +const createCertificationCenterMembershipByEmail = async function ( + request, + h, + dependencies = { certificationCenterMembershipSerializer } +) { + const certificationCenterId = request.params.certificationCenterId; + const { email } = request.payload; + + const certificationCenterMembership = await usecases.createCertificationCenterMembershipByEmail({ + certificationCenterId, + email, + }); + return h + .response(dependencies.certificationCenterMembershipSerializer.serialize(certificationCenterMembership)) + .created(); +}; + +const findPendingInvitationsForAdmin = async function (request, h) { + const certificationCenterId = request.params.certificationCenterId; - async validateSessionsForMassImport(request, h, dependencies = { csvHelpers, csvSerializer }) { - const certificationCenterId = request.params.certificationCenterId; - const authenticatedUserId = request.auth.credentials.userId; + const certificationCenterInvitations = await usecases.findPendingCertificationCenterInvitations({ + certificationCenterId, + }); + return h.response(certificationCenterInvitationSerializer.serializeForAdmin(certificationCenterInvitations)); +}; - const parsedCsvData = await dependencies.csvHelpers.parseCsvWithHeader(request.payload.path); +const updateReferer = async function (request, h) { + const certificationCenterId = request.params.certificationCenterId; + const { userId, isReferer } = request.payload.data.attributes; - const certificationCenter = await usecases.getCertificationCenter({ id: certificationCenterId }); + await usecases.updateCertificationCenterReferer({ + userId, + certificationCenterId, + isReferer, + }); + return h.response().code(204); +}; - const sessions = dependencies.csvSerializer.deserializeForSessionsImport({ - parsedCsvData, - hasBillingMode: certificationCenter.hasBillingMode, - }); - const sessionMassImportReport = await usecases.validateSessions({ - sessions, +const sendInvitationForAdmin = async function (request, h, dependencies = { certificationCenterInvitationSerializer }) { + const certificationCenterId = request.params.certificationCenterId; + const invitationInformation = await certificationCenterInvitationSerializer.deserializeForAdmin(request.payload); + + const { certificationCenterInvitation, isInvitationCreated } = + await usecases.createOrUpdateCertificationCenterInvitationForAdmin({ + email: invitationInformation.email, + locale: invitationInformation.language, certificationCenterId, - userId: authenticatedUserId, - i18n: request.i18n, }); - return h.response(sessionMassImportReport).code(200); - }, - async createSessionsForMassImport(request, h) { - const { certificationCenterId } = request.params; - const authenticatedUserId = request.auth.credentials.userId; + const serializedCertificationCenterInvitation = + dependencies.certificationCenterInvitationSerializer.serializeForAdmin(certificationCenterInvitation); + if (isInvitationCreated) { + return h.response(serializedCertificationCenterInvitation).created(); + } + return h.response(serializedCertificationCenterInvitation); +}; - const { cachedValidatedSessionsKey } = request.payload.data.attributes; +const getSessionsImportTemplate = async function (request, h) { + const certificationCenterId = request.params.certificationCenterId; + const habilitationLabels = await usecases.getImportSessionComplementaryCertificationHabilitationsLabels({ + certificationCenterId, + }); + const certificationCenter = await usecases.getCertificationCenter({ id: certificationCenterId }); + const headers = getHeaders({ + habilitationLabels, + shouldDisplayBillingModeColumns: certificationCenter.hasBillingMode, + }); + return h + .response(headers) + .header('Content-Type', 'text/csv; charset=utf-8') + .header('content-disposition', 'filename=import-sessions') + .code(200); +}; - await usecases.createSessions({ - cachedValidatedSessionsKey, - certificationCenterId, - userId: authenticatedUserId, - }); - return h.response().code(201); - }, +const validateSessionsForMassImport = async function (request, h, dependencies = { csvHelpers, csvSerializer }) { + const certificationCenterId = request.params.certificationCenterId; + const authenticatedUserId = request.auth.credentials.userId; + + const parsedCsvData = await dependencies.csvHelpers.parseCsvWithHeader(request.payload.path); + + const certificationCenter = await usecases.getCertificationCenter({ id: certificationCenterId }); + + const sessions = dependencies.csvSerializer.deserializeForSessionsImport({ + parsedCsvData, + hasBillingMode: certificationCenter.hasBillingMode, + }); + const sessionMassImportReport = await usecases.validateSessions({ + sessions, + certificationCenterId, + userId: authenticatedUserId, + i18n: request.i18n, + }); + return h.response(sessionMassImportReport).code(200); +}; + +const createSessionsForMassImport = async function (request, h) { + const { certificationCenterId } = request.params; + const authenticatedUserId = request.auth.credentials.userId; + + const { cachedValidatedSessionsKey } = request.payload.data.attributes; + + await usecases.createSessions({ + cachedValidatedSessionsKey, + certificationCenterId, + userId: authenticatedUserId, + }); + return h.response().code(201); }; + +const certificationCenterController = { + saveSession, + create, + update, + getCertificationCenterDetails, + findPaginatedFilteredCertificationCenters, + findPaginatedSessionSummaries, + getStudents, + getDivisions, + findCertificationCenterMembershipsByCertificationCenter, + findCertificationCenterMemberships, + createCertificationCenterMembershipByEmail, + findPendingInvitationsForAdmin, + updateReferer, + sendInvitationForAdmin, + getSessionsImportTemplate, + validateSessionsForMassImport, + createSessionsForMassImport, +}; + +export { certificationCenterController }; diff --git a/api/lib/application/certification-centers/csvHelpers.js b/api/lib/application/certification-centers/csvHelpers.js new file mode 100644 index 00000000000..f0df5410d51 --- /dev/null +++ b/api/lib/application/certification-centers/csvHelpers.js @@ -0,0 +1,119 @@ +import fs from 'fs'; + +const { readFile, access } = fs.promises; +import lodash from 'lodash'; + +const { difference, isEmpty } = lodash; +import papa from 'papaparse'; + +import { NotFoundError, FileValidationError } from '../../domain/errors.js'; + +const ERRORS = { + INVALID_FILE_EXTENSION: 'INVALID_FILE_EXTENSION', + MISSING_REQUIRED_FIELD_NAMES: 'MISSING_REQUIRED_FIELD_NAMES', + MISSING_REQUIRED_FIELD_VALUES: 'MISSING_REQUIRED_FIELD_VALUES', + EMPTY_FILE: 'EMPTY_FILE', +}; + +const optionsWithHeader = { + skipEmptyLines: true, + header: true, + transform: (value, columnName) => { + if (typeof value === 'string') { + value = value.trim(); + } + if (columnName === 'uai') { + value = value.toUpperCase(); + } + if (columnName === 'createdBy') { + value = !isEmpty(value) && value; + } + if (columnName === 'credit' && isEmpty(value)) { + value = 0; + } + if (columnName === 'locale' && isEmpty(value)) { + value = 'fr-fr'; + } + if (columnName === 'email' && !isEmpty(value)) { + value = value.replaceAll(' ', '').toLowerCase(); + } + return value; + }, +}; + +async function checkCsvHeader({ filePath, requiredFieldNames = [] }) { + if (isEmpty(requiredFieldNames)) { + throw new FileValidationError(ERRORS.MISSING_REQUIRED_FIELD_NAMES); + } + + const data = await parseCsv(filePath, { skipEmptyLines: true, header: true, preview: 1 }); + if (isEmpty(data)) { + throw new FileValidationError(ERRORS.EMPTY_FILE, 'File is empty'); + } + + const fieldNames = Object.keys(data[0]); + + const fieldNamesNotPresent = difference(requiredFieldNames, fieldNames); + + if (!isEmpty(fieldNamesNotPresent)) { + throw new FileValidationError(ERRORS.MISSING_REQUIRED_FIELD_NAMES, `Headers missing: ${fieldNamesNotPresent}`); + } +} + +async function readCsvFile(filePath) { + try { + await access(filePath, fs.constants.F_OK); + } catch (err) { + throw new NotFoundError(`File ${filePath} not found!`); + } + + const rawData = await readFile(filePath, 'utf8'); + + return rawData.replace(/^\uFEFF/, ''); +} + +async function parseCsv(filePath, options) { + const cleanedData = await readCsvFile(filePath); + return parseCsvData(cleanedData, options); +} + +async function parseCsvData(cleanedData, options) { + const { data } = papa.parse(cleanedData, options); + return data; +} + +function parseCsvWithHeader(filePath, options = optionsWithHeader) { + return parseCsv(filePath, options); +} + +async function parseCsvWithHeaderAndRequiredFields({ filePath, requiredFieldNames }) { + const csvData = []; + + const stepFunction = (results, parser) => { + requiredFieldNames.forEach((requiredFieldName) => { + if (!results.data[requiredFieldName]) { + parser.abort(); + throw new FileValidationError( + ERRORS.MISSING_REQUIRED_FIELD_VALUES, + `Field values are required for ${requiredFieldName}` + ); + } + }); + csvData.push(results.data); + }; + const options = { ...optionsWithHeader, step: stepFunction }; + + await parseCsv(filePath, options); + + return csvData; +} + +export { + checkCsvHeader, + readCsvFile, + parseCsvData, + parseCsv, + parseCsvWithHeader, + parseCsvWithHeaderAndRequiredFields, + optionsWithHeader, +}; diff --git a/api/lib/application/certification-centers/index.js b/api/lib/application/certification-centers/index.js index 5bc0f53eb09..03adfc1e20e 100644 --- a/api/lib/application/certification-centers/index.js +++ b/api/lib/application/certification-centers/index.js @@ -1,9 +1,9 @@ -const certificationCenterController = require('./certification-center-controller.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const Joi = require('joi'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { certificationCenterController } from './certification-center-controller.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import Joi from 'joi'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async function (server) { +const register = async function (server) { const adminRoutes = [ { method: 'POST', @@ -458,4 +458,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'certification-centers-api'; +const name = 'certification-centers-api'; +export { register, name }; diff --git a/api/lib/application/certification-courses/certification-course-controller.js b/api/lib/application/certification-courses/certification-course-controller.js index 562bb8fd975..815fc32b544 100644 --- a/api/lib/application/certification-courses/certification-course-controller.js +++ b/api/lib/application/certification-courses/certification-course-controller.js @@ -1,107 +1,122 @@ -const certificationDetailsSerializer = require('../../infrastructure/serializers/jsonapi/certification-details-serializer.js'); -const certificationSerializer = require('../../infrastructure/serializers/jsonapi/certification-serializer.js'); -const juryCertificationSerializer = require('../../infrastructure/serializers/jsonapi/jury-certification-serializer.js'); -const certificationCourseSerializer = require('../../infrastructure/serializers/jsonapi/certification-course-serializer.js'); -const certifiedProfileRepository = require('../../infrastructure/repositories/certified-profile-repository.js'); -const certifiedProfileSerializer = require('../../infrastructure/serializers/jsonapi/certified-profile-serializer.js'); -const usecases = require('../../domain/usecases/index.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); - -const AssessmentResult = require('../../domain/models/AssessmentResult.js'); -const CompetenceMark = require('../../domain/models/CompetenceMark.js'); -const assessmentResultService = require('../../domain/services/assessment-result-service.js'); - -const { extractLocaleFromRequest } = require('../../infrastructure/utils/request-response-utils.js'); - -module.exports = { - async getCertificationDetails(request, h, dependencies = { certificationDetailsSerializer }) { - const certificationCourseId = request.params.id; - const certificationDetails = await usecases.getCertificationDetails({ certificationCourseId }); - - return dependencies.certificationDetailsSerializer.serialize(certificationDetails); - }, - - async getJuryCertification(request, h, dependencies = { juryCertificationSerializer }) { - const certificationCourseId = request.params.id; - const juryCertification = await usecases.getJuryCertification({ certificationCourseId }); - return dependencies.juryCertificationSerializer.serialize(juryCertification); - }, - - async update(request, h, dependencies = { certificationSerializer }) { - const certificationCourseId = request.params.id; - const userId = request.auth.credentials.userId; - const command = await dependencies.certificationSerializer.deserializeCertificationCandidateModificationCommand( - request.payload, - certificationCourseId, - userId - ); - await usecases.correctCandidateIdentityInCertificationCourse({ command }); - const updatedCertificationCourse = await usecases.getCertificationCourse({ - certificationCourseId: command.certificationCourseId, - }); - return dependencies.certificationSerializer.serializeFromCertificationCourse(updatedCertificationCourse); - }, - - async save(request, h, dependencies = { extractLocaleFromRequest, certificationCourseSerializer }) { - const userId = request.auth.credentials.userId; - const accessCode = request.payload.data.attributes['access-code']; - const sessionId = request.payload.data.attributes['session-id']; - const locale = dependencies.extractLocaleFromRequest(request); - - const { created, certificationCourse } = await DomainTransaction.execute((domainTransaction) => { - return usecases.retrieveLastOrCreateCertificationCourse({ - domainTransaction, - sessionId, - accessCode, - userId, - locale, - }); - }); +import * as certificationDetailsSerializer from '../../infrastructure/serializers/jsonapi/certification-details-serializer.js'; +import * as certificationSerializer from '../../infrastructure/serializers/jsonapi/certification-serializer.js'; +import * as juryCertificationSerializer from '../../infrastructure/serializers/jsonapi/jury-certification-serializer.js'; +import * as certificationCourseSerializer from '../../infrastructure/serializers/jsonapi/certification-course-serializer.js'; +import * as certifiedProfileRepository from '../../infrastructure/repositories/certified-profile-repository.js'; +import * as certifiedProfileSerializer from '../../infrastructure/serializers/jsonapi/certified-profile-serializer.js'; +import { usecases } from '../../domain/usecases/index.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; +import { AssessmentResult } from '../../domain/models/AssessmentResult.js'; +import { CompetenceMark } from '../../domain/models/CompetenceMark.js'; +import * as assessmentResultService from '../../domain/services/assessment-result-service.js'; + +import { extractLocaleFromRequest } from '../../infrastructure/utils/request-response-utils.js'; + +const getCertificationDetails = async function (request, h, dependencies = { certificationDetailsSerializer }) { + const certificationCourseId = request.params.id; + const certificationDetails = await usecases.getCertificationDetails({ certificationCourseId }); + + return dependencies.certificationDetailsSerializer.serialize(certificationDetails); +}; - const serialized = await dependencies.certificationCourseSerializer.serialize(certificationCourse); - - return created ? h.response(serialized).created() : serialized; - }, - - async get(request, h, dependencies = { certificationCourseSerializer }) { - const certificationCourseId = request.params.id; - const certificationCourse = await usecases.getCertificationCourse({ certificationCourseId }); - return dependencies.certificationCourseSerializer.serialize(certificationCourse); - }, - - async getCertifiedProfile(request, h, dependencies = { certifiedProfileRepository, certifiedProfileSerializer }) { - const certificationCourseId = request.params.id; - const certifiedProfile = await dependencies.certifiedProfileRepository.get(certificationCourseId); - return dependencies.certifiedProfileSerializer.serialize(certifiedProfile); - }, - - async cancel(request, h) { - const certificationCourseId = request.params.id; - await usecases.cancelCertificationCourse({ certificationCourseId }); - return h.response().code(200); - }, - - async uncancel(request, h) { - const certificationCourseId = request.params.id; - await usecases.uncancelCertificationCourse({ certificationCourseId }); - return h.response().code(200); - }, - - async saveAssessmentResult(request, h, dependencies = { assessmentResultService }) { - const jsonResult = request.payload.data.attributes; - const certificationCourseId = request.params.id; - const { assessmentResult, competenceMarks } = _deserializeResultsAdd(jsonResult); - const juryId = request.auth.credentials.userId; - // FIXME (re)calculate partner certifications which may be invalidated/validated - await dependencies.assessmentResultService.save({ - certificationCourseId, - assessmentResult: { ...assessmentResult, juryId }, - competenceMarks, +const getJuryCertification = async function (request, h, dependencies = { juryCertificationSerializer }) { + const certificationCourseId = request.params.id; + const juryCertification = await usecases.getJuryCertification({ certificationCourseId }); + return dependencies.juryCertificationSerializer.serialize(juryCertification); +}; + +const update = async function (request, h, dependencies = { certificationSerializer }) { + const certificationCourseId = request.params.id; + const userId = request.auth.credentials.userId; + const command = await dependencies.certificationSerializer.deserializeCertificationCandidateModificationCommand( + request.payload, + certificationCourseId, + userId + ); + await usecases.correctCandidateIdentityInCertificationCourse({ command }); + const updatedCertificationCourse = await usecases.getCertificationCourse({ + certificationCourseId: command.certificationCourseId, + }); + return dependencies.certificationSerializer.serializeFromCertificationCourse(updatedCertificationCourse); +}; + +const save = async function (request, h, dependencies = { extractLocaleFromRequest, certificationCourseSerializer }) { + const userId = request.auth.credentials.userId; + const accessCode = request.payload.data.attributes['access-code']; + const sessionId = request.payload.data.attributes['session-id']; + const locale = dependencies.extractLocaleFromRequest(request); + + const { created, certificationCourse } = await DomainTransaction.execute((domainTransaction) => { + return usecases.retrieveLastOrCreateCertificationCourse({ + domainTransaction, + sessionId, + accessCode, + userId, + locale, }); - return null; - }, + }); + + const serialized = await dependencies.certificationCourseSerializer.serialize(certificationCourse); + + return created ? h.response(serialized).created() : serialized; +}; + +const get = async function (request, h, dependencies = { certificationCourseSerializer }) { + const certificationCourseId = request.params.id; + const certificationCourse = await usecases.getCertificationCourse({ certificationCourseId }); + return dependencies.certificationCourseSerializer.serialize(certificationCourse); }; +const getCertifiedProfile = async function ( + request, + h, + dependencies = { certifiedProfileRepository, certifiedProfileSerializer } +) { + const certificationCourseId = request.params.id; + const certifiedProfile = await dependencies.certifiedProfileRepository.get(certificationCourseId); + return dependencies.certifiedProfileSerializer.serialize(certifiedProfile); +}; + +const cancel = async function (request, h) { + const certificationCourseId = request.params.id; + await usecases.cancelCertificationCourse({ certificationCourseId }); + return h.response().code(200); +}; + +const uncancel = async function (request, h) { + const certificationCourseId = request.params.id; + await usecases.uncancelCertificationCourse({ certificationCourseId }); + return h.response().code(200); +}; + +const saveAssessmentResult = async function (request, h, dependencies = { assessmentResultService }) { + const jsonResult = request.payload.data.attributes; + const certificationCourseId = request.params.id; + const { assessmentResult, competenceMarks } = _deserializeResultsAdd(jsonResult); + const juryId = request.auth.credentials.userId; + // FIXME (re)calculate partner certifications which may be invalidated/validated + await dependencies.assessmentResultService.save({ + certificationCourseId, + assessmentResult: { ...assessmentResult, juryId }, + competenceMarks, + }); + return null; +}; + +const certificationCourseController = { + getCertificationDetails, + getJuryCertification, + update, + save, + get, + getCertifiedProfile, + cancel, + uncancel, + saveAssessmentResult, +}; + +export { certificationCourseController }; + // TODO: Should be removed and replaced by a real serializer function _deserializeResultsAdd(json) { const assessmentResult = new AssessmentResult({ diff --git a/api/lib/application/certification-courses/index.js b/api/lib/application/certification-courses/index.js index 7d104c45c08..13971eb79ee 100644 --- a/api/lib/application/certification-courses/index.js +++ b/api/lib/application/certification-courses/index.js @@ -1,11 +1,10 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const securityPreHandlers = require('../security-pre-handlers.js'); -const certificationCourseController = require('./certification-course-controller.js'); +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { certificationCourseController } from './certification-course-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -const identifiersType = require('../../domain/types/identifiers-type.js'); - -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'GET', @@ -225,4 +224,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'certification-courses-api'; +const name = 'certification-courses-api'; +export { register, name }; diff --git a/api/lib/application/certification-issue-reports/certification-issue-report-controller.js b/api/lib/application/certification-issue-reports/certification-issue-report-controller.js index cf5ce09e6f4..a89453bc8ed 100644 --- a/api/lib/application/certification-issue-reports/certification-issue-report-controller.js +++ b/api/lib/application/certification-issue-reports/certification-issue-report-controller.js @@ -1,21 +1,23 @@ -const usecases = require('../../domain/usecases/index.js'); +import { usecases } from '../../domain/usecases/index.js'; -module.exports = { - async deleteCertificationIssueReport(request) { - const certificationIssueReportId = request.params.id; - await usecases.deleteCertificationIssueReport({ certificationIssueReportId }); +const deleteCertificationIssueReport = async function (request) { + const certificationIssueReportId = request.params.id; + await usecases.deleteCertificationIssueReport({ certificationIssueReportId }); - return null; - }, + return null; +}; - async manuallyResolve(request, h) { - const certificationIssueReportId = request.params.id; - const resolution = request.payload.data.resolution; - await usecases.manuallyResolveCertificationIssueReport({ - certificationIssueReportId, - resolution, - }); +const manuallyResolve = async function (request, h) { + const certificationIssueReportId = request.params.id; + const resolution = request.payload.data.resolution; + await usecases.manuallyResolveCertificationIssueReport({ + certificationIssueReportId, + resolution, + }); - return h.response().code(204); - }, + return h.response().code(204); }; + +const certificationIssueReportController = { deleteCertificationIssueReport, manuallyResolve }; + +export { certificationIssueReportController }; diff --git a/api/lib/application/certification-issue-reports/index.js b/api/lib/application/certification-issue-reports/index.js index e74ae48eb50..a9104e68df6 100644 --- a/api/lib/application/certification-issue-reports/index.js +++ b/api/lib/application/certification-issue-reports/index.js @@ -1,9 +1,9 @@ -const Joi = require('joi'); -const certificationIssueReportController = require('./certification-issue-report-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); +import Joi from 'joi'; +import { certificationIssueReportController } from './certification-issue-report-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'DELETE', @@ -72,4 +72,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'certification-issue-reports-api'; +const name = 'certification-issue-reports-api'; +export { register, name }; diff --git a/api/lib/application/certification-livret-scolaire/certification-controller.js b/api/lib/application/certification-livret-scolaire/certification-controller.js index e9a450b13e7..911c6260172 100644 --- a/api/lib/application/certification-livret-scolaire/certification-controller.js +++ b/api/lib/application/certification-livret-scolaire/certification-controller.js @@ -1,10 +1,12 @@ -const { getCertificationsResultsForLS } = require('../../domain/usecases/index.js'); -const certificationsResultsForLsSerializer = require('../../infrastructure/serializers/jsonapi/certifications-livret-scolaire/certification-ls-serializer.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as certificationsResultsForLsSerializer from '../../infrastructure/serializers/jsonapi/certifications-livret-scolaire/certification-ls-serializer.js'; -module.exports = { - async getCertificationsByOrganizationUAI(request) { - const uai = request.params.uai; - const certifications = await getCertificationsResultsForLS({ uai }); - return certificationsResultsForLsSerializer.serialize(certifications); - }, +const getCertificationsByOrganizationUAI = async function (request) { + const uai = request.params.uai; + const certifications = await usecases.getCertificationsResultsForLS({ uai }); + return certificationsResultsForLsSerializer.serialize(certifications); }; + +const certificationController = { getCertificationsByOrganizationUAI }; + +export { certificationController }; diff --git a/api/lib/application/certification-livret-scolaire/index.js b/api/lib/application/certification-livret-scolaire/index.js index 7be10826b9c..0a6fdd09b37 100644 --- a/api/lib/application/certification-livret-scolaire/index.js +++ b/api/lib/application/certification-livret-scolaire/index.js @@ -1,10 +1,10 @@ -const certificationController = require('./certification-controller.js'); -const Joi = require('joi'); +import { certificationController } from './certification-controller.js'; +import Joi from 'joi'; -const responseErrorObjectDoc = require('../../infrastructure/open-api-doc/livret-scolaire/response-object-error-doc.js'); -const certificationsResultsResponseDoc = require('../../infrastructure/open-api-doc/livret-scolaire/certifications-results-doc.js'); +import { responseObjectErrorDoc } from '../../infrastructure/open-api-doc/livret-scolaire/response-object-error-doc.js'; +import { certificationsResultsDoc } from '../../infrastructure/open-api-doc/livret-scolaire/certifications-results-doc.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'GET', @@ -19,9 +19,9 @@ exports.register = async function (server) { response: { failAction: 'log', status: { - 200: certificationsResultsResponseDoc, - 204: certificationsResultsResponseDoc, - 403: responseErrorObjectDoc, + 200: certificationsResultsDoc, + 204: certificationsResultsDoc, + 403: responseObjectErrorDoc, }, }, validate: { @@ -42,4 +42,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'certifications-lsu-lsl-api'; +const name = 'certifications-lsu-lsl-api'; +export { register, name }; diff --git a/api/lib/application/certification-point-of-contacts/certification-point-of-contact-controller.js b/api/lib/application/certification-point-of-contacts/certification-point-of-contact-controller.js index 11ec752c06f..ee1d55e09ff 100644 --- a/api/lib/application/certification-point-of-contacts/certification-point-of-contact-controller.js +++ b/api/lib/application/certification-point-of-contacts/certification-point-of-contact-controller.js @@ -1,10 +1,11 @@ -const certificationPointOfContactSerializer = require('../../infrastructure/serializers/jsonapi/certification-point-of-contact-serializer.js'); -const usecases = require('../../domain/usecases/index.js'); +import * as certificationPointOfContactSerializer from '../../infrastructure/serializers/jsonapi/certification-point-of-contact-serializer.js'; +import { usecases } from '../../domain/usecases/index.js'; -module.exports = { - async get(request) { - const authenticatedUserId = request.auth.credentials.userId; - const certificationPointOfContact = await usecases.getCertificationPointOfContact({ userId: authenticatedUserId }); - return certificationPointOfContactSerializer.serialize(certificationPointOfContact); - }, +const get = async function (request) { + const authenticatedUserId = request.auth.credentials.userId; + const certificationPointOfContact = await usecases.getCertificationPointOfContact({ userId: authenticatedUserId }); + return certificationPointOfContactSerializer.serialize(certificationPointOfContact); }; + +const certificationPointOfContactController = { get }; +export { certificationPointOfContactController }; diff --git a/api/lib/application/certification-point-of-contacts/index.js b/api/lib/application/certification-point-of-contacts/index.js index ba70f89f8f0..39ef19851e9 100644 --- a/api/lib/application/certification-point-of-contacts/index.js +++ b/api/lib/application/certification-point-of-contacts/index.js @@ -1,6 +1,6 @@ -const certificationPointOfContactController = require('./certification-point-of-contact-controller.js'); +import { certificationPointOfContactController } from './certification-point-of-contact-controller.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'GET', @@ -17,4 +17,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'certification-point-of-contacts-api'; +const name = 'certification-point-of-contacts-api'; +export { register, name }; diff --git a/api/lib/application/certification-reports/certification-report-controller.js b/api/lib/application/certification-reports/certification-report-controller.js index c6a7b128d3b..fdef4ea6958 100644 --- a/api/lib/application/certification-reports/certification-report-controller.js +++ b/api/lib/application/certification-reports/certification-report-controller.js @@ -1,18 +1,20 @@ -const usecases = require('../../domain/usecases/index.js'); -const certificationIssueReportSerializer = require('../../infrastructure/serializers/jsonapi/certification-issue-report-serializer.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as certificationIssueReportSerializer from '../../infrastructure/serializers/jsonapi/certification-issue-report-serializer.js'; -module.exports = { - async saveCertificationIssueReport(request, h) { - const certificationIssueReportDTO = certificationIssueReportSerializer.deserialize(request); - const certificationIssueReportSaved = await usecases.saveCertificationIssueReport({ certificationIssueReportDTO }); +const saveCertificationIssueReport = async function (request, h) { + const certificationIssueReportDTO = certificationIssueReportSerializer.deserialize(request); + const certificationIssueReportSaved = await usecases.saveCertificationIssueReport({ certificationIssueReportDTO }); - return h.response(certificationIssueReportSerializer.serialize(certificationIssueReportSaved)).created(); - }, + return h.response(certificationIssueReportSerializer.serialize(certificationIssueReportSaved)).created(); +}; - async abort(request, h) { - const certificationCourseId = request.params.id; - const abortReason = request.payload.data.reason; - await usecases.abortCertificationCourse({ certificationCourseId, abortReason }); - return h.response().code(200); - }, +const abort = async function (request, h) { + const certificationCourseId = request.params.id; + const abortReason = request.payload.data.reason; + await usecases.abortCertificationCourse({ certificationCourseId, abortReason }); + return h.response().code(200); }; + +const certificationReportController = { saveCertificationIssueReport, abort }; + +export { certificationReportController }; diff --git a/api/lib/application/certification-reports/index.js b/api/lib/application/certification-reports/index.js index 221f8762f86..d1cd520ecef 100644 --- a/api/lib/application/certification-reports/index.js +++ b/api/lib/application/certification-reports/index.js @@ -1,10 +1,10 @@ -const Joi = require('joi'); -const certificationReportController = require('./certification-report-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const authorization = require('../preHandlers/authorization.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); +import Joi from 'joi'; +import { certificationReportController } from './certification-report-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import { authorization } from '../preHandlers/authorization.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'POST', @@ -59,4 +59,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'certification-reports-api'; +const name = 'certification-reports-api'; +export { register, name }; diff --git a/api/lib/application/certifications/certification-controller.js b/api/lib/application/certifications/certification-controller.js index 6714add21f6..0311bb8ced7 100644 --- a/api/lib/application/certifications/certification-controller.js +++ b/api/lib/application/certifications/certification-controller.js @@ -1,85 +1,94 @@ -const usecases = require('../../domain/usecases/index.js'); -const events = require('../../domain/events/index.js'); -const privateCertificateSerializer = require('../../infrastructure/serializers/jsonapi/private-certificate-serializer.js'); -const shareableCertificateSerializer = require('../../infrastructure/serializers/jsonapi/shareable-certificate-serializer.js'); -const certificationAttestationPdf = require('../../infrastructure/utils/pdf/certification-attestation-pdf.js'); -const requestResponseUtils = require('../../infrastructure/utils/request-response-utils.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as events from '../../domain/events/index.js'; +import * as privateCertificateSerializer from '../../infrastructure/serializers/jsonapi/private-certificate-serializer.js'; +import * as shareableCertificateSerializer from '../../infrastructure/serializers/jsonapi/shareable-certificate-serializer.js'; +import * as certificationAttestationPdf from '../../infrastructure/utils/pdf/certification-attestation-pdf.js'; +import * as requestResponseUtils from '../../infrastructure/utils/request-response-utils.js'; -const moment = require('moment'); +import moment from 'moment'; -module.exports = { - async findUserCertifications(request) { - const userId = request.auth.credentials.userId; +const findUserCertifications = async function (request) { + const userId = request.auth.credentials.userId; - const privateCertificates = await usecases.findUserPrivateCertificates({ userId }); - return privateCertificateSerializer.serialize(privateCertificates); - }, + const privateCertificates = await usecases.findUserPrivateCertificates({ userId }); + return privateCertificateSerializer.serialize(privateCertificates); +}; + +const getCertification = async function (request, h, dependencies = { requestResponseUtils }) { + const userId = request.auth.credentials.userId; + const certificationId = request.params.id; + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - async getCertification(request, h, dependencies = { requestResponseUtils }) { - const userId = request.auth.credentials.userId; - const certificationId = request.params.id; - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + const privateCertificate = await usecases.getPrivateCertificate({ + userId, + certificationId, + locale, + }); + return privateCertificateSerializer.serialize(privateCertificate); +}; - const privateCertificate = await usecases.getPrivateCertificate({ - userId, - certificationId, - locale, - }); - return privateCertificateSerializer.serialize(privateCertificate); - }, +const getCertificationByVerificationCode = async function (request, h, dependencies = { requestResponseUtils }) { + const verificationCode = request.payload.verificationCode; + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - async getCertificationByVerificationCode(request, h, dependencies = { requestResponseUtils }) { - const verificationCode = request.payload.verificationCode; - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + const shareableCertificate = await usecases.getShareableCertificate({ verificationCode, locale }); + return shareableCertificateSerializer.serialize(shareableCertificate); +}; - const shareableCertificate = await usecases.getShareableCertificate({ verificationCode, locale }); - return shareableCertificateSerializer.serialize(shareableCertificate); - }, +const getPDFAttestation = async function (request, h, dependencies = { certificationAttestationPdf }) { + const userId = request.auth.credentials.userId; + const certificationId = request.params.id; + const isFrenchDomainExtension = request.query.isFrenchDomainExtension; + const attestation = await usecases.getCertificationAttestation({ + userId, + certificationId, + }); - async getPDFAttestation(request, h, dependencies = { certificationAttestationPdf }) { - const userId = request.auth.credentials.userId; - const certificationId = request.params.id; - const isFrenchDomainExtension = request.query.isFrenchDomainExtension; - const attestation = await usecases.getCertificationAttestation({ - userId, - certificationId, - }); + const { buffer } = await dependencies.certificationAttestationPdf.getCertificationAttestationsPdfBuffer({ + certificates: [attestation], + isFrenchDomainExtension, + }); - const { buffer } = await dependencies.certificationAttestationPdf.getCertificationAttestationsPdfBuffer({ - certificates: [attestation], - isFrenchDomainExtension, - }); + const fileName = `attestation-pix-${moment(attestation.deliveredAt).format('YYYYMMDD')}.pdf`; + return h + .response(buffer) + .header('Content-Disposition', `attachment; filename=${fileName}`) + .header('Content-Type', 'application/pdf'); +}; - const fileName = `attestation-pix-${moment(attestation.deliveredAt).format('YYYYMMDD')}.pdf`; - return h - .response(buffer) - .header('Content-Disposition', `attachment; filename=${fileName}`) - .header('Content-Type', 'application/pdf'); - }, +const neutralizeChallenge = async function (request, h, dependencies = { events }) { + const challengeRecId = request.payload.data.attributes.challengeRecId; + const certificationCourseId = request.payload.data.attributes.certificationCourseId; + const juryId = request.auth.credentials.userId; + const event = await usecases.neutralizeChallenge({ + challengeRecId, + certificationCourseId, + juryId, + }); + await dependencies.events.eventDispatcher.dispatch(event); + return h.response().code(204); +}; - async neutralizeChallenge(request, h, dependencies = { events }) { - const challengeRecId = request.payload.data.attributes.challengeRecId; - const certificationCourseId = request.payload.data.attributes.certificationCourseId; - const juryId = request.auth.credentials.userId; - const event = await usecases.neutralizeChallenge({ - challengeRecId, - certificationCourseId, - juryId, - }); - await dependencies.events.eventDispatcher.dispatch(event); - return h.response().code(204); - }, +const deneutralizeChallenge = async function (request, h, dependencies = { events }) { + const challengeRecId = request.payload.data.attributes.challengeRecId; + const certificationCourseId = request.payload.data.attributes.certificationCourseId; + const juryId = request.auth.credentials.userId; + const event = await usecases.deneutralizeChallenge({ + challengeRecId, + certificationCourseId, + juryId, + }); + await dependencies.events.eventDispatcher.dispatch(event); + return h.response().code(204); +}; - async deneutralizeChallenge(request, h, dependencies = { events }) { - const challengeRecId = request.payload.data.attributes.challengeRecId; - const certificationCourseId = request.payload.data.attributes.certificationCourseId; - const juryId = request.auth.credentials.userId; - const event = await usecases.deneutralizeChallenge({ - challengeRecId, - certificationCourseId, - juryId, - }); - await dependencies.events.eventDispatcher.dispatch(event); - return h.response().code(204); - }, +const certificationController = { + findUserCertifications, + getCertification, + getCertificationByVerificationCode, + getPDFAttestation, + neutralizeChallenge, + deneutralizeChallenge, }; + +export { certificationController }; diff --git a/api/lib/application/certifications/index.js b/api/lib/application/certifications/index.js index fc057293bcf..fb2670cdde6 100644 --- a/api/lib/application/certifications/index.js +++ b/api/lib/application/certifications/index.js @@ -1,10 +1,10 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const certificationController = require('./certification-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); +import { certificationController } from './certification-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'GET', @@ -137,4 +137,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'certifications-api'; +const name = 'certifications-api'; +export { register, name }; diff --git a/api/lib/application/challenges/challenge-controller.js b/api/lib/application/challenges/challenge-controller.js index fda0c1831b1..134af81cefa 100644 --- a/api/lib/application/challenges/challenge-controller.js +++ b/api/lib/application/challenges/challenge-controller.js @@ -1,9 +1,11 @@ -const challengeRepository = require('../../infrastructure/repositories/challenge-repository.js'); -const challengeSerializer = require('../../infrastructure/serializers/jsonapi/challenge-serializer.js'); +import * as challengeRepository from '../../infrastructure/repositories/challenge-repository.js'; +import * as challengeSerializer from '../../infrastructure/serializers/jsonapi/challenge-serializer.js'; -module.exports = { - async get(request, h, dependencies = { challengeRepository, challengeSerializer }) { - const challenge = await dependencies.challengeRepository.get(request.params.id); - return dependencies.challengeSerializer.serialize(challenge); - }, +const get = async function (request, h, dependencies = { challengeRepository, challengeSerializer }) { + const challenge = await dependencies.challengeRepository.get(request.params.id); + return dependencies.challengeSerializer.serialize(challenge); }; + +const challengeController = { get }; + +export { challengeController }; diff --git a/api/lib/application/challenges/index.js b/api/lib/application/challenges/index.js index ed4e68c5f0f..09fdf79a7a0 100644 --- a/api/lib/application/challenges/index.js +++ b/api/lib/application/challenges/index.js @@ -1,10 +1,10 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const challengeController = require('./challenge-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const securityPreHandlers = require('../security-pre-handlers'); +import { challengeController } from './challenge-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'GET', @@ -38,4 +38,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'challenges-api'; +const name = 'challenges-api'; +export { register, name }; diff --git a/api/lib/application/competence-evaluations/competence-evaluation-controller.js b/api/lib/application/competence-evaluations/competence-evaluation-controller.js index 2067cb01ca4..07d4b9b59ce 100644 --- a/api/lib/application/competence-evaluations/competence-evaluation-controller.js +++ b/api/lib/application/competence-evaluations/competence-evaluation-controller.js @@ -1,35 +1,37 @@ -const usecases = require('../../domain/usecases/index.js'); -const competenceEvaluationSerializer = require('../../infrastructure/serializers/jsonapi/competence-evaluation-serializer.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as competenceEvaluationSerializer from '../../infrastructure/serializers/jsonapi/competence-evaluation-serializer.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; -module.exports = { - async startOrResume(request, h, dependencies = { competenceEvaluationSerializer }) { - const userId = request.auth.credentials.userId; - const competenceId = request.payload.competenceId; +const startOrResume = async function (request, h, dependencies = { competenceEvaluationSerializer }) { + const userId = request.auth.credentials.userId; + const competenceId = request.payload.competenceId; - const { competenceEvaluation, created } = await usecases.startOrResumeCompetenceEvaluation({ + const { competenceEvaluation, created } = await usecases.startOrResumeCompetenceEvaluation({ + competenceId, + userId, + }); + const serializedCompetenceEvaluation = dependencies.competenceEvaluationSerializer.serialize(competenceEvaluation); + + return created ? h.response(serializedCompetenceEvaluation).created() : serializedCompetenceEvaluation; +}; + +const improve = async function (request, h, dependencies = { competenceEvaluationSerializer }) { + const userId = request.auth.credentials.userId; + const competenceId = request.payload.competenceId; + + const competenceEvaluation = await DomainTransaction.execute(async (domainTransaction) => { + const competenceEvaluation = await usecases.improveCompetenceEvaluation({ competenceId, userId, + domainTransaction, }); - const serializedCompetenceEvaluation = dependencies.competenceEvaluationSerializer.serialize(competenceEvaluation); - - return created ? h.response(serializedCompetenceEvaluation).created() : serializedCompetenceEvaluation; - }, - - async improve(request, h, dependencies = { competenceEvaluationSerializer }) { - const userId = request.auth.credentials.userId; - const competenceId = request.payload.competenceId; - - const competenceEvaluation = await DomainTransaction.execute(async (domainTransaction) => { - const competenceEvaluation = await usecases.improveCompetenceEvaluation({ - competenceId, - userId, - domainTransaction, - }); - return competenceEvaluation; - }); + return competenceEvaluation; + }); - const serializedCompetenceEvaluation = dependencies.competenceEvaluationSerializer.serialize(competenceEvaluation); - return h.response(serializedCompetenceEvaluation); - }, + const serializedCompetenceEvaluation = dependencies.competenceEvaluationSerializer.serialize(competenceEvaluation); + return h.response(serializedCompetenceEvaluation); }; + +const competenceEvaluationController = { startOrResume, improve }; + +export { competenceEvaluationController }; diff --git a/api/lib/application/competence-evaluations/index.js b/api/lib/application/competence-evaluations/index.js index 11b7418151b..61e4c228a11 100644 --- a/api/lib/application/competence-evaluations/index.js +++ b/api/lib/application/competence-evaluations/index.js @@ -1,6 +1,6 @@ -const competenceEvaluationController = require('./competence-evaluation-controller.js'); +import { competenceEvaluationController } from './competence-evaluation-controller.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'POST', @@ -30,4 +30,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'competence-evaluations-api'; +const name = 'competence-evaluations-api'; +export { register, name }; diff --git a/api/lib/application/complementary-certification-course-results/complementary-certification-course-results-controller.js b/api/lib/application/complementary-certification-course-results/complementary-certification-course-results-controller.js index 041f111372e..214ac464050 100644 --- a/api/lib/application/complementary-certification-course-results/complementary-certification-course-results-controller.js +++ b/api/lib/application/complementary-certification-course-results/complementary-certification-course-results-controller.js @@ -1,13 +1,14 @@ -const usecases = require('../../domain/usecases/index.js'); +import { usecases } from '../../domain/usecases/index.js'; -module.exports = { - async saveJuryComplementaryCertificationCourseResult(request, h) { - const { complementaryCertificationCourseId, juryLevel } = request.payload.data.attributes; +const saveJuryComplementaryCertificationCourseResult = async function (request, h) { + const { complementaryCertificationCourseId, juryLevel } = request.payload.data.attributes; - await usecases.saveJuryComplementaryCertificationCourseResult({ - complementaryCertificationCourseId, - juryLevel, - }); - return h.response().code(200); - }, + await usecases.saveJuryComplementaryCertificationCourseResult({ + complementaryCertificationCourseId, + juryLevel, + }); + return h.response().code(200); }; + +const complementaryCertificationCourseResultsController = { saveJuryComplementaryCertificationCourseResult }; +export { complementaryCertificationCourseResultsController }; diff --git a/api/lib/application/complementary-certification-course-results/index.js b/api/lib/application/complementary-certification-course-results/index.js index ef6f65ac2b4..90a2a3d73b7 100644 --- a/api/lib/application/complementary-certification-course-results/index.js +++ b/api/lib/application/complementary-certification-course-results/index.js @@ -1,9 +1,9 @@ -const Joi = require('joi'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const complementaryCertificationCourseResultsController = require('./complementary-certification-course-results-controller.js'); +import Joi from 'joi'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { complementaryCertificationCourseResultsController } from './complementary-certification-course-results-controller.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'POST', @@ -41,4 +41,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'complementary-certification-course-results-api'; +const name = 'complementary-certification-course-results-api'; +export { register, name }; diff --git a/api/lib/application/complementary-certifications/complementary-certification-controller.js b/api/lib/application/complementary-certifications/complementary-certification-controller.js index b05f410b7ae..be6a822c1ef 100644 --- a/api/lib/application/complementary-certifications/complementary-certification-controller.js +++ b/api/lib/application/complementary-certifications/complementary-certification-controller.js @@ -1,9 +1,10 @@ -const usecases = require('../../domain/usecases/index.js'); -const complementaryCertificationSerializer = require('../../infrastructure/serializers/jsonapi/complementary-certification-serializer.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as complementaryCertificationSerializer from '../../infrastructure/serializers/jsonapi/complementary-certification-serializer.js'; -module.exports = { - async findComplementaryCertifications() { - const complementaryCertifications = await usecases.findComplementaryCertifications(); - return complementaryCertificationSerializer.serialize(complementaryCertifications); - }, +const findComplementaryCertifications = async function () { + const complementaryCertifications = await usecases.findComplementaryCertifications(); + return complementaryCertificationSerializer.serialize(complementaryCertifications); }; + +const complementaryCertificationController = { findComplementaryCertifications }; +export { complementaryCertificationController }; diff --git a/api/lib/application/complementary-certifications/index.js b/api/lib/application/complementary-certifications/index.js index c761c67d572..4a985ecff17 100644 --- a/api/lib/application/complementary-certifications/index.js +++ b/api/lib/application/complementary-certifications/index.js @@ -1,7 +1,7 @@ -const complementaryCertificationController = require('./complementary-certification-controller.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); +import { complementaryCertificationController } from './complementary-certification-controller.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'GET', @@ -30,4 +30,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'complementary-certifications-api'; +const name = 'complementary-certifications-api'; +export { register, name }; diff --git a/api/lib/application/countries/country-controller.js b/api/lib/application/countries/country-controller.js index 2426de38548..d17fbe0fd46 100644 --- a/api/lib/application/countries/country-controller.js +++ b/api/lib/application/countries/country-controller.js @@ -1,9 +1,10 @@ -const usecases = require('../../domain/usecases/index.js'); -const countrySerializer = require('../../infrastructure/serializers/jsonapi/country-serializer.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as countrySerializer from '../../infrastructure/serializers/jsonapi/country-serializer.js'; -module.exports = { - async findCountries(_request, _h, dependencies = { countrySerializer }) { - const countries = await usecases.findCountries(); - return dependencies.countrySerializer.serialize(countries); - }, +const findCountries = async function (_request, _h, dependencies = { countrySerializer }) { + const countries = await usecases.findCountries(); + return dependencies.countrySerializer.serialize(countries); }; + +const countryController = { findCountries }; +export { countryController }; diff --git a/api/lib/application/countries/index.js b/api/lib/application/countries/index.js index d8c8a8993b5..ddf137dd187 100644 --- a/api/lib/application/countries/index.js +++ b/api/lib/application/countries/index.js @@ -1,6 +1,6 @@ -const countryController = require('./country-controller.js'); +import { countryController } from './country-controller.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'GET', @@ -17,4 +17,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'certification-cpf-countries'; +const name = 'certification-cpf-countries'; +export { register, name }; diff --git a/api/lib/application/courses/course-controller.js b/api/lib/application/courses/course-controller.js index afeaa43d74f..d7e1c80276c 100644 --- a/api/lib/application/courses/course-controller.js +++ b/api/lib/application/courses/course-controller.js @@ -1,12 +1,14 @@ -const courseSerializer = require('../../infrastructure/serializers/jsonapi/course-serializer.js'); -const courseService = require('../../../lib/domain/services/course-service.js'); -const { extractUserIdFromRequest } = require('../../infrastructure/utils/request-response-utils.js'); +import * as courseSerializer from '../../infrastructure/serializers/jsonapi/course-serializer.js'; +import * as courseService from '../../../lib/domain/services/course-service.js'; +import { extractUserIdFromRequest } from '../../infrastructure/utils/request-response-utils.js'; -module.exports = { - get(request, h, dependencies = { courseService, courseSerializer }) { - const courseId = request.params.id; - const userId = extractUserIdFromRequest(request); +const get = function (request, h, dependencies = { courseService, courseSerializer }) { + const courseId = request.params.id; + const userId = extractUserIdFromRequest(request); - return dependencies.courseService.getCourse({ courseId, userId }).then(dependencies.courseSerializer.serialize); - }, + return dependencies.courseService.getCourse({ courseId, userId }).then(dependencies.courseSerializer.serialize); }; + +const courseController = { get }; + +export { courseController }; diff --git a/api/lib/application/courses/index.js b/api/lib/application/courses/index.js index aa2f7436dc9..0788373361f 100644 --- a/api/lib/application/courses/index.js +++ b/api/lib/application/courses/index.js @@ -1,9 +1,9 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const courseController = require('./course-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { courseController } from './course-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'GET', @@ -22,4 +22,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'courses-api'; +const name = 'courses-api'; +export { register, name }; diff --git a/api/lib/application/error-manager.js b/api/lib/application/error-manager.js index c4df38a4bda..09646df5866 100644 --- a/api/lib/application/error-manager.js +++ b/api/lib/application/error-manager.js @@ -1,15 +1,19 @@ -const _ = require('lodash'); -const JSONAPIError = require('jsonapi-serializer').Error; -const { HttpErrors } = require('./http-errors.js'); -const DomainErrors = require('../domain/errors.js'); -const errorSerializer = require('../infrastructure/serializers/jsonapi/error-serializer.js'); -const { extractLocaleFromRequest } = require('../infrastructure/utils/request-response-utils.js'); -const translations = require('../../translations/index.js'); +import _ from 'lodash'; +import jsonapiSerializer from 'jsonapi-serializer'; +const { Error: JSONAPIError } = jsonapiSerializer; + +import { HttpErrors } from './http-errors.js'; +import * as DomainErrors from '../domain/errors.js'; +import * as errorSerializer from '../infrastructure/serializers/jsonapi/error-serializer.js'; +import { extractLocaleFromRequest } from '../infrastructure/utils/request-response-utils.js'; +import * as translations from '../../translations/index.js'; const NOT_VALID_RELATIONSHIPS = ['externalId', 'participantExternalId']; function translateMessage(locale, key) { + // eslint-disable-next-line import/namespace if (translations[locale]['entity-validation-errors'][key]) { + // eslint-disable-next-line import/namespace return translations[locale]['entity-validation-errors'][key]; } return key; @@ -524,4 +528,4 @@ function handle(request, h, error) { return h.response(errorSerializer.serialize(httpError)).code(httpError.status); } -module.exports = { handle }; +export { handle }; diff --git a/api/lib/application/feature-toggles/feature-toggle-controller.js b/api/lib/application/feature-toggles/feature-toggle-controller.js index dcad6e7328b..a48b66c15f8 100644 --- a/api/lib/application/feature-toggles/feature-toggle-controller.js +++ b/api/lib/application/feature-toggles/feature-toggle-controller.js @@ -1,8 +1,10 @@ -const settings = require('../../config.js'); -const serializer = require('../../infrastructure/serializers/jsonapi/feature-toggle-serializer.js'); +import { config } from '../../config.js'; +import * as serializer from '../../infrastructure/serializers/jsonapi/feature-toggle-serializer.js'; -module.exports = { - getActiveFeatures() { - return serializer.serialize(settings.featureToggles); - }, +const getActiveFeatures = function () { + return serializer.serialize(config.featureToggles); }; + +const featureToggleController = { getActiveFeatures }; + +export { featureToggleController }; diff --git a/api/lib/application/feature-toggles/index.js b/api/lib/application/feature-toggles/index.js index 54a3d2f2bdc..859d65a2526 100644 --- a/api/lib/application/feature-toggles/index.js +++ b/api/lib/application/feature-toggles/index.js @@ -1,6 +1,6 @@ -const featureToggleController = require('./feature-toggle-controller.js'); +import { featureToggleController } from './feature-toggle-controller.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'GET', @@ -14,4 +14,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'feature-toggles-api'; +const name = 'feature-toggles-api'; +export { register, name }; diff --git a/api/lib/application/feedbacks/feedback-controller.js b/api/lib/application/feedbacks/feedback-controller.js index b2fd41e1067..b46df9783c2 100644 --- a/api/lib/application/feedbacks/feedback-controller.js +++ b/api/lib/application/feedbacks/feedback-controller.js @@ -1,18 +1,19 @@ -const { BadRequestError } = require('../http-errors.js'); -const _ = require('../../infrastructure/utils/lodash-utils.js'); -const serializer = require('../../infrastructure/serializers/jsonapi/feedback-serializer.js'); +import { BadRequestError } from '../http-errors.js'; +import { _ } from '../../infrastructure/utils/lodash-utils.js'; +import * as serializer from '../../infrastructure/serializers/jsonapi/feedback-serializer.js'; -module.exports = { - async save(request, h) { - const newUserAgent = request.headers['user-agent'].slice(0, 255); - const feedback = await serializer.deserialize(request.payload, newUserAgent); +const save = async function (request, h) { + const newUserAgent = request.headers['user-agent'].slice(0, 255); + const feedback = await serializer.deserialize(request.payload, newUserAgent); - if (_.isBlank(feedback.get('content'))) { - throw new BadRequestError('Feedback content must not be blank'); - } + if (_.isBlank(feedback.get('content'))) { + throw new BadRequestError('Feedback content must not be blank'); + } - const persistedFeedback = await feedback.save(); + const persistedFeedback = await feedback.save(); - return h.response(serializer.serialize(persistedFeedback.toJSON())).created(); - }, + return h.response(serializer.serialize(persistedFeedback.toJSON())).created(); }; + +const feedbackController = { save }; +export { feedbackController }; diff --git a/api/lib/application/feedbacks/index.js b/api/lib/application/feedbacks/index.js index 0796b9f8291..9c4e4cd200a 100644 --- a/api/lib/application/feedbacks/index.js +++ b/api/lib/application/feedbacks/index.js @@ -1,8 +1,8 @@ -const feedbackController = require('./feedback-controller.js'); -const Joi = require('joi'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { feedbackController } from './feedback-controller.js'; +import Joi from 'joi'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'POST', @@ -46,4 +46,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'feedbacks-api'; +const name = 'feedbacks-api'; +export { register, name }; diff --git a/api/lib/application/frameworks/frameworks-controller.js b/api/lib/application/frameworks/frameworks-controller.js index a4b450e896c..59518c4f596 100644 --- a/api/lib/application/frameworks/frameworks-controller.js +++ b/api/lib/application/frameworks/frameworks-controller.js @@ -1,37 +1,44 @@ -const usecases = require('../../domain/usecases/index.js'); -const frameworkAreasSerializer = require('../../infrastructure/serializers/jsonapi/framework-areas-serializer.js'); -const frameworkSerializer = require('../../infrastructure/serializers/jsonapi/framework-serializer.js'); -const { extractLocaleFromRequest } = require('../../infrastructure/utils/request-response-utils.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as frameworkAreasSerializer from '../../infrastructure/serializers/jsonapi/framework-areas-serializer.js'; +import * as frameworkSerializer from '../../infrastructure/serializers/jsonapi/framework-serializer.js'; +import { extractLocaleFromRequest } from '../../infrastructure/utils/request-response-utils.js'; -module.exports = { - async getFrameworks(request, h, dependencies = { frameworkSerializer }) { - const frameworks = await usecases.getFrameworks(); - return dependencies.frameworkSerializer.serialize(frameworks); - }, +const getFrameworks = async function (request, h, dependencies = { frameworkSerializer }) { + const frameworks = await usecases.getFrameworks(); + return dependencies.frameworkSerializer.serialize(frameworks); +}; + +const getFrameworkAreas = async function (request, h, dependencies = { frameworkAreasSerializer }) { + const frameworkId = request.params.id; + const framework = await usecases.getFrameworkAreas({ frameworkId }); + return dependencies.frameworkAreasSerializer.serialize(framework); +}; - async getFrameworkAreas(request, h, dependencies = { frameworkAreasSerializer }) { - const frameworkId = request.params.id; - const framework = await usecases.getFrameworkAreas({ frameworkId }); - return dependencies.frameworkAreasSerializer.serialize(framework); - }, +const getPixFrameworkAreasWithoutThematics = async function ( + request, + h, + dependencies = { extractLocaleFromRequest, frameworkAreasSerializer } +) { + const locale = dependencies.extractLocaleFromRequest(request); + const framework = await usecases.getFrameworkAreas({ frameworkName: 'Pix', locale }); + return dependencies.frameworkAreasSerializer.serialize(framework, { withoutThematics: true }); +}; - async getPixFrameworkAreasWithoutThematics( - request, - h, - dependencies = { extractLocaleFromRequest, frameworkAreasSerializer } - ) { - const locale = dependencies.extractLocaleFromRequest(request); - const framework = await usecases.getFrameworkAreas({ frameworkName: 'Pix', locale }); - return dependencies.frameworkAreasSerializer.serialize(framework, { withoutThematics: true }); - }, +const getFrameworksForTargetProfileSubmission = async function ( + request, + h, + dependencies = { extractLocaleFromRequest, frameworkSerializer } +) { + const locale = dependencies.extractLocaleFromRequest(request); + const learningContent = await usecases.getLearningContentForTargetProfileSubmission({ locale }); + return dependencies.frameworkSerializer.serializeDeepWithoutSkills(learningContent.frameworks); +}; - async getFrameworksForTargetProfileSubmission( - request, - h, - dependencies = { extractLocaleFromRequest, frameworkSerializer } - ) { - const locale = dependencies.extractLocaleFromRequest(request); - const learningContent = await usecases.getLearningContentForTargetProfileSubmission({ locale }); - return dependencies.frameworkSerializer.serializeDeepWithoutSkills(learningContent.frameworks); - }, +const frameworksController = { + getFrameworks, + getFrameworkAreas, + getPixFrameworkAreasWithoutThematics, + getFrameworksForTargetProfileSubmission, }; + +export { frameworksController }; diff --git a/api/lib/application/frameworks/index.js b/api/lib/application/frameworks/index.js index daddcffc580..782363810b0 100644 --- a/api/lib/application/frameworks/index.js +++ b/api/lib/application/frameworks/index.js @@ -1,9 +1,9 @@ -const Joi = require('joi'); -const frameworkController = require('./frameworks-controller.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import Joi from 'joi'; +import { frameworksController as frameworkController } from './frameworks-controller.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async function (server) { +const register = async function (server) { const adminRoutes = [ { method: 'GET', @@ -86,4 +86,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'frameworks-api'; +const name = 'frameworks-api'; +export { register, name }; diff --git a/api/lib/application/healthcheck/healthcheck-controller.js b/api/lib/application/healthcheck/healthcheck-controller.js index 7b3e443cb3d..97df680d963 100644 --- a/api/lib/application/healthcheck/healthcheck-controller.js +++ b/api/lib/application/healthcheck/healthcheck-controller.js @@ -1,39 +1,41 @@ -const Boom = require('@hapi/boom'); -const packageJSON = require('../../../package.json'); -const settings = require('../../config.js'); -const { redisMonitor } = require('../../infrastructure/utils/redis-monitor.js'); -const { knex } = require('../../../db/knex-database-connection.js'); +import Boom from '@hapi/boom'; +import packageJSON from '../../../package.json' assert { type: 'json' }; +import { config } from '../../config.js'; +import { redisMonitor } from '../../infrastructure/utils/redis-monitor.js'; +import { knex } from '../../../db/knex-database-connection.js'; -module.exports = { - get(request) { - return { - name: packageJSON.name, - version: packageJSON.version, - description: packageJSON.description, - environment: settings.environment, - // eslint-disable-next-line node/no-process-env - 'container-version': process.env.CONTAINER_VERSION, - // eslint-disable-next-line node/no-process-env - 'container-app-name': process.env.APP, - 'current-lang': request.i18n.__('current-lang'), - }; - }, +const get = function (request) { + return { + name: packageJSON.name, + version: packageJSON.version, + description: packageJSON.description, + environment: config.environment, + // eslint-disable-next-line node/no-process-env + 'container-version': process.env.CONTAINER_VERSION, + // eslint-disable-next-line node/no-process-env + 'container-app-name': process.env.APP, + 'current-lang': request.i18n.__('current-lang'), + }; +}; - async checkDbStatus() { - try { - await knex.raw('SELECT 1 FROM knex_migrations_lock'); - return { message: 'Connection to database ok' }; - } catch (err) { - throw Boom.serverUnavailable('Connection to database failed'); - } - }, +const checkDbStatus = async function () { + try { + await knex.raw('SELECT 1 FROM knex_migrations_lock'); + return { message: 'Connection to database ok' }; + } catch (err) { + throw Boom.serverUnavailable('Connection to database failed'); + } +}; - async checkRedisStatus() { - try { - await redisMonitor.ping(); - return { message: 'Connection to Redis ok' }; - } catch (err) { - throw Boom.serverUnavailable('Connection to Redis failed'); - } - }, +const checkRedisStatus = async function () { + try { + await redisMonitor.ping(); + return { message: 'Connection to Redis ok' }; + } catch (err) { + throw Boom.serverUnavailable('Connection to Redis failed'); + } }; + +const healthcheckController = { get, checkDbStatus, checkRedisStatus }; + +export { healthcheckController }; diff --git a/api/lib/application/healthcheck/index.js b/api/lib/application/healthcheck/index.js index 4842ebcd442..a7e7375e7a7 100644 --- a/api/lib/application/healthcheck/index.js +++ b/api/lib/application/healthcheck/index.js @@ -1,6 +1,6 @@ -const healthcheckController = require('./healthcheck-controller.js'); +import { healthcheckController } from './healthcheck-controller.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'GET', @@ -32,4 +32,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'healthcheck-api'; +const name = 'healthcheck-api'; +export { register, name }; diff --git a/api/lib/application/http-errors.js b/api/lib/application/http-errors.js index eb661a4f98e..8ff1cfafa4f 100644 --- a/api/lib/application/http-errors.js +++ b/api/lib/application/http-errors.js @@ -1,4 +1,6 @@ -const JSONAPIError = require('jsonapi-serializer').Error; +import jsonapiSerializer from 'jsonapi-serializer'; + +const { Error: JSONAPIError } = jsonapiSerializer; class BaseHttpError extends Error { constructor(message) { @@ -176,7 +178,7 @@ const HttpErrors = { TooManyRequestsError, }; -module.exports = { +export { HttpErrors, BadRequestError, BaseHttpError, diff --git a/api/lib/application/lcms/index.js b/api/lib/application/lcms/index.js index ab206f41674..2b25d939e33 100644 --- a/api/lib/application/lcms/index.js +++ b/api/lib/application/lcms/index.js @@ -1,7 +1,7 @@ -const securityPreHandlers = require('../security-pre-handlers.js'); -const LcmsController = require('./lcms-controller.js'); +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { lcmsController } from './lcms-controller.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'POST', @@ -13,7 +13,7 @@ exports.register = async function (server) { assign: 'hasRoleSuperAdmin', }, ], - handler: LcmsController.createRelease, + handler: lcmsController.createRelease, tags: ['api', 'lcms'], notes: [ 'Cette route est restreinte aux utilisateurs authentifiés avec le rôle Super Admin', @@ -24,4 +24,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'lcms-api'; +const name = 'lcms-api'; +export { register, name }; diff --git a/api/lib/application/lcms/lcms-controller.js b/api/lib/application/lcms/lcms-controller.js index ddafbb2e170..0128bad4b40 100644 --- a/api/lib/application/lcms/lcms-controller.js +++ b/api/lib/application/lcms/lcms-controller.js @@ -1,16 +1,18 @@ -const usecases = require('../../domain/usecases/index.js'); -const logger = require('../../infrastructure/logger.js'); +import { usecases } from '../../domain/usecases/index.js'; +import { logger } from '../../infrastructure/logger.js'; -module.exports = { - async createRelease(request, h) { - usecases - .createLcmsRelease() - .then(() => { - logger.info('Release created and cache reloaded'); - }) - .catch((e) => { - logger.error('Error while creating the release and reloading cache', e); - }); - return h.response({}).code(204); - }, +const createRelease = async function (request, h) { + usecases + .createLcmsRelease() + .then(() => { + logger.info('Release created and cache reloaded'); + }) + .catch((e) => { + logger.error('Error while creating the release and reloading cache', e); + }); + return h.response({}).code(204); }; + +const lcmsController = { createRelease }; + +export { lcmsController }; diff --git a/api/lib/application/memberships/index.js b/api/lib/application/memberships/index.js index df1d539076f..28d7670cae1 100644 --- a/api/lib/application/memberships/index.js +++ b/api/lib/application/memberships/index.js @@ -1,10 +1,10 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const securityPreHandlers = require('../security-pre-handlers.js'); -const membershipController = require('./membership-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { membershipController } from './membership-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'POST', @@ -152,4 +152,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'memberships-api'; +const name = 'memberships-api'; +export { register, name }; diff --git a/api/lib/application/memberships/membership-controller.js b/api/lib/application/memberships/membership-controller.js index f5c6a64af1d..018404fad31 100644 --- a/api/lib/application/memberships/membership-controller.js +++ b/api/lib/application/memberships/membership-controller.js @@ -1,41 +1,43 @@ -const membershipSerializer = require('../../infrastructure/serializers/jsonapi/membership-serializer.js'); -const requestResponseUtils = require('../../infrastructure/utils/request-response-utils.js'); -const usecases = require('../../domain/usecases/index.js'); -const { BadRequestError } = require('../http-errors.js'); - -module.exports = { - async create(request, h, dependencies = { membershipSerializer }) { - const userId = request.payload.data.relationships.user.data.id; - const organizationId = request.payload.data.relationships.organization.data.id; - - const membership = await usecases.createMembership({ userId, organizationId }); - await usecases.createCertificationCenterMembershipForScoOrganizationMember({ membership }); - - return h.response(dependencies.membershipSerializer.serializeForAdmin(membership)).created(); - }, - - async update(request, h, dependencies = { requestResponseUtils, membershipSerializer }) { - const membershipId = request.params.id; - const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); - const membership = dependencies.membershipSerializer.deserialize(request.payload); - // eslint-disable-next-line no-restricted-syntax - const membershipIdFromPayload = parseInt(membership.id); - if (membershipId !== membershipIdFromPayload) { - throw new BadRequestError(); - } - membership.updatedByUserId = userId; - - const updatedMembership = await usecases.updateMembership({ membership }); - await usecases.createCertificationCenterMembershipForScoOrganizationMember({ membership }); - - return h.response(dependencies.membershipSerializer.serialize(updatedMembership)); - }, - - async disable(request, h) { - const membershipId = request.params.id; - const userId = requestResponseUtils.extractUserIdFromRequest(request); - - await usecases.disableMembership({ membershipId, userId }); - return h.response().code(204); - }, +import * as membershipSerializer from '../../infrastructure/serializers/jsonapi/membership-serializer.js'; +import * as requestResponseUtils from '../../infrastructure/utils/request-response-utils.js'; +import { usecases } from '../../domain/usecases/index.js'; +import { BadRequestError } from '../http-errors.js'; + +const create = async function (request, h, dependencies = { membershipSerializer }) { + const userId = request.payload.data.relationships.user.data.id; + const organizationId = request.payload.data.relationships.organization.data.id; + + const membership = await usecases.createMembership({ userId, organizationId }); + await usecases.createCertificationCenterMembershipForScoOrganizationMember({ membership }); + + return h.response(dependencies.membershipSerializer.serializeForAdmin(membership)).created(); +}; + +const update = async function (request, h, dependencies = { requestResponseUtils, membershipSerializer }) { + const membershipId = request.params.id; + const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); + const membership = dependencies.membershipSerializer.deserialize(request.payload); + // eslint-disable-next-line no-restricted-syntax + const membershipIdFromPayload = parseInt(membership.id); + if (membershipId !== membershipIdFromPayload) { + throw new BadRequestError(); + } + membership.updatedByUserId = userId; + + const updatedMembership = await usecases.updateMembership({ membership }); + await usecases.createCertificationCenterMembershipForScoOrganizationMember({ membership }); + + return h.response(dependencies.membershipSerializer.serialize(updatedMembership)); }; + +const disable = async function (request, h) { + const membershipId = request.params.id; + const userId = requestResponseUtils.extractUserIdFromRequest(request); + + await usecases.disableMembership({ membershipId, userId }); + return h.response().code(204); +}; + +const membershipController = { create, update, disable }; + +export { membershipController }; diff --git a/api/lib/application/organization-invitations/index.js b/api/lib/application/organization-invitations/index.js index 7949d0c1a71..c0c90fa22c9 100644 --- a/api/lib/application/organization-invitations/index.js +++ b/api/lib/application/organization-invitations/index.js @@ -1,9 +1,9 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const organizationInvitationController = require('./organization-invitation-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { organizationInvitationController } from './organization-invitation-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'POST', @@ -79,4 +79,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'organization-invitation-api'; +const name = 'organization-invitation-api'; +export { register, name }; diff --git a/api/lib/application/organization-invitations/organization-invitation-controller.js b/api/lib/application/organization-invitations/organization-invitation-controller.js index f3b129a22b1..768599c5e6a 100644 --- a/api/lib/application/organization-invitations/organization-invitation-controller.js +++ b/api/lib/application/organization-invitations/organization-invitation-controller.js @@ -1,50 +1,55 @@ -const _ = require('lodash'); - -const { MissingQueryParamError } = require('../http-errors.js'); -const usecases = require('../../domain/usecases/index.js'); -const organizationInvitationSerializer = require('../../infrastructure/serializers/jsonapi/organization-invitation-serializer.js'); -const scoOrganizationInvitationSerializer = require('../../infrastructure/serializers/jsonapi/sco-organization-invitation-serializer.js'); -const requestResponseUtils = require('../../infrastructure/utils/request-response-utils.js'); - -module.exports = { - async acceptOrganizationInvitation(request) { - const organizationInvitationId = request.params.id; - const { code, email: rawEmail } = request.payload.data.attributes; - const localeFromCookie = request.state?.locale; - const email = rawEmail?.trim().toLowerCase(); - - const membership = await usecases.acceptOrganizationInvitation({ - organizationInvitationId, - code, - email, - localeFromCookie, - }); - await usecases.createCertificationCenterMembershipForScoOrganizationMember({ membership }); - return null; - }, - - async sendScoInvitation(request, h, dependencies = { requestResponseUtils, scoOrganizationInvitationSerializer }) { - const { uai, 'first-name': firstName, 'last-name': lastName } = request.payload.data.attributes; - - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - - const organizationScoInvitation = await usecases.sendScoInvitation({ uai, firstName, lastName, locale }); - - return h.response(dependencies.scoOrganizationInvitationSerializer.serialize(organizationScoInvitation)).created(); - }, - - async getOrganizationInvitation(request, h, dependencies = { organizationInvitationSerializer }) { - const organizationInvitationId = request.params.id; - const organizationInvitationCode = request.query.code; - - if (_.isEmpty(organizationInvitationCode)) { - throw new MissingQueryParamError('code'); - } - - const organizationInvitation = await usecases.getOrganizationInvitation({ - organizationInvitationId, - organizationInvitationCode, - }); - return dependencies.organizationInvitationSerializer.serialize(organizationInvitation); - }, +import _ from 'lodash'; + +import { MissingQueryParamError } from '../http-errors.js'; +import { usecases } from '../../domain/usecases/index.js'; +import * as organizationInvitationSerializer from '../../infrastructure/serializers/jsonapi/organization-invitation-serializer.js'; +import { serializer as scoOrganizationInvitationSerializer } from '../../infrastructure/serializers/jsonapi/sco-organization-invitation-serializer.js'; +import * as requestResponseUtils from '../../infrastructure/utils/request-response-utils.js'; + +const acceptOrganizationInvitation = async function (request) { + const organizationInvitationId = request.params.id; + const { code, email: rawEmail } = request.payload.data.attributes; + const localeFromCookie = request.state?.locale; + const email = rawEmail?.trim().toLowerCase(); + + const membership = await usecases.acceptOrganizationInvitation({ + organizationInvitationId, + code, + email, + localeFromCookie, + }); + await usecases.createCertificationCenterMembershipForScoOrganizationMember({ membership }); + return null; }; + +const sendScoInvitation = async function ( + request, + h, + dependencies = { requestResponseUtils, scoOrganizationInvitationSerializer } +) { + const { uai, 'first-name': firstName, 'last-name': lastName } = request.payload.data.attributes; + + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + + const organizationScoInvitation = await usecases.sendScoInvitation({ uai, firstName, lastName, locale }); + + return h.response(dependencies.scoOrganizationInvitationSerializer.serialize(organizationScoInvitation)).created(); +}; + +const getOrganizationInvitation = async function (request, h, dependencies = { organizationInvitationSerializer }) { + const organizationInvitationId = request.params.id; + const organizationInvitationCode = request.query.code; + + if (_.isEmpty(organizationInvitationCode)) { + throw new MissingQueryParamError('code'); + } + + const organizationInvitation = await usecases.getOrganizationInvitation({ + organizationInvitationId, + organizationInvitationCode, + }); + return dependencies.organizationInvitationSerializer.serialize(organizationInvitation); +}; + +const organizationInvitationController = { acceptOrganizationInvitation, sendScoInvitation, getOrganizationInvitation }; +export { organizationInvitationController }; diff --git a/api/lib/application/organization-learners/index.js b/api/lib/application/organization-learners/index.js index 5ccdfaebcc4..5233bb3bb73 100644 --- a/api/lib/application/organization-learners/index.js +++ b/api/lib/application/organization-learners/index.js @@ -1,12 +1,12 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const securityPreHandlers = require('../security-pre-handlers.js'); -const organizationLearnerController = require('./organization-learner-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { organizationLearnerController } from './organization-learner-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async function (server) { +const register = async function (server) { const adminRoutes = [ { method: 'DELETE', @@ -101,4 +101,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'organization-learners-api'; +const name = 'organization-learners-api'; +export { register, name }; diff --git a/api/lib/application/organization-learners/organization-learner-controller.js b/api/lib/application/organization-learners/organization-learner-controller.js index 3510a699a5c..82133c8826c 100644 --- a/api/lib/application/organization-learners/organization-learner-controller.js +++ b/api/lib/application/organization-learners/organization-learner-controller.js @@ -1,39 +1,41 @@ -const usecases = require('../../domain/usecases/index.js'); -const organizationLearnerIdentitySerializer = require('../../infrastructure/serializers/jsonapi/organization-learner-identity-serializer.js'); -const organizationLearnerActivitySerializer = require('../../infrastructure/serializers/jsonapi/organization-learner-activity-serializer.js'); -const organizationLearnerSerializer = require('../../infrastructure/serializers/jsonapi/organization-learner-follow-up/organization-learner-serializer.js'); - -module.exports = { - async dissociate(request, h) { - const organizationLearnerId = request.params.id; - await usecases.dissociateUserFromOrganizationLearner({ organizationLearnerId }); - return h.response().code(204); - }, - - async findAssociation(request, h, dependencies = { organizationLearnerIdentitySerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - // eslint-disable-next-line no-restricted-syntax - const requestedUserId = parseInt(request.query.userId); - const campaignCode = request.query.campaignCode; - - const organizationLearner = await usecases.findAssociationBetweenUserAndOrganizationLearner({ - authenticatedUserId, - requestedUserId, - campaignCode, - }); - - return h.response(dependencies.organizationLearnerIdentitySerializer.serialize(organizationLearner)).code(200); - }, - - async getActivity(request, h, dependencies = { organizationLearnerActivitySerializer }) { - const organizationLearnerId = request.params.id; - const activity = await usecases.getOrganizationLearnerActivity({ organizationLearnerId }); - return h.response(dependencies.organizationLearnerActivitySerializer.serialize(activity)).code(200); - }, - - async getLearner(request, h, dependencies = { organizationLearnerSerializer }) { - const organizationLearnerId = request.params.id; - const learner = await usecases.getOrganizationLearner({ organizationLearnerId }); - return h.response(dependencies.organizationLearnerSerializer.serialize(learner)).code(200); - }, +import { usecases } from '../../domain/usecases/index.js'; +import * as organizationLearnerIdentitySerializer from '../../infrastructure/serializers/jsonapi/organization-learner-identity-serializer.js'; +import * as organizationLearnerActivitySerializer from '../../infrastructure/serializers/jsonapi/organization-learner-activity-serializer.js'; +import * as organizationLearnerSerializer from '../../infrastructure/serializers/jsonapi/organization-learner-follow-up/organization-learner-serializer.js'; + +const dissociate = async function (request, h) { + const organizationLearnerId = request.params.id; + await usecases.dissociateUserFromOrganizationLearner({ organizationLearnerId }); + return h.response().code(204); +}; + +const findAssociation = async function (request, h, dependencies = { organizationLearnerIdentitySerializer }) { + const authenticatedUserId = request.auth.credentials.userId; + // eslint-disable-next-line no-restricted-syntax + const requestedUserId = parseInt(request.query.userId); + const campaignCode = request.query.campaignCode; + + const organizationLearner = await usecases.findAssociationBetweenUserAndOrganizationLearner({ + authenticatedUserId, + requestedUserId, + campaignCode, + }); + + return h.response(dependencies.organizationLearnerIdentitySerializer.serialize(organizationLearner)).code(200); }; + +const getActivity = async function (request, h, dependencies = { organizationLearnerActivitySerializer }) { + const organizationLearnerId = request.params.id; + const activity = await usecases.getOrganizationLearnerActivity({ organizationLearnerId }); + return h.response(dependencies.organizationLearnerActivitySerializer.serialize(activity)).code(200); +}; + +const getLearner = async function (request, h, dependencies = { organizationLearnerSerializer }) { + const organizationLearnerId = request.params.id; + const learner = await usecases.getOrganizationLearner({ organizationLearnerId }); + return h.response(dependencies.organizationLearnerSerializer.serialize(learner)).code(200); +}; + +const organizationLearnerController = { dissociate, findAssociation, getActivity, getLearner }; + +export { organizationLearnerController }; diff --git a/api/lib/application/organizations-administration/index.js b/api/lib/application/organizations-administration/index.js index bb54c92ea7a..3409aa8a1f3 100644 --- a/api/lib/application/organizations-administration/index.js +++ b/api/lib/application/organizations-administration/index.js @@ -1,16 +1,16 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const { sendJsonApiError, PayloadTooLargeError } = require('../http-errors.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const organizationController = require('./organization-administration-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { sendJsonApiError, PayloadTooLargeError } from '../http-errors.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { organizationAdministrationController as organizationController } from './organization-administration-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; const ERRORS = { PAYLOAD_TOO_LARGE: 'PAYLOAD_TOO_LARGE', }; const TWO_AND_HALF_MEGABYTES = 1048576 * 2.5; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'GET', @@ -83,4 +83,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'organizations-administration-api'; +const name = 'organizations-administration-api'; +export { register, name }; diff --git a/api/lib/application/organizations-administration/organization-administration-controller.js b/api/lib/application/organizations-administration/organization-administration-controller.js index 00f4c50ca31..f524afd0b16 100644 --- a/api/lib/application/organizations-administration/organization-administration-controller.js +++ b/api/lib/application/organizations-administration/organization-administration-controller.js @@ -1,26 +1,27 @@ -const usecases = require('../../domain/usecases/index.js'); -const organizationForAdminSerializer = require('../../infrastructure/serializers/jsonapi/organizations-administration/organization-for-admin-serializer.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as organizationForAdminSerializer from '../../infrastructure/serializers/jsonapi/organizations-administration/organization-for-admin-serializer.js'; -module.exports = { - async getOrganizationDetails(request, h, dependencies = { organizationForAdminSerializer }) { - const organizationId = request.params.id; +const getOrganizationDetails = async function (request, h, dependencies = { organizationForAdminSerializer }) { + const organizationId = request.params.id; - const organizationDetails = await usecases.getOrganizationDetails({ organizationId }); - return dependencies.organizationForAdminSerializer.serialize(organizationDetails); - }, + const organizationDetails = await usecases.getOrganizationDetails({ organizationId }); + return dependencies.organizationForAdminSerializer.serialize(organizationDetails); +}; - async updateOrganizationInformation( - request, - h, - dependencies = { - organizationForAdminSerializer, - } - ) { - const organizationDeserialized = dependencies.organizationForAdminSerializer.deserialize(request.payload); +const updateOrganizationInformation = async function ( + request, + h, + dependencies = { + organizationForAdminSerializer, + } +) { + const organizationDeserialized = dependencies.organizationForAdminSerializer.deserialize(request.payload); - const organizationUpdated = await usecases.updateOrganizationInformation({ - organization: organizationDeserialized, - }); - return h.response(dependencies.organizationForAdminSerializer.serialize(organizationUpdated)); - }, + const organizationUpdated = await usecases.updateOrganizationInformation({ + organization: organizationDeserialized, + }); + return h.response(dependencies.organizationForAdminSerializer.serialize(organizationUpdated)); }; + +const organizationAdministrationController = { getOrganizationDetails, updateOrganizationInformation }; +export { organizationAdministrationController, getOrganizationDetails, updateOrganizationInformation }; diff --git a/api/lib/application/organizations/helpers.js b/api/lib/application/organizations/helpers.js index 4e49043564e..b2794f5b9e7 100644 --- a/api/lib/application/organizations/helpers.js +++ b/api/lib/application/organizations/helpers.js @@ -12,6 +12,4 @@ function mapCertificabilityByLabel(certificabilityFilter) { return result.map((value) => certificabilityByLabel[value]); } -module.exports = { - mapCertificabilityByLabel, -}; +export { mapCertificabilityByLabel }; diff --git a/api/lib/application/organizations/index.js b/api/lib/application/organizations/index.js index cf821446b26..19b5d89a738 100644 --- a/api/lib/application/organizations/index.js +++ b/api/lib/application/organizations/index.js @@ -1,18 +1,18 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { sendJsonApiError, PayloadTooLargeError, NotFoundError, BadRequestError } = require('../http-errors.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const organizationController = require('./organization-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { sendJsonApiError, PayloadTooLargeError, NotFoundError, BadRequestError } from '../http-errors.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { organizationController } from './organization-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; const ERRORS = { PAYLOAD_TOO_LARGE: 'PAYLOAD_TOO_LARGE', }; const TWENTY_MEGABYTES = 1048576 * 20; -exports.register = async (server) => { +const register = async function (server) { const adminRoutes = [ { method: 'POST', @@ -994,4 +994,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'organization-api'; +const name = 'organization-api'; +export { register, name }; diff --git a/api/lib/application/organizations/organization-controller.js b/api/lib/application/organizations/organization-controller.js index 4d78e24cdaf..f1e50c05af0 100644 --- a/api/lib/application/organizations/organization-controller.js +++ b/api/lib/application/organizations/organization-controller.js @@ -1,460 +1,505 @@ -const tokenService = require('../../domain/services/token-service.js'); -const usecases = require('../../domain/usecases/index.js'); - -const campaignManagementSerializer = require('../../infrastructure/serializers/jsonapi/campaign-management-serializer.js'); -const campaignReportSerializer = require('../../infrastructure/serializers/jsonapi/campaign-report-serializer.js'); -const divisionSerializer = require('../../infrastructure/serializers/jsonapi/division-serializer.js'); -const groupSerializer = require('../../infrastructure/serializers/jsonapi/group-serializer.js'); -const membershipSerializer = require('../../infrastructure/serializers/jsonapi/membership-serializer.js'); -const organizationSerializer = require('../../infrastructure/serializers/jsonapi/organization-serializer.js'); -const organizationInvitationSerializer = require('../../infrastructure/serializers/jsonapi/organization-invitation-serializer.js'); -const supOrganizationLearnerWarningSerializer = require('../../infrastructure/serializers/jsonapi/sup-organization-learner-warnings-serializer.js'); -const targetProfileForSpecifierSerializer = require('../../infrastructure/serializers/jsonapi/campaign/target-profile-for-specifier-serializer.js'); -const organizationMemberIdentitySerializer = require('../../infrastructure/serializers/jsonapi/organization-member-identity-serializer.js'); -const organizationPlacesLotManagementSerializer = require('../../infrastructure/serializers/jsonapi/organization/organization-places-lot-management-serializer.js'); -const organizationPlacesLotSerializer = require('../../infrastructure/serializers/jsonapi/organization/organization-places-lot-serializer.js'); -const organizationPlacesCapacitySerializer = require('../../infrastructure/serializers/jsonapi/organization-places-capacity-serializer.js'); -const organizationParticipantsSerializer = require('../../infrastructure/serializers/jsonapi/organization/organization-participants-serializer.js'); -const scoOrganizationParticipantsSerializer = require('../../infrastructure/serializers/jsonapi/organization/sco-organization-participants-serializer.js'); -const supOrganizationParticipantsSerializer = require('../../infrastructure/serializers/jsonapi/organization/sup-organization-participants-serializer.js'); -const targetProfileSummaryForAdminSerializer = require('../../infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer.js'); - -const SupOrganizationLearnerParser = require('../../infrastructure/serializers/csv/sup-organization-learner-parser.js'); -const queryParamsUtils = require('../../infrastructure/utils/query-params-utils.js'); -const { - extractLocaleFromRequest, +import { tokenService } from '../../domain/services/token-service.js'; +import { usecases } from '../../domain/usecases/index.js'; + +import * as campaignManagementSerializer from '../../infrastructure/serializers/jsonapi/campaign-management-serializer.js'; +import * as campaignReportSerializer from '../../infrastructure/serializers/jsonapi/campaign-report-serializer.js'; +import * as divisionSerializer from '../../infrastructure/serializers/jsonapi/division-serializer.js'; +import * as groupSerializer from '../../infrastructure/serializers/jsonapi/group-serializer.js'; +import * as membershipSerializer from '../../infrastructure/serializers/jsonapi/membership-serializer.js'; +import * as organizationSerializer from '../../infrastructure/serializers/jsonapi/organization-serializer.js'; +import * as organizationInvitationSerializer from '../../infrastructure/serializers/jsonapi/organization-invitation-serializer.js'; +import * as supOrganizationLearnerWarningSerializer from '../../infrastructure/serializers/jsonapi/sup-organization-learner-warnings-serializer.js'; +import * as targetProfileForSpecifierSerializer from '../../infrastructure/serializers/jsonapi/campaign/target-profile-for-specifier-serializer.js'; +import * as organizationMemberIdentitySerializer from '../../infrastructure/serializers/jsonapi/organization-member-identity-serializer.js'; +import * as organizationPlacesLotManagementSerializer from '../../infrastructure/serializers/jsonapi/organization/organization-places-lot-management-serializer.js'; +import * as organizationPlacesLotSerializer from '../../infrastructure/serializers/jsonapi/organization/organization-places-lot-serializer.js'; +import * as organizationPlacesCapacitySerializer from '../../infrastructure/serializers/jsonapi/organization-places-capacity-serializer.js'; +import * as organizationParticipantsSerializer from '../../infrastructure/serializers/jsonapi/organization/organization-participants-serializer.js'; +import * as scoOrganizationParticipantsSerializer from '../../infrastructure/serializers/jsonapi/organization/sco-organization-participants-serializer.js'; +import * as supOrganizationParticipantsSerializer from '../../infrastructure/serializers/jsonapi/organization/sup-organization-participants-serializer.js'; +import * as targetProfileSummaryForAdminSerializer from '../../infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer.js'; + +import { SupOrganizationLearnerParser } from '../../infrastructure/serializers/csv/sup-organization-learner-parser.js'; +import * as queryParamsUtils from '../../infrastructure/utils/query-params-utils.js'; +import { extractUserIdFromRequest, -} = require('../../infrastructure/utils/request-response-utils.js'); -const dayjs = require('dayjs'); -const customParseFormat = require('dayjs/plugin/customParseFormat'); + extractLocaleFromRequest, +} from '../../infrastructure/utils/request-response-utils.js'; +import dayjs from 'dayjs'; +import customParseFormat from 'dayjs/plugin/customParseFormat.js'; dayjs.extend(customParseFormat); -const certificationResultUtils = require('../../infrastructure/utils/csv/certification-results.js'); -const certificationAttestationPdf = require('../../infrastructure/utils/pdf/certification-attestation-pdf.js'); -const organizationForAdminSerializer = require('../../infrastructure/serializers/jsonapi/organization-for-admin-serializer.js'); - -const { mapCertificabilityByLabel } = require('./helpers.js'); -const csvSerializer = require('../../infrastructure/serializers/csv/csv-serializer.js'); - -module.exports = { - async create(request) { - const superAdminUserId = extractUserIdFromRequest(request); - const organization = organizationForAdminSerializer.deserialize(request.payload); - - organization.createdBy = +superAdminUserId; - - const createdOrganization = await usecases.createOrganization({ organization }); - const serializedOrganization = organizationForAdminSerializer.serialize(createdOrganization); - - return serializedOrganization; - }, - - async createInBatch(request, h) { - const organizations = await csvSerializer.deserializeForOrganizationsImport(request.payload.path); - - const createdOrganizations = await usecases.createOrganizationsWithTagsAndTargetProfiles({ organizations }); - - return h.response(organizationForAdminSerializer.serialize(createdOrganizations)).code(204); - }, - - async findPaginatedFilteredOrganizations( - request, - h, - dependencies = { - organizationSerializer, - queryParamsUtils, - } - ) { - const options = dependencies.queryParamsUtils.extractParameters(request.query); - - const { models: organizations, pagination } = await usecases.findPaginatedFilteredOrganizations({ - filter: options.filter, - page: options.page, - }); - return dependencies.organizationSerializer.serialize(organizations, pagination); - }, - - async findPaginatedFilteredCampaigns( - request, - h, - dependencies = { - queryParamsUtils, - campaignReportSerializer, - } - ) { - const organizationId = request.params.id; - const options = dependencies.queryParamsUtils.extractParameters(request.query); - const userId = request.auth.credentials.userId; - - if (options.filter.status === 'archived') { - options.filter.ongoing = false; - delete options.filter.status; - } - const { models: campaigns, meta } = await usecases.findPaginatedFilteredOrganizationCampaigns({ - organizationId, - filter: options.filter, - page: options.page, - userId, - }); - return dependencies.campaignReportSerializer.serialize(campaigns, meta); - }, - - async findPaginatedCampaignManagements( - request, - h, - dependencies = { - queryParamsUtils, - campaignManagementSerializer, - } - ) { - const organizationId = request.params.id; - const { filter, page } = dependencies.queryParamsUtils.extractParameters(request.query); - - const { models: campaigns, meta } = await usecases.findPaginatedCampaignManagements({ - organizationId, - filter, - page, - }); - return dependencies.campaignManagementSerializer.serialize(campaigns, meta); - }, - - async findPaginatedFilteredMembershipsForAdmin(request) { - const organizationId = request.params.id; - const options = queryParamsUtils.extractParameters(request.query); - - const { models: memberships, pagination } = await usecases.findPaginatedFilteredOrganizationMemberships({ - organizationId, - filter: options.filter, - page: options.page, - }); - return membershipSerializer.serializeForAdmin(memberships, pagination); - }, - - async findPaginatedFilteredMemberships(request) { - const organizationId = request.params.id; - const options = queryParamsUtils.extractParameters(request.query); - - const { models: memberships, pagination } = await usecases.findPaginatedFilteredOrganizationMemberships({ - organizationId, - filter: options.filter, - page: options.page, - }); - return membershipSerializer.serialize(memberships, pagination); - }, - - async getOrganizationMemberIdentities(request, h, dependencies = { organizationMemberIdentitySerializer }) { - const organizationId = request.params.id; - const members = await usecases.getOrganizationMemberIdentities({ organizationId }); - return dependencies.organizationMemberIdentitySerializer.serialize(members); - }, - - async getOrganizationPlacesCapacity(request) { - const organizationId = request.params.id; - const organizationPlacesCapacity = await usecases.getOrganizationPlacesCapacity({ organizationId }); - return organizationPlacesCapacitySerializer.serialize(organizationPlacesCapacity); - }, - - async findOrganizationPlacesLot(request, h, dependencies = { organizationPlacesLotManagementSerializer }) { - const organizationId = request.params.id; - const places = await usecases.findOrganizationPlacesLot({ organizationId }); - return dependencies.organizationPlacesLotManagementSerializer.serialize(places); - }, - - async deleteOrganizationPlacesLot(request, h) { - const organizationPlaceId = request.params.placeId; - const userId = request.auth.credentials.userId; - - await usecases.deleteOrganizationPlaceLot({ organizationPlaceId, userId }); - - return h.response(null).code(204); - }, - - async createOrganizationPlacesLot( - request, - h, - dependencies = { - organizationPlacesLotSerializer, - organizationPlacesLotManagementSerializer, - } - ) { - const organizationId = request.params.id; - const createdBy = request.auth.credentials.userId; - const organizationPlacesLotData = await dependencies.organizationPlacesLotSerializer.deserialize(request.payload); - const organizationPlacesLot = await usecases.createOrganizationPlacesLot({ - organizationPlacesLotData, - organizationId, - createdBy, - }); - return h - .response(dependencies.organizationPlacesLotManagementSerializer.serialize(organizationPlacesLot)) - .code(201); - }, - - async downloadCertificationAttestationsForDivision(request, h, dependencies = { certificationAttestationPdf }) { - const organizationId = request.params.id; - const { division, isFrenchDomainExtension } = request.query; - - const attestations = await usecases.findCertificationAttestationsForDivision({ - organizationId, - division, - }); - - const { buffer } = await dependencies.certificationAttestationPdf.getCertificationAttestationsPdfBuffer({ - certificates: attestations, - isFrenchDomainExtension, - }); - - const now = dayjs(); - const fileName = `${now.format('YYYYMMDD')}_attestations_${division}.pdf`; - - return h - .response(buffer) - .header('Content-Disposition', `attachment; filename=${fileName}`) - .header('Content-Type', 'application/pdf'); - }, - - async downloadCertificationResults(request, h, dependencies = { certificationResultUtils }) { - const organizationId = request.params.id; - const { division } = request.query; - - const certificationResults = await usecases.getScoCertificationResultsByDivision({ organizationId, division }); - - const csvResult = await dependencies.certificationResultUtils.getDivisionCertificationResultsCsv({ - certificationResults, - }); - - const now = dayjs(); - const fileName = `${now.format('YYYYMMDD')}_resultats_${division}.csv`; - - return h - .response(csvResult) - .header('Content-Type', 'text/csv;charset=utf-8') - .header('Content-Disposition', `attachment; filename="${fileName}"`); - }, - - async findTargetProfiles(request, h, dependencies = { targetProfileForSpecifierSerializer }) { - const organizationId = request.params.id; - const targetProfiles = await usecases.getAvailableTargetProfilesForOrganization({ organizationId }); - return dependencies.targetProfileForSpecifierSerializer.serialize(targetProfiles); - }, - - async attachTargetProfiles(request, h) { - const targetProfileIds = request.payload['target-profile-ids']; - const organizationId = request.params.id; - await usecases.attachTargetProfilesToOrganization({ organizationId, targetProfileIds }); - - return h.response({}).code(204); - }, - - async getDivisions(request) { - const organizationId = request.params.id; - const divisions = await usecases.findDivisionsByOrganization({ organizationId }); - return divisionSerializer.serialize(divisions); - }, - - async getGroups(request) { - const organizationId = request.params.id; - const groups = await usecases.findGroupsByOrganization({ organizationId }); - return groupSerializer.serialize(groups); - }, - - async findPaginatedFilteredScoParticipants( - request, - h, - dependencies = { - queryParamsUtils, - scoOrganizationParticipantsSerializer, - } - ) { - const organizationId = request.params.id; - const { filter, page, sort } = dependencies.queryParamsUtils.extractParameters(request.query); - if (filter.divisions && !Array.isArray(filter.divisions)) { - filter.divisions = [filter.divisions]; - } - if (filter.connectionTypes && !Array.isArray(filter.connectionTypes)) { - filter.connectionTypes = [filter.connectionTypes]; - } - if (filter.certificability) { - filter.certificability = mapCertificabilityByLabel(filter.certificability); - } - const { data: scoOrganizationParticipants, meta } = await usecases.findPaginatedFilteredScoParticipants({ - organizationId, - filter, - page, - sort, - }); - return dependencies.scoOrganizationParticipantsSerializer.serialize({ - scoOrganizationParticipants, - meta, - }); - }, - - async findPaginatedFilteredSupParticipants( - request, - h, - dependencies = { - queryParamsUtils, - supOrganizationParticipantsSerializer, - } - ) { - const organizationId = request.params.id; - const { filter, page, sort } = dependencies.queryParamsUtils.extractParameters(request.query); - if (filter.groups && !Array.isArray(filter.groups)) { - filter.groups = [filter.groups]; - } - - if (filter.certificability) { - filter.certificability = mapCertificabilityByLabel(filter.certificability); - } - - const { data: supOrganizationParticipants, meta } = await usecases.findPaginatedFilteredSupParticipants({ - organizationId, - filter, - page, - sort, - }); - return dependencies.supOrganizationParticipantsSerializer.serialize({ supOrganizationParticipants, meta }); - }, - - async importOrganizationLearnersFromSIECLE(request, h) { - const organizationId = request.params.id; - const { format } = request.query; - - await usecases.importOrganizationLearnersFromSIECLEFormat({ - organizationId, - payload: request.payload, - format, - i18n: request.i18n, - }); - - return h.response(null).code(204); - }, - - async importSupOrganizationLearners(request, h) { - const organizationId = request.params.id; - const buffer = request.payload; - const supOrganizationLearnerParser = new SupOrganizationLearnerParser(buffer, organizationId, request.i18n); - const warnings = await usecases.importSupOrganizationLearners({ supOrganizationLearnerParser }); - - return h.response(supOrganizationLearnerWarningSerializer.serialize({ id: organizationId, warnings })).code(200); - }, - - async replaceSupOrganizationLearners(request, h) { - const organizationId = request.params.id; - const buffer = request.payload; - const supOrganizationLearnerParser = new SupOrganizationLearnerParser(buffer, organizationId, request.i18n); - const warnings = await usecases.replaceSupOrganizationLearners({ - organizationId, - supOrganizationLearnerParser, - }); - - return h.response(supOrganizationLearnerWarningSerializer.serialize({ id: organizationId, warnings })).code(200); - }, - - async sendInvitations(request, h) { - const organizationId = request.params.id; - const emails = request.payload.data.attributes.email.split(','); - const locale = extractLocaleFromRequest(request); - - const organizationInvitations = await usecases.createOrganizationInvitations({ organizationId, emails, locale }); - return h.response(organizationInvitationSerializer.serialize(organizationInvitations)).created(); - }, - - async resendInvitation(request, h) { - const organizationId = request.params.id; - const email = request.payload.data.attributes.email; - const locale = extractLocaleFromRequest(request); - - const organizationInvitation = await usecases.resendOrganizationInvitation({ - organizationId, - email, - locale, - }); - return h.response(organizationInvitationSerializer.serialize(organizationInvitation)); - }, - - async cancelOrganizationInvitation(request, h) { - const organizationInvitationId = request.params.organizationInvitationId; - await usecases.cancelOrganizationInvitation({ organizationInvitationId }); - return h.response().code(204); - }, - - async sendInvitationByLangAndRole(request, h, dependencies = { organizationInvitationSerializer }) { - const organizationId = request.params.id; - const invitationInformation = - await dependencies.organizationInvitationSerializer.deserializeForCreateOrganizationInvitationAndSendEmail( - request.payload - ); - - const organizationInvitation = await usecases.createOrganizationInvitationByAdmin({ - organizationId, - email: invitationInformation.email, - locale: invitationInformation.lang, - role: invitationInformation.role, - }); - return h.response(dependencies.organizationInvitationSerializer.serialize(organizationInvitation)).created(); - }, - - findPendingInvitations(request, h, dependencies = { organizationInvitationSerializer }) { - const organizationId = request.params.id; - - return usecases - .findPendingOrganizationInvitations({ organizationId }) - .then((invitations) => dependencies.organizationInvitationSerializer.serialize(invitations)); - }, - - async getOrganizationLearnersCsvTemplate(request, h, dependencies = { tokenService }) { - const organizationId = request.params.id; - const token = request.query.accessToken; - const userId = dependencies.tokenService.extractUserId(token); - const template = await usecases.getOrganizationLearnersCsvTemplate({ - userId, - organizationId, - i18n: request.i18n, - }); - - return h - .response(template) - .header('Content-Type', 'text/csv;charset=utf-8') - .header('Content-Disposition', `attachment; filename=${request.i18n.__('csv-template.template-name')}.csv`); - }, - - async archiveOrganization(request, h, dependencies = { organizationForAdminSerializer }) { - const organizationId = request.params.id; - const userId = extractUserIdFromRequest(request); - const archivedOrganization = await usecases.archiveOrganization({ organizationId, userId }); - return dependencies.organizationForAdminSerializer.serialize(archivedOrganization); - }, - - async getPaginatedParticipantsForAnOrganization( - request, - h, - dependencies = { - queryParamsUtils, - organizationParticipantsSerializer, - } - ) { - const organizationId = request.params.id; - const { page, filter: filters, sort } = dependencies.queryParamsUtils.extractParameters(request.query); - - if (filters.certificability) { - filters.certificability = mapCertificabilityByLabel(filters.certificability); - } - - const results = await usecases.getPaginatedParticipantsForAnOrganization({ - organizationId, - page, - filters, - sort, - }); - - return dependencies.organizationParticipantsSerializer.serialize(results); - }, - - async findTargetProfileSummariesForAdmin(request) { - const organizationId = request.params.id; - const targetProfileSummaries = await usecases.findOrganizationTargetProfileSummariesForAdmin({ - organizationId, - }); - return targetProfileSummaryForAdminSerializer.serialize(targetProfileSummaries); - }, +import * as certificationResultUtils from '../../infrastructure/utils/csv/certification-results.js'; +import { getCertificationAttestationsPdf as certificationAttestationPdf } from '../../infrastructure/utils/pdf/certification-attestation-pdf.js'; +import * as organizationForAdminSerializer from '../../infrastructure/serializers/jsonapi/organization-for-admin-serializer.js'; + +import { mapCertificabilityByLabel } from './helpers.js'; +import * as csvSerializer from '../../infrastructure/serializers/csv/csv-serializer.js'; + +const create = async function (request) { + const superAdminUserId = extractUserIdFromRequest(request); + const organization = organizationForAdminSerializer.deserialize(request.payload); + + organization.createdBy = +superAdminUserId; + + const createdOrganization = await usecases.createOrganization({ organization }); + const serializedOrganization = organizationForAdminSerializer.serialize(createdOrganization); + + return serializedOrganization; +}; + +const createInBatch = async function (request, h) { + const organizations = await csvSerializer.deserializeForOrganizationsImport(request.payload.path); + + const createdOrganizations = await usecases.createOrganizationsWithTagsAndTargetProfiles({ organizations }); + + return h.response(organizationForAdminSerializer.serialize(createdOrganizations)).code(204); +}; + +const findPaginatedFilteredOrganizations = async function ( + request, + h, + dependencies = { + organizationSerializer, + queryParamsUtils, + } +) { + const options = dependencies.queryParamsUtils.extractParameters(request.query); + + const { models: organizations, pagination } = await usecases.findPaginatedFilteredOrganizations({ + filter: options.filter, + page: options.page, + }); + return dependencies.organizationSerializer.serialize(organizations, pagination); +}; + +const findPaginatedFilteredCampaigns = async function ( + request, + h, + dependencies = { + queryParamsUtils, + campaignReportSerializer, + } +) { + const organizationId = request.params.id; + const options = dependencies.queryParamsUtils.extractParameters(request.query); + const userId = request.auth.credentials.userId; + + if (options.filter.status === 'archived') { + options.filter.ongoing = false; + delete options.filter.status; + } + const { models: campaigns, meta } = await usecases.findPaginatedFilteredOrganizationCampaigns({ + organizationId, + filter: options.filter, + page: options.page, + userId, + }); + return dependencies.campaignReportSerializer.serialize(campaigns, meta); +}; + +const findPaginatedCampaignManagements = async function ( + request, + h, + dependencies = { + queryParamsUtils, + campaignManagementSerializer, + } +) { + const organizationId = request.params.id; + const { filter, page } = dependencies.queryParamsUtils.extractParameters(request.query); + + const { models: campaigns, meta } = await usecases.findPaginatedCampaignManagements({ + organizationId, + filter, + page, + }); + return dependencies.campaignManagementSerializer.serialize(campaigns, meta); +}; + +const findPaginatedFilteredMembershipsForAdmin = async function (request) { + const organizationId = request.params.id; + const options = queryParamsUtils.extractParameters(request.query); + + const { models: memberships, pagination } = await usecases.findPaginatedFilteredOrganizationMemberships({ + organizationId, + filter: options.filter, + page: options.page, + }); + return membershipSerializer.serializeForAdmin(memberships, pagination); +}; + +const findPaginatedFilteredMemberships = async function (request) { + const organizationId = request.params.id; + const options = queryParamsUtils.extractParameters(request.query); + + const { models: memberships, pagination } = await usecases.findPaginatedFilteredOrganizationMemberships({ + organizationId, + filter: options.filter, + page: options.page, + }); + return membershipSerializer.serialize(memberships, pagination); +}; + +const getOrganizationMemberIdentities = async function ( + request, + h, + dependencies = { organizationMemberIdentitySerializer } +) { + const organizationId = request.params.id; + const members = await usecases.getOrganizationMemberIdentities({ organizationId }); + return dependencies.organizationMemberIdentitySerializer.serialize(members); +}; + +const getOrganizationPlacesCapacity = async function (request) { + const organizationId = request.params.id; + const organizationPlacesCapacity = await usecases.getOrganizationPlacesCapacity({ organizationId }); + return organizationPlacesCapacitySerializer.serialize(organizationPlacesCapacity); +}; + +const findOrganizationPlacesLot = async function ( + request, + h, + dependencies = { organizationPlacesLotManagementSerializer } +) { + const organizationId = request.params.id; + const places = await usecases.findOrganizationPlacesLot({ organizationId }); + return dependencies.organizationPlacesLotManagementSerializer.serialize(places); +}; + +const deleteOrganizationPlacesLot = async function (request, h) { + const organizationPlaceId = request.params.placeId; + const userId = request.auth.credentials.userId; + + await usecases.deleteOrganizationPlaceLot({ organizationPlaceId, userId }); + + return h.response(null).code(204); +}; + +const createOrganizationPlacesLot = async function ( + request, + h, + dependencies = { + organizationPlacesLotSerializer, + organizationPlacesLotManagementSerializer, + } +) { + const organizationId = request.params.id; + const createdBy = request.auth.credentials.userId; + const organizationPlacesLotData = await dependencies.organizationPlacesLotSerializer.deserialize(request.payload); + const organizationPlacesLot = await usecases.createOrganizationPlacesLot({ + organizationPlacesLotData, + organizationId, + createdBy, + }); + return h.response(dependencies.organizationPlacesLotManagementSerializer.serialize(organizationPlacesLot)).code(201); +}; + +const downloadCertificationAttestationsForDivision = async function ( + request, + h, + dependencies = { certificationAttestationPdf } +) { + const organizationId = request.params.id; + const { division, isFrenchDomainExtension } = request.query; + + const attestations = await usecases.findCertificationAttestationsForDivision({ + organizationId, + division, + }); + + const { buffer } = await dependencies.certificationAttestationPdf.getCertificationAttestationsPdfBuffer({ + certificates: attestations, + isFrenchDomainExtension, + }); + + const now = dayjs(); + const fileName = `${now.format('YYYYMMDD')}_attestations_${division}.pdf`; + + return h + .response(buffer) + .header('Content-Disposition', `attachment; filename=${fileName}`) + .header('Content-Type', 'application/pdf'); +}; + +const downloadCertificationResults = async function (request, h, dependencies = { certificationResultUtils }) { + const organizationId = request.params.id; + const { division } = request.query; + + const certificationResults = await usecases.getScoCertificationResultsByDivision({ organizationId, division }); + + const csvResult = await dependencies.certificationResultUtils.getDivisionCertificationResultsCsv({ + certificationResults, + }); + + const now = dayjs(); + const fileName = `${now.format('YYYYMMDD')}_resultats_${division}.csv`; + + return h + .response(csvResult) + .header('Content-Type', 'text/csv;charset=utf-8') + .header('Content-Disposition', `attachment; filename="${fileName}"`); +}; + +const findTargetProfiles = async function (request, h, dependencies = { targetProfileForSpecifierSerializer }) { + const organizationId = request.params.id; + const targetProfiles = await usecases.getAvailableTargetProfilesForOrganization({ organizationId }); + return dependencies.targetProfileForSpecifierSerializer.serialize(targetProfiles); }; + +const attachTargetProfiles = async function (request, h) { + const targetProfileIds = request.payload['target-profile-ids']; + const organizationId = request.params.id; + await usecases.attachTargetProfilesToOrganization({ organizationId, targetProfileIds }); + + return h.response({}).code(204); +}; + +const getDivisions = async function (request) { + const organizationId = request.params.id; + const divisions = await usecases.findDivisionsByOrganization({ organizationId }); + return divisionSerializer.serialize(divisions); +}; + +const getGroups = async function (request) { + const organizationId = request.params.id; + const groups = await usecases.findGroupsByOrganization({ organizationId }); + return groupSerializer.serialize(groups); +}; + +const findPaginatedFilteredScoParticipants = async function ( + request, + h, + dependencies = { + queryParamsUtils, + scoOrganizationParticipantsSerializer, + } +) { + const organizationId = request.params.id; + const { filter, page, sort } = dependencies.queryParamsUtils.extractParameters(request.query); + if (filter.divisions && !Array.isArray(filter.divisions)) { + filter.divisions = [filter.divisions]; + } + if (filter.connectionTypes && !Array.isArray(filter.connectionTypes)) { + filter.connectionTypes = [filter.connectionTypes]; + } + if (filter.certificability) { + filter.certificability = mapCertificabilityByLabel(filter.certificability); + } + const { data: scoOrganizationParticipants, meta } = await usecases.findPaginatedFilteredScoParticipants({ + organizationId, + filter, + page, + sort, + }); + return dependencies.scoOrganizationParticipantsSerializer.serialize({ + scoOrganizationParticipants, + meta, + }); +}; + +const findPaginatedFilteredSupParticipants = async function ( + request, + h, + dependencies = { + queryParamsUtils, + supOrganizationParticipantsSerializer, + } +) { + const organizationId = request.params.id; + const { filter, page, sort } = dependencies.queryParamsUtils.extractParameters(request.query); + if (filter.groups && !Array.isArray(filter.groups)) { + filter.groups = [filter.groups]; + } + + if (filter.certificability) { + filter.certificability = mapCertificabilityByLabel(filter.certificability); + } + + const { data: supOrganizationParticipants, meta } = await usecases.findPaginatedFilteredSupParticipants({ + organizationId, + filter, + page, + sort, + }); + return dependencies.supOrganizationParticipantsSerializer.serialize({ supOrganizationParticipants, meta }); +}; + +const importOrganizationLearnersFromSIECLE = async function (request, h) { + const organizationId = request.params.id; + const { format } = request.query; + + await usecases.importOrganizationLearnersFromSIECLEFormat({ + organizationId, + payload: request.payload, + format, + i18n: request.i18n, + }); + + return h.response(null).code(204); +}; + +const importSupOrganizationLearners = async function (request, h) { + const organizationId = request.params.id; + const buffer = request.payload; + const supOrganizationLearnerParser = new SupOrganizationLearnerParser(buffer, organizationId, request.i18n); + const warnings = await usecases.importSupOrganizationLearners({ supOrganizationLearnerParser }); + + return h.response(supOrganizationLearnerWarningSerializer.serialize({ id: organizationId, warnings })).code(200); +}; + +const replaceSupOrganizationLearners = async function (request, h) { + const organizationId = request.params.id; + const buffer = request.payload; + const supOrganizationLearnerParser = new SupOrganizationLearnerParser(buffer, organizationId, request.i18n); + const warnings = await usecases.replaceSupOrganizationLearners({ + organizationId, + supOrganizationLearnerParser, + }); + + return h.response(supOrganizationLearnerWarningSerializer.serialize({ id: organizationId, warnings })).code(200); +}; + +const sendInvitations = async function (request, h) { + const organizationId = request.params.id; + const emails = request.payload.data.attributes.email.split(','); + const locale = extractLocaleFromRequest(request); + + const organizationInvitations = await usecases.createOrganizationInvitations({ organizationId, emails, locale }); + return h.response(organizationInvitationSerializer.serialize(organizationInvitations)).created(); +}; + +const resendInvitation = async function (request, h) { + const organizationId = request.params.id; + const email = request.payload.data.attributes.email; + const locale = extractLocaleFromRequest(request); + + const organizationInvitation = await usecases.resendOrganizationInvitation({ + organizationId, + email, + locale, + }); + return h.response(organizationInvitationSerializer.serialize(organizationInvitation)); +}; + +const cancelOrganizationInvitation = async function (request, h) { + const organizationInvitationId = request.params.organizationInvitationId; + await usecases.cancelOrganizationInvitation({ organizationInvitationId }); + return h.response().code(204); +}; + +const sendInvitationByLangAndRole = async function (request, h, dependencies = { organizationInvitationSerializer }) { + const organizationId = request.params.id; + const invitationInformation = + await dependencies.organizationInvitationSerializer.deserializeForCreateOrganizationInvitationAndSendEmail( + request.payload + ); + + const organizationInvitation = await usecases.createOrganizationInvitationByAdmin({ + organizationId, + email: invitationInformation.email, + locale: invitationInformation.lang, + role: invitationInformation.role, + }); + return h.response(dependencies.organizationInvitationSerializer.serialize(organizationInvitation)).created(); +}; + +const findPendingInvitations = function (request, h, dependencies = { organizationInvitationSerializer }) { + const organizationId = request.params.id; + + return usecases + .findPendingOrganizationInvitations({ organizationId }) + .then((invitations) => dependencies.organizationInvitationSerializer.serialize(invitations)); +}; + +const getOrganizationLearnersCsvTemplate = async function (request, h, dependencies = { tokenService }) { + const organizationId = request.params.id; + const token = request.query.accessToken; + const userId = dependencies.tokenService.extractUserId(token); + const template = await usecases.getOrganizationLearnersCsvTemplate({ + userId, + organizationId, + i18n: request.i18n, + }); + + return h + .response(template) + .header('Content-Type', 'text/csv;charset=utf-8') + .header('Content-Disposition', `attachment; filename=${request.i18n.__('csv-template.template-name')}.csv`); +}; + +const archiveOrganization = async function (request, h, dependencies = { organizationForAdminSerializer }) { + const organizationId = request.params.id; + const userId = extractUserIdFromRequest(request); + const archivedOrganization = await usecases.archiveOrganization({ organizationId, userId }); + return dependencies.organizationForAdminSerializer.serialize(archivedOrganization); +}; + +const getPaginatedParticipantsForAnOrganization = async function ( + request, + h, + dependencies = { + queryParamsUtils, + organizationParticipantsSerializer, + } +) { + const organizationId = request.params.id; + const { page, filter: filters, sort } = dependencies.queryParamsUtils.extractParameters(request.query); + + if (filters.certificability) { + filters.certificability = mapCertificabilityByLabel(filters.certificability); + } + + const results = await usecases.getPaginatedParticipantsForAnOrganization({ + organizationId, + page, + filters, + sort, + }); + + return dependencies.organizationParticipantsSerializer.serialize(results); +}; + +const findTargetProfileSummariesForAdmin = async function (request) { + const organizationId = request.params.id; + const targetProfileSummaries = await usecases.findOrganizationTargetProfileSummariesForAdmin({ + organizationId, + }); + return targetProfileSummaryForAdminSerializer.serialize(targetProfileSummaries); +}; + +const organizationController = { + create, + createInBatch, + findPaginatedFilteredOrganizations, + findPaginatedFilteredCampaigns, + findPaginatedCampaignManagements, + findPaginatedFilteredMembershipsForAdmin, + findPaginatedFilteredMemberships, + getOrganizationMemberIdentities, + getOrganizationPlacesCapacity, + findOrganizationPlacesLot, + deleteOrganizationPlacesLot, + createOrganizationPlacesLot, + downloadCertificationAttestationsForDivision, + downloadCertificationResults, + findTargetProfiles, + attachTargetProfiles, + getDivisions, + getGroups, + findPaginatedFilteredScoParticipants, + findPaginatedFilteredSupParticipants, + importOrganizationLearnersFromSIECLE, + importSupOrganizationLearners, + replaceSupOrganizationLearners, + sendInvitations, + resendInvitation, + cancelOrganizationInvitation, + sendInvitationByLangAndRole, + findPendingInvitations, + getOrganizationLearnersCsvTemplate, + archiveOrganization, + getPaginatedParticipantsForAnOrganization, + findTargetProfileSummariesForAdmin, +}; + +export { organizationController }; diff --git a/api/lib/application/passwords/index.js b/api/lib/application/passwords/index.js index 37deeaa7209..5f33db2d604 100644 --- a/api/lib/application/passwords/index.js +++ b/api/lib/application/passwords/index.js @@ -1,10 +1,13 @@ -const Joi = require('joi'); -const XRegExp = require('xregexp'); +import Joi from 'joi'; +import XRegExp from 'xregexp'; -const { passwordValidationPattern } = require('../../config.js').account; -const passwordController = require('./password-controller.js'); +import { config } from '../../config.js'; -exports.register = async function (server) { +const { passwordValidationPattern } = config.account; + +import { passwordController } from './password-controller.js'; + +const register = async function (server) { server.route([ { method: 'POST', @@ -61,4 +64,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'passwords-api'; +const name = 'passwords-api'; +export { register, name }; diff --git a/api/lib/application/passwords/password-controller.js b/api/lib/application/passwords/password-controller.js index 36b5ccfa863..5d3d5eb0612 100644 --- a/api/lib/application/passwords/password-controller.js +++ b/api/lib/application/passwords/password-controller.js @@ -1,50 +1,52 @@ -const usecases = require('../../domain/usecases/index.js'); - -const passwordResetSerializer = require('../../infrastructure/serializers/jsonapi/password-reset-serializer.js'); -const userSerializer = require('../../infrastructure/serializers/jsonapi/user-serializer.js'); - -const { extractLocaleFromRequest } = require('../../infrastructure/utils/request-response-utils.js'); - -module.exports = { - async createResetDemand( - request, - h, - dependencies = { - passwordResetSerializer, - } - ) { - const { email } = request.payload.data.attributes; - const locale = extractLocaleFromRequest(request); - - const passwordResetDemand = await usecases.createPasswordResetDemand({ - email, - locale, - }); - const serializedPayload = dependencies.passwordResetSerializer.serialize(passwordResetDemand.attributes); - - return h.response(serializedPayload).created(); - }, - - async checkResetDemand(request, h, dependencies = { userSerializer }) { - const temporaryKey = request.params.temporaryKey; - const user = await usecases.getUserByResetPasswordDemand({ temporaryKey }); - return dependencies.userSerializer.serialize(user); - }, - - async updateExpiredPassword(request, h) { - const passwordResetToken = request.payload.data.attributes['password-reset-token']; - const newPassword = request.payload.data.attributes['new-password']; - const login = await usecases.updateExpiredPassword({ passwordResetToken, newPassword }); - - return h - .response({ - data: { - type: 'reset-expired-password-demands', - attributes: { - login, - }, +import { usecases } from '../../domain/usecases/index.js'; + +import * as passwordResetSerializer from '../../infrastructure/serializers/jsonapi/password-reset-serializer.js'; +import * as userSerializer from '../../infrastructure/serializers/jsonapi/user-serializer.js'; + +import { extractLocaleFromRequest } from '../../infrastructure/utils/request-response-utils.js'; + +const createResetDemand = async function ( + request, + h, + dependencies = { + passwordResetSerializer, + } +) { + const { email } = request.payload.data.attributes; + const locale = extractLocaleFromRequest(request); + + const passwordResetDemand = await usecases.createPasswordResetDemand({ + email, + locale, + }); + const serializedPayload = dependencies.passwordResetSerializer.serialize(passwordResetDemand.attributes); + + return h.response(serializedPayload).created(); +}; + +const checkResetDemand = async function (request, h, dependencies = { userSerializer }) { + const temporaryKey = request.params.temporaryKey; + const user = await usecases.getUserByResetPasswordDemand({ temporaryKey }); + return dependencies.userSerializer.serialize(user); +}; + +const updateExpiredPassword = async function (request, h) { + const passwordResetToken = request.payload.data.attributes['password-reset-token']; + const newPassword = request.payload.data.attributes['new-password']; + const login = await usecases.updateExpiredPassword({ passwordResetToken, newPassword }); + + return h + .response({ + data: { + type: 'reset-expired-password-demands', + attributes: { + login, }, - }) - .created(); - }, + }, + }) + .created(); }; + +const passwordController = { createResetDemand, checkResetDemand, updateExpiredPassword }; + +export { passwordController }; diff --git a/api/lib/application/pole-emploi/index.js b/api/lib/application/pole-emploi/index.js index 34013cb4062..2186cefb21e 100644 --- a/api/lib/application/pole-emploi/index.js +++ b/api/lib/application/pole-emploi/index.js @@ -1,9 +1,9 @@ -const Joi = require('joi'); -const poleEmploiController = require('./pole-emploi-controller.js'); -const poleEmploiErreurDoc = require('../../infrastructure/open-api-doc/pole-emploi/erreur-doc.js'); -const { poleEmploiEnvoisDoc } = require('../../infrastructure/open-api-doc/pole-emploi/envois-doc.js'); +import Joi from 'joi'; +import { poleEmploiController } from './pole-emploi-controller.js'; +import { erreurDoc } from '../../infrastructure/open-api-doc/pole-emploi/erreur-doc.js'; +import { poleEmploiEnvoisDoc } from '../../infrastructure/open-api-doc/pole-emploi/envois-doc.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'GET', @@ -20,9 +20,9 @@ exports.register = async function (server) { status: { 200: poleEmploiEnvoisDoc, 204: poleEmploiEnvoisDoc, - 400: poleEmploiErreurDoc, - 401: poleEmploiErreurDoc, - 403: poleEmploiErreurDoc, + 400: erreurDoc, + 401: erreurDoc, + 403: erreurDoc, }, }, plugins: { @@ -55,4 +55,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'pole-emploi-api'; +const name = 'pole-emploi-api'; +export { register, name }; diff --git a/api/lib/application/pole-emploi/pole-emploi-controller.js b/api/lib/application/pole-emploi/pole-emploi-controller.js index 0e2560fb8ed..1d93ad77871 100644 --- a/api/lib/application/pole-emploi/pole-emploi-controller.js +++ b/api/lib/application/pole-emploi/pole-emploi-controller.js @@ -1,14 +1,16 @@ -const usecases = require('../../domain/usecases/index.js'); +import { usecases } from '../../domain/usecases/index.js'; -module.exports = { - async getSendings(request, h) { - const cursor = request.query.curseur; - const filters = _extractFilters(request); - const { sendings, link } = await usecases.getPoleEmploiSendings({ cursor, filters }); - return h.response(sendings).header('link', link).code(200); - }, +const getSendings = async function (request, h) { + const cursor = request.query.curseur; + const filters = _extractFilters(request); + const { sendings, link } = await usecases.getPoleEmploiSendings({ cursor, filters }); + return h.response(sendings).header('link', link).code(200); }; +const poleEmploiController = { getSendings }; + +export { poleEmploiController }; + function _extractFilters(request) { const filters = {}; if (Object.keys(request.query).includes('enErreur')) { diff --git a/api/lib/application/pre-response-utils.js b/api/lib/application/pre-response-utils.js index 577bafa6a47..df0a40710a1 100644 --- a/api/lib/application/pre-response-utils.js +++ b/api/lib/application/pre-response-utils.js @@ -1,6 +1,6 @@ -const errorManager = require('./error-manager.js'); -const { BaseHttpError } = require('./http-errors.js'); -const { DomainError } = require('../domain/errors.js'); +import * as errorManager from './error-manager.js'; +import { BaseHttpError } from './http-errors.js'; +import { DomainError } from '../domain/errors.js'; function handleDomainAndHttpErrors( request, @@ -18,6 +18,4 @@ function handleDomainAndHttpErrors( return h.continue; } -module.exports = { - handleDomainAndHttpErrors, -}; +export { handleDomainAndHttpErrors }; diff --git a/api/lib/application/preHandlers/assessment-authorization.js b/api/lib/application/preHandlers/assessment-authorization.js index 057ba94d3b4..3665b64b04d 100644 --- a/api/lib/application/preHandlers/assessment-authorization.js +++ b/api/lib/application/preHandlers/assessment-authorization.js @@ -1,20 +1,26 @@ -const assessmentRepository = require('../../infrastructure/repositories/assessment-repository.js'); -const validationErrorSerializer = require('../../infrastructure/serializers/jsonapi/validation-error-serializer.js'); -const requestResponseUtils = require('../../infrastructure/utils/request-response-utils.js'); +import * as assessmentRepository from '../../infrastructure/repositories/assessment-repository.js'; +import * as validationErrorSerializer from '../../infrastructure/serializers/jsonapi/validation-error-serializer.js'; +import * as requestResponseUtils from '../../infrastructure/utils/request-response-utils.js'; -module.exports = { - verify(request, h, dependencies = { requestResponseUtils, assessmentRepository, validationErrorSerializer }) { - const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); - // eslint-disable-next-line no-restricted-syntax - const assessmentId = parseInt(request.params.id); +const verify = function ( + request, + h, + dependencies = { requestResponseUtils, assessmentRepository, validationErrorSerializer } +) { + const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); + // eslint-disable-next-line no-restricted-syntax + const assessmentId = parseInt(request.params.id); - return dependencies.assessmentRepository.getByAssessmentIdAndUserId(assessmentId, userId).catch(() => { - const buildError = _handleWhenInvalidAuthorization('Vous n’êtes pas autorisé à accéder à cette évaluation'); - return h.response(dependencies.validationErrorSerializer.serialize(buildError)).code(401).takeover(); - }); - }, + return dependencies.assessmentRepository.getByAssessmentIdAndUserId(assessmentId, userId).catch(() => { + const buildError = _handleWhenInvalidAuthorization('Vous n’êtes pas autorisé à accéder à cette évaluation'); + return h.response(dependencies.validationErrorSerializer.serialize(buildError)).code(401).takeover(); + }); }; +const assessmentAuthorization = { verify }; + +export { assessmentAuthorization }; + function _handleWhenInvalidAuthorization(errorMessage) { return { data: { diff --git a/api/lib/application/preHandlers/authorization.js b/api/lib/application/preHandlers/authorization.js index de42b2bc03d..e2afcb10606 100644 --- a/api/lib/application/preHandlers/authorization.js +++ b/api/lib/application/preHandlers/authorization.js @@ -1,15 +1,15 @@ -const { NotFoundError } = require('../http-errors.js'); -const certificationCourseRepository = require('../../infrastructure/repositories/certification-course-repository.js'); -const sessionRepository = require('../../infrastructure/repositories/sessions/session-repository.js'); +import { NotFoundError } from '../http-errors.js'; +import * as certificationCourseRepository from '../../infrastructure/repositories/certification-course-repository.js'; +import * as sessionRepository from '../../infrastructure/repositories/sessions/session-repository.js'; -module.exports.verifySessionAuthorization = async (request, h, dependencies = { sessionRepository }) => { +const verifySessionAuthorization = async (request, h, dependencies = { sessionRepository }) => { const userId = request.auth.credentials.userId; const sessionId = request.params.id; return await _isAuthorizedToAccessSession({ userId, sessionId, sessionRepository: dependencies.sessionRepository }); }; -module.exports.verifyCertificationSessionAuthorization = async ( +const verifyCertificationSessionAuthorization = async ( request, h, dependencies = { sessionRepository, certificationCourseRepository } @@ -26,6 +26,10 @@ module.exports.verifyCertificationSessionAuthorization = async ( }); }; +const authorization = { verifySessionAuthorization, verifyCertificationSessionAuthorization }; + +export { authorization, verifySessionAuthorization, verifyCertificationSessionAuthorization }; + async function _isAuthorizedToAccessSession({ userId, sessionId, sessionRepository }) { const hasMembershipAccess = await sessionRepository.doesUserHaveCertificationCenterMembershipForSession( userId, diff --git a/api/lib/application/preHandlers/feature-toggles.js b/api/lib/application/preHandlers/feature-toggles.js index f053ebf7976..cb0ff5c3b54 100644 --- a/api/lib/application/preHandlers/feature-toggles.js +++ b/api/lib/application/preHandlers/feature-toggles.js @@ -1 +1 @@ -module.exports = {}; +export {}; diff --git a/api/lib/application/preHandlers/models/CampaignAuthorization.js b/api/lib/application/preHandlers/models/CampaignAuthorization.js index d609568afe7..650d9e08fe3 100644 --- a/api/lib/application/preHandlers/models/CampaignAuthorization.js +++ b/api/lib/application/preHandlers/models/CampaignAuthorization.js @@ -10,5 +10,4 @@ class CampaignAuthorization { } } -module.exports = CampaignAuthorization; -module.exports.prescriberRoles = prescriberRoles; +export { CampaignAuthorization, prescriberRoles }; diff --git a/api/lib/application/preHandlers/session-supervisor-authorization.js b/api/lib/application/preHandlers/session-supervisor-authorization.js index 28f4cf99f51..4b7fdc338ae 100644 --- a/api/lib/application/preHandlers/session-supervisor-authorization.js +++ b/api/lib/application/preHandlers/session-supervisor-authorization.js @@ -1,38 +1,44 @@ -const supervisorAccessRepository = require('../../infrastructure/repositories/supervisor-access-repository.js'); -const requestResponseUtils = require('../../infrastructure/utils/request-response-utils.js'); - -module.exports = { - async verifyByCertificationCandidateId( - request, - h, - dependencies = { requestResponseUtils, supervisorAccessRepository } - ) { - const supervisorUserId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); - const candidateId = request.params.id; - const isSupervisorForSession = await dependencies.supervisorAccessRepository.isUserSupervisorForSessionCandidate({ - supervisorId: supervisorUserId, - certificationCandidateId: candidateId, - }); - - if (!isSupervisorForSession) { - return h.response().code(401).takeover(); - } - - return true; - }, - - async verifyBySessionId(request, h, dependencies = { requestResponseUtils, supervisorAccessRepository }) { - const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); - const sessionId = request.params.id; - - const isSupervisorForSession = await dependencies.supervisorAccessRepository.isUserSupervisorForSession({ - sessionId, - userId, - }); - - if (!isSupervisorForSession) { - return h.response().code(401).takeover(); - } - return true; - }, +import * as supervisorAccessRepository from '../../infrastructure/repositories/supervisor-access-repository.js'; +import * as requestResponseUtils from '../../infrastructure/utils/request-response-utils.js'; + +const verifyByCertificationCandidateId = async function ( + request, + h, + dependencies = { requestResponseUtils, supervisorAccessRepository } +) { + const supervisorUserId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); + const candidateId = request.params.id; + const isSupervisorForSession = await dependencies.supervisorAccessRepository.isUserSupervisorForSessionCandidate({ + supervisorId: supervisorUserId, + certificationCandidateId: candidateId, + }); + + if (!isSupervisorForSession) { + return h.response().code(401).takeover(); + } + + return true; }; + +const verifyBySessionId = async function ( + request, + h, + dependencies = { requestResponseUtils, supervisorAccessRepository } +) { + const userId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); + const sessionId = request.params.id; + + const isSupervisorForSession = await dependencies.supervisorAccessRepository.isUserSupervisorForSession({ + sessionId, + userId, + }); + + if (!isSupervisorForSession) { + return h.response().code(401).takeover(); + } + return true; +}; + +const assessmentSupervisorAuthorization = { verifyByCertificationCandidateId, verifyBySessionId }; + +export { assessmentSupervisorAuthorization }; diff --git a/api/lib/application/preHandlers/user-existence-verification.js b/api/lib/application/preHandlers/user-existence-verification.js index d0c3afeda7a..36b1c1018e9 100644 --- a/api/lib/application/preHandlers/user-existence-verification.js +++ b/api/lib/application/preHandlers/user-existence-verification.js @@ -1,14 +1,16 @@ -const userRepository = require('../../../lib/infrastructure/repositories/user-repository.js'); -const errorSerializer = require('../../../lib/infrastructure/serializers/jsonapi/validation-error-serializer.js'); -const { UserNotFoundError } = require('../../domain/errors.js'); +import * as userRepository from '../../../lib/infrastructure/repositories/user-repository.js'; +import * as errorSerializer from '../../../lib/infrastructure/serializers/jsonapi/validation-error-serializer.js'; +import { UserNotFoundError } from '../../domain/errors.js'; -module.exports = { - verifyById(request, h, dependencies = { userRepository, errorSerializer }) { - return dependencies.userRepository.get(request.params.id).catch((err) => { - if (err instanceof UserNotFoundError) { - const serializedError = dependencies.errorSerializer.serialize(new UserNotFoundError().getErrorMessage()); - return h.response(serializedError).code(404).takeover(); - } - }); - }, +const verifyById = function (request, h, dependencies = { userRepository, errorSerializer }) { + return dependencies.userRepository.get(request.params.id).catch((err) => { + if (err instanceof UserNotFoundError) { + const serializedError = dependencies.errorSerializer.serialize(new UserNotFoundError().getErrorMessage()); + return h.response(serializedError).code(404).takeover(); + } + }); }; + +const userVerification = { verifyById }; + +export { userVerification }; diff --git a/api/lib/application/prescribers/index.js b/api/lib/application/prescribers/index.js index 29a59592dee..f70a89fc4ec 100644 --- a/api/lib/application/prescribers/index.js +++ b/api/lib/application/prescribers/index.js @@ -1,10 +1,10 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const securityPreHandlers = require('../security-pre-handlers.js'); -const prescriberController = require('./prescriber-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { prescriberController } from './prescriber-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'GET', @@ -33,4 +33,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'prescribers-api'; +const name = 'prescribers-api'; +export { register, name }; diff --git a/api/lib/application/prescribers/prescriber-controller.js b/api/lib/application/prescribers/prescriber-controller.js index 18171439d8b..1230691ccca 100644 --- a/api/lib/application/prescribers/prescriber-controller.js +++ b/api/lib/application/prescribers/prescriber-controller.js @@ -1,13 +1,15 @@ -const prescriberSerializer = require('../../infrastructure/serializers/jsonapi/prescriber-serializer.js'); +import * as prescriberSerializer from '../../infrastructure/serializers/jsonapi/prescriber-serializer.js'; -const usecases = require('../../domain/usecases/index.js'); +import { usecases } from '../../domain/usecases/index.js'; -module.exports = { - get(request, h, dependencies = { prescriberSerializer }) { - const authenticatedUserId = request.auth.credentials.userId; +const get = function (request, h, dependencies = { prescriberSerializer }) { + const authenticatedUserId = request.auth.credentials.userId; - return usecases - .getPrescriber({ userId: authenticatedUserId }) - .then((prescriber) => dependencies.prescriberSerializer.serialize(prescriber)); - }, + return usecases + .getPrescriber({ userId: authenticatedUserId }) + .then((prescriber) => dependencies.prescriberSerializer.serialize(prescriber)); }; + +const prescriberController = { get }; + +export { prescriberController }; diff --git a/api/lib/application/progressions/index.js b/api/lib/application/progressions/index.js index af87c9159ea..c488d02d0ed 100644 --- a/api/lib/application/progressions/index.js +++ b/api/lib/application/progressions/index.js @@ -1,11 +1,12 @@ -const ProgressionController = require('./progression-controller.js'); -exports.register = async function (server) { +import { progressionController } from './progression-controller.js'; + +const register = async function (server) { server.route([ { method: 'GET', path: '/api/progressions/{id}', config: { - handler: ProgressionController.get, + handler: progressionController.get, tags: ['api'], notes: [ '- **Route nécessitant une authentification**\n' + @@ -16,4 +17,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'progressions-api'; +const name = 'progressions-api'; +export { register, name }; diff --git a/api/lib/application/progressions/progression-controller.js b/api/lib/application/progressions/progression-controller.js index 711607299e3..2aea6a15bc8 100644 --- a/api/lib/application/progressions/progression-controller.js +++ b/api/lib/application/progressions/progression-controller.js @@ -1,17 +1,19 @@ -const ProgressionSerializer = require('../../infrastructure/serializers/jsonapi/progression-serializer.js'); -const usecases = require('../../domain/usecases/index.js'); +import * as ProgressionSerializer from '../../infrastructure/serializers/jsonapi/progression-serializer.js'; +import { usecases } from '../../domain/usecases/index.js'; -module.exports = { - get(request) { - const userId = request.auth.credentials.userId; +const get = function (request) { + const userId = request.auth.credentials.userId; - const progressionId = request.params.id; + const progressionId = request.params.id; - return usecases - .getProgression({ - progressionId, - userId, - }) - .then(ProgressionSerializer.serialize); - }, + return usecases + .getProgression({ + progressionId, + userId, + }) + .then(ProgressionSerializer.serialize); }; + +const progressionController = { get }; + +export { progressionController }; diff --git a/api/lib/application/saml/index.js b/api/lib/application/saml/index.js index 56b4b80912c..f3676b2a10b 100644 --- a/api/lib/application/saml/index.js +++ b/api/lib/application/saml/index.js @@ -1,6 +1,6 @@ -const samlController = require('./saml-controller.js'); +import { samlController } from './saml-controller.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'GET', @@ -34,4 +34,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'saml-api'; +const name = 'saml-api'; +export { register, name }; diff --git a/api/lib/application/saml/saml-controller.js b/api/lib/application/saml/saml-controller.js index c2be05c8c0b..d4b9b4b5dac 100644 --- a/api/lib/application/saml/saml-controller.js +++ b/api/lib/application/saml/saml-controller.js @@ -1,38 +1,40 @@ -const saml = require('../../infrastructure/saml.js'); -const usecases = require('../../domain/usecases/index.js'); -const logger = require('../../infrastructure/logger.js'); -const tokenService = require('../../domain/services/token-service.js'); -const settings = require('../../config.js'); +import * as saml from '../../infrastructure/saml.js'; +import { usecases } from '../../domain/usecases/index.js'; +import { logger } from '../../infrastructure/logger.js'; +import { tokenService } from '../../domain/services/token-service.js'; +import { config } from '../../config.js'; -module.exports = { - metadata(request, h) { - return h.response(saml.getServiceProviderMetadata()).type('application/xml'); - }, +const metadata = function (request, h) { + return h.response(saml.getServiceProviderMetadata()).type('application/xml'); +}; - login(request, h) { - return h.redirect(saml.createLoginRequest()); - }, +const login = function (request, h) { + return h.redirect(saml.createLoginRequest()); +}; - assert: async function (request, h) { - let userAttributes; - try { - userAttributes = await saml.parsePostResponse(request.payload); - } catch (e) { - logger.error({ e }, 'SAML: Error while parsing post response'); - return h.response(e.toString()).code(400); - } +const assert = async function (request, h) { + let userAttributes; + try { + userAttributes = await saml.parsePostResponse(request.payload); + } catch (e) { + logger.error({ e }, 'SAML: Error while parsing post response'); + return h.response(e.toString()).code(400); + } - try { - const redirectionUrl = await usecases.getExternalAuthenticationRedirectionUrl({ - userAttributes, - tokenService, - settings, - }); + try { + const redirectionUrl = await usecases.getExternalAuthenticationRedirectionUrl({ + userAttributes, + tokenService, + config, + }); - return h.redirect(redirectionUrl); - } catch (e) { - logger.error({ e }, 'SAML: Error while get external authentication redirection url'); - return h.response(e.toString()).code(500); - } - }, + return h.redirect(redirectionUrl); + } catch (e) { + logger.error({ e }, 'SAML: Error while get external authentication redirection url'); + return h.response(e.toString()).code(500); + } }; + +const samlController = { metadata, login, assert }; + +export { samlController }; diff --git a/api/lib/application/sco-organization-learners/index.js b/api/lib/application/sco-organization-learners/index.js index ca341c15663..7ed94e63876 100644 --- a/api/lib/application/sco-organization-learners/index.js +++ b/api/lib/application/sco-organization-learners/index.js @@ -1,18 +1,20 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { sendJsonApiError, UnprocessableEntityError, BadRequestError } = require('../http-errors.js'); -const scoOrganizationLearnerController = require('./sco-organization-learner-controller.js'); -const XRegExp = require('xregexp'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const { passwordValidationPattern } = require('../../config.js').account; +import { sendJsonApiError, UnprocessableEntityError, BadRequestError } from '../http-errors.js'; +import { scoOrganizationLearnerController } from './sco-organization-learner-controller.js'; +import XRegExp from 'xregexp'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import { config } from '../../config.js'; + +const { passwordValidationPattern } = config.account; const inePattern = new RegExp('^[0-9]{9}[a-zA-Z]{2}$'); const inaPattern = new RegExp('^[0-9]{10}[a-zA-Z]{1}$'); -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'POST', @@ -264,4 +266,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'sco-organization-learners-api'; +const name = 'sco-organization-learners-api'; +export { register, name }; diff --git a/api/lib/application/sco-organization-learners/sco-organization-learner-controller.js b/api/lib/application/sco-organization-learners/sco-organization-learner-controller.js index c6c31d92866..1f2708953e7 100644 --- a/api/lib/application/sco-organization-learners/sco-organization-learner-controller.js +++ b/api/lib/application/sco-organization-learners/sco-organization-learner-controller.js @@ -1,169 +1,194 @@ -const usecases = require('../../domain/usecases/index.js'); -const scoOrganizationLearnerSerializer = require('../../infrastructure/serializers/jsonapi/sco-organization-learner-serializer.js'); -const requestReponseUtils = require('../../infrastructure/utils/request-response-utils.js'); -const studentInformationForAccountRecoverySerializer = require('../../infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer.js'); - -module.exports = { - async reconcileScoOrganizationLearnerManually(request, h, dependencies = { scoOrganizationLearnerSerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - const payload = request.payload.data.attributes; - const campaignCode = payload['campaign-code']; - const withReconciliation = request.query.withReconciliation === 'true'; - - const reconciliationInfo = { - id: authenticatedUserId, - firstName: payload['first-name'], - lastName: payload['last-name'], - birthdate: payload['birthdate'], - }; - - const organizationLearner = await usecases.reconcileScoOrganizationLearnerManually({ - campaignCode, - reconciliationInfo, - withReconciliation, - }); - - let response; - if (withReconciliation) { - const serializedData = dependencies.scoOrganizationLearnerSerializer.serializeIdentity(organizationLearner); - response = h.response(serializedData).code(200); - } else { - response = h.response().code(204); - } - return response; - }, - - async reconcileScoOrganizationLearnerAutomatically(request, h, dependencies = { scoOrganizationLearnerSerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - const payload = request.payload.data.attributes; - const campaignCode = payload['campaign-code']; - const organizationLearner = await usecases.reconcileScoOrganizationLearnerAutomatically({ - userId: authenticatedUserId, - campaignCode, - }); - - return h.response(dependencies.scoOrganizationLearnerSerializer.serializeIdentity(organizationLearner)); - }, - - async generateUsername(request, h, dependencies = { scoOrganizationLearnerSerializer }) { - const payload = request.payload.data.attributes; - const { 'campaign-code': campaignCode } = payload; - - const studentInformation = { - firstName: payload['first-name'], - lastName: payload['last-name'], - birthdate: payload['birthdate'], - }; - - const username = await usecases.generateUsername({ campaignCode, studentInformation }); - - const scoOrganizationLearner = { - ...studentInformation, - username, - campaignCode, - }; - - return h - .response(dependencies.scoOrganizationLearnerSerializer.serializeWithUsernameGeneration(scoOrganizationLearner)) - .code(200); - }, - - async createAndReconcileUserToOrganizationLearner( - request, - h, - dependencies = { - scoOrganizationLearnerSerializer, - requestReponseUtils, - } - ) { - const payload = request.payload.data.attributes; - const userAttributes = { - firstName: payload['first-name'], - lastName: payload['last-name'], - birthdate: payload['birthdate'], - email: payload.email, - username: payload.username, - withUsername: payload['with-username'], - }; - const locale = dependencies.requestReponseUtils.extractLocaleFromRequest(request); - - await usecases.createAndReconcileUserToOrganizationLearner({ - userAttributes, - password: payload.password, - campaignCode: payload['campaign-code'], - locale, - }); - - return h.response().code(204); - }, - - async createUserAndReconcileToOrganizationLearnerFromExternalUser( - request, - h, - dependencies = { scoOrganizationLearnerSerializer } - ) { - const { birthdate, 'campaign-code': campaignCode, 'external-user-token': token } = request.payload.data.attributes; - - const accessToken = await usecases.createUserAndReconcileToOrganizationLearnerFromExternalUser({ - birthdate, - campaignCode, - token, - }); - - const scoOrganizationLearner = { - accessToken, - }; - - return h - .response(dependencies.scoOrganizationLearnerSerializer.serializeExternal(scoOrganizationLearner)) - .code(200); - }, - - async updatePassword(request, h, dependencies = { scoOrganizationLearnerSerializer }) { - const payload = request.payload.data.attributes; - const userId = request.auth.credentials.userId; - const organizationId = payload['organization-id']; - const organizationLearnerId = payload['organization-learner-id']; - - const generatedPassword = await usecases.updateOrganizationLearnerDependentUserPassword({ - userId, - organizationId, - organizationLearnerId, - }); - - const scoOrganizationLearner = { - generatedPassword, - }; - - return h - .response(dependencies.scoOrganizationLearnerSerializer.serializeCredentialsForDependent(scoOrganizationLearner)) - .code(200); - }, - - async generateUsernameWithTemporaryPassword(request, h, dependencies = { scoOrganizationLearnerSerializer }) { - const payload = request.payload.data.attributes; - const organizationId = payload['organization-id']; - const organizationLearnerId = payload['organization-learner-id']; - - const result = await usecases.generateUsernameWithTemporaryPassword({ - organizationLearnerId, - organizationId, - }); - - return h.response(dependencies.scoOrganizationLearnerSerializer.serializeCredentialsForDependent(result)).code(200); - }, - - async checkScoAccountRecovery(request, h, dependencies = { studentInformationForAccountRecoverySerializer }) { - const studentInformation = await dependencies.studentInformationForAccountRecoverySerializer.deserialize( - request.payload - ); - - const studentInformationForAccountRecovery = await usecases.checkScoAccountRecovery({ - studentInformation, - }); - - return h.response( - dependencies.studentInformationForAccountRecoverySerializer.serialize(studentInformationForAccountRecovery) - ); - }, +import { usecases } from '../../domain/usecases/index.js'; +import * as scoOrganizationLearnerSerializer from '../../infrastructure/serializers/jsonapi/sco-organization-learner-serializer.js'; +import * as requestReponseUtils from '../../infrastructure/utils/request-response-utils.js'; +import * as studentInformationForAccountRecoverySerializer from '../../infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer.js'; + +const reconcileScoOrganizationLearnerManually = async function ( + request, + h, + dependencies = { scoOrganizationLearnerSerializer } +) { + const authenticatedUserId = request.auth.credentials.userId; + const payload = request.payload.data.attributes; + const campaignCode = payload['campaign-code']; + const withReconciliation = request.query.withReconciliation === 'true'; + + const reconciliationInfo = { + id: authenticatedUserId, + firstName: payload['first-name'], + lastName: payload['last-name'], + birthdate: payload['birthdate'], + }; + + const organizationLearner = await usecases.reconcileScoOrganizationLearnerManually({ + campaignCode, + reconciliationInfo, + withReconciliation, + }); + + let response; + if (withReconciliation) { + const serializedData = dependencies.scoOrganizationLearnerSerializer.serializeIdentity(organizationLearner); + response = h.response(serializedData).code(200); + } else { + response = h.response().code(204); + } + return response; }; + +const reconcileScoOrganizationLearnerAutomatically = async function ( + request, + h, + dependencies = { scoOrganizationLearnerSerializer } +) { + const authenticatedUserId = request.auth.credentials.userId; + const payload = request.payload.data.attributes; + const campaignCode = payload['campaign-code']; + const organizationLearner = await usecases.reconcileScoOrganizationLearnerAutomatically({ + userId: authenticatedUserId, + campaignCode, + }); + + return h.response(dependencies.scoOrganizationLearnerSerializer.serializeIdentity(organizationLearner)); +}; + +const generateUsername = async function (request, h, dependencies = { scoOrganizationLearnerSerializer }) { + const payload = request.payload.data.attributes; + const { 'campaign-code': campaignCode } = payload; + + const studentInformation = { + firstName: payload['first-name'], + lastName: payload['last-name'], + birthdate: payload['birthdate'], + }; + + const username = await usecases.generateUsername({ campaignCode, studentInformation }); + + const scoOrganizationLearner = { + ...studentInformation, + username, + campaignCode, + }; + + return h + .response(dependencies.scoOrganizationLearnerSerializer.serializeWithUsernameGeneration(scoOrganizationLearner)) + .code(200); +}; + +const createAndReconcileUserToOrganizationLearner = async function ( + request, + h, + dependencies = { + scoOrganizationLearnerSerializer, + requestReponseUtils, + } +) { + const payload = request.payload.data.attributes; + const userAttributes = { + firstName: payload['first-name'], + lastName: payload['last-name'], + birthdate: payload['birthdate'], + email: payload.email, + username: payload.username, + withUsername: payload['with-username'], + }; + const locale = dependencies.requestReponseUtils.extractLocaleFromRequest(request); + + await usecases.createAndReconcileUserToOrganizationLearner({ + userAttributes, + password: payload.password, + campaignCode: payload['campaign-code'], + locale, + }); + + return h.response().code(204); +}; + +const createUserAndReconcileToOrganizationLearnerFromExternalUser = async function ( + request, + h, + dependencies = { scoOrganizationLearnerSerializer } +) { + const { birthdate, 'campaign-code': campaignCode, 'external-user-token': token } = request.payload.data.attributes; + + const accessToken = await usecases.createUserAndReconcileToOrganizationLearnerFromExternalUser({ + birthdate, + campaignCode, + token, + }); + + const scoOrganizationLearner = { + accessToken, + }; + + return h.response(dependencies.scoOrganizationLearnerSerializer.serializeExternal(scoOrganizationLearner)).code(200); +}; + +const updatePassword = async function (request, h, dependencies = { scoOrganizationLearnerSerializer }) { + const payload = request.payload.data.attributes; + const userId = request.auth.credentials.userId; + const organizationId = payload['organization-id']; + const organizationLearnerId = payload['organization-learner-id']; + + const generatedPassword = await usecases.updateOrganizationLearnerDependentUserPassword({ + userId, + organizationId, + organizationLearnerId, + }); + + const scoOrganizationLearner = { + generatedPassword, + }; + + return h + .response(dependencies.scoOrganizationLearnerSerializer.serializeCredentialsForDependent(scoOrganizationLearner)) + .code(200); +}; + +const generateUsernameWithTemporaryPassword = async function ( + request, + h, + dependencies = { scoOrganizationLearnerSerializer } +) { + const payload = request.payload.data.attributes; + const organizationId = payload['organization-id']; + const organizationLearnerId = payload['organization-learner-id']; + + const result = await usecases.generateUsernameWithTemporaryPassword({ + organizationLearnerId, + organizationId, + }); + + return h.response(dependencies.scoOrganizationLearnerSerializer.serializeCredentialsForDependent(result)).code(200); +}; + +const checkScoAccountRecovery = async function ( + request, + h, + dependencies = { studentInformationForAccountRecoverySerializer } +) { + const studentInformation = await dependencies.studentInformationForAccountRecoverySerializer.deserialize( + request.payload + ); + + const studentInformationForAccountRecovery = await usecases.checkScoAccountRecovery({ + studentInformation, + }); + + return h.response( + dependencies.studentInformationForAccountRecoverySerializer.serialize(studentInformationForAccountRecovery) + ); +}; + +const scoOrganizationLearnerController = { + reconcileScoOrganizationLearnerManually, + reconcileScoOrganizationLearnerAutomatically, + generateUsername, + createAndReconcileUserToOrganizationLearner, + createUserAndReconcileToOrganizationLearnerFromExternalUser, + updatePassword, + generateUsernameWithTemporaryPassword, + checkScoAccountRecovery, +}; + +export { scoOrganizationLearnerController }; diff --git a/api/lib/application/scorecards/index.js b/api/lib/application/scorecards/index.js index 06fefaed2c4..8a0e27d1d41 100644 --- a/api/lib/application/scorecards/index.js +++ b/api/lib/application/scorecards/index.js @@ -1,6 +1,6 @@ -const scorecardController = require('./scorecard-controller.js'); +import { scorecardController } from './scorecard-controller.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'GET', @@ -31,4 +31,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'scorecards-api'; +const name = 'scorecards-api'; +export { register, name }; diff --git a/api/lib/application/scorecards/scorecard-controller.js b/api/lib/application/scorecards/scorecard-controller.js index 9b2af650682..8e37c93527c 100644 --- a/api/lib/application/scorecards/scorecard-controller.js +++ b/api/lib/application/scorecards/scorecard-controller.js @@ -1,34 +1,35 @@ -const scorecardSerializer = require('../../infrastructure/serializers/jsonapi/scorecard-serializer.js'); -const tutorialSerializer = require('../../infrastructure/serializers/jsonapi/tutorial-serializer.js'); -const requestResponseUtils = require('../../infrastructure/utils/request-response-utils.js'); -const usecases = require('../../domain/usecases/index.js'); +import * as scorecardSerializer from '../../infrastructure/serializers/jsonapi/scorecard-serializer.js'; +import * as tutorialSerializer from '../../infrastructure/serializers/jsonapi/tutorial-serializer.js'; +import * as requestResponseUtils from '../../infrastructure/utils/request-response-utils.js'; +import { usecases } from '../../domain/usecases/index.js'; -module.exports = { - getScorecard(request, h, dependencies = { requestResponseUtils, scorecardSerializer }) { - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - const authenticatedUserId = request.auth.credentials.userId; - const scorecardId = request.params.id; +const getScorecard = function (request, h, dependencies = { requestResponseUtils, scorecardSerializer }) { + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + const authenticatedUserId = request.auth.credentials.userId; + const scorecardId = request.params.id; - return usecases - .getScorecard({ - authenticatedUserId, - scorecardId, - locale, - }) - .then(dependencies.scorecardSerializer.serialize); - }, + return usecases + .getScorecard({ + authenticatedUserId, + scorecardId, + locale, + }) + .then(dependencies.scorecardSerializer.serialize); +}; - findTutorials(request, h, dependencies = { requestResponseUtils, tutorialSerializer }) { - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - const authenticatedUserId = request.auth.credentials.userId; - const scorecardId = request.params.id; +const findTutorials = function (request, h, dependencies = { requestResponseUtils, tutorialSerializer }) { + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + const authenticatedUserId = request.auth.credentials.userId; + const scorecardId = request.params.id; - return usecases - .findTutorials({ - authenticatedUserId, - scorecardId, - locale, - }) - .then(dependencies.tutorialSerializer.serialize); - }, + return usecases + .findTutorials({ + authenticatedUserId, + scorecardId, + locale, + }) + .then(dependencies.tutorialSerializer.serialize); }; + +const scorecardController = { getScorecard, findTutorials }; +export { scorecardController }; diff --git a/api/lib/application/scoring-simulator/index.js b/api/lib/application/scoring-simulator/index.js index 9a46695f9f6..56b82dcdf27 100644 --- a/api/lib/application/scoring-simulator/index.js +++ b/api/lib/application/scoring-simulator/index.js @@ -1,8 +1,8 @@ -const Joi = require('joi'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const scoringSimulatorController = require('./scoring-simulator-controller.js'); +import Joi from 'joi'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { scoringSimulatorController } from './scoring-simulator-controller.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'POST', @@ -105,4 +105,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'scoring-simulator-api'; +const name = 'scoring-simulator-api'; +export { register, name }; diff --git a/api/lib/application/scoring-simulator/scoring-simulator-controller.js b/api/lib/application/scoring-simulator/scoring-simulator-controller.js index 87d78f51311..4860ff344c6 100644 --- a/api/lib/application/scoring-simulator/scoring-simulator-controller.js +++ b/api/lib/application/scoring-simulator/scoring-simulator-controller.js @@ -1,37 +1,39 @@ -const usecases = require('../../domain/usecases/index.js'); -const { extractLocaleFromRequest } = require('../../infrastructure/utils/request-response-utils.js'); -const scoringSimulationContextSerializer = require('../../infrastructure/serializers/json/scoring-simulator/scoring-simulation-context-serializer.js'); -const scoringSimulationDatasetSerializer = require('../../infrastructure/serializers/json/scoring-simulator/scoring-simulation-dataset-serializer.js'); - -module.exports = { - async calculateOldScores(request, h) { - const dataset = scoringSimulationDatasetSerializer.deserialize(request); - - const results = await usecases.simulateOldScoring({ simulations: dataset.simulations }); - - return h.response({ - datasetId: dataset.id, - results, - date: new Date().toISOString(), - }); - }, - - async calculateFlashScores(request, h) { - const context = scoringSimulationContextSerializer.deserialize(request); - const dataset = scoringSimulationDatasetSerializer.deserialize(request); - const locale = extractLocaleFromRequest(request); - - const results = await usecases.simulateFlashScoring({ - context, - simulations: dataset.simulations, - locale, - }); - - return h.response({ - contextId: context.id, - datasetId: dataset.id, - results, - date: new Date().toISOString(), - }); - }, +import { usecases } from '../../domain/usecases/index.js'; +import { extractLocaleFromRequest } from '../../infrastructure/utils/request-response-utils.js'; +import * as scoringSimulationContextSerializer from '../../infrastructure/serializers/json/scoring-simulator/scoring-simulation-context-serializer.js'; +import * as scoringSimulationDatasetSerializer from '../../infrastructure/serializers/json/scoring-simulator/scoring-simulation-dataset-serializer.js'; + +const calculateOldScores = async function (request, h) { + const dataset = scoringSimulationDatasetSerializer.deserialize(request); + + const results = await usecases.simulateOldScoring({ simulations: dataset.simulations }); + + return h.response({ + datasetId: dataset.id, + results, + date: new Date().toISOString(), + }); }; + +const calculateFlashScores = async function (request, h) { + const context = scoringSimulationContextSerializer.deserialize(request); + const dataset = scoringSimulationDatasetSerializer.deserialize(request); + const locale = extractLocaleFromRequest(request); + + const results = await usecases.simulateFlashScoring({ + context, + simulations: dataset.simulations, + locale, + }); + + return h.response({ + contextId: context.id, + datasetId: dataset.id, + results, + date: new Date().toISOString(), + }); +}; + +const scoringSimulatorController = { calculateOldScores, calculateFlashScores }; + +export { scoringSimulatorController }; diff --git a/api/lib/application/security-pre-handlers.js b/api/lib/application/security-pre-handlers.js index a204ba6e008..3f90e1c4439 100644 --- a/api/lib/application/security-pre-handlers.js +++ b/api/lib/application/security-pre-handlers.js @@ -1,32 +1,36 @@ -/* eslint-disable no-restricted-syntax */ -const bluebird = require('bluebird'); -const checkIfUserIsBlockedUseCase = require('./usecases/checkIfUserIsBlocked.js'); -const checkAdminMemberHasRoleSuperAdminUseCase = require('./usecases/checkAdminMemberHasRoleSuperAdmin.js'); -const checkAdminMemberHasRoleCertifUseCase = require('./usecases/checkAdminMemberHasRoleCertif.js'); -const checkAdminMemberHasRoleSupportUseCase = require('./usecases/checkAdminMemberHasRoleSupport.js'); -const checkAdminMemberHasRoleMetierUseCase = require('./usecases/checkAdminMemberHasRoleMetier.js'); -const checkUserIsAdminInOrganizationUseCase = require('./usecases/checkUserIsAdminInOrganization.js'); -const checkUserBelongsToOrganizationManagingStudentsUseCase = require('./usecases/checkUserBelongsToOrganizationManagingStudents.js'); -const checkUserBelongsToLearnersOrganizationUseCase = require('./usecases/checkUserBelongsToLearnersOrganization.js'); -const checkUserBelongsToScoOrganizationAndManagesStudentsUseCase = require('./usecases/checkUserBelongsToScoOrganizationAndManagesStudents.js'); -const checkUserBelongsToSupOrganizationAndManagesStudentsUseCase = require('./usecases/checkUserBelongsToSupOrganizationAndManagesStudents.js'); -const checkUserOwnsCertificationCourseUseCase = require('./usecases/checkUserOwnsCertificationCourse.js'); -const checkUserBelongsToOrganizationUseCase = require('./usecases/checkUserBelongsToOrganization.js'); -const checkUserIsAdminAndManagingStudentsForOrganization = require('./usecases/checkUserIsAdminAndManagingStudentsForOrganization.js'); -const checkUserIsMemberOfAnOrganizationUseCase = require('./usecases/checkUserIsMemberOfAnOrganization.js'); -const checkUserIsMemberOfCertificationCenterUsecase = require('./usecases/checkUserIsMemberOfCertificationCenter.js'); -const checkUserIsMemberOfCertificationCenterSessionUsecase = require('./usecases/checkUserIsMemberOfCertificationCenterSession.js'); -const checkAuthorizationToManageCampaignUsecase = require('./usecases/checkAuthorizationToManageCampaign.js'); -const checkOrganizationIsScoAndManagingStudentUsecase = require('./usecases/checkOrganizationIsScoAndManagingStudent'); -const checkPix1dEnabled = require('./usecases/checkPix1dEnabled.js'); -const certificationIssueReportRepository = require('../infrastructure/repositories/certification-issue-report-repository.js'); -const organizationRepository = require('../infrastructure/repositories/organization-repository'); -const Organization = require('../../lib/domain/models/Organization.js'); -const { ForbiddenAccess, NotFoundError } = require('../..//lib/domain/errors.js'); -const apps = require('../..//lib/domain/constants.js'); - -const JSONAPIError = require('jsonapi-serializer').Error; -const has = require('lodash/has'); +import bluebird from 'bluebird'; +import * as checkIfUserIsBlockedUseCase from './usecases/checkIfUserIsBlocked.js'; +import * as checkAdminMemberHasRoleSuperAdminUseCase from './usecases/checkAdminMemberHasRoleSuperAdmin.js'; +import * as checkAdminMemberHasRoleCertifUseCase from './usecases/checkAdminMemberHasRoleCertif.js'; +import * as checkAdminMemberHasRoleSupportUseCase from './usecases/checkAdminMemberHasRoleSupport.js'; +import * as checkAdminMemberHasRoleMetierUseCase from './usecases/checkAdminMemberHasRoleMetier.js'; +import * as checkUserIsAdminInOrganizationUseCase from './usecases/checkUserIsAdminInOrganization.js'; +import * as checkUserBelongsToOrganizationManagingStudentsUseCase from './usecases/checkUserBelongsToOrganizationManagingStudents.js'; +import * as checkUserBelongsToLearnersOrganizationUseCase from './usecases/checkUserBelongsToLearnersOrganization.js'; +import * as checkUserBelongsToScoOrganizationAndManagesStudentsUseCase from './usecases/checkUserBelongsToScoOrganizationAndManagesStudents.js'; +import * as checkUserBelongsToSupOrganizationAndManagesStudentsUseCase from './usecases/checkUserBelongsToSupOrganizationAndManagesStudents.js'; +import * as checkUserOwnsCertificationCourseUseCase from './usecases/checkUserOwnsCertificationCourse.js'; +import * as checkUserBelongsToOrganizationUseCase from './usecases/checkUserBelongsToOrganization.js'; +import * as checkUserIsAdminAndManagingStudentsForOrganization from './usecases/checkUserIsAdminAndManagingStudentsForOrganization.js'; +import * as checkUserIsMemberOfAnOrganizationUseCase from './usecases/checkUserIsMemberOfAnOrganization.js'; +import * as checkUserIsMemberOfCertificationCenterUsecase from './usecases/checkUserIsMemberOfCertificationCenter.js'; +import * as checkUserIsMemberOfCertificationCenterSessionUsecase from './usecases/checkUserIsMemberOfCertificationCenterSession.js'; +import * as checkAuthorizationToManageCampaignUsecase from './usecases/checkAuthorizationToManageCampaign.js'; +import * as checkOrganizationIsScoAndManagingStudentUsecase from './usecases/checkOrganizationIsScoAndManagingStudent.js'; +import * as checkPix1dEnabled from './usecases/checkPix1dEnabled.js'; +import * as certificationIssueReportRepository from '../infrastructure/repositories/certification-issue-report-repository.js'; +import * as organizationRepository from '../infrastructure/repositories/organization-repository.js'; +import { Organization } from '../../lib/domain/models/Organization.js'; +import { ForbiddenAccess, NotFoundError } from '../..//lib/domain/errors.js'; +import { PIX_ADMIN } from '../..//lib/domain/constants.js'; + +import jsonapiSerializer from 'jsonapi-serializer'; + +const { Error: JSONAPIError } = jsonapiSerializer; + +const { has } = lodash; + +import lodash from 'lodash'; function _replyForbiddenError(h) { const errorHttpStatusCode = 403; @@ -72,7 +76,7 @@ async function checkAdminMemberHasRoleSuperAdmin( try { const hasRoleSuperAdmin = await dependencies.checkAdminMemberHasRoleSuperAdminUseCase.execute(userId); if (!hasRoleSuperAdmin) { - throw new ForbiddenAccess(apps.PIX_ADMIN.NOT_ALLOWED_MSG); + throw new ForbiddenAccess(PIX_ADMIN.NOT_ALLOWED_MSG); } return h.response(true); } catch (e) { @@ -90,7 +94,7 @@ async function checkAdminMemberHasRoleCertif(request, h, dependencies = { checkA try { const hasRoleCertif = await dependencies.checkAdminMemberHasRoleCertifUseCase.execute(userId); if (!hasRoleCertif) { - throw new ForbiddenAccess(apps.PIX_ADMIN.NOT_ALLOWED_MSG); + throw new ForbiddenAccess(PIX_ADMIN.NOT_ALLOWED_MSG); } return h.response(true); } catch (e) { @@ -108,7 +112,7 @@ async function checkAdminMemberHasRoleSupport(request, h, dependencies = { check try { const hasRoleSupport = await dependencies.checkAdminMemberHasRoleSupportUseCase.execute(userId); if (!hasRoleSupport) { - throw new ForbiddenAccess(apps.PIX_ADMIN.NOT_ALLOWED_MSG); + throw new ForbiddenAccess(PIX_ADMIN.NOT_ALLOWED_MSG); } return h.response(true); } catch (e) { @@ -126,7 +130,7 @@ async function checkAdminMemberHasRoleMetier(request, h, dependencies = { checkA try { const hasRoleMetier = await dependencies.checkAdminMemberHasRoleMetierUseCase.execute(userId); if (!hasRoleMetier) { - throw new ForbiddenAccess(apps.PIX_ADMIN.NOT_ALLOWED_MSG); + throw new ForbiddenAccess(PIX_ADMIN.NOT_ALLOWED_MSG); } return h.response(true); } catch (e) { @@ -140,7 +144,10 @@ function checkRequestedUserIsAuthenticatedUser(request, h) { } const authenticatedUserId = request.auth.credentials.userId; - const requestedUserId = parseInt(request.params.userId) || parseInt(request.params.id); + + // We cannot guarantee that callers will enforce the type to be an integer upstream + // eslint-disable-next-line no-restricted-syntax + const requestedUserId = request.params.userId || parseInt(request.params.id); return authenticatedUserId === requestedUserId ? h.response(true) : _replyForbiddenError(h); } @@ -156,7 +163,7 @@ function checkUserIsAdminInOrganization(request, h, dependencies = { checkUserIs const organizationId = request.path && request.path.includes('memberships') ? request.payload.data.relationships.organization.data.id - : parseInt(request.params.id); + : request.params.id; return dependencies.checkUserIsAdminInOrganizationUseCase .execute(userId, organizationId) @@ -179,7 +186,7 @@ function checkUserIsMemberOfCertificationCenter( } const userId = request.auth.credentials.userId; - const certificationCenterId = parseInt(request.params.certificationCenterId); + const certificationCenterId = request.params.certificationCenterId; return dependencies.checkUserIsMemberOfCertificationCenterUsecase .execute(userId, certificationCenterId) @@ -202,7 +209,7 @@ async function checkUserIsMemberOfCertificationCenterSessionFromCertificationIss } const userId = request.auth.credentials.userId; - const certificationIssueReportId = parseInt(request.params.id); + const certificationIssueReportId = request.params.id; try { const certificationIssueReport = await dependencies.certificationIssueReportRepository.get( @@ -230,7 +237,7 @@ async function checkUserIsMemberOfCertificationCenterSessionFromCertificationCou } const userId = request.auth.credentials.userId; - const certificationCourseId = parseInt(request.params.id); + const certificationCourseId = request.params.id; try { const isMemberOfSession = await dependencies.checkUserIsMemberOfCertificationCenterSessionUsecase.execute({ @@ -253,7 +260,7 @@ async function checkUserBelongsToOrganizationManagingStudents( } const userId = request.auth.credentials.userId; - const organizationId = parseInt(request.params.id); + const organizationId = request.params.id; try { if (await dependencies.checkUserBelongsToOrganizationManagingStudentsUseCase.execute(userId, organizationId)) { @@ -275,7 +282,7 @@ async function checkUserBelongsToScoOrganizationAndManagesStudents( } const userId = request.auth.credentials.userId; - const organizationId = parseInt(request.params.id) || parseInt(request.payload.data.attributes['organization-id']); + const organizationId = request.params.id || request.payload.data.attributes['organization-id']; let belongsToScoOrganizationAndManageStudents; try { @@ -306,8 +313,7 @@ async function checkCertificationCenterIsNotScoManagingStudents( } const certificationCenterId = - parseInt(request?.params?.certificationCenterId) || - parseInt(request?.payload?.data?.attributes?.certificationCenterId); + request?.params?.certificationCenterId || request?.payload?.data?.attributes?.certificationCenterId; let organizationId; @@ -344,7 +350,7 @@ async function checkUserBelongsToSupOrganizationAndManagesStudents( } const userId = request.auth.credentials.userId; - const organizationId = parseInt(request.params.id) || parseInt(request.payload.data.attributes['organization-id']); + const organizationId = request.params.id || request.payload.data.attributes['organization-id']; let belongsToSupOrganizationAndManageStudents; try { @@ -367,7 +373,7 @@ async function checkUserIsAdminInSCOOrganizationManagingStudents( dependencies = { checkUserIsAdminAndManagingStudentsForOrganization } ) { const userId = request.auth.credentials.userId; - const organizationId = parseInt(request.params.id); + const organizationId = request.params.id; if ( await dependencies.checkUserIsAdminAndManagingStudentsForOrganization.execute( @@ -387,7 +393,7 @@ async function checkUserIsAdminInSUPOrganizationManagingStudents( dependencies = { checkUserIsAdminAndManagingStudentsForOrganization } ) { const userId = request.auth.credentials.userId; - const organizationId = parseInt(request.params.id); + const organizationId = request.params.id; if ( await dependencies.checkUserIsAdminAndManagingStudentsForOrganization.execute( @@ -412,7 +418,7 @@ async function checkUserBelongsToLearnersOrganization( } const userId = request.auth.credentials.userId; - const organizationLearnerId = parseInt(request.params.id); + const organizationLearnerId = request.params.id; let belongsToLearnersOrganization; @@ -436,7 +442,7 @@ async function checkUserBelongsToOrganization(request, h, dependencies = { check } const userId = request.auth.credentials.userId; - const organizationId = parseInt(request.params.id); + const organizationId = request.params.id; const belongsToOrganization = await dependencies.checkUserBelongsToOrganizationUseCase.execute( userId, @@ -495,6 +501,7 @@ function adminMemberHasAtLeastOneAccessOf(securityChecks) { return hasAccess ? hasAccess : _replyForbiddenError(h); }; } + async function checkPix1dActivated(request, h, dependencies = { checkPix1dEnabled }) { const isPix1dEnabled = await dependencies.checkPix1dEnabled.execute(); @@ -512,7 +519,7 @@ async function checkUserOwnsCertificationCourse( } const userId = request.auth.credentials.userId; - const certificationCourseId = parseInt(request.params.id); + const certificationCourseId = request.params.id; try { const ownsCertificationCourse = await dependencies.checkUserOwnsCertificationCourseUseCase.execute({ @@ -529,9 +536,7 @@ function _noOrganizationFound(error) { return error instanceof NotFoundError; } -/* eslint-enable no-restricted-syntax */ - -module.exports = { +const securityPreHandlers = { checkIfUserIsBlocked, checkPix1dActivated, checkRequestedUserIsAuthenticatedUser, @@ -547,7 +552,7 @@ module.exports = { checkAuthorizationToManageCampaign, checkUserIsAdminInSCOOrganizationManagingStudents, checkUserIsAdminInSUPOrganizationManagingStudents, - checkUserBelongsToLearnersOrganization: checkUserBelongsToLearnersOrganization, + checkUserBelongsToLearnersOrganization, checkUserBelongsToOrganization, checkUserIsMemberOfAnOrganization, checkUserIsMemberOfCertificationCenter, @@ -556,3 +561,5 @@ module.exports = { checkUserIsMemberOfCertificationCenterSessionFromCertificationIssueReportId, adminMemberHasAtLeastOneAccessOf, }; + +export { securityPreHandlers }; diff --git a/api/lib/application/sessions/finalized-session-controller.js b/api/lib/application/sessions/finalized-session-controller.js index b5b60a4859a..93f2dc61fdf 100644 --- a/api/lib/application/sessions/finalized-session-controller.js +++ b/api/lib/application/sessions/finalized-session-controller.js @@ -1,15 +1,20 @@ -const usecases = require('../../domain/usecases/index.js'); -const toBePublishedSessionSerializer = require('../../infrastructure/serializers/jsonapi/to-be-published-session-serializer.js'); -const withRequiredActionSessionSerializer = require('../../infrastructure/serializers/jsonapi/with-required-action-session-serializer.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as toBePublishedSessionSerializer from '../../infrastructure/serializers/jsonapi/to-be-published-session-serializer.js'; +import * as withRequiredActionSessionSerializer from '../../infrastructure/serializers/jsonapi/with-required-action-session-serializer.js'; -module.exports = { - async findFinalizedSessionsToPublish(request, h, dependencies = { toBePublishedSessionSerializer }) { - const finalizedSessionsToPublish = await usecases.findFinalizedSessionsToPublish(); - return dependencies.toBePublishedSessionSerializer.serialize(finalizedSessionsToPublish); - }, +const findFinalizedSessionsToPublish = async function (request, h, dependencies = { toBePublishedSessionSerializer }) { + const finalizedSessionsToPublish = await usecases.findFinalizedSessionsToPublish(); + return dependencies.toBePublishedSessionSerializer.serialize(finalizedSessionsToPublish); +}; - async findFinalizedSessionsWithRequiredAction(request, h, dependencies = { withRequiredActionSessionSerializer }) { - const finalizedSessionsWithRequiredAction = await usecases.findFinalizedSessionsWithRequiredAction(); - return dependencies.withRequiredActionSessionSerializer.serialize(finalizedSessionsWithRequiredAction); - }, +const findFinalizedSessionsWithRequiredAction = async function ( + request, + h, + dependencies = { withRequiredActionSessionSerializer } +) { + const finalizedSessionsWithRequiredAction = await usecases.findFinalizedSessionsWithRequiredAction(); + return dependencies.withRequiredActionSessionSerializer.serialize(finalizedSessionsWithRequiredAction); }; + +const finalizedSessionController = { findFinalizedSessionsToPublish, findFinalizedSessionsWithRequiredAction }; +export { finalizedSessionController }; diff --git a/api/lib/application/sessions/index.js b/api/lib/application/sessions/index.js index a4face2b73d..0d919523eb9 100644 --- a/api/lib/application/sessions/index.js +++ b/api/lib/application/sessions/index.js @@ -1,15 +1,15 @@ -const Joi = require('joi'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const sessionController = require('./session-controller.js'); -const sessionForSupervisingController = require('./session-for-supervising-controller.js'); -const sessionWithCleaCertifiedCandidateController = require('./session-with-clea-certified-candidate-controller.js'); -const finalizedSessionController = require('./finalized-session-controller.js'); -const authorization = require('../preHandlers/authorization.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const { sendJsonApiError, UnprocessableEntityError } = require('../http-errors.js'); -const assessmentSupervisorAuthorization = require('../preHandlers/session-supervisor-authorization.js'); +import Joi from 'joi'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { sessionController } from './session-controller.js'; +import { sessionForSupervisingController } from './session-for-supervising-controller.js'; +import { sessionWithCleaCertifiedCandidateController } from './session-with-clea-certified-candidate-controller.js'; +import { finalizedSessionController } from './finalized-session-controller.js'; +import { authorization } from '../preHandlers/authorization.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import { sendJsonApiError, UnprocessableEntityError } from '../http-errors.js'; +import { assessmentSupervisorAuthorization } from '../preHandlers/session-supervisor-authorization.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'GET', @@ -720,7 +720,7 @@ exports.register = async (server) => { assign: 'authorizationCheck', }, ], - handler: sessionController.delete, + handler: sessionController.remove, notes: [ "- **Cette route est restreinte aux utilisateurs authentifiés ayant les droits d'accès au centre de certification**\n" + "- Supprime la session et les candidats si la session n'a pas démarrée", @@ -777,4 +777,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'sessions-api'; +const name = 'sessions-api'; +export { register, name }; diff --git a/api/lib/application/sessions/session-controller.js b/api/lib/application/sessions/session-controller.js index 7d630e10fcb..9090467ddca 100644 --- a/api/lib/application/sessions/session-controller.js +++ b/api/lib/application/sessions/session-controller.js @@ -1,368 +1,416 @@ -const moment = require('moment'); -const { BadRequestError, SessionPublicationBatchError } = require('../http-errors.js'); -const usecases = require('../../domain/usecases/index.js'); -const tokenService = require('../../domain/services/token-service.js'); -const sessionResultsLinkService = require('../../domain/services/session-results-link-service.js'); -const sessionValidator = require('../../domain/validators/session-validator.js'); -const events = require('../../domain/events/index.js'); -const { CertificationCandidateAlreadyLinkedToUserError } = require('../../domain/errors.js'); -const sessionSerializer = require('../../infrastructure/serializers/jsonapi/session-serializer.js'); -const jurySessionSerializer = require('../../infrastructure/serializers/jsonapi/jury-session-serializer.js'); -const certificationCandidateSerializer = require('../../infrastructure/serializers/jsonapi/certification-candidate-serializer.js'); -const certificationReportSerializer = require('../../infrastructure/serializers/jsonapi/certification-report-serializer.js'); -const juryCertificationSummarySerializer = require('../../infrastructure/serializers/jsonapi/jury-certification-summary-serializer.js'); -const juryCertificationSummaryRepository = require('../../infrastructure/repositories/jury-certification-summary-repository.js'); -const jurySessionRepository = require('../../infrastructure/repositories/sessions/jury-session-repository.js'); -const queryParamsUtils = require('../../infrastructure/utils/query-params-utils.js'); -const requestResponseUtils = require('../../infrastructure/utils/request-response-utils.js'); -const certificationResultUtils = require('../../infrastructure/utils/csv/certification-results.js'); -const fillCandidatesImportSheet = require('../../infrastructure/files/candidates-import/fill-candidates-import-sheet.js'); -const supervisorKitPdf = require('../../infrastructure/utils/pdf/supervisor-kit-pdf.js'); -const trim = require('lodash/trim'); -const UserLinkedToCertificationCandidate = require('../../domain/events/UserLinkedToCertificationCandidate.js'); -const logger = require('../../infrastructure/logger.js'); - -module.exports = { - async findPaginatedFilteredJurySessions( - request, - h, - dependencies = { - queryParamsUtils, - jurySessionRepository, - jurySessionSerializer, - sessionValidator, - } - ) { - const { filter, page } = dependencies.queryParamsUtils.extractParameters(request.query); - const normalizedFilters = dependencies.sessionValidator.validateAndNormalizeFilters(filter); - const jurySessionsForPaginatedList = await dependencies.jurySessionRepository.findPaginatedFiltered({ - filters: normalizedFilters, - page, - }); +import moment from 'moment'; +import { BadRequestError, SessionPublicationBatchError } from '../http-errors.js'; +import { usecases } from '../../domain/usecases/index.js'; +import { tokenService } from '../../domain/services/token-service.js'; +import * as sessionResultsLinkService from '../../domain/services/session-results-link-service.js'; +import * as sessionValidator from '../../domain/validators/session-validator.js'; +import * as events from '../../domain/events/index.js'; +import { CertificationCandidateAlreadyLinkedToUserError } from '../../domain/errors.js'; +import * as sessionSerializer from '../../infrastructure/serializers/jsonapi/session-serializer.js'; +import * as jurySessionSerializer from '../../infrastructure/serializers/jsonapi/jury-session-serializer.js'; +import * as certificationCandidateSerializer from '../../infrastructure/serializers/jsonapi/certification-candidate-serializer.js'; +import * as certificationReportSerializer from '../../infrastructure/serializers/jsonapi/certification-report-serializer.js'; +import * as juryCertificationSummarySerializer from '../../infrastructure/serializers/jsonapi/jury-certification-summary-serializer.js'; +import * as juryCertificationSummaryRepository from '../../infrastructure/repositories/jury-certification-summary-repository.js'; +import * as jurySessionRepository from '../../infrastructure/repositories/sessions/jury-session-repository.js'; +import * as queryParamsUtils from '../../infrastructure/utils/query-params-utils.js'; +import * as requestResponseUtils from '../../infrastructure/utils/request-response-utils.js'; +import * as certificationResultUtils from '../../infrastructure/utils/csv/certification-results.js'; +import { fillCandidatesImportSheet } from '../../infrastructure/files/candidates-import/fill-candidates-import-sheet.js'; +import * as supervisorKitPdf from '../../infrastructure/utils/pdf/supervisor-kit-pdf.js'; +import lodash from 'lodash'; + +const { trim } = lodash; + +import { UserLinkedToCertificationCandidate } from '../../domain/events/UserLinkedToCertificationCandidate.js'; +import { logger } from '../../infrastructure/logger.js'; + +const findPaginatedFilteredJurySessions = async function ( + request, + h, + dependencies = { + queryParamsUtils, + jurySessionRepository, + jurySessionSerializer, + sessionValidator, + } +) { + const { filter, page } = dependencies.queryParamsUtils.extractParameters(request.query); + const normalizedFilters = dependencies.sessionValidator.validateAndNormalizeFilters(filter); + const jurySessionsForPaginatedList = await dependencies.jurySessionRepository.findPaginatedFiltered({ + filters: normalizedFilters, + page, + }); + + return dependencies.jurySessionSerializer.serializeForPaginatedList(jurySessionsForPaginatedList); +}; - return dependencies.jurySessionSerializer.serializeForPaginatedList(jurySessionsForPaginatedList); - }, - - async getJurySession(request, h, dependencies = { jurySessionSerializer }) { - const sessionId = request.params.id; - const { jurySession, hasSupervisorAccess } = await usecases.getJurySession({ sessionId }); - - return dependencies.jurySessionSerializer.serialize(jurySession, hasSupervisorAccess); - }, - - async get(request, h, dependencies = { sessionSerializer }) { - const sessionId = request.params.id; - const { session, hasSupervisorAccess, hasSomeCleaAcquired } = await usecases.getSession({ sessionId }); - return dependencies.sessionSerializer.serialize({ session, hasSupervisorAccess, hasSomeCleaAcquired }); - }, - - async update(request, h, dependencies = { sessionSerializer }) { - const userId = request.auth.credentials.userId; - const session = dependencies.sessionSerializer.deserialize(request.payload); - session.id = request.params.id; - - const updatedSession = await usecases.updateSession({ userId, session }); - - return dependencies.sessionSerializer.serialize({ session: updatedSession }); - }, - - async getAttendanceSheet(request, h, dependencies = { tokenService }) { - const sessionId = request.params.id; - const token = request.query.accessToken; - const userId = dependencies.tokenService.extractUserId(token); - const attendanceSheet = await usecases.getAttendanceSheet({ sessionId, userId }); - - const fileName = `feuille-emargement-session-${sessionId}.ods`; - return h - .response(attendanceSheet) - .header('Content-Type', 'application/vnd.oasis.opendocument.spreadsheet') - .header('Content-Disposition', `attachment; filename=${fileName}`); - }, - - async getSupervisorKitPdf(request, h, dependencies = { tokenService, supervisorKitPdf }) { - const sessionId = request.params.id; - const token = request.query.accessToken; - const userId = dependencies.tokenService.extractUserId(token); - const sessionForSupervisorKit = await usecases.getSupervisorKitSessionInfo({ sessionId, userId }); - - const { buffer, fileName } = await dependencies.supervisorKitPdf.getSupervisorKitPdfBuffer({ - sessionForSupervisorKit, - }); +const getJurySession = async function (request, h, dependencies = { jurySessionSerializer }) { + const sessionId = request.params.id; + const { jurySession, hasSupervisorAccess } = await usecases.getJurySession({ sessionId }); - return h - .response(buffer) - .header('Content-Disposition', `attachment; filename=${fileName}`) - .header('Content-Type', 'application/pdf'); - }, - - async getCandidatesImportSheet(request, h, dependencies = { tokenService, fillCandidatesImportSheet }) { - const translate = request.i18n.__; - const sessionId = request.params.id; - const token = request.query.accessToken; - const userId = dependencies.tokenService.extractUserId(token); - const filename = translate('candidate-list-template.filename'); - - const { session, certificationCenterHabilitations, isScoCertificationCenter } = - await usecases.getCandidateImportSheetData({ - sessionId, - userId, - }); - const candidateImportSheet = await dependencies.fillCandidatesImportSheet({ - session, - certificationCenterHabilitations, - isScoCertificationCenter, - i18n: request.i18n, - }); + return dependencies.jurySessionSerializer.serialize(jurySession, hasSupervisorAccess); +}; + +const get = async function (request, h, dependencies = { sessionSerializer }) { + const sessionId = request.params.id; + const { session, hasSupervisorAccess, hasSomeCleaAcquired } = await usecases.getSession({ sessionId }); + return dependencies.sessionSerializer.serialize({ session, hasSupervisorAccess, hasSomeCleaAcquired }); +}; + +const update = async function (request, h, dependencies = { sessionSerializer }) { + const userId = request.auth.credentials.userId; + const session = dependencies.sessionSerializer.deserialize(request.payload); + session.id = request.params.id; + + const updatedSession = await usecases.updateSession({ userId, session }); + + return dependencies.sessionSerializer.serialize({ session: updatedSession }); +}; + +const getAttendanceSheet = async function (request, h, dependencies = { tokenService }) { + const sessionId = request.params.id; + const token = request.query.accessToken; + const userId = dependencies.tokenService.extractUserId(token); + const attendanceSheet = await usecases.getAttendanceSheet({ sessionId, userId }); + + const fileName = `feuille-emargement-session-${sessionId}.ods`; + return h + .response(attendanceSheet) + .header('Content-Type', 'application/vnd.oasis.opendocument.spreadsheet') + .header('Content-Disposition', `attachment; filename=${fileName}`); +}; - return h - .response(candidateImportSheet) - .header('Content-Type', 'application/vnd.oasis.opendocument.spreadsheet') - .header('Content-Disposition', `attachment; filename=${filename + sessionId}.ods`); - }, +const getSupervisorKitPdf = async function (request, h, dependencies = { tokenService, supervisorKitPdf }) { + const sessionId = request.params.id; + const token = request.query.accessToken; + const userId = dependencies.tokenService.extractUserId(token); + const sessionForSupervisorKit = await usecases.getSupervisorKitSessionInfo({ sessionId, userId }); - async getCertificationCandidates(request, h, dependencies = { certificationCandidateSerializer }) { - const sessionId = request.params.id; + const { buffer, fileName } = await dependencies.supervisorKitPdf.getSupervisorKitPdfBuffer({ + sessionForSupervisorKit, + }); - const certificationCandidates = await usecases.getSessionCertificationCandidates({ sessionId }); - return dependencies.certificationCandidateSerializer.serialize(certificationCandidates); - }, + return h + .response(buffer) + .header('Content-Disposition', `attachment; filename=${fileName}`) + .header('Content-Type', 'application/pdf'); +}; - async addCertificationCandidate(request, h, dependencies = { certificationCandidateSerializer }) { - const sessionId = request.params.id; - const certificationCandidate = await dependencies.certificationCandidateSerializer.deserialize(request.payload); - const complementaryCertifications = request.payload.data.attributes['complementary-certifications'] ?? []; - const addedCertificationCandidate = await usecases.addCertificationCandidateToSession({ +const getCandidatesImportSheet = async function ( + request, + h, + dependencies = { tokenService, fillCandidatesImportSheet } +) { + const translate = request.i18n.__; + const sessionId = request.params.id; + const token = request.query.accessToken; + const userId = dependencies.tokenService.extractUserId(token); + const filename = translate('candidate-list-template.filename'); + + const { session, certificationCenterHabilitations, isScoCertificationCenter } = + await usecases.getCandidateImportSheetData({ sessionId, - certificationCandidate, - complementaryCertifications, + userId, }); + const candidateImportSheet = await dependencies.fillCandidatesImportSheet({ + session, + certificationCenterHabilitations, + isScoCertificationCenter, + i18n: request.i18n, + }); + + return h + .response(candidateImportSheet) + .header('Content-Type', 'application/vnd.oasis.opendocument.spreadsheet') + .header('Content-Disposition', `attachment; filename=${filename + sessionId}.ods`); +}; - return h.response(dependencies.certificationCandidateSerializer.serialize(addedCertificationCandidate)).created(); - }, - - async deleteCertificationCandidate(request) { - const certificationCandidateId = request.params.certificationCandidateId; +const getCertificationCandidates = async function (request, h, dependencies = { certificationCandidateSerializer }) { + const sessionId = request.params.id; - await usecases.deleteUnlinkedCertificationCandidate({ certificationCandidateId }); + const certificationCandidates = await usecases.getSessionCertificationCandidates({ sessionId }); + return dependencies.certificationCandidateSerializer.serialize(certificationCandidates); +}; - return null; - }, +const addCertificationCandidate = async function (request, h, dependencies = { certificationCandidateSerializer }) { + const sessionId = request.params.id; + const certificationCandidate = await dependencies.certificationCandidateSerializer.deserialize(request.payload); + const complementaryCertifications = request.payload.data.attributes['complementary-certifications'] ?? []; + const addedCertificationCandidate = await usecases.addCertificationCandidateToSession({ + sessionId, + certificationCandidate, + complementaryCertifications, + }); + + return h.response(dependencies.certificationCandidateSerializer.serialize(addedCertificationCandidate)).created(); +}; - async getJuryCertificationSummaries( - request, - h, - dependencies = { - queryParamsUtils, - juryCertificationSummaryRepository, - juryCertificationSummarySerializer, - } - ) { - const sessionId = request.params.id; - const { page } = dependencies.queryParamsUtils.extractParameters(request.query); +const deleteCertificationCandidate = async function (request) { + const certificationCandidateId = request.params.certificationCandidateId; - const { juryCertificationSummaries, pagination } = - await dependencies.juryCertificationSummaryRepository.findBySessionIdPaginated({ - sessionId, - page, - }); - return dependencies.juryCertificationSummarySerializer.serialize(juryCertificationSummaries, pagination); - }, - - async generateSessionResultsDownloadLink(request, h, dependencies = { sessionResultsLinkService }) { - const sessionId = request.params.id; - const sessionResultsLink = dependencies.sessionResultsLinkService.generateResultsLink(sessionId); - - return h.response({ sessionResultsLink }); - }, - - async getSessionResultsToDownload(request, h, dependencies = { tokenService, certificationResultUtils }) { - const token = request.params.token; - const { sessionId } = dependencies.tokenService.extractSessionId(token); - const { session, certificationResults } = await usecases.getSessionResults({ sessionId }); - - const csvResult = await dependencies.certificationResultUtils.getSessionCertificationResultsCsv({ - session, - certificationResults, - }); + await usecases.deleteUnlinkedCertificationCandidate({ certificationCandidateId }); - const dateWithTime = moment(session.date + ' ' + session.time, 'YYYY-MM-DD HH:mm'); - const fileName = `${dateWithTime.format('YYYYMMDD_HHmm')}_resultats_session_${sessionId}.csv`; + return null; +}; - return h - .response(csvResult) - .header('Content-Type', 'text/csv;charset=utf-8') - .header('Content-Disposition', `attachment; filename=${fileName}`); - }, +const getJuryCertificationSummaries = async function ( + request, + h, + dependencies = { + queryParamsUtils, + juryCertificationSummaryRepository, + juryCertificationSummarySerializer, + } +) { + const sessionId = request.params.id; + const { page } = dependencies.queryParamsUtils.extractParameters(request.query); - async getSessionResultsByRecipientEmail(request, h, dependencies = { tokenService, certificationResultUtils }) { - const token = request.params.token; - const { resultRecipientEmail, sessionId } = - dependencies.tokenService.extractResultRecipientEmailAndSessionId(token); - const { session, certificationResults } = await usecases.getSessionResultsByResultRecipientEmail({ + const { juryCertificationSummaries, pagination } = + await dependencies.juryCertificationSummaryRepository.findBySessionIdPaginated({ sessionId, - resultRecipientEmail, - }); - const csvResult = await dependencies.certificationResultUtils.getSessionCertificationResultsCsv({ - session, - certificationResults, + page, }); + return dependencies.juryCertificationSummarySerializer.serialize(juryCertificationSummaries, pagination); +}; - const dateWithTime = moment(session.date + ' ' + session.time, 'YYYY-MM-DD HH:mm'); - const fileName = `${dateWithTime.format('YYYYMMDD_HHmm')}_resultats_session_${sessionId}.csv`; - - return h - .response(csvResult) - .header('Content-Type', 'text/csv;charset=utf-8') - .header('Content-Disposition', `attachment; filename=${fileName}`); - }, - - async getCertificationReports(request, h, dependencies = { certificationReportSerializer }) { - const sessionId = request.params.id; - - return usecases - .getSessionCertificationReports({ sessionId }) - .then((certificationReports) => dependencies.certificationReportSerializer.serialize(certificationReports)); - }, - - async importCertificationCandidatesFromCandidatesImportSheet(request) { - const sessionId = request.params.id; - const odsBuffer = request.payload; - const i18n = request.i18n; - - try { - await usecases.importCertificationCandidatesFromCandidatesImportSheet({ sessionId, odsBuffer, i18n }); - } catch (err) { - if (err instanceof CertificationCandidateAlreadyLinkedToUserError) { - throw new BadRequestError(err.message); - } - throw err; - } +const generateSessionResultsDownloadLink = async function (request, h, dependencies = { sessionResultsLinkService }) { + const sessionId = request.params.id; + const sessionResultsLink = dependencies.sessionResultsLinkService.generateResultsLink(sessionId); - return null; - }, - - async enrolStudentsToSession(request, h, dependencies = { certificationCandidateSerializer, requestResponseUtils }) { - const referentId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); - const sessionId = request.params.id; - const studentIds = request.deserializedPayload.organizationLearnerIds; - - await usecases.enrolStudentsToSession({ sessionId, referentId, studentIds }); - const certificationCandidates = await usecases.getSessionCertificationCandidates({ sessionId }); - const certificationCandidatesSerialized = - dependencies.certificationCandidateSerializer.serialize(certificationCandidates); - return h.response(certificationCandidatesSerialized).created(); - }, - - async createCandidateParticipation(request, h, dependencies = { certificationCandidateSerializer }) { - const userId = request.auth.credentials.userId; - const sessionId = request.params.id; - const firstName = trim(request.payload.data.attributes['first-name']); - const lastName = trim(request.payload.data.attributes['last-name']); - const birthdate = request.payload.data.attributes['birthdate']; - - const event = await usecases.linkUserToSessionCertificationCandidate({ - userId, - sessionId, - firstName, - lastName, - birthdate, - }); + return h.response({ sessionResultsLink }); +}; - const certificationCandidate = await usecases.getCertificationCandidate({ userId, sessionId }); - const serialized = await dependencies.certificationCandidateSerializer.serialize(certificationCandidate); - return event instanceof UserLinkedToCertificationCandidate ? h.response(serialized).created() : serialized; - }, - - async finalize(request, h, dependencies = { certificationReportSerializer, events }) { - const sessionId = request.params.id; - const examinerGlobalComment = request.payload.data.attributes['examiner-global-comment']; - const hasIncident = request.payload.data.attributes['has-incident']; - const hasJoiningIssue = request.payload.data.attributes['has-joining-issue']; - const certificationReports = await Promise.all( - (request.payload.data.included || []) - .filter((data) => data.type === 'certification-reports') - .map((data) => dependencies.certificationReportSerializer.deserialize({ data })) - ); +const getSessionResultsToDownload = async function ( + request, + h, + dependencies = { tokenService, certificationResultUtils } +) { + const token = request.params.token; + const { sessionId } = dependencies.tokenService.extractSessionId(token); + const { session, certificationResults } = await usecases.getSessionResults({ sessionId }); + + const csvResult = await dependencies.certificationResultUtils.getSessionCertificationResultsCsv({ + session, + certificationResults, + }); + + const dateWithTime = moment(session.date + ' ' + session.time, 'YYYY-MM-DD HH:mm'); + const fileName = `${dateWithTime.format('YYYYMMDD_HHmm')}_resultats_session_${sessionId}.csv`; + + return h + .response(csvResult) + .header('Content-Type', 'text/csv;charset=utf-8') + .header('Content-Disposition', `attachment; filename=${fileName}`); +}; - const event = await usecases.finalizeSession({ - sessionId, - examinerGlobalComment, - hasIncident, - hasJoiningIssue, - certificationReports, - }); - await dependencies.events.eventDispatcher.dispatch(event); - return h.response().code(200); - }, +const getSessionResultsByRecipientEmail = async function ( + request, + h, + dependencies = { tokenService, certificationResultUtils } +) { + const token = request.params.token; + const { resultRecipientEmail, sessionId } = dependencies.tokenService.extractResultRecipientEmailAndSessionId(token); + const { session, certificationResults } = await usecases.getSessionResultsByResultRecipientEmail({ + sessionId, + resultRecipientEmail, + }); + const csvResult = await dependencies.certificationResultUtils.getSessionCertificationResultsCsv({ + session, + certificationResults, + }); + + const dateWithTime = moment(session.date + ' ' + session.time, 'YYYY-MM-DD HH:mm'); + const fileName = `${dateWithTime.format('YYYYMMDD_HHmm')}_resultats_session_${sessionId}.csv`; + + return h + .response(csvResult) + .header('Content-Type', 'text/csv;charset=utf-8') + .header('Content-Disposition', `attachment; filename=${fileName}`); +}; - async publish(request, h, dependencies = { sessionSerializer }) { - const sessionId = request.params.id; - const i18n = request.i18n; +const getCertificationReports = async function (request, h, dependencies = { certificationReportSerializer }) { + const sessionId = request.params.id; - const session = await usecases.publishSession({ sessionId, i18n }); + return usecases + .getSessionCertificationReports({ sessionId }) + .then((certificationReports) => dependencies.certificationReportSerializer.serialize(certificationReports)); +}; - return dependencies.sessionSerializer.serialize({ session }); - }, +const importCertificationCandidatesFromCandidatesImportSheet = async function (request) { + const sessionId = request.params.id; + const odsBuffer = request.payload; + const i18n = request.i18n; - async publishInBatch(request, h) { - const sessionIds = request.payload.data.attributes.ids; - const result = await usecases.publishSessionsInBatch({ - sessionIds, - }); - if (result.hasPublicationErrors()) { - _logSessionBatchPublicationErrors(result); - throw new SessionPublicationBatchError(result.batchId); + try { + await usecases.importCertificationCandidatesFromCandidatesImportSheet({ sessionId, odsBuffer, i18n }); + } catch (err) { + if (err instanceof CertificationCandidateAlreadyLinkedToUserError) { + throw new BadRequestError(err.message); } - return h.response().code(204); - }, + throw err; + } - async unpublish(request, h, dependencies = { sessionSerializer }) { - const sessionId = request.params.id; + return null; +}; - const session = await usecases.unpublishSession({ sessionId }); +const enrolStudentsToSession = async function ( + request, + h, + dependencies = { certificationCandidateSerializer, requestResponseUtils } +) { + const referentId = dependencies.requestResponseUtils.extractUserIdFromRequest(request); + const sessionId = request.params.id; + const studentIds = request.deserializedPayload.organizationLearnerIds; + + await usecases.enrolStudentsToSession({ sessionId, referentId, studentIds }); + const certificationCandidates = await usecases.getSessionCertificationCandidates({ sessionId }); + const certificationCandidatesSerialized = + dependencies.certificationCandidateSerializer.serialize(certificationCandidates); + return h.response(certificationCandidatesSerialized).created(); +}; - return dependencies.sessionSerializer.serialize({ session }); - }, +const createCandidateParticipation = async function (request, h, dependencies = { certificationCandidateSerializer }) { + const userId = request.auth.credentials.userId; + const sessionId = request.params.id; + const firstName = trim(request.payload.data.attributes['first-name']); + const lastName = trim(request.payload.data.attributes['last-name']); + const birthdate = request.payload.data.attributes['birthdate']; + + const event = await usecases.linkUserToSessionCertificationCandidate({ + userId, + sessionId, + firstName, + lastName, + birthdate, + }); + + const certificationCandidate = await usecases.getCertificationCandidate({ userId, sessionId }); + const serialized = await dependencies.certificationCandidateSerializer.serialize(certificationCandidate); + return event instanceof UserLinkedToCertificationCandidate ? h.response(serialized).created() : serialized; +}; - async flagResultsAsSentToPrescriber(request, h, dependencies = { sessionSerializer }) { - const sessionId = request.params.id; - const { resultsFlaggedAsSent, session } = await usecases.flagSessionResultsAsSentToPrescriber({ sessionId }); - const serializedSession = await dependencies.sessionSerializer.serialize({ session }); - return resultsFlaggedAsSent ? h.response(serializedSession).created() : serializedSession; - }, +const finalize = async function (request, h, dependencies = { certificationReportSerializer, events }) { + const sessionId = request.params.id; + const examinerGlobalComment = request.payload.data.attributes['examiner-global-comment']; + const hasIncident = request.payload.data.attributes['has-incident']; + const hasJoiningIssue = request.payload.data.attributes['has-joining-issue']; + const certificationReports = await Promise.all( + (request.payload.data.included || []) + .filter((data) => data.type === 'certification-reports') + .map((data) => dependencies.certificationReportSerializer.deserialize({ data })) + ); + + const event = await usecases.finalizeSession({ + sessionId, + examinerGlobalComment, + hasIncident, + hasJoiningIssue, + certificationReports, + }); + await dependencies.events.eventDispatcher.dispatch(event); + return h.response().code(200); +}; - async assignCertificationOfficer(request, h, dependencies = { jurySessionSerializer }) { - const sessionId = request.params.id; - const certificationOfficerId = request.auth.credentials.userId; - const jurySession = await usecases.assignCertificationOfficerToJurySession({ sessionId, certificationOfficerId }); - return dependencies.jurySessionSerializer.serialize(jurySession); - }, +const publish = async function (request, h, dependencies = { sessionSerializer }) { + const sessionId = request.params.id; + const i18n = request.i18n; - async commentAsJury(request, h) { - const sessionId = request.params.id; - const juryCommentAuthorId = request.auth.credentials.userId; - const juryComment = request.payload['jury-comment']; - await usecases.commentSessionAsJury({ sessionId, juryCommentAuthorId, juryComment }); + const session = await usecases.publishSession({ sessionId, i18n }); - return h.response().code(204); - }, + return dependencies.sessionSerializer.serialize({ session }); +}; - async delete(request, h) { - const sessionId = request.params.id; +const publishInBatch = async function (request, h) { + const sessionIds = request.payload.data.attributes.ids; + const result = await usecases.publishSessionsInBatch({ + sessionIds, + }); + if (result.hasPublicationErrors()) { + _logSessionBatchPublicationErrors(result); + throw new SessionPublicationBatchError(result.batchId); + } + return h.response().code(204); +}; - await usecases.deleteSession({ sessionId }); +const unpublish = async function (request, h, dependencies = { sessionSerializer }) { + const sessionId = request.params.id; - return h.response().code(204); - }, + const session = await usecases.unpublishSession({ sessionId }); - async deleteJuryComment(request, h) { - const sessionId = request.params.id; - await usecases.deleteSessionJuryComment({ sessionId }); + return dependencies.sessionSerializer.serialize({ session }); +}; + +const flagResultsAsSentToPrescriber = async function (request, h, dependencies = { sessionSerializer }) { + const sessionId = request.params.id; + const { resultsFlaggedAsSent, session } = await usecases.flagSessionResultsAsSentToPrescriber({ sessionId }); + const serializedSession = await dependencies.sessionSerializer.serialize({ session }); + return resultsFlaggedAsSent ? h.response(serializedSession).created() : serializedSession; +}; + +const assignCertificationOfficer = async function (request, h, dependencies = { jurySessionSerializer }) { + const sessionId = request.params.id; + const certificationOfficerId = request.auth.credentials.userId; + const jurySession = await usecases.assignCertificationOfficerToJurySession({ sessionId, certificationOfficerId }); + return dependencies.jurySessionSerializer.serialize(jurySession); +}; + +const commentAsJury = async function (request, h) { + const sessionId = request.params.id; + const juryCommentAuthorId = request.auth.credentials.userId; + const juryComment = request.payload['jury-comment']; + await usecases.commentSessionAsJury({ sessionId, juryCommentAuthorId, juryComment }); + + return h.response().code(204); +}; - return h.response().code(204); - }, +const remove = async function (request, h) { + const sessionId = request.params.id; + + await usecases.deleteSession({ sessionId }); + + return h.response().code(204); +}; + +const deleteJuryComment = async function (request, h) { + const sessionId = request.params.id; + await usecases.deleteSessionJuryComment({ sessionId }); + + return h.response().code(204); +}; + +const sessionController = { + findPaginatedFilteredJurySessions, + getJurySession, + get, + update, + getAttendanceSheet, + getSupervisorKitPdf, + getCandidatesImportSheet, + getCertificationCandidates, + addCertificationCandidate, + deleteCertificationCandidate, + getJuryCertificationSummaries, + generateSessionResultsDownloadLink, + getSessionResultsToDownload, + getSessionResultsByRecipientEmail, + getCertificationReports, + importCertificationCandidatesFromCandidatesImportSheet, + enrolStudentsToSession, + createCandidateParticipation, + finalize, + publish, + publishInBatch, + unpublish, + flagResultsAsSentToPrescriber, + assignCertificationOfficer, + commentAsJury, + remove, + deleteJuryComment, }; +export { sessionController }; + function _logSessionBatchPublicationErrors(result) { logger.warn(`One or more error occurred when publishing session in batch ${result.batchId}`); diff --git a/api/lib/application/sessions/session-for-supervising-controller.js b/api/lib/application/sessions/session-for-supervising-controller.js index bf321e3aad7..e528ced3c8f 100644 --- a/api/lib/application/sessions/session-for-supervising-controller.js +++ b/api/lib/application/sessions/session-for-supervising-controller.js @@ -1,17 +1,19 @@ -const usecases = require('../../domain/usecases/index.js'); -const sessionForSupervisingSerializer = require('../../infrastructure/serializers/jsonapi/session-for-supervising-serializer.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as sessionForSupervisingSerializer from '../../infrastructure/serializers/jsonapi/session-for-supervising-serializer.js'; -module.exports = { - async get(request) { - const sessionId = request.params.id; - const session = await usecases.getSessionForSupervising({ sessionId }); - return sessionForSupervisingSerializer.serialize(session); - }, +const get = async function (request) { + const sessionId = request.params.id; + const session = await usecases.getSessionForSupervising({ sessionId }); + return sessionForSupervisingSerializer.serialize(session); +}; - async supervise(request, h) { - const { 'supervisor-password': supervisorPassword, 'session-id': sessionId } = request.payload.data.attributes; - const { userId } = request.auth.credentials; - await usecases.superviseSession({ sessionId, userId, supervisorPassword }); - return h.response().code(204); - }, +const supervise = async function (request, h) { + const { 'supervisor-password': supervisorPassword, 'session-id': sessionId } = request.payload.data.attributes; + const { userId } = request.auth.credentials; + await usecases.superviseSession({ sessionId, userId, supervisorPassword }); + return h.response().code(204); }; + +const sessionForSupervisingController = { get, supervise }; + +export { sessionForSupervisingController }; diff --git a/api/lib/application/sessions/session-with-clea-certified-candidate-controller.js b/api/lib/application/sessions/session-with-clea-certified-candidate-controller.js index bac7e9399be..f97d2461c43 100644 --- a/api/lib/application/sessions/session-with-clea-certified-candidate-controller.js +++ b/api/lib/application/sessions/session-with-clea-certified-candidate-controller.js @@ -1,23 +1,25 @@ -const usecases = require('../../domain/usecases/index.js'); -const certificationResultUtils = require('../../infrastructure/utils/csv/certification-results.js'); -const dayjs = require('dayjs'); +import { usecases } from '../../domain/usecases/index.js'; +import * as certificationResultUtils from '../../infrastructure/utils/csv/certification-results.js'; +import dayjs from 'dayjs'; -module.exports = { - async getCleaCertifiedCandidateDataCsv(request, h, dependencies = { certificationResultUtils }) { - const sessionId = request.params.id; - const { session, cleaCertifiedCandidateData } = await usecases.getCleaCertifiedCandidateBySession({ sessionId }); - const csvResult = await dependencies.certificationResultUtils.getCleaCertifiedCandidateCsv( - cleaCertifiedCandidateData - ); +const getCleaCertifiedCandidateDataCsv = async function (request, h, dependencies = { certificationResultUtils }) { + const sessionId = request.params.id; + const { session, cleaCertifiedCandidateData } = await usecases.getCleaCertifiedCandidateBySession({ sessionId }); + const csvResult = await dependencies.certificationResultUtils.getCleaCertifiedCandidateCsv( + cleaCertifiedCandidateData + ); - const dateWithTime = dayjs(session.date + ' ' + session.time) - .locale('fr') - .format('YYYYMMDD_HHmm'); - const fileName = `${dateWithTime}_candidats_certifies_clea_${sessionId}.csv`; + const dateWithTime = dayjs(session.date + ' ' + session.time) + .locale('fr') + .format('YYYYMMDD_HHmm'); + const fileName = `${dateWithTime}_candidats_certifies_clea_${sessionId}.csv`; - return h - .response(csvResult) - .header('Content-Type', 'text/csv;charset=utf-8') - .header('Content-Disposition', `attachment; filename=${fileName}`); - }, + return h + .response(csvResult) + .header('Content-Type', 'text/csv;charset=utf-8') + .header('Content-Disposition', `attachment; filename=${fileName}`); }; + +const sessionWithCleaCertifiedCandidateController = { getCleaCertifiedCandidateDataCsv }; + +export { sessionWithCleaCertifiedCandidateController }; diff --git a/api/lib/application/stage-collections/index.js b/api/lib/application/stage-collections/index.js index b7b467344e6..61e3ab6c5c4 100644 --- a/api/lib/application/stage-collections/index.js +++ b/api/lib/application/stage-collections/index.js @@ -1,9 +1,9 @@ -const Joi = require('joi'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const stageCollectionController = require('./stage-collection-controller'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import Joi from 'joi'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { stageCollectionController } from './stage-collection-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'PATCH', @@ -36,4 +36,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'stage-collections-api'; +const name = 'stage-collections-api'; +export { register, name }; diff --git a/api/lib/application/stage-collections/stage-collection-controller.js b/api/lib/application/stage-collections/stage-collection-controller.js index 03ec24f1374..371507818a1 100644 --- a/api/lib/application/stage-collections/stage-collection-controller.js +++ b/api/lib/application/stage-collections/stage-collection-controller.js @@ -1,13 +1,15 @@ -const stageCollectionRepository = require('../../infrastructure/repositories/target-profile-management/stage-collection-repository'); -const StageCollectionUpdate = require('../../domain/models/target-profile-management/StageCollectionUpdate'); +import * as stageCollectionRepository from '../../infrastructure/repositories/target-profile-management/stage-collection-repository.js'; +import { StageCollectionUpdate } from '../../domain/models/target-profile-management/StageCollectionUpdate.js'; -module.exports = { - async update(request, h) { - const targetProfileId = request.params.id; - const stagesDTO = request.payload.data.attributes.stages; - const stageCollection = await stageCollectionRepository.getByTargetProfileId(targetProfileId); - const stageCollectionUpdate = new StageCollectionUpdate({ stagesDTO, stageCollection }); - await stageCollectionRepository.update(stageCollectionUpdate); - return h.response({}).code(204); - }, +const update = async function (request, h) { + const targetProfileId = request.params.id; + const stagesDTO = request.payload.data.attributes.stages; + const stageCollection = await stageCollectionRepository.getByTargetProfileId(targetProfileId); + const stageCollectionUpdate = new StageCollectionUpdate({ stagesDTO, stageCollection }); + await stageCollectionRepository.update(stageCollectionUpdate); + return h.response({}).code(204); }; + +const stageCollectionController = { update }; + +export { stageCollectionController }; diff --git a/api/lib/application/sup-organization-learners/index.js b/api/lib/application/sup-organization-learners/index.js index 5e8e74795ae..0ce66b7b943 100644 --- a/api/lib/application/sup-organization-learners/index.js +++ b/api/lib/application/sup-organization-learners/index.js @@ -1,13 +1,13 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { sendJsonApiError, UnprocessableEntityError, NotFoundError } = require('../http-errors.js'); -const supOrganizationLearnerController = require('./sup-organization-learner-controller.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { sendJsonApiError, UnprocessableEntityError, NotFoundError } from '../http-errors.js'; +import { supOrganizationLearnerController } from './sup-organization-learner-controller.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'POST', @@ -84,4 +84,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'sup-organization-learners-api'; +const name = 'sup-organization-learners-api'; +export { register, name }; diff --git a/api/lib/application/sup-organization-learners/sup-organization-learner-controller.js b/api/lib/application/sup-organization-learners/sup-organization-learner-controller.js index af68fa80f70..bf84ee98b6c 100644 --- a/api/lib/application/sup-organization-learners/sup-organization-learner-controller.js +++ b/api/lib/application/sup-organization-learners/sup-organization-learner-controller.js @@ -1,33 +1,35 @@ -const usecases = require('../../domain/usecases/index.js'); +import { usecases } from '../../domain/usecases/index.js'; -module.exports = { - async reconcileSupOrganizationLearner(request, h) { - const userId = request.auth.credentials.userId; - const payload = request.payload.data.attributes; +const reconcileSupOrganizationLearner = async function (request, h) { + const userId = request.auth.credentials.userId; + const payload = request.payload.data.attributes; - const campaignCode = payload['campaign-code']; + const campaignCode = payload['campaign-code']; - const reconciliationInfo = { - userId, - studentNumber: payload['student-number'], - firstName: payload['first-name'], - lastName: payload['last-name'], - birthdate: payload['birthdate'], - }; + const reconciliationInfo = { + userId, + studentNumber: payload['student-number'], + firstName: payload['first-name'], + lastName: payload['last-name'], + birthdate: payload['birthdate'], + }; - await usecases.reconcileSupOrganizationLearner({ campaignCode, reconciliationInfo }); + await usecases.reconcileSupOrganizationLearner({ campaignCode, reconciliationInfo }); - return h.response(null).code(204); - }, + return h.response(null).code(204); +}; - async updateStudentNumber(request, h) { - const payload = request.payload.data.attributes; - const organizationId = request.params.id; - const studentNumber = payload['student-number']; - const organizationLearnerId = request.params.organizationLearnerId; +const updateStudentNumber = async function (request, h) { + const payload = request.payload.data.attributes; + const organizationId = request.params.id; + const studentNumber = payload['student-number']; + const organizationLearnerId = request.params.organizationLearnerId; - await usecases.updateStudentNumber({ organizationLearnerId, studentNumber, organizationId }); + await usecases.updateStudentNumber({ organizationLearnerId, studentNumber, organizationId }); - return h.response().code(204); - }, + return h.response().code(204); }; + +const supOrganizationLearnerController = { reconcileSupOrganizationLearner, updateStudentNumber }; + +export { supOrganizationLearnerController }; diff --git a/api/lib/application/tags/index.js b/api/lib/application/tags/index.js index b99d766bc96..f44dd3890b8 100644 --- a/api/lib/application/tags/index.js +++ b/api/lib/application/tags/index.js @@ -1,9 +1,9 @@ -const securityPreHandlers = require('../security-pre-handlers.js'); -const tagController = require('./tag-controller.js'); -const Joi = require('joi'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { tagController } from './tag-controller.js'; +import Joi from 'joi'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'POST', @@ -91,4 +91,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'tags-api'; +const name = 'tags-api'; +export { register, name }; diff --git a/api/lib/application/tags/tag-controller.js b/api/lib/application/tags/tag-controller.js index cf2a740f70c..78eb18ba18b 100644 --- a/api/lib/application/tags/tag-controller.js +++ b/api/lib/application/tags/tag-controller.js @@ -1,21 +1,23 @@ -const tagSerializer = require('../../infrastructure/serializers/jsonapi/tag-serializer.js'); -const usecases = require('../../domain/usecases/index.js'); +import * as tagSerializer from '../../infrastructure/serializers/jsonapi/tag-serializer.js'; +import { usecases } from '../../domain/usecases/index.js'; -module.exports = { - async create(request, h, dependencies = { tagSerializer }) { - const tagName = request.payload.data.attributes['name'].toUpperCase(); - const createdTag = await usecases.createTag({ tagName }); - return h.response(dependencies.tagSerializer.serialize(createdTag)).created(); - }, +const create = async function (request, h, dependencies = { tagSerializer }) { + const tagName = request.payload.data.attributes['name'].toUpperCase(); + const createdTag = await usecases.createTag({ tagName }); + return h.response(dependencies.tagSerializer.serialize(createdTag)).created(); +}; - async findAllTags(request, h, dependencies = { tagSerializer }) { - const organizationsTags = await usecases.findAllTags(); - return dependencies.tagSerializer.serialize(organizationsTags); - }, +const findAllTags = async function (request, h, dependencies = { tagSerializer }) { + const organizationsTags = await usecases.findAllTags(); + return dependencies.tagSerializer.serialize(organizationsTags); +}; - async getRecentlyUsedTags(request, h, dependencies = { tagSerializer }) { - const tagId = request.params.id; - const recentlyUsedTags = await usecases.getRecentlyUsedTags({ tagId }); - return dependencies.tagSerializer.serialize(recentlyUsedTags); - }, +const getRecentlyUsedTags = async function (request, h, dependencies = { tagSerializer }) { + const tagId = request.params.id; + const recentlyUsedTags = await usecases.getRecentlyUsedTags({ tagId }); + return dependencies.tagSerializer.serialize(recentlyUsedTags); }; + +const tagController = { create, findAllTags, getRecentlyUsedTags }; + +export { tagController }; diff --git a/api/lib/application/target-profiles/index.js b/api/lib/application/target-profiles/index.js index 9a59e4cfafb..e82e952b523 100644 --- a/api/lib/application/target-profiles/index.js +++ b/api/lib/application/target-profiles/index.js @@ -1,11 +1,11 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const { sendJsonApiError, BadRequestError } = require('../http-errors.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const targetProfileController = require('./target-profile-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { sendJsonApiError, BadRequestError } from '../http-errors.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { targetProfileController } from './target-profile-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'GET', @@ -446,4 +446,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'target-profiles-api'; +const name = 'target-profiles-api'; +export { register, name }; diff --git a/api/lib/application/target-profiles/presenter/pdf/builder/area-builder.js b/api/lib/application/target-profiles/presenter/pdf/builder/area-builder.js index c7051f5e843..5cb9927dd00 100644 --- a/api/lib/application/target-profiles/presenter/pdf/builder/area-builder.js +++ b/api/lib/application/target-profiles/presenter/pdf/builder/area-builder.js @@ -1,31 +1,29 @@ -const sortBy = require('lodash/sortBy'); -const competenceBuilder = require('./competence-builder.js'); -const AreaText = require('../drawer/AreaText.js'); -const LegalMentionText = require('../drawer/LegalMentionText.js'); +import lodash from 'lodash'; + +const { sortBy } = lodash; + +import * as competenceBuilder from './competence-builder.js'; +import { AreaText } from '../drawer/AreaText.js'; +import { LegalMentionText } from '../drawer/LegalMentionText.js'; const MARGIN_TOP_WITHOUT_AREA = 15; const MARGIN_BOTTOM_LIMIT = 5; -module.exports = { - /** - * @param pdfDocument{PDFDocument} - * @param area{Area} - * @param frameworkName{string} - * @param language{string} - */ - build(pdfDocument, area, frameworkName, language) { - const page = _addPage(pdfDocument, language); - const areaTitle = frameworkName + ' : ' + area.title; - let pageContext = { - page, - positionY: _drawAreaTitle(page, areaTitle, area.color), - }; - for (const competence of sortBy(area.competences, 'index')) { - pageContext = _nextPage(pageContext.page, pageContext.positionY, competence, area.color, language); - pageContext.positionY = competenceBuilder.build(pageContext.positionY, pageContext.page, competence, area.color); - } - }, +const build = function (pdfDocument, area, frameworkName, language) { + const page = _addPage(pdfDocument, language); + const areaTitle = frameworkName + ' : ' + area.title; + let pageContext = { + page, + positionY: _drawAreaTitle(page, areaTitle, area.color), + }; + for (const competence of sortBy(area.competences, 'index')) { + pageContext = _nextPage(pageContext.page, pageContext.positionY, competence, area.color, language); + pageContext.positionY = competenceBuilder.build(pageContext.positionY, pageContext.page, competence, area.color); + } }; + +export { build }; + /** * @param page{PDFPage} * @param positionY{number} diff --git a/api/lib/application/target-profiles/presenter/pdf/builder/competence-builder.js b/api/lib/application/target-profiles/presenter/pdf/builder/competence-builder.js index cd02fe3a9e0..5a6df9c1dce 100644 --- a/api/lib/application/target-profiles/presenter/pdf/builder/competence-builder.js +++ b/api/lib/application/target-profiles/presenter/pdf/builder/competence-builder.js @@ -1,38 +1,33 @@ -const sortBy = require('lodash/sortBy'); -const thematicBuilder = require('./thematic-builder.js'); -const CompetenceText = require('../drawer/CompetenceText.js'); -const PositionManager = require('../manager/position-manager.js'); -const ColorManager = require('../manager/color-manager.js'); -const FontManager = require('../manager/font-manager.js'); +import lodash from 'lodash'; -module.exports = { - /** - * @param positionY{number} - * @param page {PDFPage} - * @param competence {Competence} - * @param areaColor {string} - * @param dryRun {boolean} - * @returns {number} next y position - */ - build(positionY, page, competence, areaColor, dryRun = false) { - positionY = positionY - FontManager.competenceFontHeight; - const competenceText = new CompetenceText({ - text: competence.fullName, - areaColor, - positionY: positionY, - }); - if (!dryRun) { - _drawCompetenceBackground(positionY, page, competenceText); - } - positionY = competenceText.draw(page, dryRun); +const { sortBy } = lodash; - for (const thematic of sortBy(competence.thematics, 'index')) { - positionY = thematicBuilder.build(positionY, page, thematic, dryRun); - positionY = positionY - FontManager.thematicFontHeight / 2; - } - return positionY; - }, +import * as thematicBuilder from './thematic-builder.js'; +import { CompetenceText } from '../drawer/CompetenceText.js'; +import { PositionManager } from '../manager/position-manager.js'; +import * as ColorManager from '../manager/color-manager.js'; +import { FontManager } from '../manager/font-manager.js'; + +const build = function (positionY, page, competence, areaColor, dryRun = false) { + positionY = positionY - FontManager.competenceFontHeight; + const competenceText = new CompetenceText({ + text: competence.fullName, + areaColor, + positionY: positionY, + }); + if (!dryRun) { + _drawCompetenceBackground(positionY, page, competenceText); + } + positionY = competenceText.draw(page, dryRun); + + for (const thematic of sortBy(competence.thematics, 'index')) { + positionY = thematicBuilder.build(positionY, page, thematic, dryRun); + positionY = positionY - FontManager.thematicFontHeight / 2; + } + return positionY; }; + +export { build }; /** * @param positionY{number} * @param page {PDFPage} diff --git a/api/lib/application/target-profiles/presenter/pdf/builder/cover-page-builder.js b/api/lib/application/target-profiles/presenter/pdf/builder/cover-page-builder.js index f2f892bdaf8..13079d38206 100644 --- a/api/lib/application/target-profiles/presenter/pdf/builder/cover-page-builder.js +++ b/api/lib/application/target-profiles/presenter/pdf/builder/cover-page-builder.js @@ -1,27 +1,22 @@ -const TemplatePageManager = require('../manager/template-page-manager.js'); -const CoverPageVersionText = require('../drawer/CoverPageVersionText.js'); -const CoverPageLegalMentionText = require('../drawer/CoverPageLegalMentionText.js'); -const CoverPageTitleText = require('../drawer/CoverPageTitleText.js'); -const PositionManager = require('../manager/position-manager.js'); +import * as TemplatePageManager from '../manager/template-page-manager.js'; +import { CoverPageVersionText } from '../drawer/CoverPageVersionText.js'; +import { CoverPageLegaLMentionText } from '../drawer/CoverPageLegalMentionText.js'; +import { CoverPageTitleText } from '../drawer/CoverPageTitleText.js'; +import { PositionManager } from '../manager/position-manager.js'; -module.exports = { - /** - * @param pdfDocument{PDFDocument} - * @param title {string} - * @param language {string} - */ - build(pdfDocument, title, language) { - const page = pdfDocument.addPage(); - PositionManager.initialize(page); - page.drawPage(TemplatePageManager.getCoverPage()); - const coverPageTitleText = new CoverPageTitleText({ - title, - page, - }); - const coverPageVersionText = new CoverPageVersionText({ language, page }); - const coverPageLegalMentionText = new CoverPageLegalMentionText({ language }); - coverPageTitleText.drawAlignCenter(page); - coverPageVersionText.draw(page); - coverPageLegalMentionText.draw(page); - }, +const build = function (pdfDocument, title, language) { + const page = pdfDocument.addPage(); + PositionManager.initialize(page); + page.drawPage(TemplatePageManager.getCoverPage()); + const coverPageTitleText = new CoverPageTitleText({ + title, + page, + }); + const coverPageVersionText = new CoverPageVersionText({ language, page }); + const coverPageLegalMentionText = new CoverPageLegaLMentionText({ language }); + coverPageTitleText.drawAlignCenter(page); + coverPageVersionText.draw(page); + coverPageLegalMentionText.draw(page); }; + +export { build }; diff --git a/api/lib/application/target-profiles/presenter/pdf/builder/learning-content-builder.js b/api/lib/application/target-profiles/presenter/pdf/builder/learning-content-builder.js index ee979506bf2..1a44e5a441d 100644 --- a/api/lib/application/target-profiles/presenter/pdf/builder/learning-content-builder.js +++ b/api/lib/application/target-profiles/presenter/pdf/builder/learning-content-builder.js @@ -1,19 +1,15 @@ -const sortBy = require('lodash/sortBy'); -const areaBuilder = require('./area-builder.js'); +import lodash from 'lodash'; -module.exports = { - /** - * @param pdfDocument{PDFDocument} - * @param learningContent{LearningContent} - * @param language {string} - * - * @return {PDFDocument} - */ - build(pdfDocument, learningContent, language) { - for (const area of sortBy(learningContent.areas, ['frameworkId', 'code'])) { - const frameworkName = learningContent.findFrameworkNameOfArea(area.id); - areaBuilder.build(pdfDocument, area, frameworkName, language); - } - return pdfDocument; - }, +const { sortBy } = lodash; + +import * as areaBuilder from './area-builder.js'; + +const build = function (pdfDocument, learningContent, language) { + for (const area of sortBy(learningContent.areas, ['frameworkId', 'code'])) { + const frameworkName = learningContent.findFrameworkNameOfArea(area.id); + areaBuilder.build(pdfDocument, area, frameworkName, language); + } + return pdfDocument; }; + +export { build }; diff --git a/api/lib/application/target-profiles/presenter/pdf/builder/thematic-builder.js b/api/lib/application/target-profiles/presenter/pdf/builder/thematic-builder.js index 0d6ddee4515..93479a1442c 100644 --- a/api/lib/application/target-profiles/presenter/pdf/builder/thematic-builder.js +++ b/api/lib/application/target-profiles/presenter/pdf/builder/thematic-builder.js @@ -1,61 +1,44 @@ -const sortBy = require('lodash/sortBy'); -const tubeBuilder = require('./tube-builder.js'); -const ThematicText = require('../drawer/ThematicText.js'); -const PositionManager = require('../manager/position-manager.js'); -const FontManager = require('../manager/font-manager.js'); -const ColorManager = require('../manager/color-manager.js'); +import lodash from 'lodash'; -module.exports = { - /** - * @param positionY{number} - * @param page {PDFPage} - * @param thematic {Thematic} - * @param dryRun {boolean} - * @returns {number} next y position - */ - build(positionY, page, thematic, dryRun) { - if (!dryRun) { - this._drawThematicBackground(positionY, page, thematic); - } - return this._drawContent(positionY, page, thematic, dryRun); - }, - /** - * @param positionY{number} - * @param page {PDFPage} - * @param thematic {Thematic} - * @param dryRun {boolean} - * @returns {number} next y position - * @private - */ - _drawContent(positionY, page, thematic, dryRun) { - let positionYAfterTubes = positionY; - let pair = false; - for (const tube of sortBy(thematic.tubes, 'practicalTitle')) { - positionYAfterTubes = tubeBuilder.build(positionYAfterTubes, page, tube, pair, dryRun); - pair = !pair; - } - const thematicText = new ThematicText({ text: thematic.name, positionY, positionYAfterTubes }); - const nextYThematic = thematicText.draw(page, dryRun); +const { sortBy } = lodash; - return Math.min(positionYAfterTubes, nextYThematic); - }, - /** - * @param positionY{number} - * @param page {PDFPage} - * @param thematic {Thematic} - * @returns {number} next y position - * @private - */ - _drawThematicBackground(positionY, page, thematic) { - const nextPositionY = this._drawContent(positionY, page, thematic, true); - page.drawRectangle({ - x: PositionManager.margin, - y: nextPositionY + FontManager.thematicFontHeight, - width: PositionManager.widthMaxWithoutMargin, - height: positionY - nextPositionY, - color: ColorManager.thematicBackground, - opacity: 0.5, - borderWidth: 0, - }); - }, +import * as tubeBuilder from './tube-builder.js'; +import { ThematicText } from '../drawer/ThematicText.js'; +import { PositionManager } from '../manager/position-manager.js'; +import { FontManager } from '../manager/font-manager.js'; +import * as ColorManager from '../manager/color-manager.js'; + +const build = function (positionY, page, thematic, dryRun) { + if (!dryRun) { + this._drawThematicBackground(positionY, page, thematic); + } + return this._drawContent(positionY, page, thematic, dryRun); +}; + +const _drawContent = function (positionY, page, thematic, dryRun) { + let positionYAfterTubes = positionY; + let pair = false; + for (const tube of sortBy(thematic.tubes, 'practicalTitle')) { + positionYAfterTubes = tubeBuilder.build(positionYAfterTubes, page, tube, pair, dryRun); + pair = !pair; + } + const thematicText = new ThematicText({ text: thematic.name, positionY, positionYAfterTubes }); + const nextYThematic = thematicText.draw(page, dryRun); + + return Math.min(positionYAfterTubes, nextYThematic); }; + +const _drawThematicBackground = function (positionY, page, thematic) { + const nextPositionY = this._drawContent(positionY, page, thematic, true); + page.drawRectangle({ + x: PositionManager.margin, + y: nextPositionY + FontManager.thematicFontHeight, + width: PositionManager.widthMaxWithoutMargin, + height: positionY - nextPositionY, + color: ColorManager.thematicBackground, + opacity: 0.5, + borderWidth: 0, + }); +}; + +export { build, _drawContent, _drawThematicBackground }; diff --git a/api/lib/application/target-profiles/presenter/pdf/builder/tube-builder.js b/api/lib/application/target-profiles/presenter/pdf/builder/tube-builder.js index 2fca36db4ae..10d77a2e4c8 100644 --- a/api/lib/application/target-profiles/presenter/pdf/builder/tube-builder.js +++ b/api/lib/application/target-profiles/presenter/pdf/builder/tube-builder.js @@ -1,33 +1,24 @@ -const TubeText = require('../drawer/TubeText.js'); -const PositionManager = require('../manager/position-manager.js'); -const FontManager = require('../manager/font-manager.js'); -const ColorManager = require('../manager/color-manager.js'); +import { TubeText } from '../drawer/TubeText.js'; +import { PositionManager } from '../manager/position-manager.js'; +import { FontManager } from '../manager/font-manager.js'; +import * as ColorManager from '../manager/color-manager.js'; const START_BORDER = 2; -module.exports = { - /** - * - * @param positionY{number} - * @param page {PDFPage} - * @param tube {Tube} - * @param dryRun {boolean} - * @param withBackground {boolean} - * @returns {number} next y position - */ - build(positionY, page, tube, withBackground, dryRun) { - const tubeText = new TubeText({ - practicalTitle: tube.practicalTitle, - practicalDescription: tube.practicalDescription, - positionY, - }); - if (!dryRun && withBackground) { - _drawTubeBackground(positionY, page, tubeText); - } +const build = function (positionY, page, tube, withBackground, dryRun) { + const tubeText = new TubeText({ + practicalTitle: tube.practicalTitle, + practicalDescription: tube.practicalDescription, + positionY, + }); + if (!dryRun && withBackground) { + _drawTubeBackground(positionY, page, tubeText); + } - return tubeText.draw(page, dryRun); - }, + return tubeText.draw(page, dryRun); }; + +export { build }; /** * * @param positionY{number} diff --git a/api/lib/application/target-profiles/presenter/pdf/drawer/AreaText.js b/api/lib/application/target-profiles/presenter/pdf/drawer/AreaText.js index e9aa771da05..84c6eb717bd 100644 --- a/api/lib/application/target-profiles/presenter/pdf/drawer/AreaText.js +++ b/api/lib/application/target-profiles/presenter/pdf/drawer/AreaText.js @@ -1,12 +1,12 @@ -const Text = require('./Text.js'); -const ColorManager = require('../manager/color-manager.js'); -const FontManager = require('../manager/font-manager.js'); -const TemplatePageManager = require('../manager/template-page-manager.js'); +import { Text } from './Text.js'; +import * as ColorManager from '../manager/color-manager.js'; +import { FontManager } from '../manager/font-manager.js'; +import * as TemplatePageManager from '../manager/template-page-manager.js'; const MARGIN_TOP_AREA = 5; const MARGIN_BOTTOM_AREA = 50; -module.exports = class AreaText extends Text { +class AreaText extends Text { /** * * @param text {string} @@ -48,4 +48,6 @@ module.exports = class AreaText extends Text { super.drawAlignCenter(page, dryRun); return this.positionYAfter; } -}; +} + +export { AreaText }; diff --git a/api/lib/application/target-profiles/presenter/pdf/drawer/CompetenceText.js b/api/lib/application/target-profiles/presenter/pdf/drawer/CompetenceText.js index 1c48238f3ac..966023a5860 100644 --- a/api/lib/application/target-profiles/presenter/pdf/drawer/CompetenceText.js +++ b/api/lib/application/target-profiles/presenter/pdf/drawer/CompetenceText.js @@ -1,9 +1,9 @@ -const Text = require('./Text.js'); -const ColorManager = require('../manager/color-manager.js'); -const FontManager = require('../manager/font-manager.js'); -const PositionManager = require('../manager/position-manager.js'); +import { Text } from './Text.js'; +import * as ColorManager from '../manager/color-manager.js'; +import { FontManager } from '../manager/font-manager.js'; +import { PositionManager } from '../manager/position-manager.js'; -module.exports = class CompetenceText extends Text { +class CompetenceText extends Text { constructor({ text, positionY, areaColor }) { super({ text, @@ -14,4 +14,6 @@ module.exports = class CompetenceText extends Text { fontColor: ColorManager.findLighterShadeRGBColor(areaColor), }); } -}; +} + +export { CompetenceText }; diff --git a/api/lib/application/target-profiles/presenter/pdf/drawer/CoverPageLegalMentionText.js b/api/lib/application/target-profiles/presenter/pdf/drawer/CoverPageLegalMentionText.js index 00afc46e8d0..28dd3320307 100644 --- a/api/lib/application/target-profiles/presenter/pdf/drawer/CoverPageLegalMentionText.js +++ b/api/lib/application/target-profiles/presenter/pdf/drawer/CoverPageLegalMentionText.js @@ -1,14 +1,14 @@ -const Text = require('./Text.js'); -const ColorManager = require('../manager/color-manager.js'); -const FontManager = require('../manager/font-manager.js'); -const PositionManager = require('../manager/position-manager.js'); +import { Text } from './Text.js'; +import * as ColorManager from '../manager/color-manager.js'; +import { FontManager } from '../manager/font-manager.js'; +import { PositionManager } from '../manager/position-manager.js'; const textByLang = { en: 'This is a working document, updated regularly. Its distribution is restricted and its use limited to Pix Orga members in the context of the implementation of the support of their users.', fr: "Ceci est un document de travail. Il évolue régulièrement. Sa diffusion est restreinte et son usage limité aux utilisateurs de Pix Orga dans le cadre de la mise en oeuvre de l'accompagnement de leurs publics.", }; -module.exports = class CoverPageLegaLMentionText extends Text { +class CoverPageLegaLMentionText extends Text { constructor({ language }) { const text = textByLang[language]; super({ @@ -21,4 +21,6 @@ module.exports = class CoverPageLegaLMentionText extends Text { maxWidth: PositionManager.coverPageLegalMentionWidth, }); } -}; +} + +export { CoverPageLegaLMentionText }; diff --git a/api/lib/application/target-profiles/presenter/pdf/drawer/CoverPageTitleText.js b/api/lib/application/target-profiles/presenter/pdf/drawer/CoverPageTitleText.js index 496d023f3a2..9f3114d0cd4 100644 --- a/api/lib/application/target-profiles/presenter/pdf/drawer/CoverPageTitleText.js +++ b/api/lib/application/target-profiles/presenter/pdf/drawer/CoverPageTitleText.js @@ -1,9 +1,9 @@ -const Text = require('./Text.js'); -const ColorManager = require('../manager/color-manager.js'); -const FontManager = require('../manager/font-manager.js'); -const PositionManager = require('../manager/position-manager.js'); +import { Text } from './Text.js'; +import * as ColorManager from '../manager/color-manager.js'; +import { FontManager } from '../manager/font-manager.js'; +import { PositionManager } from '../manager/position-manager.js'; -module.exports = class CoverPageTitleText extends Text { +class CoverPageTitleText extends Text { constructor({ title, page }) { const text = title; const font = FontManager.coverPageTitleFont; @@ -19,4 +19,6 @@ module.exports = class CoverPageTitleText extends Text { maxWidth: PositionManager.coverPageTitleWidth, }); } -}; +} + +export { CoverPageTitleText }; diff --git a/api/lib/application/target-profiles/presenter/pdf/drawer/CoverPageVersionText.js b/api/lib/application/target-profiles/presenter/pdf/drawer/CoverPageVersionText.js index 66a7f74150b..589528c2351 100644 --- a/api/lib/application/target-profiles/presenter/pdf/drawer/CoverPageVersionText.js +++ b/api/lib/application/target-profiles/presenter/pdf/drawer/CoverPageVersionText.js @@ -1,17 +1,17 @@ -const dayjs = require('dayjs'); -const localizedFormat = require('dayjs/plugin/localizedFormat'); +import dayjs from 'dayjs'; +import localizedFormat from 'dayjs/plugin/localizedFormat.js'; dayjs.extend(localizedFormat); -const Text = require('./Text.js'); -const ColorManager = require('../manager/color-manager.js'); -const FontManager = require('../manager/font-manager.js'); -const PositionManager = require('../manager/position-manager.js'); +import { Text } from './Text.js'; +import * as ColorManager from '../manager/color-manager.js'; +import { FontManager } from '../manager/font-manager.js'; +import { PositionManager } from '../manager/position-manager.js'; const textByLang = { en: 'Version {date}', fr: 'Version du {date}', }; -module.exports = class CoverPageVersionText extends Text { +class CoverPageVersionText extends Text { constructor({ language, page }) { let text = textByLang[language]; const todayDateString = dayjs().locale(language).format('LL'); @@ -28,4 +28,6 @@ module.exports = class CoverPageVersionText extends Text { fontColor: ColorManager.coverPageVersionColor, }); } -}; +} + +export { CoverPageVersionText }; diff --git a/api/lib/application/target-profiles/presenter/pdf/drawer/LegalMentionText.js b/api/lib/application/target-profiles/presenter/pdf/drawer/LegalMentionText.js index cb2e6f12f49..4f0542c4892 100644 --- a/api/lib/application/target-profiles/presenter/pdf/drawer/LegalMentionText.js +++ b/api/lib/application/target-profiles/presenter/pdf/drawer/LegalMentionText.js @@ -1,15 +1,15 @@ -const dayjs = require('dayjs'); -const Text = require('./Text.js'); -const ColorManager = require('../manager/color-manager.js'); -const FontManager = require('../manager/font-manager.js'); -const PositionManager = require('../manager/position-manager.js'); +import dayjs from 'dayjs'; +import { Text } from './Text.js'; +import * as ColorManager from '../manager/color-manager.js'; +import { FontManager } from '../manager/font-manager.js'; +import { PositionManager } from '../manager/position-manager.js'; const textByLang = { en: 'This is a working document, updated regularly. Its distribution is restricted and its use limited to Pix Orga members in the context of the implementation of the support of their users. - Version {date}', fr: "Ceci est un document de travail. Il évolue régulièrement. Sa diffusion est restreinte et son usage limité aux utilisateurs de Pix Orga dans le cadre de la mise en oeuvre de l'accompagnement de leurs publics. - Version du {date}", }; -module.exports = class LegalMentionText extends Text { +class LegalMentionText extends Text { constructor({ language }) { let text = textByLang[language]; const todayDateString = dayjs().locale(language).format('DD MMMM YYYY'); @@ -25,4 +25,6 @@ module.exports = class LegalMentionText extends Text { fontColor: ColorManager.legalMentionColor, }); } -}; +} + +export { LegalMentionText }; diff --git a/api/lib/application/target-profiles/presenter/pdf/drawer/Text.js b/api/lib/application/target-profiles/presenter/pdf/drawer/Text.js index 1b0d688004d..e9606875ba3 100644 --- a/api/lib/application/target-profiles/presenter/pdf/drawer/Text.js +++ b/api/lib/application/target-profiles/presenter/pdf/drawer/Text.js @@ -1,7 +1,7 @@ -const PositionManager = require('../manager/position-manager.js'); -const pdfLibUtils = require('pdf-lib/cjs/utils'); +import { PositionManager } from '../manager/position-manager.js'; +import pdfLibUtils from 'pdf-lib/cjs/utils/index.js'; -module.exports = class Text { +class Text { constructor({ text, positionX, positionY, fontSize, font, fontColor, maxWidth }) { this.text = text; this.position = { @@ -130,4 +130,6 @@ module.exports = class Text { const textWidth = font.widthOfTextAtSize(text, fontSize); return page.getWidth() / 2 - textWidth / 2; } -}; +} + +export { Text }; diff --git a/api/lib/application/target-profiles/presenter/pdf/drawer/ThematicText.js b/api/lib/application/target-profiles/presenter/pdf/drawer/ThematicText.js index 4aa1b75a081..86e230d5a83 100644 --- a/api/lib/application/target-profiles/presenter/pdf/drawer/ThematicText.js +++ b/api/lib/application/target-profiles/presenter/pdf/drawer/ThematicText.js @@ -1,7 +1,7 @@ -const Text = require('./Text.js'); -const ColorManager = require('../manager/color-manager.js'); -const FontManager = require('../manager/font-manager.js'); -const PositionManager = require('../manager/position-manager.js'); +import { Text } from './Text.js'; +import * as ColorManager from '../manager/color-manager.js'; +import { FontManager } from '../manager/font-manager.js'; +import { PositionManager } from '../manager/position-manager.js'; class ThematicText extends Text { constructor({ text, positionY, positionYAfterTubes }) { @@ -56,4 +56,4 @@ function _thematicHeight(text) { return FontManager.thematicFontHeight * numberOfLine; } -module.exports = ThematicText; +export { ThematicText }; diff --git a/api/lib/application/target-profiles/presenter/pdf/drawer/TubeText.js b/api/lib/application/target-profiles/presenter/pdf/drawer/TubeText.js index 14b25bb1504..89c527786e9 100644 --- a/api/lib/application/target-profiles/presenter/pdf/drawer/TubeText.js +++ b/api/lib/application/target-profiles/presenter/pdf/drawer/TubeText.js @@ -1,9 +1,9 @@ -const Text = require('./Text.js'); -const ColorManager = require('../manager/color-manager.js'); -const FontManager = require('../manager/font-manager.js'); -const PositionManager = require('../manager/position-manager.js'); +import { Text } from './Text.js'; +import * as ColorManager from '../manager/color-manager.js'; +import { FontManager } from '../manager/font-manager.js'; +import { PositionManager } from '../manager/position-manager.js'; -module.exports = class TubeText extends Text { +class TubeText extends Text { constructor({ practicalTitle, practicalDescription, positionY }) { super({ text: practicalTitle || 'error on practicalTitle', @@ -38,4 +38,6 @@ module.exports = class TubeText extends Text { get spaceUnderText() { return Math.max(FontManager.tubeTitleFontHeight, FontManager.tubeDescriptionFontHeight) / 2; } -}; +} + +export { TubeText }; diff --git a/api/lib/application/target-profiles/presenter/pdf/learning-content-pdf-presenter.js b/api/lib/application/target-profiles/presenter/pdf/learning-content-pdf-presenter.js index a7b7cc37856..8f812f30cd4 100644 --- a/api/lib/application/target-profiles/presenter/pdf/learning-content-pdf-presenter.js +++ b/api/lib/application/target-profiles/presenter/pdf/learning-content-pdf-presenter.js @@ -1,26 +1,20 @@ -const pdfLibFontKit = require('@pdf-lib/fontkit'); -require('dayjs/locale/fr'); -const FontManager = require('./manager/font-manager.js'); -const TemplatePageManager = require('./manager/template-page-manager.js'); -const learningContentBuilder = require('./builder/learning-content-builder.js'); -const coverPageBuilder = require('./builder/cover-page-builder.js'); -const { PDFDocument } = require('pdf-lib'); +import pdfLibFontKit from '@pdf-lib/fontkit'; +import 'dayjs/locale/fr.js'; +import { FontManager } from './manager/font-manager.js'; +import * as TemplatePageManager from './manager/template-page-manager.js'; +import * as learningContentBuilder from './builder/learning-content-builder.js'; +import * as coverPageBuilder from './builder/cover-page-builder.js'; +import { PDFDocument } from 'pdf-lib'; -module.exports = { - /** - * @param learningContent{LearningContent} - * @param title{string} - * @param language{string} - * @return {Promise} - */ - async present(learningContent, title, language) { - const pdfDocument = await _initializeNewPDFDocument(pdfLibFontKit); - coverPageBuilder.build(pdfDocument, title, language); - const pdfBytes = await learningContentBuilder.build(pdfDocument, learningContent, language).save(); - return Buffer.from(pdfBytes); - }, +const present = async function (learningContent, title, language) { + const pdfDocument = await _initializeNewPDFDocument(pdfLibFontKit); + coverPageBuilder.build(pdfDocument, title, language); + const pdfBytes = await learningContentBuilder.build(pdfDocument, learningContent, language).save(); + return Buffer.from(pdfBytes); }; +export { present }; + /** * @param fontKit {Fontkit} * @returns {Promise} diff --git a/api/lib/application/target-profiles/presenter/pdf/manager/color-manager.js b/api/lib/application/target-profiles/presenter/pdf/manager/color-manager.js index 3449a751bdf..231c657a76f 100644 --- a/api/lib/application/target-profiles/presenter/pdf/manager/color-manager.js +++ b/api/lib/application/target-profiles/presenter/pdf/manager/color-manager.js @@ -1,4 +1,5 @@ -const { rgb } = require('pdf-lib'); +import { rgb } from 'pdf-lib'; + const colorToRgb = { jaffa: rgb(0.949, 0.274, 0.27), emerald: rgb(0.102, 0.549, 0.537), @@ -20,69 +21,42 @@ const lighterColorToRgb = { const DEFAULT_COLOR = 'jaffa'; const DEFAULT_BACKGROUND = rgb(0.93, 0.93, 0.93); -module.exports = { - /** - * @param color {string} - * @return {RGB} - */ - findRGBColor(color = DEFAULT_COLOR) { - let rgbColor = colorToRgb[color]; - if (!rgbColor) { - rgbColor = colorToRgb[DEFAULT_COLOR]; - } - return rgbColor; - }, - /** - * @param color {string} - * @return {RGB} - */ - findLighterShadeRGBColor(color = DEFAULT_COLOR) { - let rgbColor = lighterColorToRgb[color]; - if (!rgbColor) { - rgbColor = lighterColorToRgb[DEFAULT_COLOR]; - } - return rgbColor; - }, - /** - * @return {RGB} - */ - get legalMentionColor() { - return colorToRgb['black']; - }, - /** - * @return {RGB} - */ - get coverPageTitleColor() { - return colorToRgb['white']; - }, - /** - * @return {RGB} - */ - get coverPageLegalMentionColor() { - return colorToRgb['white']; - }, - /** - * @return {RGB} - */ - get coverPageVersionColor() { - return colorToRgb['white']; - }, - /** - * @return {RGB} - */ - get competenceBackground() { - return DEFAULT_BACKGROUND; - }, - /** - * @return {RGB} - */ - get thematicBackground() { - return DEFAULT_BACKGROUND; - }, - /** - * @return {RGB} - */ - get tubeBackground() { - return rgb(0.89, 0.89, 0.89); - }, +const findRGBColor = function (color = DEFAULT_COLOR) { + let rgbColor = colorToRgb[color]; + if (!rgbColor) { + rgbColor = colorToRgb[DEFAULT_COLOR]; + } + return rgbColor; +}; + +const findLighterShadeRGBColor = function (color = DEFAULT_COLOR) { + let rgbColor = lighterColorToRgb[color]; + if (!rgbColor) { + rgbColor = lighterColorToRgb[DEFAULT_COLOR]; + } + return rgbColor; +}; + +const legalMentionColor = colorToRgb['black']; +const coverPageTitleColor = colorToRgb['white']; +const coverPageLegalMentionColor = colorToRgb['white']; + +const coverPageVersionColor = colorToRgb['white']; + +const competenceBackground = DEFAULT_BACKGROUND; + +const thematicBackground = DEFAULT_BACKGROUND; + +const tubeBackground = rgb(0.89, 0.89, 0.89); + +export { + findRGBColor, + findLighterShadeRGBColor, + legalMentionColor, + coverPageTitleColor, + coverPageLegalMentionColor, + coverPageVersionColor, + competenceBackground, + thematicBackground, + tubeBackground, }; diff --git a/api/lib/application/target-profiles/presenter/pdf/manager/font-manager.js b/api/lib/application/target-profiles/presenter/pdf/manager/font-manager.js index c40076e2353..7783ffe394b 100644 --- a/api/lib/application/target-profiles/presenter/pdf/manager/font-manager.js +++ b/api/lib/application/target-profiles/presenter/pdf/manager/font-manager.js @@ -1,4 +1,8 @@ -const { readFile } = require('fs/promises'); +import { readFile } from 'fs/promises'; + +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); const embeddedFonts = {}; const COVER_PAGE_VERSION_TEXT_FONT_SIZE = 20; @@ -187,4 +191,4 @@ const FontManager = { }, }; -module.exports = FontManager; +export { FontManager }; diff --git a/api/lib/application/target-profiles/presenter/pdf/manager/position-manager.js b/api/lib/application/target-profiles/presenter/pdf/manager/position-manager.js index 4c01c73bdbd..36e794dee0c 100644 --- a/api/lib/application/target-profiles/presenter/pdf/manager/position-manager.js +++ b/api/lib/application/target-profiles/presenter/pdf/manager/position-manager.js @@ -79,4 +79,4 @@ const PositionManager = { }, }; -module.exports = PositionManager; +export { PositionManager }; diff --git a/api/lib/application/target-profiles/presenter/pdf/manager/template-page-manager.js b/api/lib/application/target-profiles/presenter/pdf/manager/template-page-manager.js index 688e0d468d2..41ef6f6c91b 100644 --- a/api/lib/application/target-profiles/presenter/pdf/manager/template-page-manager.js +++ b/api/lib/application/target-profiles/presenter/pdf/manager/template-page-manager.js @@ -1,4 +1,7 @@ -const { readFile } = require('fs/promises'); +import { readFile } from 'fs/promises'; +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); const embeddedTemplatePages = {}; @@ -11,33 +14,24 @@ const templatesPages = { 'cover-page': 'cover-page.pdf', }; -module.exports = { - /** - * @param areaColor {string} - * @returns {PDFEmbeddedPage} - */ - findTemplatePage(areaColor) { - if (!embeddedTemplatePages[areaColor]) { - return embeddedTemplatePages['jaffa']; - } - return embeddedTemplatePages[areaColor]; - }, - /** - * @returns {PDFEmbeddedPage} - */ - getCoverPage() { - return embeddedTemplatePages['cover-page']; - }, - /** - * @param pdfDocument {PDFDocument} - * @returns {Promise} - */ - async initializeTemplatesPages(pdfDocument) { - for (const templateKey in templatesPages) { - const templateFilename = templatesPages[templateKey]; - const templateBuffer = await readFile(`${__dirname}/templates/${templateFilename}`); - const [templatePage] = await pdfDocument.embedPdf(templateBuffer); - embeddedTemplatePages[templateKey] = templatePage; - } - }, +const findTemplatePage = function (areaColor) { + if (!embeddedTemplatePages[areaColor]) { + return embeddedTemplatePages['jaffa']; + } + return embeddedTemplatePages[areaColor]; +}; + +const getCoverPage = function () { + return embeddedTemplatePages['cover-page']; }; + +const initializeTemplatesPages = async function (pdfDocument) { + for (const templateKey in templatesPages) { + const templateFilename = templatesPages[templateKey]; + const templateBuffer = await readFile(`${__dirname}/templates/${templateFilename}`); + const [templatePage] = await pdfDocument.embedPdf(templateBuffer); + embeddedTemplatePages[templateKey] = templatePage; + } +}; + +export { findTemplatePage, getCoverPage, initializeTemplatesPages }; diff --git a/api/lib/application/target-profiles/target-profile-controller.js b/api/lib/application/target-profiles/target-profile-controller.js index 0a20409f111..d3309866edf 100644 --- a/api/lib/application/target-profiles/target-profile-controller.js +++ b/api/lib/application/target-profiles/target-profile-controller.js @@ -1,147 +1,166 @@ -const usecases = require('../../domain/usecases/index.js'); -const tokenService = require('../../domain/services/token-service.js'); -const targetProfileSerializer = require('../../infrastructure/serializers/jsonapi/target-profile-serializer.js'); -const targetProfileSummaryForAdminSerializer = require('../../infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer.js'); -const targetProfileForAdminSerializer = require('../../infrastructure/serializers/jsonapi/target-profile-for-admin-serializer.js'); -const queryParamsUtils = require('../../infrastructure/utils/query-params-utils.js'); -const requestResponseUtils = require('../../infrastructure/utils/request-response-utils.js'); -const organizationSerializer = require('../../infrastructure/serializers/jsonapi/organization-serializer.js'); -const badgeSerializer = require('../../infrastructure/serializers/jsonapi/badge-serializer.js'); -const badgeCreationSerializer = require('../../infrastructure/serializers/jsonapi/badge-creation-serializer.js'); -const targetProfileAttachOrganizationSerializer = require('../../infrastructure/serializers/jsonapi/target-profile-attach-organization-serializer.js'); -const learningContentPDFPresenter = require('./presenter/pdf/learning-content-pdf-presenter.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); -const trainingSummarySerializer = require('../../infrastructure/serializers/jsonapi/training-summary-serializer'); - -module.exports = { - async findPaginatedFilteredTargetProfileSummariesForAdmin(request) { - const options = queryParamsUtils.extractParameters(request.query); - - const { models: targetProfileSummaries, meta } = await usecases.findPaginatedFilteredTargetProfileSummariesForAdmin( - { - filter: options.filter, - page: options.page, - } - ); - return targetProfileSummaryForAdminSerializer.serialize(targetProfileSummaries, meta); - }, - - async getTargetProfileForAdmin(request) { - const targetProfileId = request.params.id; - const targetProfileForAdmin = await usecases.getTargetProfileForAdmin({ targetProfileId }); - return targetProfileForAdminSerializer.serialize(targetProfileForAdmin); - }, - - async findPaginatedFilteredTargetProfileOrganizations(request) { - const targetProfileId = request.params.id; - const options = queryParamsUtils.extractParameters(request.query); - - const { models: organizations, pagination } = await usecases.findPaginatedFilteredTargetProfileOrganizations({ - targetProfileId, - filter: options.filter, - page: options.page, - }); - return organizationSerializer.serialize(organizations, pagination); - }, - - async getContentAsJsonFile(request, h) { - const targetProfileId = request.params.id; - const token = request.query.accessToken; - const userId = tokenService.extractUserId(token); - - const { jsonContent, fileName } = await usecases.getTargetProfileContentAsJson({ userId, targetProfileId }); - - const escapedFilename = requestResponseUtils.escapeFileName(fileName); - - return h - .response(jsonContent) - .header('Content-Type', 'text/json;charset=utf-8') - .header('Content-Disposition', `attachment; filename=${escapedFilename}`); - }, - - async attachOrganizations(request, h) { - const organizationIds = request.payload['organization-ids']; - const targetProfileId = request.params.id; - const results = await usecases.attachOrganizationsToTargetProfile({ targetProfileId, organizationIds }); - - return h.response(targetProfileAttachOrganizationSerializer.serialize({ ...results, targetProfileId })).code(200); - }, - - async attachOrganizationsFromExistingTargetProfile(request, h) { - const existingTargetProfileId = request.payload['target-profile-id']; - const targetProfileId = request.params.id; - await usecases.attachOrganizationsFromExistingTargetProfile({ targetProfileId, existingTargetProfileId }); - return h.response({}).code(204); - }, - - async updateTargetProfile(request, h) { - const id = request.params.id; - const { name, 'image-url': imageUrl, description, comment, category } = request.payload.data.attributes; - await usecases.updateTargetProfile({ id, name, imageUrl, description, comment, category }); - return h.response({}).code(204); - }, - - async outdateTargetProfile(request, h) { - const id = request.params.id; - - await usecases.outdateTargetProfile({ id }); - return h.response({}).code(204); - }, - - async createTargetProfile(request) { - const targetProfileCreationCommand = targetProfileSerializer.deserializeCreationCommand(request.payload); - - const targetProfileId = await DomainTransaction.execute(async (domainTransaction) => { - return usecases.createTargetProfile({ - targetProfileCreationCommand, - domainTransaction, - }); - }); - return targetProfileSerializer.serializeId(targetProfileId); - }, +import { usecases } from '../../domain/usecases/index.js'; +import { tokenService } from '../../domain/services/token-service.js'; +import * as targetProfileSerializer from '../../infrastructure/serializers/jsonapi/target-profile-serializer.js'; +import * as targetProfileSummaryForAdminSerializer from '../../infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer.js'; +import * as targetProfileForAdminSerializer from '../../infrastructure/serializers/jsonapi/target-profile-for-admin-serializer.js'; +import * as queryParamsUtils from '../../infrastructure/utils/query-params-utils.js'; +import { escapeFileName } from '../../infrastructure/utils/request-response-utils.js'; +import * as organizationSerializer from '../../infrastructure/serializers/jsonapi/organization-serializer.js'; +import * as badgeSerializer from '../../infrastructure/serializers/jsonapi/badge-serializer.js'; +import { deserializer as badgeCreationDeserializer } from '../../infrastructure/serializers/jsonapi/badge-creation-serializer.js'; +import * as targetProfileAttachOrganizationSerializer from '../../infrastructure/serializers/jsonapi/target-profile-attach-organization-serializer.js'; +import * as learningContentPDFPresenter from './presenter/pdf/learning-content-pdf-presenter.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; +import * as trainingSummarySerializer from '../../infrastructure/serializers/jsonapi/training-summary-serializer.js'; + +const findPaginatedFilteredTargetProfileSummariesForAdmin = async function (request) { + const options = queryParamsUtils.extractParameters(request.query); + + const { models: targetProfileSummaries, meta } = await usecases.findPaginatedFilteredTargetProfileSummariesForAdmin({ + filter: options.filter, + page: options.page, + }); + return targetProfileSummaryForAdminSerializer.serialize(targetProfileSummaries, meta); +}; + +const getTargetProfileForAdmin = async function (request) { + const targetProfileId = request.params.id; + const targetProfileForAdmin = await usecases.getTargetProfileForAdmin({ targetProfileId }); + return targetProfileForAdminSerializer.serialize(targetProfileForAdmin); +}; + +const findPaginatedFilteredTargetProfileOrganizations = async function (request) { + const targetProfileId = request.params.id; + const options = queryParamsUtils.extractParameters(request.query); + + const { models: organizations, pagination } = await usecases.findPaginatedFilteredTargetProfileOrganizations({ + targetProfileId, + filter: options.filter, + page: options.page, + }); + return organizationSerializer.serialize(organizations, pagination); +}; + +const getContentAsJsonFile = async function (request, h, dependencies = { tokenService }) { + const targetProfileId = request.params.id; + const token = request.query.accessToken; + const userId = dependencies.tokenService.extractUserId(token); + + const { jsonContent, fileName } = await usecases.getTargetProfileContentAsJson({ userId, targetProfileId }); + const escapedFilename = escapeFileName(fileName); + + return h + .response(jsonContent) + .header('Content-Type', 'text/json;charset=utf-8') + .header('Content-Disposition', `attachment; filename=${escapedFilename}`); +}; + +const attachOrganizations = async function (request, h, dependencies = { targetProfileAttachOrganizationSerializer }) { + const organizationIds = request.payload['organization-ids']; + const targetProfileId = request.params.id; + const results = await usecases.attachOrganizationsToTargetProfile({ targetProfileId, organizationIds }); + + return h + .response(dependencies.targetProfileAttachOrganizationSerializer.serialize({ ...results, targetProfileId })) + .code(200); +}; - async findPaginatedTrainings(request, h, dependencies = { queryParamsUtils, trainingSummarySerializer }) { - const { page } = dependencies.queryParamsUtils.extractParameters(request.query); - const targetProfileId = request.params.id; +const attachOrganizationsFromExistingTargetProfile = async function (request, h) { + const existingTargetProfileId = request.payload['target-profile-id']; + const targetProfileId = request.params.id; + await usecases.attachOrganizationsFromExistingTargetProfile({ targetProfileId, existingTargetProfileId }); + return h.response({}).code(204); +}; + +const updateTargetProfile = async function (request, h) { + const id = request.params.id; + const { name, 'image-url': imageUrl, description, comment, category } = request.payload.data.attributes; + await usecases.updateTargetProfile({ id, name, imageUrl, description, comment, category }); + return h.response({}).code(204); +}; + +const outdateTargetProfile = async function (request, h) { + const id = request.params.id; - const { trainings, meta } = await usecases.findPaginatedTargetProfileTrainingSummaries({ - targetProfileId, - page, + await usecases.outdateTargetProfile({ id }); + return h.response({}).code(204); +}; + +const createTargetProfile = async function (request) { + const targetProfileCreationCommand = targetProfileSerializer.deserializeCreationCommand(request.payload); + + const targetProfileId = await DomainTransaction.execute(async (domainTransaction) => { + return usecases.createTargetProfile({ + targetProfileCreationCommand, + domainTransaction, }); - return dependencies.trainingSummarySerializer.serialize(trainings, meta); - }, + }); + return targetProfileSerializer.serializeId(targetProfileId); +}; - async createBadge(request, h) { - const targetProfileId = request.params.id; - const badgeCreation = await badgeCreationSerializer.deserialize(request.payload); +const findPaginatedTrainings = async function ( + request, + h, + dependencies = { queryParamsUtils, trainingSummarySerializer } +) { + const { page } = dependencies.queryParamsUtils.extractParameters(request.query); + const targetProfileId = request.params.id; + + const { trainings, meta } = await usecases.findPaginatedTargetProfileTrainingSummaries({ + targetProfileId, + page, + }); + return dependencies.trainingSummarySerializer.serialize(trainings, meta); +}; + +const createBadge = async function (request, h) { + const targetProfileId = request.params.id; + const badgeCreation = await badgeCreationDeserializer.deserialize(request.payload); - const createdBadge = await usecases.createBadge({ targetProfileId, badgeCreation }); + const createdBadge = await usecases.createBadge({ targetProfileId, badgeCreation }); - return h.response(badgeSerializer.serialize(createdBadge)).created(); - }, + return h.response(badgeSerializer.serialize(createdBadge)).created(); +}; - async markTargetProfileAsSimplifiedAccess(request, h) { - const id = request.params.id; +const markTargetProfileAsSimplifiedAccess = async function (request, h) { + const id = request.params.id; - const targetProfile = await usecases.markTargetProfileAsSimplifiedAccess({ id }); - return h.response(targetProfileSerializer.serialize(targetProfile)); - }, + const targetProfile = await usecases.markTargetProfileAsSimplifiedAccess({ id }); + return h.response(targetProfileSerializer.serialize(targetProfile)); +}; - async getLearningContentAsPdf(request, h) { - const targetProfileId = request.params.id; - const { title, language } = request.query; +const getLearningContentAsPdf = async function (request, h, dependencies = { learningContentPDFPresenter }) { + const targetProfileId = request.params.id; + const { title, language } = request.query; - const learningContent = await usecases.getLearningContentByTargetProfile({ targetProfileId, language }); - const pdfBuffer = await learningContentPDFPresenter.present(learningContent, title, language); + const learningContent = await usecases.getLearningContentByTargetProfile({ targetProfileId, language }); + const pdfBuffer = await dependencies.learningContentPDFPresenter.present(learningContent, title, language); - const date = new Date(); - const dateString = date.getDate() + '-' + (date.getMonth() + 1) + '-' + date.getFullYear(); - const timeString = date.getHours() + '-' + date.getMinutes(); - const fileName = `${title}_${dateString}_${timeString}.pdf`; + const date = new Date(); + const dateString = date.getDate() + '-' + (date.getMonth() + 1) + '-' + date.getFullYear(); + const timeString = date.getHours() + '-' + date.getMinutes(); + const fileName = `${title}_${dateString}_${timeString}.pdf`; - return h - .response(pdfBuffer) - .header('Content-Disposition', `attachment; filename=${fileName}`) - .header('Content-Type', 'application/pdf'); - }, + return h + .response(pdfBuffer) + .header('Content-Disposition', `attachment; filename=${fileName}`) + .header('Content-Type', 'application/pdf'); }; + +const targetProfileController = { + findPaginatedFilteredTargetProfileSummariesForAdmin, + getTargetProfileForAdmin, + findPaginatedFilteredTargetProfileOrganizations, + getContentAsJsonFile, + attachOrganizations, + attachOrganizationsFromExistingTargetProfile, + updateTargetProfile, + outdateTargetProfile, + createTargetProfile, + findPaginatedTrainings, + createBadge, + markTargetProfileAsSimplifiedAccess, + getLearningContentAsPdf, +}; + +export { targetProfileController }; diff --git a/api/lib/application/trainings/index.js b/api/lib/application/trainings/index.js index fd66a97225d..3d3517f861d 100644 --- a/api/lib/application/trainings/index.js +++ b/api/lib/application/trainings/index.js @@ -1,11 +1,11 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const trainingsController = require('./training-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const { sendJsonApiError, NotFoundError, BadRequestError } = require('../http-errors.js'); +import { trainingController as trainingsController } from './training-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { sendJsonApiError, NotFoundError, BadRequestError } from '../http-errors.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'GET', @@ -269,4 +269,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'trainings-api'; +const name = 'trainings-api'; +export { register, name }; diff --git a/api/lib/application/trainings/training-controller.js b/api/lib/application/trainings/training-controller.js index 3850bdbad02..87ce07cb8a7 100644 --- a/api/lib/application/trainings/training-controller.js +++ b/api/lib/application/trainings/training-controller.js @@ -1,67 +1,85 @@ -const trainingSerializer = require('../../infrastructure/serializers/jsonapi/training-serializer.js'); -const trainingSummarySerializer = require('../../infrastructure/serializers/jsonapi/training-summary-serializer.js'); -const trainingTriggerSerializer = require('../../infrastructure/serializers/jsonapi/training-trigger-serializer.js'); -const targetProfileSummaryForAdminSerializer = require('../../infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer.js'); -const usecases = require('../../domain/usecases/index.js'); -const queryParamsUtils = require('../../infrastructure/utils/query-params-utils.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction'); +import * as trainingSerializer from '../../infrastructure/serializers/jsonapi/training-serializer.js'; +import * as trainingSummarySerializer from '../../infrastructure/serializers/jsonapi/training-summary-serializer.js'; +import * as trainingTriggerSerializer from '../../infrastructure/serializers/jsonapi/training-trigger-serializer.js'; +import * as targetProfileSummaryForAdminSerializer from '../../infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer.js'; +import { usecases } from '../../domain/usecases/index.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; +import * as queryParamsUtils from '../../infrastructure/utils/query-params-utils.js'; -module.exports = { - async findPaginatedTrainingSummaries(request, h, dependencies = { trainingSummarySerializer, queryParamsUtils }) { - const { filter, page } = dependencies.queryParamsUtils.extractParameters(request.query); - const { trainings, meta } = await usecases.findPaginatedTrainingSummaries({ filter, page }); - return dependencies.trainingSummarySerializer.serialize(trainings, meta); - }, +const findPaginatedTrainingSummaries = async function ( + request, + h, + dependencies = { trainingSummarySerializer, queryParamsUtils } +) { + const { filter, page } = dependencies.queryParamsUtils.extractParameters(request.query); + const { trainings, meta } = await usecases.findPaginatedTrainingSummaries({ filter, page }); + return dependencies.trainingSummarySerializer.serialize(trainings, meta); +}; - async findTargetProfileSummaries(request, h, dependencies = { targetProfileSummaryForAdminSerializer }) { - const { trainingId } = request.params; - const targetProfileSummaries = await usecases.findTargetProfileSummariesForTraining({ trainingId }); - return dependencies.targetProfileSummaryForAdminSerializer.serialize(targetProfileSummaries); - }, +const findTargetProfileSummaries = async function ( + request, + h, + dependencies = { targetProfileSummaryForAdminSerializer } +) { + const { trainingId } = request.params; + const targetProfileSummaries = await usecases.findTargetProfileSummariesForTraining({ trainingId }); + return dependencies.targetProfileSummaryForAdminSerializer.serialize(targetProfileSummaries); +}; - async getById(request, h, dependencies = { trainingSerializer }) { - const { trainingId } = request.params; - const training = await usecases.getTraining({ trainingId }); - return dependencies.trainingSerializer.serializeForAdmin(training); - }, +const getById = async function (request, h, dependencies = { trainingSerializer }) { + const { trainingId } = request.params; + const training = await usecases.getTraining({ trainingId }); + return dependencies.trainingSerializer.serializeForAdmin(training); +}; - async create(request, h, dependencies = { trainingSerializer }) { - const deserializedTraining = await dependencies.trainingSerializer.deserialize(request.payload); - const createdTraining = await usecases.createTraining({ training: deserializedTraining }); - return h.response(dependencies.trainingSerializer.serialize(createdTraining)).created(); - }, +const create = async function (request, h, dependencies = { trainingSerializer }) { + const deserializedTraining = await dependencies.trainingSerializer.deserialize(request.payload); + const createdTraining = await usecases.createTraining({ training: deserializedTraining }); + return h.response(dependencies.trainingSerializer.serialize(createdTraining)).created(); +}; - async update(request, h, dependencies = { trainingSerializer }) { - const { trainingId } = request.params; - const training = await dependencies.trainingSerializer.deserialize(request.payload); - const updatedTraining = await usecases.updateTraining({ training: { ...training, id: trainingId } }); - return dependencies.trainingSerializer.serialize(updatedTraining); - }, +const update = async function (request, h, dependencies = { trainingSerializer }) { + const { trainingId } = request.params; + const training = await dependencies.trainingSerializer.deserialize(request.payload); + const updatedTraining = await usecases.updateTraining({ training: { ...training, id: trainingId } }); + return dependencies.trainingSerializer.serialize(updatedTraining); +}; - async createOrUpdateTrigger(request, h, dependencies = { trainingTriggerSerializer }) { - const { trainingId } = request.params; - const { threshold, tubes, type } = await dependencies.trainingTriggerSerializer.deserialize(request.payload); +const createOrUpdateTrigger = async function (request, h, dependencies = { trainingTriggerSerializer }) { + const { trainingId } = request.params; + const { threshold, tubes, type } = await dependencies.trainingTriggerSerializer.deserialize(request.payload); - const createdOrUpdatedTrainingTrigger = await DomainTransaction.execute(async (domainTransaction) => { - return usecases.createOrUpdateTrainingTrigger({ - trainingId, - threshold, - tubes, - type, - domainTransaction, - }); + const createdOrUpdatedTrainingTrigger = await DomainTransaction.execute(async (domainTransaction) => { + return usecases.createOrUpdateTrainingTrigger({ + trainingId, + threshold, + tubes, + type, + domainTransaction, }); + }); - return dependencies.trainingTriggerSerializer.serialize(createdOrUpdatedTrainingTrigger); - }, + return dependencies.trainingTriggerSerializer.serialize(createdOrUpdatedTrainingTrigger); +}; - async attachTargetProfiles(request, h) { - const { id: trainingId } = request.params; - const targetProfileIds = request.payload['target-profile-ids']; - await usecases.attachTargetProfilesToTraining({ - trainingId, - targetProfileIds, - }); - return h.response({}).code(204); - }, +const attachTargetProfiles = async function (request, h) { + const { id: trainingId } = request.params; + const targetProfileIds = request.payload['target-profile-ids']; + await usecases.attachTargetProfilesToTraining({ + trainingId, + targetProfileIds, + }); + return h.response({}).code(204); }; + +const trainingController = { + findPaginatedTrainingSummaries, + findTargetProfileSummaries, + getById, + create, + update, + createOrUpdateTrigger, + attachTargetProfiles, +}; + +export { trainingController }; diff --git a/api/lib/application/tutorial-evaluations/index.js b/api/lib/application/tutorial-evaluations/index.js index 3b4dff85a3c..e1c92086e10 100644 --- a/api/lib/application/tutorial-evaluations/index.js +++ b/api/lib/application/tutorial-evaluations/index.js @@ -1,9 +1,9 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const tutorialEvaluationsController = require('./tutorial-evaluations-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { tutorialEvaluationsController } from './tutorial-evaluations-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'PUT', @@ -37,4 +37,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'tutorial-evaluations-api'; +const name = 'tutorial-evaluations-api'; +export { register, name }; diff --git a/api/lib/application/tutorial-evaluations/tutorial-evaluations-controller.js b/api/lib/application/tutorial-evaluations/tutorial-evaluations-controller.js index 54c43f82e05..bf49482e96a 100644 --- a/api/lib/application/tutorial-evaluations/tutorial-evaluations-controller.js +++ b/api/lib/application/tutorial-evaluations/tutorial-evaluations-controller.js @@ -1,17 +1,18 @@ -const usecases = require('../../domain/usecases/index.js'); -const tutorialEvaluationSerializer = require('../../infrastructure/serializers/jsonapi/tutorial-evaluation-serializer.js'); -const TutorialEvaluation = require('../../../lib/domain/models/TutorialEvaluation.js'); +import { usecases } from '../../domain/usecases/index.js'; +import * as tutorialEvaluationSerializer from '../../infrastructure/serializers/jsonapi/tutorial-evaluation-serializer.js'; +import { TutorialEvaluation } from '../../../lib/domain/models/TutorialEvaluation.js'; -module.exports = { - async evaluate(request, h, dependencies = { tutorialEvaluationSerializer }) { - const { userId } = request.auth.credentials; - const { tutorialId } = request.params; - const { status = TutorialEvaluation.statuses.LIKED } = dependencies.tutorialEvaluationSerializer.deserialize( - request.payload - ); +const evaluate = async function (request, h, dependencies = { tutorialEvaluationSerializer }) { + const { userId } = request.auth.credentials; + const { tutorialId } = request.params; + const { status = TutorialEvaluation.statuses.LIKED } = dependencies.tutorialEvaluationSerializer.deserialize( + request.payload + ); - const tutorialEvaluation = await usecases.addTutorialEvaluation({ userId, tutorialId, status }); + const tutorialEvaluation = await usecases.addTutorialEvaluation({ userId, tutorialId, status }); - return h.response(tutorialEvaluationSerializer.serialize(tutorialEvaluation)).created(); - }, + return h.response(tutorialEvaluationSerializer.serialize(tutorialEvaluation)).created(); }; + +const tutorialEvaluationsController = { evaluate }; +export { tutorialEvaluationsController }; diff --git a/api/lib/application/usecases/checkAdminMemberHasRoleCertif.js b/api/lib/application/usecases/checkAdminMemberHasRoleCertif.js index e220c568921..c28ed764bbd 100644 --- a/api/lib/application/usecases/checkAdminMemberHasRoleCertif.js +++ b/api/lib/application/usecases/checkAdminMemberHasRoleCertif.js @@ -1,8 +1,8 @@ -const adminMemberRepository = require('../../infrastructure/repositories/admin-member-repository.js'); +import * as adminMemberRepository from '../../infrastructure/repositories/admin-member-repository.js'; -module.exports = { - async execute(userId, dependencies = { adminMemberRepository }) { - const adminMember = await dependencies.adminMemberRepository.get({ userId }); - return adminMember.isCertif; - }, +const execute = async function (userId, dependencies = { adminMemberRepository }) { + const adminMember = await dependencies.adminMemberRepository.get({ userId }); + return adminMember.isCertif; }; + +export { execute }; diff --git a/api/lib/application/usecases/checkAdminMemberHasRoleMetier.js b/api/lib/application/usecases/checkAdminMemberHasRoleMetier.js index 0bfca70b33b..44900b60f04 100644 --- a/api/lib/application/usecases/checkAdminMemberHasRoleMetier.js +++ b/api/lib/application/usecases/checkAdminMemberHasRoleMetier.js @@ -1,8 +1,8 @@ -const adminMemberRepository = require('../../infrastructure/repositories/admin-member-repository.js'); +import * as adminMemberRepository from '../../infrastructure/repositories/admin-member-repository.js'; -module.exports = { - async execute(userId, dependencies = { adminMemberRepository }) { - const adminMember = await dependencies.adminMemberRepository.get({ userId }); - return adminMember.isMetier; - }, +const execute = async function (userId, dependencies = { adminMemberRepository }) { + const adminMember = await dependencies.adminMemberRepository.get({ userId }); + return adminMember.isMetier; }; + +export { execute }; diff --git a/api/lib/application/usecases/checkAdminMemberHasRoleSuperAdmin.js b/api/lib/application/usecases/checkAdminMemberHasRoleSuperAdmin.js index 51026bed14b..b6264d6f3b7 100644 --- a/api/lib/application/usecases/checkAdminMemberHasRoleSuperAdmin.js +++ b/api/lib/application/usecases/checkAdminMemberHasRoleSuperAdmin.js @@ -1,8 +1,8 @@ -const adminMemberRepository = require('../../infrastructure/repositories/admin-member-repository.js'); +import * as adminMemberRepository from '../../infrastructure/repositories/admin-member-repository.js'; -module.exports = { - async execute(userId, dependencies = { adminMemberRepository }) { - const adminMember = await dependencies.adminMemberRepository.get({ userId }); - return adminMember.isSuperAdmin; - }, +const execute = async function (userId, dependencies = { adminMemberRepository }) { + const adminMember = await dependencies.adminMemberRepository.get({ userId }); + return adminMember.isSuperAdmin; }; + +export { execute }; diff --git a/api/lib/application/usecases/checkAdminMemberHasRoleSupport.js b/api/lib/application/usecases/checkAdminMemberHasRoleSupport.js index 770b586ceac..bbb2b0b608e 100644 --- a/api/lib/application/usecases/checkAdminMemberHasRoleSupport.js +++ b/api/lib/application/usecases/checkAdminMemberHasRoleSupport.js @@ -1,8 +1,8 @@ -const adminMemberRepository = require('../../infrastructure/repositories/admin-member-repository.js'); +import * as adminMemberRepository from '../../infrastructure/repositories/admin-member-repository.js'; -module.exports = { - async execute(userId, dependencies = { adminMemberRepository }) { - const adminMember = await dependencies.adminMemberRepository.get({ userId }); - return adminMember.isSupport; - }, +const execute = async function (userId, dependencies = { adminMemberRepository }) { + const adminMember = await dependencies.adminMemberRepository.get({ userId }); + return adminMember.isSupport; }; + +export { execute }; diff --git a/api/lib/application/usecases/checkAuthorizationToManageCampaign.js b/api/lib/application/usecases/checkAuthorizationToManageCampaign.js index 72ad59b42ba..cf2f29e03c9 100644 --- a/api/lib/application/usecases/checkAuthorizationToManageCampaign.js +++ b/api/lib/application/usecases/checkAuthorizationToManageCampaign.js @@ -1,9 +1,9 @@ -const prescriberRoleRepository = require('../../infrastructure/repositories/prescriber-role-repository.js'); -const CampaignAuthorization = require('../preHandlers/models/CampaignAuthorization.js'); +import * as prescriberRoleRepository from '../../infrastructure/repositories/prescriber-role-repository.js'; +import { CampaignAuthorization } from '../preHandlers/models/CampaignAuthorization.js'; -module.exports = { - async execute({ userId, campaignId }) { - const prescriberRole = await prescriberRoleRepository.getForCampaign({ userId, campaignId }); - return CampaignAuthorization.isAllowedToManage({ prescriberRole }); - }, +const execute = async function ({ userId, campaignId }) { + const prescriberRole = await prescriberRoleRepository.getForCampaign({ userId, campaignId }); + return CampaignAuthorization.isAllowedToManage({ prescriberRole }); }; + +export { execute }; diff --git a/api/lib/application/usecases/checkIfUserIsBlocked.js b/api/lib/application/usecases/checkIfUserIsBlocked.js index dbc552fdc8f..c39c8220e0f 100644 --- a/api/lib/application/usecases/checkIfUserIsBlocked.js +++ b/api/lib/application/usecases/checkIfUserIsBlocked.js @@ -1,14 +1,14 @@ -const { UserIsTemporaryBlocked, UserIsBlocked } = require('../../domain/errors.js'); -const userLoginRepository = require('../../infrastructure/repositories/user-login-repository.js'); +import { UserIsTemporaryBlocked, UserIsBlocked } from '../../domain/errors.js'; +import * as userLoginRepository from '../../infrastructure/repositories/user-login-repository.js'; -module.exports = { - async execute(username) { - const foundUserLogin = await userLoginRepository.findByUsername(username); - if (foundUserLogin?.isUserMarkedAsBlocked()) { - throw new UserIsBlocked(); - } - if (foundUserLogin?.isUserMarkedAsTemporaryBlocked()) { - throw new UserIsTemporaryBlocked(); - } - }, +const execute = async function (username) { + const foundUserLogin = await userLoginRepository.findByUsername(username); + if (foundUserLogin?.isUserMarkedAsBlocked()) { + throw new UserIsBlocked(); + } + if (foundUserLogin?.isUserMarkedAsTemporaryBlocked()) { + throw new UserIsTemporaryBlocked(); + } }; + +export { execute }; diff --git a/api/lib/application/usecases/checkOrganizationIsScoAndManagingStudent.js b/api/lib/application/usecases/checkOrganizationIsScoAndManagingStudent.js index 793ccb8fb01..8d036bffb42 100644 --- a/api/lib/application/usecases/checkOrganizationIsScoAndManagingStudent.js +++ b/api/lib/application/usecases/checkOrganizationIsScoAndManagingStudent.js @@ -1,14 +1,15 @@ -const organizationRepository = require('../../infrastructure/repositories/organization-repository.js'); - -module.exports = { - async execute({ - organizationId, - dependencies = { - organizationRepository, - }, - }) { - const organization = await dependencies.organizationRepository.get(organizationId); - - return organization.isScoAndManagingStudents; +import * as organizationRepository from '../../infrastructure/repositories/organization-repository.js'; + +const execute = async function ({ + organizationId, + + dependencies = { + organizationRepository, }, +}) { + const organization = await dependencies.organizationRepository.get(organizationId); + + return organization.isScoAndManagingStudents; }; + +export { execute }; diff --git a/api/lib/application/usecases/checkPix1dEnabled.js b/api/lib/application/usecases/checkPix1dEnabled.js index 8a1055fb533..56154a6ed26 100644 --- a/api/lib/application/usecases/checkPix1dEnabled.js +++ b/api/lib/application/usecases/checkPix1dEnabled.js @@ -1,7 +1,7 @@ -const settings = require('../../config'); +import { config as settings } from '../../config.js'; -module.exports = { - async execute() { - return settings.featureToggles.isPix1dEnabled; - }, +const execute = async function () { + return settings.featureToggles.isPix1dEnabled; }; + +export { execute }; diff --git a/api/lib/application/usecases/checkUserBelongsToLearnersOrganization.js b/api/lib/application/usecases/checkUserBelongsToLearnersOrganization.js index 75d5876af1e..8f515016ab7 100644 --- a/api/lib/application/usecases/checkUserBelongsToLearnersOrganization.js +++ b/api/lib/application/usecases/checkUserBelongsToLearnersOrganization.js @@ -1,14 +1,18 @@ -const _ = require('lodash'); -const membershipRepository = require('../../infrastructure/repositories/membership-repository.js'); -const organizationLearnerRepository = require('../../infrastructure/repositories/organization-learner-repository.js'); +import _ from 'lodash'; +import * as membershipRepository from '../../infrastructure/repositories/membership-repository.js'; +import * as organizationLearnerRepository from '../../infrastructure/repositories/organization-learner-repository.js'; -module.exports = { - async execute(userId, organizationLearnerId, dependencies = { membershipRepository, organizationLearnerRepository }) { - const organizationLearner = await dependencies.organizationLearnerRepository.get(organizationLearnerId); - const memberships = await dependencies.membershipRepository.findByUserIdAndOrganizationId({ - userId, - organizationId: organizationLearner.organizationId, - }); - return !_.isEmpty(memberships); - }, +const execute = async function ( + userId, + organizationLearnerId, + dependencies = { membershipRepository, organizationLearnerRepository } +) { + const organizationLearner = await dependencies.organizationLearnerRepository.get(organizationLearnerId); + const memberships = await dependencies.membershipRepository.findByUserIdAndOrganizationId({ + userId, + organizationId: organizationLearner.organizationId, + }); + return !_.isEmpty(memberships); }; + +export { execute }; diff --git a/api/lib/application/usecases/checkUserBelongsToOrganization.js b/api/lib/application/usecases/checkUserBelongsToOrganization.js index a61768ee728..0c78bffab67 100644 --- a/api/lib/application/usecases/checkUserBelongsToOrganization.js +++ b/api/lib/application/usecases/checkUserBelongsToOrganization.js @@ -1,10 +1,10 @@ -const _ = require('lodash'); -const membershipRepository = require('../../infrastructure/repositories/membership-repository.js'); +import _ from 'lodash'; +import * as membershipRepository from '../../infrastructure/repositories/membership-repository.js'; -module.exports = { - execute(userId, organizationId, dependencies = { membershipRepository }) { - return dependencies.membershipRepository - .findByUserIdAndOrganizationId({ userId, organizationId }) - .then((memberships) => !_.isEmpty(memberships)); - }, +const execute = function (userId, organizationId, dependencies = { membershipRepository }) { + return dependencies.membershipRepository + .findByUserIdAndOrganizationId({ userId, organizationId }) + .then((memberships) => !_.isEmpty(memberships)); }; + +export { execute }; diff --git a/api/lib/application/usecases/checkUserBelongsToOrganizationManagingStudents.js b/api/lib/application/usecases/checkUserBelongsToOrganizationManagingStudents.js index 20b77565b33..4ea4022e835 100644 --- a/api/lib/application/usecases/checkUserBelongsToOrganizationManagingStudents.js +++ b/api/lib/application/usecases/checkUserBelongsToOrganizationManagingStudents.js @@ -1,15 +1,15 @@ -const membershipRepository = require('../../infrastructure/repositories/membership-repository.js'); +import * as membershipRepository from '../../infrastructure/repositories/membership-repository.js'; -module.exports = { - async execute(userId, organizationId, dependencies = { membershipRepository }) { - const memberships = await dependencies.membershipRepository.findByUserIdAndOrganizationId({ - userId, - organizationId, - includeOrganization: true, - }); - return memberships.reduce( - (belongsToScoOrganization, membership) => belongsToScoOrganization || membership.organization.isManagingStudents, - false - ); - }, +const execute = async function (userId, organizationId, dependencies = { membershipRepository }) { + const memberships = await dependencies.membershipRepository.findByUserIdAndOrganizationId({ + userId, + organizationId, + includeOrganization: true, + }); + return memberships.reduce( + (belongsToScoOrganization, membership) => belongsToScoOrganization || membership.organization.isManagingStudents, + false + ); }; + +export { execute }; diff --git a/api/lib/application/usecases/checkUserBelongsToScoOrganizationAndManagesStudents.js b/api/lib/application/usecases/checkUserBelongsToScoOrganizationAndManagesStudents.js index 63b706ca0ec..350a59afd6d 100644 --- a/api/lib/application/usecases/checkUserBelongsToScoOrganizationAndManagesStudents.js +++ b/api/lib/application/usecases/checkUserBelongsToScoOrganizationAndManagesStudents.js @@ -1,15 +1,13 @@ -const membershipRepository = require('../../infrastructure/repositories/membership-repository.js'); +import * as membershipRepository from '../../infrastructure/repositories/membership-repository.js'; -module.exports = { - async execute(userId, organizationId, dependencies = { membershipRepository }) { - const memberships = await dependencies.membershipRepository.findByUserIdAndOrganizationId({ - userId, - organizationId, - includeOrganization: true, - }); +const execute = async function (userId, organizationId, dependencies = { membershipRepository }) { + const memberships = await dependencies.membershipRepository.findByUserIdAndOrganizationId({ + userId, + organizationId, + includeOrganization: true, + }); - return memberships.some( - (membership) => membership.organization.isManagingStudents && membership.organization.isSco - ); - }, + return memberships.some((membership) => membership.organization.isManagingStudents && membership.organization.isSco); }; + +export { execute }; diff --git a/api/lib/application/usecases/checkUserBelongsToSupOrganizationAndManagesStudents.js b/api/lib/application/usecases/checkUserBelongsToSupOrganizationAndManagesStudents.js index 24ade861f71..a24e890b1b5 100644 --- a/api/lib/application/usecases/checkUserBelongsToSupOrganizationAndManagesStudents.js +++ b/api/lib/application/usecases/checkUserBelongsToSupOrganizationAndManagesStudents.js @@ -1,15 +1,13 @@ -const membershipRepository = require('../../infrastructure/repositories/membership-repository.js'); +import * as membershipRepository from '../../infrastructure/repositories/membership-repository.js'; -module.exports = { - async execute(userId, organizationId, dependencies = { membershipRepository }) { - const memberships = await dependencies.membershipRepository.findByUserIdAndOrganizationId({ - userId, - organizationId, - includeOrganization: true, - }); +const execute = async function (userId, organizationId, dependencies = { membershipRepository }) { + const memberships = await dependencies.membershipRepository.findByUserIdAndOrganizationId({ + userId, + organizationId, + includeOrganization: true, + }); - return memberships.some( - (membership) => membership.organization.isManagingStudents && membership.organization.isSup - ); - }, + return memberships.some((membership) => membership.organization.isManagingStudents && membership.organization.isSup); }; + +export { execute }; diff --git a/api/lib/application/usecases/checkUserIsAdminAndManagingStudentsForOrganization.js b/api/lib/application/usecases/checkUserIsAdminAndManagingStudentsForOrganization.js index bbfb2247696..0b78a54f9c1 100644 --- a/api/lib/application/usecases/checkUserIsAdminAndManagingStudentsForOrganization.js +++ b/api/lib/application/usecases/checkUserIsAdminAndManagingStudentsForOrganization.js @@ -1,21 +1,21 @@ -const membershipRepository = require('../../infrastructure/repositories/membership-repository.js'); -const Membership = require('../../domain/models/Membership.js'); +import * as membershipRepository from '../../infrastructure/repositories/membership-repository.js'; +import { Membership } from '../../domain/models/Membership.js'; -module.exports = { - async execute(userId, organizationId, type) { - const memberships = await membershipRepository.findByUserIdAndOrganizationId({ - userId, - organizationId, - includeOrganization: true, - }); - if (memberships.length === 0) { - return false; - } - return memberships.some( - (membership) => - membership.organization.isManagingStudents && - membership.organization.type === type && - membership.organizationRole === Membership.roles.ADMIN - ); - }, +const execute = async function (userId, organizationId, type) { + const memberships = await membershipRepository.findByUserIdAndOrganizationId({ + userId, + organizationId, + includeOrganization: true, + }); + if (memberships.length === 0) { + return false; + } + return memberships.some( + (membership) => + membership.organization.isManagingStudents && + membership.organization.type === type && + membership.organizationRole === Membership.roles.ADMIN + ); }; + +export { execute }; diff --git a/api/lib/application/usecases/checkUserIsAdminInOrganization.js b/api/lib/application/usecases/checkUserIsAdminInOrganization.js index 1afc79ddeec..84aaa1175ec 100644 --- a/api/lib/application/usecases/checkUserIsAdminInOrganization.js +++ b/api/lib/application/usecases/checkUserIsAdminInOrganization.js @@ -1,11 +1,11 @@ -const membershipRepository = require('../../infrastructure/repositories/membership-repository.js'); +import * as membershipRepository from '../../infrastructure/repositories/membership-repository.js'; -module.exports = { - execute(userId, organizationId, dependencies = { membershipRepository }) { - return dependencies.membershipRepository - .findByUserIdAndOrganizationId({ userId, organizationId }) - .then((memberships) => - memberships.reduce((isAdminInOrganization, membership) => isAdminInOrganization || membership.isAdmin, false) - ); - }, +const execute = function (userId, organizationId, dependencies = { membershipRepository }) { + return dependencies.membershipRepository + .findByUserIdAndOrganizationId({ userId, organizationId }) + .then((memberships) => + memberships.reduce((isAdminInOrganization, membership) => isAdminInOrganization || membership.isAdmin, false) + ); }; + +export { execute }; diff --git a/api/lib/application/usecases/checkUserIsMemberOfAnOrganization.js b/api/lib/application/usecases/checkUserIsMemberOfAnOrganization.js index 9234da19fd9..52aa47fc6b1 100644 --- a/api/lib/application/usecases/checkUserIsMemberOfAnOrganization.js +++ b/api/lib/application/usecases/checkUserIsMemberOfAnOrganization.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const membershipRepository = require('../../infrastructure/repositories/membership-repository.js'); +import _ from 'lodash'; +import * as membershipRepository from '../../infrastructure/repositories/membership-repository.js'; -module.exports = { - execute(userId) { - return membershipRepository.findByUserId({ userId }).then((memberships) => !_.isEmpty(memberships)); - }, +const execute = function (userId) { + return membershipRepository.findByUserId({ userId }).then((memberships) => !_.isEmpty(memberships)); }; + +export { execute }; diff --git a/api/lib/application/usecases/checkUserIsMemberOfCertificationCenter.js b/api/lib/application/usecases/checkUserIsMemberOfCertificationCenter.js index 746b37e501f..f8ce26655e4 100644 --- a/api/lib/application/usecases/checkUserIsMemberOfCertificationCenter.js +++ b/api/lib/application/usecases/checkUserIsMemberOfCertificationCenter.js @@ -1,10 +1,14 @@ -const certificationCenterMembershipRepository = require('../../infrastructure/repositories/certification-center-membership-repository.js'); +import * as certificationCenterMembershipRepository from '../../infrastructure/repositories/certification-center-membership-repository.js'; -module.exports = { - async execute(userId, certificationCenterId, dependencies = { certificationCenterMembershipRepository }) { - return await dependencies.certificationCenterMembershipRepository.isMemberOfCertificationCenter({ - userId, - certificationCenterId, - }); - }, +const execute = async function ( + userId, + certificationCenterId, + dependencies = { certificationCenterMembershipRepository } +) { + return await dependencies.certificationCenterMembershipRepository.isMemberOfCertificationCenter({ + userId, + certificationCenterId, + }); }; + +export { execute }; diff --git a/api/lib/application/usecases/checkUserIsMemberOfCertificationCenterSession.js b/api/lib/application/usecases/checkUserIsMemberOfCertificationCenterSession.js index 6d966c71409..ed6ab8cf4a1 100644 --- a/api/lib/application/usecases/checkUserIsMemberOfCertificationCenterSession.js +++ b/api/lib/application/usecases/checkUserIsMemberOfCertificationCenterSession.js @@ -1,16 +1,16 @@ -const certificationCourseRepository = require('../../infrastructure/repositories/certification-course-repository.js'); -const sessionRepository = require('../../infrastructure/repositories/sessions/session-repository.js'); +import * as certificationCourseRepository from '../../infrastructure/repositories/certification-course-repository.js'; +import * as sessionRepository from '../../infrastructure/repositories/sessions/session-repository.js'; -module.exports = { - async execute({ +const execute = async function ({ + userId, + certificationCourseId, + dependencies = { certificationCourseRepository, sessionRepository }, +}) { + const certificationCourse = await dependencies.certificationCourseRepository.get(certificationCourseId); + return dependencies.sessionRepository.doesUserHaveCertificationCenterMembershipForSession( userId, - certificationCourseId, - dependencies = { certificationCourseRepository, sessionRepository }, - }) { - const certificationCourse = await dependencies.certificationCourseRepository.get(certificationCourseId); - return dependencies.sessionRepository.doesUserHaveCertificationCenterMembershipForSession( - userId, - certificationCourse.getSessionId() - ); - }, + certificationCourse.getSessionId() + ); }; + +export { execute }; diff --git a/api/lib/application/usecases/checkUserOwnsCertificationCourse.js b/api/lib/application/usecases/checkUserOwnsCertificationCourse.js index 54bd54b99a0..c4e1ad41377 100644 --- a/api/lib/application/usecases/checkUserOwnsCertificationCourse.js +++ b/api/lib/application/usecases/checkUserOwnsCertificationCourse.js @@ -1,8 +1,8 @@ -const certificationCourseRepository = require('../../infrastructure/repositories/certification-course-repository.js'); +import * as certificationCourseRepository from '../../infrastructure/repositories/certification-course-repository.js'; -module.exports = { - async execute({ userId, certificationCourseId, dependencies = { certificationCourseRepository } }) { - const certificationCourse = await dependencies.certificationCourseRepository.get(certificationCourseId); - return certificationCourse.doesBelongTo(userId); - }, +const execute = async function ({ userId, certificationCourseId, dependencies = { certificationCourseRepository } }) { + const certificationCourse = await dependencies.certificationCourseRepository.get(certificationCourseId); + return certificationCourse.doesBelongTo(userId); }; + +export { execute }; diff --git a/api/lib/application/user-orga-settings/index.js b/api/lib/application/user-orga-settings/index.js index 71c2d6c5e99..525d60325cb 100644 --- a/api/lib/application/user-orga-settings/index.js +++ b/api/lib/application/user-orga-settings/index.js @@ -1,9 +1,9 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const userOrgaSettingsController = require('./user-orga-settings-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { userOrgaSettingsController } from './user-orga-settings-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; -exports.register = async function (server) { +const register = async function (server) { server.route([ { method: 'PUT', @@ -40,4 +40,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'user-orga-settings-api'; +const name = 'user-orga-settings-api'; +export { register, name }; diff --git a/api/lib/application/user-orga-settings/user-orga-settings-controller.js b/api/lib/application/user-orga-settings/user-orga-settings-controller.js index 9ba69b020ce..16a6ac1cb44 100644 --- a/api/lib/application/user-orga-settings/user-orga-settings-controller.js +++ b/api/lib/application/user-orga-settings/user-orga-settings-controller.js @@ -1,19 +1,21 @@ -const userOrgaSettingsSerializer = require('../../infrastructure/serializers/jsonapi/user-orga-settings-serializer.js'); -const { UserNotAuthorizedToCreateResourceError } = require('../../domain/errors.js'); -const usecases = require('../../domain/usecases/index.js'); +import * as userOrgaSettingsSerializer from '../../infrastructure/serializers/jsonapi/user-orga-settings-serializer.js'; +import { UserNotAuthorizedToCreateResourceError } from '../../domain/errors.js'; +import { usecases } from '../../domain/usecases/index.js'; -module.exports = { - async createOrUpdate(request, h, dependencies = { userOrgaSettingsSerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - const userId = request.params.id; - const organizationId = request.payload.data.relationships.organization.data.id; +const createOrUpdate = async function (request, h, dependencies = { userOrgaSettingsSerializer }) { + const authenticatedUserId = request.auth.credentials.userId; + const userId = request.params.id; + const organizationId = request.payload.data.relationships.organization.data.id; - if (userId !== authenticatedUserId) { - throw new UserNotAuthorizedToCreateResourceError(); - } + if (userId !== authenticatedUserId) { + throw new UserNotAuthorizedToCreateResourceError(); + } - const result = await usecases.createOrUpdateUserOrgaSettings({ userId, organizationId }); + const result = await usecases.createOrUpdateUserOrgaSettings({ userId, organizationId }); - return dependencies.userOrgaSettingsSerializer.serialize(result); - }, + return dependencies.userOrgaSettingsSerializer.serialize(result); }; + +const userOrgaSettingsController = { createOrUpdate }; + +export { userOrgaSettingsController }; diff --git a/api/lib/application/user-tutorials/index.js b/api/lib/application/user-tutorials/index.js index 13f40ad471c..4f15a3346e7 100644 --- a/api/lib/application/user-tutorials/index.js +++ b/api/lib/application/user-tutorials/index.js @@ -1,10 +1,10 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const userTutorialsController = require('./user-tutorials-controller.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const securityPreHandlers = require('../security-pre-handlers.js'); +import { userTutorialsController } from './user-tutorials-controller.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import { securityPreHandlers } from '../security-pre-handlers.js'; -exports.register = async (server) => { +const register = async function (server) { server.route([ { method: 'PUT', @@ -85,4 +85,5 @@ exports.register = async (server) => { ]); }; -exports.name = 'tutorials-api'; +const name = 'tutorials-api'; +export { register, name }; diff --git a/api/lib/application/user-tutorials/user-tutorials-controller.js b/api/lib/application/user-tutorials/user-tutorials-controller.js index 71688854706..1ad5fd612d6 100644 --- a/api/lib/application/user-tutorials/user-tutorials-controller.js +++ b/api/lib/application/user-tutorials/user-tutorials-controller.js @@ -1,40 +1,45 @@ -const usecases = require('../../domain/usecases/index.js'); -const userSavedTutorialSerializer = require('../../infrastructure/serializers/jsonapi/user-saved-tutorial-serializer.js'); -const tutorialSerializer = require('../../infrastructure/serializers/jsonapi/tutorial-serializer.js'); -const userSavedTutorialRepository = require('../../infrastructure/repositories/user-saved-tutorial-repository.js'); -const queryParamsUtils = require('../../infrastructure/utils/query-params-utils.js'); -const requestResponseUtils = require('../../infrastructure/utils/request-response-utils.js'); - -module.exports = { - async add(request, h, dependencies = { userSavedTutorialSerializer }) { - const { userId } = request.auth.credentials; - const { tutorialId } = request.params; - const userSavedTutorial = dependencies.userSavedTutorialSerializer.deserialize(request.payload); - - const createdUserSavedTutorial = await usecases.addTutorialToUser({ ...userSavedTutorial, userId, tutorialId }); - - return h.response(dependencies.userSavedTutorialSerializer.serialize(createdUserSavedTutorial)).created(); - }, - - async find(request, h, dependencies = { queryParamsUtils, requestResponseUtils, tutorialSerializer }) { - const { userId } = request.auth.credentials; - const { page, filter: filters } = dependencies.queryParamsUtils.extractParameters(request.query); - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - const { tutorials, meta } = await usecases.findPaginatedFilteredTutorials({ - userId, - filters, - page, - locale, - }); - return dependencies.tutorialSerializer.serialize(tutorials, meta); - }, - - async removeFromUser(request, h, dependencies = { userSavedTutorialRepository }) { - const { userId } = request.auth.credentials; - const { tutorialId } = request.params; - - await dependencies.userSavedTutorialRepository.removeFromUser({ userId, tutorialId }); - - return h.response().code(204); - }, +import { usecases } from '../../domain/usecases/index.js'; +import * as userSavedTutorialSerializer from '../../infrastructure/serializers/jsonapi/user-saved-tutorial-serializer.js'; +import * as tutorialSerializer from '../../infrastructure/serializers/jsonapi/tutorial-serializer.js'; +import * as userSavedTutorialRepository from '../../infrastructure/repositories/user-saved-tutorial-repository.js'; +import * as queryParamsUtils from '../../infrastructure/utils/query-params-utils.js'; +import * as requestResponseUtils from '../../infrastructure/utils/request-response-utils.js'; + +const add = async function (request, h, dependencies = { userSavedTutorialSerializer }) { + const { userId } = request.auth.credentials; + const { tutorialId } = request.params; + const userSavedTutorial = dependencies.userSavedTutorialSerializer.deserialize(request.payload); + + const createdUserSavedTutorial = await usecases.addTutorialToUser({ ...userSavedTutorial, userId, tutorialId }); + + return h.response(dependencies.userSavedTutorialSerializer.serialize(createdUserSavedTutorial)).created(); +}; + +const find = async function ( + request, + h, + dependencies = { queryParamsUtils, requestResponseUtils, tutorialSerializer } +) { + const { userId } = request.auth.credentials; + const { page, filter: filters } = dependencies.queryParamsUtils.extractParameters(request.query); + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + const { tutorials, meta } = await usecases.findPaginatedFilteredTutorials({ + userId, + filters, + page, + locale, + }); + return dependencies.tutorialSerializer.serialize(tutorials, meta); }; + +const removeFromUser = async function (request, h, dependencies = { userSavedTutorialRepository }) { + const { userId } = request.auth.credentials; + const { tutorialId } = request.params; + + await dependencies.userSavedTutorialRepository.removeFromUser({ userId, tutorialId }); + + return h.response().code(204); +}; + +const userTutorialsController = { add, find, removeFromUser }; +export { userTutorialsController }; diff --git a/api/lib/application/users/index.js b/api/lib/application/users/index.js index 785e7f7924c..19af6e8faeb 100644 --- a/api/lib/application/users/index.js +++ b/api/lib/application/users/index.js @@ -1,15 +1,18 @@ -const Joi = require('joi'); -const XRegExp = require('xregexp'); -const securityPreHandlers = require('../security-pre-handlers.js'); -const userController = require('./user-controller.js'); -const { sendJsonApiError, BadRequestError } = require('../http-errors.js'); -const userVerification = require('../preHandlers/user-existence-verification.js'); -const { passwordValidationPattern } = require('../../config.js').account; -const { EntityValidationError } = require('../../domain/errors.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); -const OidcIdentityProviders = require('../../domain/constants/oidc-identity-providers.js'); +import Joi from 'joi'; +import XRegExp from 'xregexp'; +import { securityPreHandlers } from '../security-pre-handlers.js'; +import { userController } from './user-controller.js'; +import { sendJsonApiError, BadRequestError } from '../http-errors.js'; +import { userVerification } from '../preHandlers/user-existence-verification.js'; +import { config } from '../../config.js'; -exports.register = async function (server) { +const { passwordValidationPattern } = config.account; + +import { EntityValidationError } from '../../domain/errors.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; +import * as OidcIdentityProviders from '../../domain/constants/oidc-identity-providers.js'; + +const register = async function (server) { const adminRoutes = [ { method: 'GET', @@ -970,4 +973,5 @@ exports.register = async function (server) { ]); }; -exports.name = 'users-api'; +const name = 'users-api'; +export { register, name }; diff --git a/api/lib/application/users/user-controller.js b/api/lib/application/users/user-controller.js index d27c3350823..1a165e1cac1 100644 --- a/api/lib/application/users/user-controller.js +++ b/api/lib/application/users/user-controller.js @@ -1,412 +1,477 @@ -const campaignParticipationSerializer = require('../../infrastructure/serializers/jsonapi/campaign-participation-serializer.js'); -const campaignParticipationOverviewSerializer = require('../../infrastructure/serializers/jsonapi/campaign-participation-overview-serializer.js'); -const certificationEligibilitySerializer = require('../../infrastructure/serializers/jsonapi/certification-eligibility-serializer.js'); -const scorecardSerializer = require('../../infrastructure/serializers/jsonapi/scorecard-serializer.js'); -const profileSerializer = require('../../infrastructure/serializers/jsonapi/profile-serializer.js'); -const participantResultSerializer = require('../../infrastructure/serializers/jsonapi/participant-result-serializer.js'); -const sharedProfileForCampaignSerializer = require('../../infrastructure/serializers/jsonapi/shared-profile-for-campaign-serializer.js'); -const userSerializer = require('../../infrastructure/serializers/jsonapi/user-serializer.js'); -const userForAdminSerializer = require('../../infrastructure/serializers/jsonapi/user-for-admin-serializer.js'); -const userWithActivitySerializer = require('../../infrastructure/serializers/jsonapi/user-with-activity-serializer.js'); -const emailVerificationSerializer = require('../../infrastructure/serializers/jsonapi/email-verification-serializer.js'); -const userDetailsForAdminSerializer = require('../../infrastructure/serializers/jsonapi/user-details-for-admin-serializer.js'); -const userAnonymizedDetailsForAdminSerializer = require('../../infrastructure/serializers/jsonapi/user-anonymized-details-for-admin-serializer.js'); -const updateEmailSerializer = require('../../infrastructure/serializers/jsonapi/update-email-serializer.js'); -const authenticationMethodsSerializer = require('../../infrastructure/serializers/jsonapi/authentication-methods-serializer.js'); -const campaignParticipationForUserManagementSerializer = require('../../infrastructure/serializers/jsonapi/campaign-participation-for-user-management-serializer.js'); -const userOrganizationForAdminSerializer = require('../../infrastructure/serializers/jsonapi/user-organization-for-admin-serializer.js'); -const certificationCenterMembershipSerializer = require('../../infrastructure/serializers/jsonapi/certification-center-membership-serializer.js'); -const trainingSerializer = require('../../infrastructure/serializers/jsonapi/training-serializer.js'); -const userLoginSerializer = require('../../infrastructure/serializers/jsonapi/user-login-serializer.js'); - -const queryParamsUtils = require('../../infrastructure/utils/query-params-utils.js'); -const requestResponseUtils = require('../../infrastructure/utils/request-response-utils.js'); - -const usecases = require('../../domain/usecases/index.js'); -const localeService = require('../../domain/services/locale-service.js'); - -module.exports = { - async save(request, h, dependencies = { userSerializer, requestResponseUtils, localeService }) { - const localeFromCookie = request.state?.locale; - const canonicalLocaleFromCookie = localeFromCookie - ? dependencies.localeService.getCanonicalLocale(localeFromCookie) - : undefined; - const campaignCode = request.payload.meta ? request.payload.meta['campaign-code'] : null; - const user = { ...dependencies.userSerializer.deserialize(request.payload), locale: canonicalLocaleFromCookie }; - const localeFromHeader = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - - const password = request.payload.data.attributes.password; - - const savedUser = await usecases.createUser({ - user, - password, - campaignCode, - localeFromHeader, - }); - - return h.response(dependencies.userSerializer.serialize(savedUser)).created(); - }, - - getCurrentUser(request, h, dependencies = { userWithActivitySerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - return usecases.getCurrentUser({ authenticatedUserId }).then(dependencies.userWithActivitySerializer.serialize); - }, - - async getUserDetailsForAdmin(request, h, dependencies = { userDetailsForAdminSerializer }) { - const userId = request.params.id; - const userDetailsForAdmin = await usecases.getUserDetailsForAdmin({ userId }); - return dependencies.userDetailsForAdminSerializer.serialize(userDetailsForAdmin); - }, - - async updatePassword(request, h, dependencies = { userSerializer }) { - const userId = request.params.id; - const password = request.payload.data.attributes.password; - - const updatedUser = await usecases.updateUserPassword({ - userId, - password, - temporaryKey: request.query['temporary-key'] || '', - }); - - return dependencies.userSerializer.serialize(updatedUser); - }, - - async updateUserDetailsForAdministration(request, h, dependencies = { userDetailsForAdminSerializer }) { - const userId = request.params.id; - const userDetailsForAdministration = dependencies.userDetailsForAdminSerializer.deserialize(request.payload); - - const updatedUser = await usecases.updateUserDetailsForAdministration({ - userId, - userDetailsForAdministration, - }); - - return dependencies.userDetailsForAdminSerializer.serializeForUpdate(updatedUser); - }, - - async acceptPixLastTermsOfService(request, h, dependencies = { userSerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - - const updatedUser = await usecases.acceptPixLastTermsOfService({ - userId: authenticatedUserId, - }); - - return dependencies.userSerializer.serialize(updatedUser); - }, - - async changeLang(request, h, dependencies = { userSerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - const lang = request.params.lang; - const updatedUser = await usecases.changeUserLang({ - userId: authenticatedUserId, - lang, - }); - - return dependencies.userSerializer.serialize(updatedUser); - }, - - async acceptPixOrgaTermsOfService(request, h, dependencies = { userSerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - - const updatedUser = await usecases.acceptPixOrgaTermsOfService({ - userId: authenticatedUserId, - }); - - return dependencies.userSerializer.serialize(updatedUser); - }, - - async acceptPixCertifTermsOfService(request, h) { - const authenticatedUserId = request.auth.credentials.userId; - - await usecases.acceptPixCertifTermsOfService({ - userId: authenticatedUserId, - }); - - return h.response().code(204); - }, - - async rememberUserHasSeenAssessmentInstructions(request, h, dependencies = { userSerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - - const updatedUser = await usecases.rememberUserHasSeenAssessmentInstructions({ userId: authenticatedUserId }); - return dependencies.userSerializer.serialize(updatedUser); - }, - - async rememberUserHasSeenNewDashboardInfo(request, h, dependencies = { userSerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - - const updatedUser = await usecases.rememberUserHasSeenNewDashboardInfo({ userId: authenticatedUserId }); - return dependencies.userSerializer.serialize(updatedUser); - }, - - async rememberUserHasSeenChallengeTooltip(request, h, dependencies = { userSerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - const challengeType = request.params.challengeType; - - const updatedUser = await usecases.rememberUserHasSeenChallengeTooltip({ - userId: authenticatedUserId, - challengeType, - }); - return dependencies.userSerializer.serialize(updatedUser); - }, - - async findPaginatedFilteredUsers(request, h, dependencies = { userForAdminSerializer, queryParamsUtils }) { - const options = dependencies.queryParamsUtils.extractParameters(request.query); - - const { models: users, pagination } = await usecases.findPaginatedFilteredUsers({ - filter: options.filter, - page: options.page, - }); - return dependencies.userForAdminSerializer.serialize(users, pagination); - }, - - async findPaginatedUserRecommendedTrainings( - request, - h, - dependencies = { - trainingSerializer, - requestResponseUtils, - queryParamsUtils, - } - ) { - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - const { page } = dependencies.queryParamsUtils.extractParameters(request.query); - const { userRecommendedTrainings, meta } = await usecases.findPaginatedUserRecommendedTrainings({ - userId: request.auth.credentials.userId, - locale, - page, - }); - - return dependencies.trainingSerializer.serialize(userRecommendedTrainings, meta); - }, - - getCampaignParticipations(request, h, dependencies = { campaignParticipationSerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - - return usecases - .findLatestOngoingUserCampaignParticipations({ userId: authenticatedUserId }) - .then(dependencies.campaignParticipationSerializer.serialize); - }, - - async getCampaignParticipationOverviews( - request, - h, - dependencies = { - campaignParticipationOverviewSerializer, - queryParamsUtils, - } - ) { - const authenticatedUserId = request.auth.credentials.userId; - const query = dependencies.queryParamsUtils.extractParameters(request.query); - - const userCampaignParticipationOverviews = await usecases.findUserCampaignParticipationOverviews({ - userId: authenticatedUserId, - states: query.filter.states, - page: query.page, - }); - - return dependencies.campaignParticipationOverviewSerializer.serializeForPaginatedList( - userCampaignParticipationOverviews - ); - }, - - async isCertifiable(request, h, dependencies = { certificationEligibilitySerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - - const certificationEligibility = await usecases.getUserCertificationEligibility({ userId: authenticatedUserId }); - return dependencies.certificationEligibilitySerializer.serialize(certificationEligibility); - }, - - getProfile(request, h, dependencies = { profileSerializer, requestResponseUtils }) { - const authenticatedUserId = request.auth.credentials.userId; - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - - return usecases - .getUserProfile({ userId: authenticatedUserId, locale }) - .then(dependencies.profileSerializer.serialize); - }, - - getProfileForAdmin(request, h, dependencies = { profileSerializer, requestResponseUtils }) { - const userId = request.params.id; - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - - return usecases.getUserProfile({ userId, locale }).then(dependencies.profileSerializer.serialize); - }, - - resetScorecard(request, h, dependencies = { scorecardSerializer, requestResponseUtils }) { - const authenticatedUserId = request.auth.credentials.userId; - const competenceId = request.params.competenceId; - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - - return usecases - .resetScorecard({ userId: authenticatedUserId, competenceId, locale }) - .then(dependencies.scorecardSerializer.serialize); - }, - - getUserCampaignParticipationToCampaign(request, h, dependencies = { campaignParticipationSerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - const campaignId = request.params.campaignId; - - return usecases - .getUserCampaignParticipationToCampaign({ userId: authenticatedUserId, campaignId }) - .then((campaignParticipation) => dependencies.campaignParticipationSerializer.serialize(campaignParticipation)); - }, - - async getUserProfileSharedForCampaign( - request, - h, - dependencies = { - sharedProfileForCampaignSerializer, - requestResponseUtils, - } - ) { - const authenticatedUserId = request.auth.credentials.userId; - const campaignId = request.params.campaignId; - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - - const sharedProfileForCampaign = await usecases.getUserProfileSharedForCampaign({ - userId: authenticatedUserId, - campaignId, - locale, - }); - - return dependencies.sharedProfileForCampaignSerializer.serialize(sharedProfileForCampaign); - }, - - async getUserCampaignAssessmentResult( - request, - h, - dependencies = { - participantResultSerializer, - requestResponseUtils, - } - ) { - const authenticatedUserId = request.auth.credentials.userId; - const campaignId = request.params.campaignId; - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - - const campaignAssessmentResult = await usecases.getUserCampaignAssessmentResult({ - userId: authenticatedUserId, - campaignId, - locale, - }); - - return dependencies.participantResultSerializer.serialize(campaignAssessmentResult); - }, - - async anonymizeUser(request, h, dependencies = { userAnonymizedDetailsForAdminSerializer }) { - const userToAnonymizeId = request.params.id; - const adminMemberId = request.auth.credentials.userId; - const user = await usecases.anonymizeUser({ userId: userToAnonymizeId, updatedByUserId: adminMemberId }); - return h.response(dependencies.userAnonymizedDetailsForAdminSerializer.serialize(user)).code(200); - }, - - async unblockUserAccount(request, h, dependencies = { userLoginSerializer }) { - const userId = request.params.id; - const userLogin = await usecases.unblockUserAccount({ userId }); - return h.response(dependencies.userLoginSerializer.serialize(userLogin)).code(200); - }, - - async removeAuthenticationMethod(request, h) { - const userId = request.params.id; - const type = request.payload.data.attributes.type; - await usecases.removeAuthenticationMethod({ userId, type }); - return h.response().code(204); - }, - - async sendVerificationCode(request, h, dependencies = { emailVerificationSerializer, requestResponseUtils }) { - const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); - const i18n = request.i18n; - const userId = request.params.id; - const { newEmail, password } = await dependencies.emailVerificationSerializer.deserialize(request.payload); - - await usecases.sendVerificationCode({ i18n, locale, newEmail, password, userId }); - return h.response().code(204); - }, - - async updateUserEmailWithValidation(request, h, dependencies = { updateEmailSerializer }) { - const userId = request.params.id; - const code = request.payload.data.attributes.code; - - const updatedUserAttributes = await usecases.updateUserEmailWithValidation({ - userId, - code, - }); - - return dependencies.updateEmailSerializer.serialize(updatedUserAttributes); - }, - - async getUserAuthenticationMethods(request, h, dependencies = { authenticationMethodsSerializer }) { - const userId = request.params.id; - - const authenticationMethods = await usecases.findUserAuthenticationMethods({ userId }); - - return dependencies.authenticationMethodsSerializer.serialize(authenticationMethods); - }, - - async addPixAuthenticationMethodByEmail(request, h, dependencies = { userDetailsForAdminSerializer }) { - const userId = request.params.id; - const email = request.payload.data.attributes.email.trim().toLowerCase(); - - const userUpdated = await usecases.addPixAuthenticationMethodByEmail({ - userId, - email, - }); - return h.response(dependencies.userDetailsForAdminSerializer.serialize(userUpdated)).created(); - }, - - async reassignAuthenticationMethods(request, h) { - const authenticationMethodId = request.params.authenticationMethodId; - const originUserId = request.params.userId; - const targetUserId = request.payload.data.attributes['user-id']; - - await usecases.reassignAuthenticationMethodToAnotherUser({ - originUserId, - targetUserId, - authenticationMethodId, - }); - return h.response().code(204); - }, - - async findCampaignParticipationsForUserManagement( - request, - h, - dependencies = { campaignParticipationForUserManagementSerializer } - ) { - const userId = request.params.id; - const campaignParticipations = await usecases.findCampaignParticipationsForUserManagement({ - userId, - }); - return h.response(dependencies.campaignParticipationForUserManagementSerializer.serialize(campaignParticipations)); - }, - - async findUserOrganizationsForAdmin(request, h, dependencies = { userOrganizationForAdminSerializer }) { - const userId = request.params.id; - const organizations = await usecases.findUserOrganizationsForAdmin({ - userId, - }); - return h.response(dependencies.userOrganizationForAdminSerializer.serialize(organizations)); - }, - - async findCertificationCenterMembershipsByUser( - request, - h, - dependencies = { certificationCenterMembershipSerializer } - ) { - const userId = request.params.id; - const certificationCenterMemberships = await usecases.findCertificationCenterMembershipsByUser({ - userId, - }); - return h.response( - dependencies.certificationCenterMembershipSerializer.serializeForAdmin(certificationCenterMemberships) - ); - }, - - async rememberUserHasSeenLastDataProtectionPolicyInformation(request, h, dependencies = { userSerializer }) { - const authenticatedUserId = request.auth.credentials.userId; - - const updatedUser = await usecases.rememberUserHasSeenLastDataProtectionPolicyInformation({ - userId: authenticatedUserId, - }); - return dependencies.userSerializer.serialize(updatedUser); - }, +import * as campaignParticipationSerializer from '../../infrastructure/serializers/jsonapi/campaign-participation-serializer.js'; +import * as campaignParticipationOverviewSerializer from '../../infrastructure/serializers/jsonapi/campaign-participation-overview-serializer.js'; +import * as certificationEligibilitySerializer from '../../infrastructure/serializers/jsonapi/certification-eligibility-serializer.js'; +import * as scorecardSerializer from '../../infrastructure/serializers/jsonapi/scorecard-serializer.js'; +import * as profileSerializer from '../../infrastructure/serializers/jsonapi/profile-serializer.js'; +import * as participantResultSerializer from '../../infrastructure/serializers/jsonapi/participant-result-serializer.js'; +import * as sharedProfileForCampaignSerializer from '../../infrastructure/serializers/jsonapi/shared-profile-for-campaign-serializer.js'; +import * as userSerializer from '../../infrastructure/serializers/jsonapi/user-serializer.js'; +import * as userForAdminSerializer from '../../infrastructure/serializers/jsonapi/user-for-admin-serializer.js'; +import * as userWithActivitySerializer from '../../infrastructure/serializers/jsonapi/user-with-activity-serializer.js'; +import * as emailVerificationSerializer from '../../infrastructure/serializers/jsonapi/email-verification-serializer.js'; +import * as userDetailsForAdminSerializer from '../../infrastructure/serializers/jsonapi/user-details-for-admin-serializer.js'; +import * as userAnonymizedDetailsForAdminSerializer from '../../infrastructure/serializers/jsonapi/user-anonymized-details-for-admin-serializer.js'; +import * as updateEmailSerializer from '../../infrastructure/serializers/jsonapi/update-email-serializer.js'; +import * as authenticationMethodsSerializer from '../../infrastructure/serializers/jsonapi/authentication-methods-serializer.js'; +import * as campaignParticipationForUserManagementSerializer from '../../infrastructure/serializers/jsonapi/campaign-participation-for-user-management-serializer.js'; +import * as userOrganizationForAdminSerializer from '../../infrastructure/serializers/jsonapi/user-organization-for-admin-serializer.js'; +import * as certificationCenterMembershipSerializer from '../../infrastructure/serializers/jsonapi/certification-center-membership-serializer.js'; +import * as trainingSerializer from '../../infrastructure/serializers/jsonapi/training-serializer.js'; +import * as userLoginSerializer from '../../infrastructure/serializers/jsonapi/user-login-serializer.js'; + +import * as queryParamsUtils from '../../infrastructure/utils/query-params-utils.js'; +import * as requestResponseUtils from '../../infrastructure/utils/request-response-utils.js'; +import { usecases } from '../../domain/usecases/index.js'; +import * as localeService from '../../domain/services/locale-service.js'; + +const save = async function (request, h, dependencies = { userSerializer, requestResponseUtils, localeService }) { + const localeFromCookie = request.state?.locale; + const canonicalLocaleFromCookie = localeFromCookie + ? dependencies.localeService.getCanonicalLocale(localeFromCookie) + : undefined; + const campaignCode = request.payload.meta ? request.payload.meta['campaign-code'] : null; + const user = { ...dependencies.userSerializer.deserialize(request.payload), locale: canonicalLocaleFromCookie }; + const localeFromHeader = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + + const password = request.payload.data.attributes.password; + + const savedUser = await usecases.createUser({ + user, + password, + campaignCode, + localeFromHeader, + }); + + return h.response(dependencies.userSerializer.serialize(savedUser)).created(); }; + +const getCurrentUser = function (request, h, dependencies = { userWithActivitySerializer }) { + const authenticatedUserId = request.auth.credentials.userId; + return usecases.getCurrentUser({ authenticatedUserId }).then(dependencies.userWithActivitySerializer.serialize); +}; + +const getUserDetailsForAdmin = async function (request, h, dependencies = { userDetailsForAdminSerializer }) { + const userId = request.params.id; + const userDetailsForAdmin = await usecases.getUserDetailsForAdmin({ userId }); + return dependencies.userDetailsForAdminSerializer.serialize(userDetailsForAdmin); +}; + +const updatePassword = async function (request, h, dependencies = { userSerializer }) { + const userId = request.params.id; + const password = request.payload.data.attributes.password; + + const updatedUser = await usecases.updateUserPassword({ + userId, + password, + temporaryKey: request.query['temporary-key'] || '', + }); + + return dependencies.userSerializer.serialize(updatedUser); +}; + +const updateUserDetailsForAdministration = async function ( + request, + h, + dependencies = { userDetailsForAdminSerializer } +) { + const userId = request.params.id; + const userDetailsForAdministration = dependencies.userDetailsForAdminSerializer.deserialize(request.payload); + + const updatedUser = await usecases.updateUserDetailsForAdministration({ + userId, + userDetailsForAdministration, + }); + + return dependencies.userDetailsForAdminSerializer.serializeForUpdate(updatedUser); +}; + +const acceptPixLastTermsOfService = async function (request, h, dependencies = { userSerializer }) { + const authenticatedUserId = request.auth.credentials.userId; + + const updatedUser = await usecases.acceptPixLastTermsOfService({ + userId: authenticatedUserId, + }); + + return dependencies.userSerializer.serialize(updatedUser); +}; + +const changeLang = async function (request, h, dependencies = { userSerializer }) { + const authenticatedUserId = request.auth.credentials.userId; + const lang = request.params.lang; + const updatedUser = await usecases.changeUserLang({ + userId: authenticatedUserId, + lang, + }); + + return dependencies.userSerializer.serialize(updatedUser); +}; + +const acceptPixOrgaTermsOfService = async function (request, h, dependencies = { userSerializer }) { + const authenticatedUserId = request.auth.credentials.userId; + + const updatedUser = await usecases.acceptPixOrgaTermsOfService({ + userId: authenticatedUserId, + }); + + return dependencies.userSerializer.serialize(updatedUser); +}; + +const acceptPixCertifTermsOfService = async function (request, h) { + const authenticatedUserId = request.auth.credentials.userId; + + await usecases.acceptPixCertifTermsOfService({ + userId: authenticatedUserId, + }); + + return h.response().code(204); +}; + +const rememberUserHasSeenAssessmentInstructions = async function (request, h, dependencies = { userSerializer }) { + const authenticatedUserId = request.auth.credentials.userId; + + const updatedUser = await usecases.rememberUserHasSeenAssessmentInstructions({ userId: authenticatedUserId }); + return dependencies.userSerializer.serialize(updatedUser); +}; + +const rememberUserHasSeenNewDashboardInfo = async function (request, h, dependencies = { userSerializer }) { + const authenticatedUserId = request.auth.credentials.userId; + + const updatedUser = await usecases.rememberUserHasSeenNewDashboardInfo({ userId: authenticatedUserId }); + return dependencies.userSerializer.serialize(updatedUser); +}; + +const rememberUserHasSeenChallengeTooltip = async function (request, h, dependencies = { userSerializer }) { + const authenticatedUserId = request.auth.credentials.userId; + const challengeType = request.params.challengeType; + + const updatedUser = await usecases.rememberUserHasSeenChallengeTooltip({ + userId: authenticatedUserId, + challengeType, + }); + return dependencies.userSerializer.serialize(updatedUser); +}; + +const findPaginatedFilteredUsers = async function ( + request, + h, + dependencies = { userForAdminSerializer, queryParamsUtils } +) { + const options = dependencies.queryParamsUtils.extractParameters(request.query); + + const { models: users, pagination } = await usecases.findPaginatedFilteredUsers({ + filter: options.filter, + page: options.page, + }); + return dependencies.userForAdminSerializer.serialize(users, pagination); +}; + +const findPaginatedUserRecommendedTrainings = async function ( + request, + h, + dependencies = { + trainingSerializer, + requestResponseUtils, + queryParamsUtils, + } +) { + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + const { page } = dependencies.queryParamsUtils.extractParameters(request.query); + const { userRecommendedTrainings, meta } = await usecases.findPaginatedUserRecommendedTrainings({ + userId: request.auth.credentials.userId, + locale, + page, + }); + + return dependencies.trainingSerializer.serialize(userRecommendedTrainings, meta); +}; + +const getCampaignParticipations = function (request, h, dependencies = { campaignParticipationSerializer }) { + const authenticatedUserId = request.auth.credentials.userId; + + return usecases + .findLatestOngoingUserCampaignParticipations({ userId: authenticatedUserId }) + .then(dependencies.campaignParticipationSerializer.serialize); +}; + +const getCampaignParticipationOverviews = async function ( + request, + h, + dependencies = { + campaignParticipationOverviewSerializer, + queryParamsUtils, + } +) { + const authenticatedUserId = request.auth.credentials.userId; + const query = dependencies.queryParamsUtils.extractParameters(request.query); + + const userCampaignParticipationOverviews = await usecases.findUserCampaignParticipationOverviews({ + userId: authenticatedUserId, + states: query.filter.states, + page: query.page, + }); + + return dependencies.campaignParticipationOverviewSerializer.serializeForPaginatedList( + userCampaignParticipationOverviews + ); +}; + +const isCertifiable = async function (request, h, dependencies = { certificationEligibilitySerializer }) { + const authenticatedUserId = request.auth.credentials.userId; + + const certificationEligibility = await usecases.getUserCertificationEligibility({ userId: authenticatedUserId }); + return dependencies.certificationEligibilitySerializer.serialize(certificationEligibility); +}; + +const getProfile = function (request, h, dependencies = { profileSerializer, requestResponseUtils }) { + const authenticatedUserId = request.auth.credentials.userId; + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + + return usecases + .getUserProfile({ userId: authenticatedUserId, locale }) + .then(dependencies.profileSerializer.serialize); +}; + +const getProfileForAdmin = function (request, h, dependencies = { profileSerializer, requestResponseUtils }) { + const userId = request.params.id; + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + + return usecases.getUserProfile({ userId, locale }).then(dependencies.profileSerializer.serialize); +}; + +const resetScorecard = function (request, h, dependencies = { scorecardSerializer, requestResponseUtils }) { + const authenticatedUserId = request.auth.credentials.userId; + const competenceId = request.params.competenceId; + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + + return usecases + .resetScorecard({ userId: authenticatedUserId, competenceId, locale }) + .then(dependencies.scorecardSerializer.serialize); +}; + +const getUserCampaignParticipationToCampaign = function ( + request, + h, + dependencies = { campaignParticipationSerializer } +) { + const authenticatedUserId = request.auth.credentials.userId; + const campaignId = request.params.campaignId; + + return usecases + .getUserCampaignParticipationToCampaign({ userId: authenticatedUserId, campaignId }) + .then((campaignParticipation) => dependencies.campaignParticipationSerializer.serialize(campaignParticipation)); +}; + +const getUserProfileSharedForCampaign = async function ( + request, + h, + dependencies = { + sharedProfileForCampaignSerializer, + requestResponseUtils, + } +) { + const authenticatedUserId = request.auth.credentials.userId; + const campaignId = request.params.campaignId; + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + + const sharedProfileForCampaign = await usecases.getUserProfileSharedForCampaign({ + userId: authenticatedUserId, + campaignId, + locale, + }); + + return dependencies.sharedProfileForCampaignSerializer.serialize(sharedProfileForCampaign); +}; + +const getUserCampaignAssessmentResult = async function ( + request, + h, + dependencies = { + participantResultSerializer, + requestResponseUtils, + } +) { + const authenticatedUserId = request.auth.credentials.userId; + const campaignId = request.params.campaignId; + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + + const campaignAssessmentResult = await usecases.getUserCampaignAssessmentResult({ + userId: authenticatedUserId, + campaignId, + locale, + }); + + return dependencies.participantResultSerializer.serialize(campaignAssessmentResult); +}; + +const anonymizeUser = async function (request, h, dependencies = { userAnonymizedDetailsForAdminSerializer }) { + const userToAnonymizeId = request.params.id; + const adminMemberId = request.auth.credentials.userId; + const user = await usecases.anonymizeUser({ userId: userToAnonymizeId, updatedByUserId: adminMemberId }); + return h.response(dependencies.userAnonymizedDetailsForAdminSerializer.serialize(user)).code(200); +}; + +const unblockUserAccount = async function (request, h, dependencies = { userLoginSerializer }) { + const userId = request.params.id; + const userLogin = await usecases.unblockUserAccount({ userId }); + return h.response(dependencies.userLoginSerializer.serialize(userLogin)).code(200); +}; + +const removeAuthenticationMethod = async function (request, h) { + const userId = request.params.id; + const type = request.payload.data.attributes.type; + await usecases.removeAuthenticationMethod({ userId, type }); + return h.response().code(204); +}; + +const sendVerificationCode = async function ( + request, + h, + dependencies = { emailVerificationSerializer, requestResponseUtils } +) { + const locale = dependencies.requestResponseUtils.extractLocaleFromRequest(request); + const i18n = request.i18n; + const userId = request.params.id; + const { newEmail, password } = await dependencies.emailVerificationSerializer.deserialize(request.payload); + + await usecases.sendVerificationCode({ i18n, locale, newEmail, password, userId }); + return h.response().code(204); +}; + +const updateUserEmailWithValidation = async function (request, h, dependencies = { updateEmailSerializer }) { + const userId = request.params.id; + const code = request.payload.data.attributes.code; + + const updatedUserAttributes = await usecases.updateUserEmailWithValidation({ + userId, + code, + }); + + return dependencies.updateEmailSerializer.serialize(updatedUserAttributes); +}; + +const getUserAuthenticationMethods = async function (request, h, dependencies = { authenticationMethodsSerializer }) { + const userId = request.params.id; + + const authenticationMethods = await usecases.findUserAuthenticationMethods({ userId }); + + return dependencies.authenticationMethodsSerializer.serialize(authenticationMethods); +}; + +const addPixAuthenticationMethodByEmail = async function ( + request, + h, + dependencies = { userDetailsForAdminSerializer } +) { + const userId = request.params.id; + const email = request.payload.data.attributes.email.trim().toLowerCase(); + + const userUpdated = await usecases.addPixAuthenticationMethodByEmail({ + userId, + email, + }); + return h.response(dependencies.userDetailsForAdminSerializer.serialize(userUpdated)).created(); +}; + +const reassignAuthenticationMethods = async function (request, h) { + const authenticationMethodId = request.params.authenticationMethodId; + const originUserId = request.params.userId; + const targetUserId = request.payload.data.attributes['user-id']; + + await usecases.reassignAuthenticationMethodToAnotherUser({ + originUserId, + targetUserId, + authenticationMethodId, + }); + return h.response().code(204); +}; + +const findCampaignParticipationsForUserManagement = async function ( + request, + h, + dependencies = { campaignParticipationForUserManagementSerializer } +) { + const userId = request.params.id; + const campaignParticipations = await usecases.findCampaignParticipationsForUserManagement({ + userId, + }); + return h.response(dependencies.campaignParticipationForUserManagementSerializer.serialize(campaignParticipations)); +}; + +const findUserOrganizationsForAdmin = async function ( + request, + h, + dependencies = { userOrganizationForAdminSerializer } +) { + const userId = request.params.id; + const organizations = await usecases.findUserOrganizationsForAdmin({ + userId, + }); + return h.response(dependencies.userOrganizationForAdminSerializer.serialize(organizations)); +}; + +const findCertificationCenterMembershipsByUser = async function ( + request, + h, + dependencies = { certificationCenterMembershipSerializer } +) { + const userId = request.params.id; + const certificationCenterMemberships = await usecases.findCertificationCenterMembershipsByUser({ + userId, + }); + return h.response( + dependencies.certificationCenterMembershipSerializer.serializeForAdmin(certificationCenterMemberships) + ); +}; + +const rememberUserHasSeenLastDataProtectionPolicyInformation = async function ( + request, + h, + dependencies = { userSerializer } +) { + const authenticatedUserId = request.auth.credentials.userId; + + const updatedUser = await usecases.rememberUserHasSeenLastDataProtectionPolicyInformation({ + userId: authenticatedUserId, + }); + return dependencies.userSerializer.serialize(updatedUser); +}; + +const userController = { + save, + getCurrentUser, + getUserDetailsForAdmin, + updatePassword, + updateUserDetailsForAdministration, + acceptPixLastTermsOfService, + changeLang, + acceptPixOrgaTermsOfService, + acceptPixCertifTermsOfService, + rememberUserHasSeenAssessmentInstructions, + rememberUserHasSeenNewDashboardInfo, + rememberUserHasSeenChallengeTooltip, + findPaginatedFilteredUsers, + findPaginatedUserRecommendedTrainings, + getCampaignParticipations, + getCampaignParticipationOverviews, + isCertifiable, + getProfile, + getProfileForAdmin, + resetScorecard, + getUserCampaignParticipationToCampaign, + getUserProfileSharedForCampaign, + getUserCampaignAssessmentResult, + anonymizeUser, + unblockUserAccount, + removeAuthenticationMethod, + sendVerificationCode, + updateUserEmailWithValidation, + getUserAuthenticationMethods, + addPixAuthenticationMethodByEmail, + reassignAuthenticationMethods, + findCampaignParticipationsForUserManagement, + findUserOrganizationsForAdmin, + findCertificationCenterMembershipsByUser, + rememberUserHasSeenLastDataProtectionPolicyInformation, +}; + +export { userController }; diff --git a/api/lib/config.js b/api/lib/config.js index 83635849279..35410a6404a 100644 --- a/api/lib/config.js +++ b/api/lib/config.js @@ -1,9 +1,15 @@ -/* eslint-disable node/no-process-env*/ -const path = require('path'); -const moment = require('moment'); -const ms = require('ms'); +import * as dotenv from 'dotenv'; +dotenv.config(); +// eslint-disable-next-line eslint-comments/disable-enable-pair +/* eslint-disable node/no-process-env */ +import path from 'path'; +import moment from 'moment'; +import ms from 'ms'; -const { getArrayOfStrings } = require('../lib/infrastructure/utils/string-utils.js'); +import { getArrayOfStrings } from '../lib/infrastructure/utils/string-utils.js'; + +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); function parseJSONEnv(varName) { if (process.env[varName]) { @@ -453,5 +459,4 @@ const configuration = (function () { return config; })(); -module.exports = configuration; -/* eslint-enable node/no-process-env*/ +export { configuration as config }; diff --git a/api/lib/domain/constants.js b/api/lib/domain/constants.js index 05c2ce55694..c757bd094f3 100644 --- a/api/lib/domain/constants.js +++ b/api/lib/domain/constants.js @@ -1,17 +1,17 @@ -const settings = require('../config.js'); +import { config } from '../config.js'; const PIX_COUNT_BY_LEVEL = 8; const COMPETENCES_COUNT = 16; -const MAX_REACHABLE_PIX_BY_COMPETENCE = settings.features.maxReachableLevel * PIX_COUNT_BY_LEVEL; +const MAX_REACHABLE_PIX_BY_COMPETENCE = config.features.maxReachableLevel * PIX_COUNT_BY_LEVEL; -const MAX_REACHABLE_LEVEL = settings.features.maxReachableLevel; +const MAX_REACHABLE_LEVEL = config.features.maxReachableLevel; const MAX_REACHABLE_PIX_SCORE = MAX_REACHABLE_PIX_BY_COMPETENCE * COMPETENCES_COUNT; const MAX_CHALLENGES_PER_COMPETENCE_FOR_CERTIFICATION = 3; const MAX_CHALLENGES_PER_AREA_FOR_CERTIFICATION_PLUS = 4; const MAX_MASTERY_RATE = 1; -const MINIMUM_DELAY_IN_DAYS_FOR_RESET = settings.features.dayBeforeCompetenceResetV2; -const MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING = settings.features.dayBeforeImproving; -const MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING = settings.features.dayBeforeRetrying; +const MINIMUM_DELAY_IN_DAYS_FOR_RESET = config.features.dayBeforeCompetenceResetV2; +const MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING = config.features.dayBeforeImproving; +const MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING = config.features.dayBeforeRetrying; const MINIMUM_CERTIFIABLE_COMPETENCES_FOR_CERTIFIABILITY = 5; const MINIMUM_COMPETENCE_LEVEL_FOR_CERTIFIABILITY = 1; @@ -141,7 +141,7 @@ const constants = { ORGANIZATION_FEATURE, }; -module.exports = { +export { constants, PIX_COUNT_BY_LEVEL, COMPETENCES_COUNT, diff --git a/api/lib/domain/constants/certification-candidates-errors.js b/api/lib/domain/constants/certification-candidates-errors.js index 9a53660b34f..0ff0b4d7353 100644 --- a/api/lib/domain/constants/certification-candidates-errors.js +++ b/api/lib/domain/constants/certification-candidates-errors.js @@ -1,4 +1,4 @@ -module.exports.CERTIFICATION_CANDIDATES_ERRORS = { +const CERTIFICATION_CANDIDATES_ERRORS = { CANDIDATE_BILLING_MODE_MUST_BE_A_STRING: { code: 'CANDIDATE_BILLING_MODE_MUST_BE_A_STRING', getMessage: () => '', @@ -129,3 +129,5 @@ module.exports.CERTIFICATION_CANDIDATES_ERRORS = { getMessage: () => '', }, }; + +export { CERTIFICATION_CANDIDATES_ERRORS }; diff --git a/api/lib/domain/constants/oidc-identity-providers.js b/api/lib/domain/constants/oidc-identity-providers.js index 08fcc995ef3..e55c1d81cd6 100644 --- a/api/lib/domain/constants/oidc-identity-providers.js +++ b/api/lib/domain/constants/oidc-identity-providers.js @@ -1,6 +1,6 @@ -const PoleEmploiOidcAuthenticationService = require('../services/authentication/pole-emploi-oidc-authentication-service.js'); -const CnavOidcAuthenticationService = require('../services/authentication/cnav-oidc-authentication-service.js'); -const FwbOidcAuthenticationService = require('../services/authentication/fwb-oidc-authentication-service.js'); +import { PoleEmploiOidcAuthenticationService } from '../services/authentication/pole-emploi-oidc-authentication-service.js'; +import { CnavOidcAuthenticationService } from '../services/authentication/cnav-oidc-authentication-service.js'; +import { FwbOidcAuthenticationService } from '../services/authentication/fwb-oidc-authentication-service.js'; const DEFAULT_PROPERTY_PATHS_TO_PICK = ['clientId', 'authenticationUrl', 'userInfoUrl', 'tokenUrl', 'clientSecret']; @@ -20,8 +20,4 @@ const FWB = { service: new FwbOidcAuthenticationService(), }; -module.exports = { - POLE_EMPLOI, - CNAV, - FWB, -}; +export { POLE_EMPLOI, CNAV, FWB }; diff --git a/api/lib/domain/constants/organization-places-categories.js b/api/lib/domain/constants/organization-places-categories.js index d11a06e9804..e6a8a563a5a 100644 --- a/api/lib/domain/constants/organization-places-categories.js +++ b/api/lib/domain/constants/organization-places-categories.js @@ -1,14 +1,12 @@ -const organisationPlacesCategories = { - T0: 'T0', - T1: 'T1', - T2: 'T2', - T2bis: 'T2bis', - T3: 'T3', - FREE_RATE: 'FREE_RATE', - PUBLIC_RATE: 'PUBLIC_RATE', - REDUCE_RATE: 'REDUCE_RATE', - SPECIAL_REDUCE_RATE: 'SPECIAL_REDUCE_RATE', - FULL_RATE: 'FULL_RATE', -}; +const T0 = 'T0'; +const T1 = 'T1'; +const T2 = 'T2'; +const T2bis = 'T2bis'; +const T3 = 'T3'; +const FREE_RATE = 'FREE_RATE'; +const PUBLIC_RATE = 'PUBLIC_RATE'; +const REDUCE_RATE = 'REDUCE_RATE'; +const SPECIAL_REDUCE_RATE = 'SPECIAL_REDUCE_RATE'; +const FULL_RATE = 'FULL_RATE'; -module.exports = organisationPlacesCategories; +export { T0, T1, T2, T2bis, T3, FREE_RATE, PUBLIC_RATE, REDUCE_RATE, SPECIAL_REDUCE_RATE, FULL_RATE }; diff --git a/api/lib/domain/constants/saml-identity-providers.js b/api/lib/domain/constants/saml-identity-providers.js index 8c796e35361..f490bbc1359 100644 --- a/api/lib/domain/constants/saml-identity-providers.js +++ b/api/lib/domain/constants/saml-identity-providers.js @@ -4,6 +4,4 @@ const SamlIdentityProviders = { }, }; -module.exports = { - SamlIdentityProviders, -}; +export { SamlIdentityProviders }; diff --git a/api/lib/domain/constants/session-supervising.js b/api/lib/domain/constants/session-supervising.js index a054f944a70..21fe035345a 100644 --- a/api/lib/domain/constants/session-supervising.js +++ b/api/lib/domain/constants/session-supervising.js @@ -1,6 +1,8 @@ -module.exports.SESSION_SUPERVISING = { +const SESSION_SUPERVISING = { INCORRECT_DATA: { code: 'INCORRECT_DATA', getMessage: () => `Le numéro de session et/ou le mot de passe saisis sont incorrects.`, }, }; + +export { SESSION_SUPERVISING }; diff --git a/api/lib/domain/constants/sessions-errors.js b/api/lib/domain/constants/sessions-errors.js index 4abc8604d0d..fcfc634f207 100644 --- a/api/lib/domain/constants/sessions-errors.js +++ b/api/lib/domain/constants/sessions-errors.js @@ -1,4 +1,4 @@ -module.exports.CERTIFICATION_SESSIONS_ERRORS = { +const CERTIFICATION_SESSIONS_ERRORS = { INFORMATION_NOT_ALLOWED_WITH_SESSION_ID: { code: 'INFORMATION_NOT_ALLOWED_WITH_SESSION_ID', getMessage: () => `Merci de ne pas renseigner les informations de session`, @@ -60,3 +60,4 @@ module.exports.CERTIFICATION_SESSIONS_ERRORS = { getMessage: () => '', }, }; +export { CERTIFICATION_SESSIONS_ERRORS }; diff --git a/api/lib/domain/errors.js b/api/lib/domain/errors.js index db9c8550f6e..201b1c257d3 100644 --- a/api/lib/domain/errors.js +++ b/api/lib/domain/errors.js @@ -1,4 +1,4 @@ -const { SESSION_SUPERVISING } = require('./constants/session-supervising'); +import { SESSION_SUPERVISING } from './constants/session-supervising.js'; class DomainError extends Error { constructor(message, code, meta) { @@ -1319,7 +1319,7 @@ class InvalidStageError extends DomainError { } } -module.exports = { +export { LocaleFormatError, LocaleNotSupportedError, AccountRecoveryDemandNotCreatedError, diff --git a/api/lib/domain/events/AssessmentCompleted.js b/api/lib/domain/events/AssessmentCompleted.js index b27014241bf..d257be96e21 100644 --- a/api/lib/domain/events/AssessmentCompleted.js +++ b/api/lib/domain/events/AssessmentCompleted.js @@ -15,4 +15,4 @@ class AssessmentCompleted { } } -module.exports = AssessmentCompleted; +export { AssessmentCompleted }; diff --git a/api/lib/domain/events/AutoJuryDone.js b/api/lib/domain/events/AutoJuryDone.js index 724b1c931f3..8df960328d3 100644 --- a/api/lib/domain/events/AutoJuryDone.js +++ b/api/lib/domain/events/AutoJuryDone.js @@ -1,4 +1,4 @@ -module.exports = class AutoJuryDone { +class AutoJuryDone { constructor({ sessionId, finalizedAt, certificationCenterName, sessionDate, sessionTime, hasExaminerGlobalComment }) { this.sessionId = sessionId; this.finalizedAt = finalizedAt; @@ -7,4 +7,6 @@ module.exports = class AutoJuryDone { this.sessionTime = sessionTime; this.hasExaminerGlobalComment = hasExaminerGlobalComment; } -}; +} + +export { AutoJuryDone }; diff --git a/api/lib/domain/events/CampaignParticipationResultsShared.js b/api/lib/domain/events/CampaignParticipationResultsShared.js index 138ff377cb9..667eaa07b44 100644 --- a/api/lib/domain/events/CampaignParticipationResultsShared.js +++ b/api/lib/domain/events/CampaignParticipationResultsShared.js @@ -1,4 +1,4 @@ -const Event = require('./Event.js'); +import { Event } from './Event.js'; class CampaignParticipationResultsShared extends Event { constructor({ campaignParticipationId } = {}) { @@ -7,4 +7,4 @@ class CampaignParticipationResultsShared extends Event { } } -module.exports = CampaignParticipationResultsShared; +export { CampaignParticipationResultsShared }; diff --git a/api/lib/domain/events/CampaignParticipationStarted.js b/api/lib/domain/events/CampaignParticipationStarted.js index bc31a2860a9..0bdd41b9487 100644 --- a/api/lib/domain/events/CampaignParticipationStarted.js +++ b/api/lib/domain/events/CampaignParticipationStarted.js @@ -4,4 +4,4 @@ class CampaignParticipationStarted { } } -module.exports = CampaignParticipationStarted; +export { CampaignParticipationStarted }; diff --git a/api/lib/domain/events/CertificationJuryDone.js b/api/lib/domain/events/CertificationJuryDone.js index aa70a3667be..592973e1ff7 100644 --- a/api/lib/domain/events/CertificationJuryDone.js +++ b/api/lib/domain/events/CertificationJuryDone.js @@ -1,5 +1,7 @@ -module.exports = class CertificationJuryDone { +class CertificationJuryDone { constructor({ certificationCourseId }) { this.certificationCourseId = certificationCourseId; } -}; +} + +export { CertificationJuryDone }; diff --git a/api/lib/domain/events/CertificationRescoringCompleted.js b/api/lib/domain/events/CertificationRescoringCompleted.js index ca768ed2e4b..4af035f8a94 100644 --- a/api/lib/domain/events/CertificationRescoringCompleted.js +++ b/api/lib/domain/events/CertificationRescoringCompleted.js @@ -6,4 +6,4 @@ class CertificationRescoringCompleted { } } -module.exports = CertificationRescoringCompleted; +export { CertificationRescoringCompleted }; diff --git a/api/lib/domain/events/CertificationScoringCompleted.js b/api/lib/domain/events/CertificationScoringCompleted.js index 069b06cf9ec..9c4f2f4dea2 100644 --- a/api/lib/domain/events/CertificationScoringCompleted.js +++ b/api/lib/domain/events/CertificationScoringCompleted.js @@ -6,4 +6,4 @@ class CertificationScoringCompleted { } } -module.exports = CertificationScoringCompleted; +export { CertificationScoringCompleted }; diff --git a/api/lib/domain/events/ChallengeDeneutralized.js b/api/lib/domain/events/ChallengeDeneutralized.js index be424160665..c00f4f624c5 100644 --- a/api/lib/domain/events/ChallengeDeneutralized.js +++ b/api/lib/domain/events/ChallengeDeneutralized.js @@ -5,4 +5,4 @@ class ChallengeDeneutralized { } } -module.exports = ChallengeDeneutralized; +export { ChallengeDeneutralized }; diff --git a/api/lib/domain/events/ChallengeNeutralized.js b/api/lib/domain/events/ChallengeNeutralized.js index f4482fe40d1..4e082a87d9b 100644 --- a/api/lib/domain/events/ChallengeNeutralized.js +++ b/api/lib/domain/events/ChallengeNeutralized.js @@ -5,4 +5,4 @@ class ChallengeNeutralized { } } -module.exports = ChallengeNeutralized; +export { ChallengeNeutralized }; diff --git a/api/lib/domain/events/Event.js b/api/lib/domain/events/Event.js index 7b0167a85b3..197cf817403 100644 --- a/api/lib/domain/events/Event.js +++ b/api/lib/domain/events/Event.js @@ -7,4 +7,4 @@ class Event { } } -module.exports = Event; +export { Event }; diff --git a/api/lib/domain/events/SessionFinalized.js b/api/lib/domain/events/SessionFinalized.js index 4cd21182781..3cc2f41b207 100644 --- a/api/lib/domain/events/SessionFinalized.js +++ b/api/lib/domain/events/SessionFinalized.js @@ -1,4 +1,4 @@ -module.exports = class SessionFinalized { +class SessionFinalized { constructor({ sessionId, finalizedAt, hasExaminerGlobalComment, sessionDate, sessionTime, certificationCenterName }) { this.sessionId = sessionId; this.finalizedAt = finalizedAt; @@ -7,4 +7,6 @@ module.exports = class SessionFinalized { this.sessionTime = sessionTime; this.certificationCenterName = certificationCenterName; } -}; +} + +export { SessionFinalized }; diff --git a/api/lib/domain/events/UserAlreadyLinkedToCertificationCandidate.js b/api/lib/domain/events/UserAlreadyLinkedToCertificationCandidate.js index 34553b313e2..bb4a0c5e1e2 100644 --- a/api/lib/domain/events/UserAlreadyLinkedToCertificationCandidate.js +++ b/api/lib/domain/events/UserAlreadyLinkedToCertificationCandidate.js @@ -1 +1,2 @@ -module.exports = class UserAlreadyLinkedToCertificationCandidate {}; +class UserAlreadyLinkedToCertificationCandidate {} +export { UserAlreadyLinkedToCertificationCandidate }; diff --git a/api/lib/domain/events/UserLinkedToCertificationCandidate.js b/api/lib/domain/events/UserLinkedToCertificationCandidate.js index afdfc7062e6..943e0331246 100644 --- a/api/lib/domain/events/UserLinkedToCertificationCandidate.js +++ b/api/lib/domain/events/UserLinkedToCertificationCandidate.js @@ -1 +1,2 @@ -module.exports = class UserLinkedToCertificationCandidate {}; +class UserLinkedToCertificationCandidate {} +export { UserLinkedToCertificationCandidate }; diff --git a/api/lib/domain/events/check-event-types.js b/api/lib/domain/events/check-event-types.js index 379130b5fed..359acc5516e 100644 --- a/api/lib/domain/events/check-event-types.js +++ b/api/lib/domain/events/check-event-types.js @@ -1,13 +1,14 @@ -const _ = require('lodash'); -module.exports = { - checkEventTypes(receivedEvent, acceptedEventTypes) { - if ( - !_.some(acceptedEventTypes, (acceptedEventType) => { - return receivedEvent instanceof acceptedEventType; - }) - ) { - const acceptedEventNames = acceptedEventTypes.map((acceptedEventType) => acceptedEventType.name); - throw new Error(`event must be one of types ${acceptedEventNames.join(', ')}`); - } - }, +import _ from 'lodash'; + +const checkEventTypes = function (receivedEvent, acceptedEventTypes) { + if ( + !_.some(acceptedEventTypes, (acceptedEventType) => { + return receivedEvent instanceof acceptedEventType; + }) + ) { + const acceptedEventNames = acceptedEventTypes.map((acceptedEventType) => acceptedEventType.name); + throw new Error(`event must be one of types ${acceptedEventNames.join(', ')}`); + } }; + +export { checkEventTypes }; diff --git a/api/lib/domain/events/handle-auto-jury.js b/api/lib/domain/events/handle-auto-jury.js index 64e88aab334..e632fa375a1 100644 --- a/api/lib/domain/events/handle-auto-jury.js +++ b/api/lib/domain/events/handle-auto-jury.js @@ -1,12 +1,10 @@ -const { checkEventTypes } = require('./check-event-types.js'); -const SessionFinalized = require('./SessionFinalized.js'); -const CertificationIssueReportResolutionAttempt = require('../models/CertificationIssueReportResolutionAttempt.js'); -const AutoJuryDone = require('./AutoJuryDone.js'); -const CertificationJuryDone = require('./CertificationJuryDone.js'); -const bluebird = require('bluebird'); -const { - CertificationIssueReportResolutionStrategies, -} = require('../models/CertificationIssueReportResolutionStrategies.js'); +import { checkEventTypes } from './check-event-types.js'; +import { SessionFinalized } from './SessionFinalized.js'; +import { CertificationIssueReportResolutionAttempt } from '../models/CertificationIssueReportResolutionAttempt.js'; +import { AutoJuryDone } from './AutoJuryDone.js'; +import { CertificationJuryDone } from './CertificationJuryDone.js'; +import bluebird from 'bluebird'; +import { CertificationIssueReportResolutionStrategies } from '../models/CertificationIssueReportResolutionStrategies.js'; const eventTypes = [SessionFinalized]; @@ -129,4 +127,4 @@ async function _autoResolveCertificationIssueReport({ } handleAutoJury.eventTypes = eventTypes; -module.exports = handleAutoJury; +export { handleAutoJury }; diff --git a/api/lib/domain/events/handle-certification-rescoring.js b/api/lib/domain/events/handle-certification-rescoring.js index 49f1ac4b780..52bd21a8d58 100644 --- a/api/lib/domain/events/handle-certification-rescoring.js +++ b/api/lib/domain/events/handle-certification-rescoring.js @@ -1,13 +1,13 @@ -const AssessmentResult = require('../models/AssessmentResult.js'); -const CertificationResult = require('../models/CertificationResult.js'); -const CompetenceMark = require('../models/CompetenceMark.js'); -const CertificationRescoringCompleted = require('./CertificationRescoringCompleted.js'); -const bluebird = require('bluebird'); -const { CertificationComputeError } = require('../errors.js'); -const ChallengeNeutralized = require('./ChallengeNeutralized.js'); -const ChallengeDeneutralized = require('./ChallengeDeneutralized.js'); -const CertificationJuryDone = require('./CertificationJuryDone.js'); -const { checkEventTypes } = require('./check-event-types.js'); +import { AssessmentResult } from '../models/AssessmentResult.js'; +import { CertificationResult } from '../models/CertificationResult.js'; +import { CompetenceMark } from '../models/CompetenceMark.js'; +import { CertificationRescoringCompleted } from './CertificationRescoringCompleted.js'; +import bluebird from 'bluebird'; +import { CertificationComputeError } from '../errors.js'; +import { ChallengeNeutralized } from './ChallengeNeutralized.js'; +import { ChallengeDeneutralized } from './ChallengeDeneutralized.js'; +import { CertificationJuryDone } from './CertificationJuryDone.js'; +import { checkEventTypes } from './check-event-types.js'; const eventTypes = [ChallengeNeutralized, ChallengeDeneutralized, CertificationJuryDone]; @@ -157,4 +157,4 @@ function _getEmitterFromEvent(event) { } handleCertificationRescoring.eventTypes = eventTypes; -module.exports = handleCertificationRescoring; +export { handleCertificationRescoring }; diff --git a/api/lib/domain/events/handle-certification-scoring.js b/api/lib/domain/events/handle-certification-scoring.js index a76e182f58d..09e95119fbd 100644 --- a/api/lib/domain/events/handle-certification-scoring.js +++ b/api/lib/domain/events/handle-certification-scoring.js @@ -1,10 +1,10 @@ -const AssessmentResult = require('../models/AssessmentResult.js'); -const CertificationScoringCompleted = require('./CertificationScoringCompleted.js'); -const CompetenceMark = require('../models/CompetenceMark.js'); -const bluebird = require('bluebird'); -const { CertificationComputeError } = require('../errors.js'); -const AssessmentCompleted = require('./AssessmentCompleted.js'); -const { checkEventTypes } = require('./check-event-types.js'); +import { AssessmentResult } from '../models/AssessmentResult.js'; +import { CertificationScoringCompleted } from './CertificationScoringCompleted.js'; +import { CompetenceMark } from '../models/CompetenceMark.js'; +import bluebird from 'bluebird'; +import { CertificationComputeError } from '../errors.js'; +import { AssessmentCompleted } from './AssessmentCompleted.js'; +import { checkEventTypes } from './check-event-types.js'; const eventTypes = [AssessmentCompleted]; const EMITTER = 'PIX-ALGO'; @@ -135,4 +135,4 @@ async function _saveResultAfterCertificationComputeError({ return certificationCourseRepository.update(certificationCourse); } handleCertificationScoring.eventTypes = eventTypes; -module.exports = handleCertificationScoring; +export { handleCertificationScoring }; diff --git a/api/lib/domain/events/handle-complementary-certifications-scoring.js b/api/lib/domain/events/handle-complementary-certifications-scoring.js index a60834b2f65..ba5892d1db3 100644 --- a/api/lib/domain/events/handle-complementary-certifications-scoring.js +++ b/api/lib/domain/events/handle-complementary-certifications-scoring.js @@ -1,10 +1,10 @@ -const { checkEventTypes } = require('./check-event-types.js'); -const CertificationScoringCompleted = require('./CertificationScoringCompleted.js'); -const CertificationRescoringCompleted = require('./CertificationRescoringCompleted.js'); -const { ReproducibilityRate } = require('../models/ReproducibilityRate.js'); -const AnswerCollectionForScoring = require('../models/AnswerCollectionForScoring.js'); -const ComplementaryCertificationScoringWithComplementaryReferential = require('../models/ComplementaryCertificationScoringWithComplementaryReferential.js'); -const ComplementaryCertificationScoringWithoutComplementaryReferential = require('../models/ComplementaryCertificationScoringWithoutComplementaryReferential.js'); +import { checkEventTypes } from './check-event-types.js'; +import { CertificationScoringCompleted } from './CertificationScoringCompleted.js'; +import { CertificationRescoringCompleted } from './CertificationRescoringCompleted.js'; +import { ReproducibilityRate } from '../models/ReproducibilityRate.js'; +import { AnswerCollectionForScoring } from '../models/AnswerCollectionForScoring.js'; +import { ComplementaryCertificationScoringWithComplementaryReferential } from '../models/ComplementaryCertificationScoringWithComplementaryReferential.js'; +import { ComplementaryCertificationScoringWithoutComplementaryReferential } from '../models/ComplementaryCertificationScoringWithoutComplementaryReferential.js'; const eventTypes = [CertificationScoringCompleted, CertificationRescoringCompleted]; @@ -96,4 +96,4 @@ function _buildComplementaryCertificationScoringWithReferential( } handleComplementaryCertificationsScoring.eventTypes = eventTypes; -module.exports = handleComplementaryCertificationsScoring; +export { handleComplementaryCertificationsScoring }; diff --git a/api/lib/domain/events/handle-pole-emploi-participation-finished.js b/api/lib/domain/events/handle-pole-emploi-participation-finished.js index 1110c9c29e2..eea197c7581 100644 --- a/api/lib/domain/events/handle-pole-emploi-participation-finished.js +++ b/api/lib/domain/events/handle-pole-emploi-participation-finished.js @@ -1,7 +1,7 @@ -const { checkEventTypes } = require('./check-event-types.js'); -const PoleEmploiPayload = require('../../infrastructure/externals/pole-emploi/PoleEmploiPayload.js'); -const AssessmentCompleted = require('./AssessmentCompleted.js'); -const PoleEmploiSending = require('../models/PoleEmploiSending.js'); +import { checkEventTypes } from './check-event-types.js'; +import { PoleEmploiPayload } from '../../infrastructure/externals/pole-emploi/PoleEmploiPayload.js'; +import { AssessmentCompleted } from './AssessmentCompleted.js'; +import { PoleEmploiSending } from '../models/PoleEmploiSending.js'; const eventTypes = [AssessmentCompleted]; @@ -52,4 +52,4 @@ async function handlePoleEmploiParticipationFinished({ } handlePoleEmploiParticipationFinished.eventTypes = eventTypes; -module.exports = handlePoleEmploiParticipationFinished; +export { handlePoleEmploiParticipationFinished }; diff --git a/api/lib/domain/events/handle-pole-emploi-participation-started.js b/api/lib/domain/events/handle-pole-emploi-participation-started.js index 98c01a30962..cc5545a4021 100644 --- a/api/lib/domain/events/handle-pole-emploi-participation-started.js +++ b/api/lib/domain/events/handle-pole-emploi-participation-started.js @@ -1,7 +1,7 @@ -const { checkEventTypes } = require('./check-event-types.js'); -const CampaignParticipationStarted = require('./CampaignParticipationStarted.js'); -const PoleEmploiPayload = require('../../infrastructure/externals/pole-emploi/PoleEmploiPayload.js'); -const PoleEmploiSending = require('../models/PoleEmploiSending.js'); +import { checkEventTypes } from './check-event-types.js'; +import { CampaignParticipationStarted } from './CampaignParticipationStarted.js'; +import { PoleEmploiPayload } from '../../infrastructure/externals/pole-emploi/PoleEmploiPayload.js'; +import { PoleEmploiSending } from '../models/PoleEmploiSending.js'; const eventTypes = [CampaignParticipationStarted]; @@ -48,4 +48,4 @@ async function handlePoleEmploiParticipationStarted({ } handlePoleEmploiParticipationStarted.eventTypes = eventTypes; -module.exports = handlePoleEmploiParticipationStarted; +export { handlePoleEmploiParticipationStarted }; diff --git a/api/lib/domain/events/handle-session-finalized.js b/api/lib/domain/events/handle-session-finalized.js index 07a50db8eb1..3cb6c6aed28 100644 --- a/api/lib/domain/events/handle-session-finalized.js +++ b/api/lib/domain/events/handle-session-finalized.js @@ -1,6 +1,6 @@ -const FinalizedSession = require('../models/FinalizedSession.js'); -const { checkEventTypes } = require('./check-event-types.js'); -const AutoJuryDone = require('./AutoJuryDone.js'); +import { FinalizedSession } from '../models/FinalizedSession.js'; +import { checkEventTypes } from './check-event-types.js'; +import { AutoJuryDone } from './AutoJuryDone.js'; const eventTypes = [AutoJuryDone]; @@ -32,4 +32,4 @@ async function handleSessionFinalized({ } handleSessionFinalized.eventTypes = eventTypes; -module.exports = handleSessionFinalized; +export { handleSessionFinalized }; diff --git a/api/lib/domain/events/index.js b/api/lib/domain/events/index.js index 7ac6eddc92c..221c00147ee 100644 --- a/api/lib/domain/events/index.js +++ b/api/lib/domain/events/index.js @@ -1,45 +1,48 @@ -const { injectDefaults, injectDependencies } = require('../../infrastructure/utils/dependency-injection.js'); -const EventDispatcher = require('../../infrastructure/events/EventDispatcher.js'); -const EventDispatcherLogger = require('../../infrastructure/events/EventDispatcherLogger.js'); -const MonitoringTools = require('../../infrastructure/monitoring-tools.js'); -const settings = require('../../config.js'); -const _ = require('lodash'); -const { performance } = require('perf_hooks'); -const eventBusBuilder = require('../../infrastructure/events/EventBusBuilder.js'); +import { injectDefaults, injectDependencies } from '../../infrastructure/utils/dependency-injection.js'; +import { EventDispatcher } from '../../infrastructure/events/EventDispatcher.js'; +import { EventDispatcherLogger } from '../../infrastructure/events/EventDispatcherLogger.js'; +import { monitoringTools as MonitoringTools } from '../../infrastructure/monitoring-tools.js'; +import { config } from '../../config.js'; +import _ from 'lodash'; +import perf_hooks from 'perf_hooks'; -const assessmentRepository = require('../../infrastructure/repositories/assessment-repository.js'); -const assessmentResultRepository = require('../../infrastructure/repositories/assessment-result-repository.js'); -const badgeAcquisitionRepository = require('../../infrastructure/repositories/badge-acquisition-repository.js'); -const badgeRepository = require('../../infrastructure/repositories/badge-repository.js'); -const campaignRepository = require('../../infrastructure/repositories/campaign-repository.js'); -const campaignParticipationRepository = require('../../infrastructure/repositories/campaign-participation-repository.js'); -const campaignParticipationResultRepository = require('../../infrastructure/repositories/campaign-participation-result-repository.js'); -const certificationAssessmentRepository = require('../../infrastructure/repositories/certification-assessment-repository.js'); -const certificationCenterRepository = require('../../infrastructure/repositories/certification-center-repository.js'); -const certificationCourseRepository = require('../../infrastructure/repositories/certification-course-repository.js'); -const certificationIssueReportRepository = require('../../infrastructure/repositories/certification-issue-report-repository.js'); -const competenceMarkRepository = require('../../infrastructure/repositories/competence-mark-repository.js'); -const competenceRepository = require('../../infrastructure/repositories/competence-repository.js'); -const complementaryCertificationCourseRepository = require('../../infrastructure/repositories/complementary-certification-course-repository.js'); -const complementaryCertificationScoringCriteriaRepository = require('../../infrastructure/repositories/complementary-certification-scoring-criteria-repository.js'); -const knowledgeElementRepository = require('../../infrastructure/repositories/knowledge-element-repository.js'); -const organizationRepository = require('../../infrastructure/repositories/organization-repository.js'); -const poleEmploiSendingRepository = require('../../infrastructure/repositories/pole-emploi-sending-repository.js'); -const scoringCertificationService = require('../services/scoring/scoring-certification-service.js'); -const skillRepository = require('../../infrastructure/repositories/skill-repository.js'); -const supervisorAccessRepository = require('../../infrastructure/repositories/supervisor-access-repository.js'); -const targetProfileRepository = require('../../infrastructure/repositories/target-profile-repository.js'); -const userRepository = require('../../infrastructure/repositories/user-repository.js'); -const participantResultsSharedRepository = require('../../infrastructure/repositories/participant-results-shared-repository.js'); -const juryCertificationSummaryRepository = require('../../infrastructure/repositories/jury-certification-summary-repository.js'); -const finalizedSessionRepository = require('../../infrastructure/repositories/sessions/finalized-session-repository.js'); -const challengeRepository = require('../../infrastructure/repositories/challenge-repository.js'); -const logger = require('../../infrastructure/logger.js'); -const poleEmploiNotifier = require('../../infrastructure/externals/pole-emploi/pole-emploi-notifier.js'); -const disabledPoleEmploiNotifier = require('../../infrastructure/externals/pole-emploi/disabled-pole-emploi-notifier.js'); +const { performance } = perf_hooks; + +import * as eventBusBuilder from '../../infrastructure/events/EventBusBuilder.js'; + +import * as assessmentRepository from '../../infrastructure/repositories/assessment-repository.js'; +import * as assessmentResultRepository from '../../infrastructure/repositories/assessment-result-repository.js'; +import * as badgeAcquisitionRepository from '../../infrastructure/repositories/badge-acquisition-repository.js'; +import * as badgeRepository from '../../infrastructure/repositories/badge-repository.js'; +import * as campaignRepository from '../../infrastructure/repositories/campaign-repository.js'; +import * as campaignParticipationRepository from '../../infrastructure/repositories/campaign-participation-repository.js'; +import * as campaignParticipationResultRepository from '../../infrastructure/repositories/campaign-participation-result-repository.js'; +import * as certificationAssessmentRepository from '../../infrastructure/repositories/certification-assessment-repository.js'; +import * as certificationCenterRepository from '../../infrastructure/repositories/certification-center-repository.js'; +import * as certificationCourseRepository from '../../infrastructure/repositories/certification-course-repository.js'; +import * as certificationIssueReportRepository from '../../infrastructure/repositories/certification-issue-report-repository.js'; +import * as competenceMarkRepository from '../../infrastructure/repositories/competence-mark-repository.js'; +import * as competenceRepository from '../../infrastructure/repositories/competence-repository.js'; +import * as complementaryCertificationCourseRepository from '../../infrastructure/repositories/complementary-certification-course-repository.js'; +import * as complementaryCertificationScoringCriteriaRepository from '../../infrastructure/repositories/complementary-certification-scoring-criteria-repository.js'; +import * as knowledgeElementRepository from '../../infrastructure/repositories/knowledge-element-repository.js'; +import * as organizationRepository from '../../infrastructure/repositories/organization-repository.js'; +import * as poleEmploiSendingRepository from '../../infrastructure/repositories/pole-emploi-sending-repository.js'; +import * as scoringCertificationService from '../services/scoring/scoring-certification-service.js'; +import * as skillRepository from '../../infrastructure/repositories/skill-repository.js'; +import * as supervisorAccessRepository from '../../infrastructure/repositories/supervisor-access-repository.js'; +import * as targetProfileRepository from '../../infrastructure/repositories/target-profile-repository.js'; +import * as userRepository from '../../infrastructure/repositories/user-repository.js'; +import { participantResultsSharedRepository } from '../../infrastructure/repositories/participant-results-shared-repository.js'; +import * as juryCertificationSummaryRepository from '../../infrastructure/repositories/jury-certification-summary-repository.js'; +import * as finalizedSessionRepository from '../../infrastructure/repositories/sessions/finalized-session-repository.js'; +import * as challengeRepository from '../../infrastructure/repositories/challenge-repository.js'; +import { logger } from '../../infrastructure/logger.js'; +import * as poleEmploiNotifier from '../../infrastructure/externals/pole-emploi/pole-emploi-notifier.js'; +import * as disabledPoleEmploiNotifier from '../../infrastructure/externals/pole-emploi/disabled-pole-emploi-notifier.js'; function requirePoleEmploiNotifier() { - if (settings.poleEmploi.pushEnabled) { + if (config.poleEmploi.pushEnabled) { return poleEmploiNotifier; } else { return disabledPoleEmploiNotifier; @@ -78,17 +81,17 @@ const dependencies = { logger, }; -const dependency = require('../../infrastructure/repositories/partner-certification-scoring-repository.js'); +import * as dependency from '../../infrastructure/repositories/partner-certification-scoring-repository.js'; const partnerCertificationScoringRepository = injectDependencies(dependency, dependencies); dependencies.partnerCertificationScoringRepository = partnerCertificationScoringRepository; -const handleAutoJury = require('./handle-auto-jury.js'); -const handleCertificationScoring = require('./handle-certification-scoring.js'); -const handleCertificationRescoring = require('./handle-certification-rescoring.js'); -const handleComplementaryCertificationsScoring = require('./handle-complementary-certifications-scoring.js'); -const handlePoleEmploiParticipationFinished = require('./handle-pole-emploi-participation-finished.js'); -const handlePoleEmploiParticipationStarted = require('./handle-pole-emploi-participation-started.js'); -const handleSessionFinalized = require('./handle-session-finalized.js'); +import { handleAutoJury } from './handle-auto-jury.js'; +import { handleCertificationScoring } from './handle-certification-scoring.js'; +import { handleCertificationRescoring } from './handle-certification-rescoring.js'; +import { handleComplementaryCertificationsScoring } from './handle-complementary-certifications-scoring.js'; +import { handlePoleEmploiParticipationFinished } from './handle-pole-emploi-participation-finished.js'; +import { handlePoleEmploiParticipationStarted } from './handle-pole-emploi-participation-started.js'; +import { handleSessionFinalized } from './handle-session-finalized.js'; const handlersToBeInjected = { handleAutoJury, @@ -101,7 +104,7 @@ const handlersToBeInjected = { }; function buildEventDispatcher(handlersStubs) { - const eventDispatcher = new EventDispatcher(new EventDispatcherLogger(MonitoringTools, settings, performance)); + const eventDispatcher = new EventDispatcher(new EventDispatcherLogger(MonitoringTools, config, performance)); const handlersNames = _.map(handlersToBeInjected, (handler) => handler.name); @@ -134,8 +137,4 @@ const _forTestOnly = { }, }; -module.exports = { - eventDispatcher, - eventBus, - _forTestOnly, -}; +export { eventDispatcher, eventBus, _forTestOnly }; diff --git a/api/lib/domain/models/AccountRecoveryDemand.js b/api/lib/domain/models/AccountRecoveryDemand.js index 20aab5d3417..0ff483af371 100644 --- a/api/lib/domain/models/AccountRecoveryDemand.js +++ b/api/lib/domain/models/AccountRecoveryDemand.js @@ -11,4 +11,4 @@ class AccountRecoveryDemand { } } -module.exports = AccountRecoveryDemand; +export { AccountRecoveryDemand }; diff --git a/api/lib/domain/models/AdminMember.js b/api/lib/domain/models/AdminMember.js index d3932d169d7..c7c0e452651 100644 --- a/api/lib/domain/models/AdminMember.js +++ b/api/lib/domain/models/AdminMember.js @@ -1,11 +1,14 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { validateEntity } = require('../validators/entity-validator.js'); -const isNil = require('lodash/isNil'); -const { ROLES } = require('../constants.js').PIX_ADMIN; +import { validateEntity } from '../validators/entity-validator.js'; +import lodash from 'lodash'; +const { isNil } = lodash; +import { PIX_ADMIN } from '../constants.js'; -module.exports = class AdminMember { +const { ROLES } = PIX_ADMIN; + +class AdminMember { constructor({ id, userId, firstName, lastName, email, role, createdAt, updatedAt, disabledAt }) { this.id = id; this.userId = userId; @@ -52,4 +55,6 @@ module.exports = class AdminMember { get isSupport() { return this.role === ROLES.SUPPORT && isNil(this.disabledAt); } -}; +} + +export { AdminMember }; diff --git a/api/lib/domain/models/Answer.js b/api/lib/domain/models/Answer.js index af222adc010..aa468a832e4 100644 --- a/api/lib/domain/models/Answer.js +++ b/api/lib/domain/models/Answer.js @@ -1,5 +1,5 @@ -const AnswerStatus = require('./AnswerStatus.js'); -const _ = require('lodash'); +import { AnswerStatus } from './AnswerStatus.js'; +import _ from 'lodash'; class Answer { constructor({ @@ -68,4 +68,4 @@ class Answer { // and transform it to an AnswerStatus "aband" in the api Answer.FAKE_VALUE_FOR_SKIPPED_QUESTIONS = '#ABAND#'; -module.exports = Answer; +export { Answer }; diff --git a/api/lib/domain/models/AnswerCollectionForScoring.js b/api/lib/domain/models/AnswerCollectionForScoring.js index 1a55be21443..3ec135b4304 100644 --- a/api/lib/domain/models/AnswerCollectionForScoring.js +++ b/api/lib/domain/models/AnswerCollectionForScoring.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); +import _ from 'lodash'; const qrocmDepChallenge = 'QROCM-dep'; -module.exports = class AnswerCollectionForScoring { +class AnswerCollectionForScoring { constructor(challengesWithAnswers) { this.challengesWithAnswers = challengesWithAnswers; } @@ -96,7 +96,9 @@ module.exports = class AnswerCollectionForScoring { }) .sum(); } -}; +} + +export { AnswerCollectionForScoring }; class ChallengeWithAnswer { constructor(answer, challenge) { diff --git a/api/lib/domain/models/AnswerStatus.js b/api/lib/domain/models/AnswerStatus.js index d7d4fcad8cd..bc1fe5708eb 100644 --- a/api/lib/domain/models/AnswerStatus.js +++ b/api/lib/domain/models/AnswerStatus.js @@ -92,4 +92,4 @@ class AnswerStatus { } } -module.exports = AnswerStatus; +export { AnswerStatus }; diff --git a/api/lib/domain/models/Area.js b/api/lib/domain/models/Area.js index 972c4e67064..0404e10a8ef 100644 --- a/api/lib/domain/models/Area.js +++ b/api/lib/domain/models/Area.js @@ -10,4 +10,4 @@ class Area { } } -module.exports = Area; +export { Area }; diff --git a/api/lib/domain/models/Assessment.js b/api/lib/domain/models/Assessment.js index c08e203caaa..32424b27f85 100644 --- a/api/lib/domain/models/Assessment.js +++ b/api/lib/domain/models/Assessment.js @@ -1,5 +1,5 @@ -const { ObjectValidationError } = require('../errors.js'); -const Answer = require('./Answer.js'); +import { ObjectValidationError } from '../errors.js'; +import { Answer } from './Answer.js'; const courseIdMessage = { COMPETENCE_EVALUATION: '[NOT USED] CompetenceId is in Competence Evaluation.', @@ -216,4 +216,4 @@ Assessment.types = types; Assessment.statesOfLastQuestion = statesOfLastQuestion; Assessment.methods = methods; -module.exports = Assessment; +export { Assessment }; diff --git a/api/lib/domain/models/AssessmentResult.js b/api/lib/domain/models/AssessmentResult.js index f3d2de2740d..7d42cc92bf4 100644 --- a/api/lib/domain/models/AssessmentResult.js +++ b/api/lib/domain/models/AssessmentResult.js @@ -1,4 +1,4 @@ -const Assessment = require('./Assessment.js'); +import { Assessment } from './Assessment.js'; const status = { REJECTED: 'rejected', @@ -95,4 +95,4 @@ class AssessmentResult { } AssessmentResult.status = status; -module.exports = AssessmentResult; +export { AssessmentResult, status }; diff --git a/api/lib/domain/models/Authentication.js b/api/lib/domain/models/Authentication.js index 8618e822274..a76de344091 100644 --- a/api/lib/domain/models/Authentication.js +++ b/api/lib/domain/models/Authentication.js @@ -12,4 +12,4 @@ class Authentication { } } -module.exports = Authentication; +export { Authentication }; diff --git a/api/lib/domain/models/AuthenticationMethod.js b/api/lib/domain/models/AuthenticationMethod.js index b6555e03693..8300156a523 100644 --- a/api/lib/domain/models/AuthenticationMethod.js +++ b/api/lib/domain/models/AuthenticationMethod.js @@ -1,7 +1,7 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { validateEntity } = require('../validators/entity-validator.js'); +import { validateEntity } from '../validators/entity-validator.js'; const identityProviders = { PIX: 'PIX', @@ -118,4 +118,4 @@ AuthenticationMethod.identityProviders = identityProviders; AuthenticationMethod.PixAuthenticationComplement = PixAuthenticationComplement; AuthenticationMethod.OidcAuthenticationComplement = OidcAuthenticationComplement; AuthenticationMethod.GARAuthenticationComplement = GARAuthenticationComplement; -module.exports = AuthenticationMethod; +export { AuthenticationMethod }; diff --git a/api/lib/domain/models/AuthenticationSessionContent.js b/api/lib/domain/models/AuthenticationSessionContent.js index 80fc4851927..9ed425f8961 100644 --- a/api/lib/domain/models/AuthenticationSessionContent.js +++ b/api/lib/domain/models/AuthenticationSessionContent.js @@ -7,4 +7,4 @@ class AuthenticationSessionContent { } } -module.exports = AuthenticationSessionContent; +export { AuthenticationSessionContent }; diff --git a/api/lib/domain/models/Badge.js b/api/lib/domain/models/Badge.js index e7f8e73fca4..76e0e07870c 100644 --- a/api/lib/domain/models/Badge.js +++ b/api/lib/domain/models/Badge.js @@ -28,4 +28,4 @@ class Badge { } } -module.exports = Badge; +export { Badge }; diff --git a/api/lib/domain/models/BadgeAcquisition.js b/api/lib/domain/models/BadgeAcquisition.js index 40a86d74662..c69532b71b0 100644 --- a/api/lib/domain/models/BadgeAcquisition.js +++ b/api/lib/domain/models/BadgeAcquisition.js @@ -12,4 +12,4 @@ class BadgeAcquisition { } } -module.exports = BadgeAcquisition; +export { BadgeAcquisition }; diff --git a/api/lib/domain/models/BadgeCriterion.js b/api/lib/domain/models/BadgeCriterion.js index 6e69c1176dc..6d416d74e80 100644 --- a/api/lib/domain/models/BadgeCriterion.js +++ b/api/lib/domain/models/BadgeCriterion.js @@ -8,10 +8,12 @@ class BadgeCriterion { } } -BadgeCriterion.SCOPES = { +const SCOPES = { CAMPAIGN_PARTICIPATION: 'CampaignParticipation', SKILL_SET: 'SkillSet', CAPPED_TUBES: 'CappedTubes', }; -module.exports = BadgeCriterion; +BadgeCriterion.SCOPES = SCOPES; + +export { BadgeCriterion, SCOPES }; diff --git a/api/lib/domain/models/BadgeDetails.js b/api/lib/domain/models/BadgeDetails.js index 727ce2d2c74..1bf29962500 100644 --- a/api/lib/domain/models/BadgeDetails.js +++ b/api/lib/domain/models/BadgeDetails.js @@ -1,4 +1,4 @@ -const { SCOPES } = require('./BadgeCriterion.js'); +import { SCOPES } from './BadgeCriterion.js'; class BadgeDetails { constructor({ id, key, altMessage, imageUrl, message, title, isCertifiable, isAlwaysVisible, criteria }) { @@ -70,4 +70,4 @@ BadgeCriterion.SCOPES = { CAPPED_TUBES: 'CappedTubes', }; -module.exports = { BadgeDetails, BadgeCriterion, SkillSet, CappedTube, SCOPES }; +export { BadgeDetails, BadgeCriterion, SkillSet, CappedTube, SCOPES }; diff --git a/api/lib/domain/models/BadgeForCalculation.js b/api/lib/domain/models/BadgeForCalculation.js index 57f994d327b..88108ed61b5 100644 --- a/api/lib/domain/models/BadgeForCalculation.js +++ b/api/lib/domain/models/BadgeForCalculation.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; class BadgeForCalculation { constructor({ id, badgeCriteria }) { @@ -37,7 +37,4 @@ function _computeMasteryPercentage(validatedSkillsCount, totalSkillsCount) { return Math.round((validatedSkillsCount * 100) / totalSkillsCount); } -module.exports = { - BadgeForCalculation, - BadgeCriterion, -}; +export { BadgeForCalculation, BadgeCriterion }; diff --git a/api/lib/domain/models/Campaign.js b/api/lib/domain/models/Campaign.js index 7f973289f32..dd18e4cd32e 100644 --- a/api/lib/domain/models/Campaign.js +++ b/api/lib/domain/models/Campaign.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const CampaignTypes = require('./CampaignTypes.js'); +import _ from 'lodash'; +import { CampaignTypes } from './CampaignTypes.js'; class Campaign { constructor({ @@ -71,4 +71,4 @@ class Campaign { } } -module.exports = Campaign; +export { Campaign }; diff --git a/api/lib/domain/models/CampaignCreator.js b/api/lib/domain/models/CampaignCreator.js index 628ae71f0a2..23f62174af4 100644 --- a/api/lib/domain/models/CampaignCreator.js +++ b/api/lib/domain/models/CampaignCreator.js @@ -1,6 +1,6 @@ -const CampaignForCreation = require('./CampaignForCreation.js'); -const CampaignTypes = require('./CampaignTypes.js'); -const { UserNotAuthorizedToCreateCampaignError } = require('../errors.js'); +import { CampaignForCreation } from './CampaignForCreation.js'; +import { CampaignTypes } from './CampaignTypes.js'; +import { UserNotAuthorizedToCreateCampaignError } from '../errors.js'; class CampaignCreator { constructor(availableTargetProfileIds) { @@ -26,4 +26,4 @@ function _checkAssessmentCampaignCreationAllowed(targetProfileId, availableTarge } } -module.exports = CampaignCreator; +export { CampaignCreator }; diff --git a/api/lib/domain/models/CampaignForArchiving.js b/api/lib/domain/models/CampaignForArchiving.js index ab4bbec00b9..46db62ee362 100644 --- a/api/lib/domain/models/CampaignForArchiving.js +++ b/api/lib/domain/models/CampaignForArchiving.js @@ -1,4 +1,4 @@ -const { ArchivedCampaignError, ObjectValidationError } = require('../errors.js'); +import { ArchivedCampaignError, ObjectValidationError } from '../errors.js'; class CampaignForArchiving { constructor({ id, code, archivedAt, archivedBy } = {}) { @@ -29,4 +29,4 @@ class CampaignForArchiving { } } -module.exports = CampaignForArchiving; +export { CampaignForArchiving }; diff --git a/api/lib/domain/models/CampaignForCreation.js b/api/lib/domain/models/CampaignForCreation.js index b3e84cede72..d16d92bd5bd 100644 --- a/api/lib/domain/models/CampaignForCreation.js +++ b/api/lib/domain/models/CampaignForCreation.js @@ -1,4 +1,4 @@ -const validate = require('../validators/campaign-creation-validator.js'); +import { validate } from '../validators/campaign-creation-validator.js'; class CampaignForCreation { constructor({ name, @@ -28,4 +28,4 @@ class CampaignForCreation { } } -module.exports = CampaignForCreation; +export { CampaignForCreation }; diff --git a/api/lib/domain/models/CampaignLearningContent.js b/api/lib/domain/models/CampaignLearningContent.js index cc865aa08d2..aa25207aebb 100644 --- a/api/lib/domain/models/CampaignLearningContent.js +++ b/api/lib/domain/models/CampaignLearningContent.js @@ -1,6 +1,6 @@ -const _ = require('lodash'); +import _ from 'lodash'; -module.exports = class CampaignLearningContent { +class CampaignLearningContent { constructor(learningContent) { this._learningContent = learningContent; } @@ -120,4 +120,6 @@ module.exports = class CampaignLearningContent { const area = this.findArea(competence.areaId); return area || null; } -}; +} + +export { CampaignLearningContent }; diff --git a/api/lib/domain/models/CampaignParticipant.js b/api/lib/domain/models/CampaignParticipant.js index 8b2da34187c..0de9154e162 100644 --- a/api/lib/domain/models/CampaignParticipant.js +++ b/api/lib/domain/models/CampaignParticipant.js @@ -1,7 +1,8 @@ -const { EntityValidationError, ForbiddenAccess, AlreadyExistingCampaignParticipationError } = require('../errors.js'); -const CampaignParticipation = require('./CampaignParticipation.js'); -const Assessment = require('./Assessment.js'); -const OrganizationLearner = require('./OrganizationLearner.js'); +import { EntityValidationError, ForbiddenAccess, AlreadyExistingCampaignParticipationError } from '../errors.js'; + +import { CampaignParticipation } from './CampaignParticipation.js'; +import { Assessment } from './Assessment.js'; +import { OrganizationLearner } from './OrganizationLearner.js'; const couldNotJoinCampaignErrorMessage = "Vous n'êtes pas autorisé à rejoindre la campagne"; const couldNotImproveCampaignErrorMessage = 'Vous ne pouvez pas repasser la campagne'; @@ -118,4 +119,4 @@ class CampaignParticipant { } } -module.exports = CampaignParticipant; +export { CampaignParticipant }; diff --git a/api/lib/domain/models/CampaignParticipation.js b/api/lib/domain/models/CampaignParticipation.js index 40463ef433b..458876490e8 100644 --- a/api/lib/domain/models/CampaignParticipation.js +++ b/api/lib/domain/models/CampaignParticipation.js @@ -1,12 +1,14 @@ -const _ = require('lodash'); -const { +import _ from 'lodash'; + +import { ArchivedCampaignError, AssessmentNotCompletedError, AlreadySharedCampaignParticipationError, CantImproveCampaignParticipationError, CampaignParticipationDeletedError, -} = require('../errors.js'); -const CampaignParticipationStatuses = require('./CampaignParticipationStatuses.js'); +} from '../errors.js'; + +import { CampaignParticipationStatuses } from './CampaignParticipationStatuses.js'; class CampaignParticipation { constructor({ @@ -116,4 +118,4 @@ function lastAssessmentNotCompleted(campaignParticipation) { return !campaignParticipation.lastAssessment || !campaignParticipation.lastAssessment.isCompleted(); } -module.exports = CampaignParticipation; +export { CampaignParticipation }; diff --git a/api/lib/domain/models/CampaignParticipationBadge.js b/api/lib/domain/models/CampaignParticipationBadge.js index fd5d0a7189d..75ea03a8fcf 100644 --- a/api/lib/domain/models/CampaignParticipationBadge.js +++ b/api/lib/domain/models/CampaignParticipationBadge.js @@ -1,4 +1,4 @@ -const Badge = require('./Badge.js'); +import { Badge } from './Badge.js'; class CampaignParticipationBadge extends Badge { constructor({ @@ -40,4 +40,4 @@ class CampaignParticipationBadge extends Badge { } } -module.exports = CampaignParticipationBadge; +export { CampaignParticipationBadge }; diff --git a/api/lib/domain/models/CampaignParticipationResult.js b/api/lib/domain/models/CampaignParticipationResult.js index 33c08a9f68b..1f9fcca1d38 100644 --- a/api/lib/domain/models/CampaignParticipationResult.js +++ b/api/lib/domain/models/CampaignParticipationResult.js @@ -1,7 +1,7 @@ -const campaignParticipationService = require('../services/campaign-participation-service.js'); -const CompetenceResult = require('./CompetenceResult.js'); +import * as campaignParticipationService from '../services/campaign-participation-service.js'; +import { CompetenceResult } from './CompetenceResult.js'; -const _ = require('lodash'); +import _ from 'lodash'; class CampaignParticipationResult { constructor({ @@ -117,4 +117,4 @@ function _getTestedCompetenceResults(competence, area, targetedKnowledgeElements }); } -module.exports = CampaignParticipationResult; +export { CampaignParticipationResult }; diff --git a/api/lib/domain/models/CampaignParticipationStatuses.js b/api/lib/domain/models/CampaignParticipationStatuses.js index 70c64167b4f..02fb6fe2c0c 100644 --- a/api/lib/domain/models/CampaignParticipationStatuses.js +++ b/api/lib/domain/models/CampaignParticipationStatuses.js @@ -4,4 +4,4 @@ const CampaignParticipationStatuses = { SHARED: 'SHARED', }; -module.exports = CampaignParticipationStatuses; +export { CampaignParticipationStatuses }; diff --git a/api/lib/domain/models/CampaignToStartParticipation.js b/api/lib/domain/models/CampaignToStartParticipation.js index a102ab53248..26fe026ab8e 100644 --- a/api/lib/domain/models/CampaignToStartParticipation.js +++ b/api/lib/domain/models/CampaignToStartParticipation.js @@ -1,4 +1,4 @@ -const CampaignTypes = require('../models/CampaignTypes.js'); +import { CampaignTypes } from '../models/CampaignTypes.js'; class CampaignToStartParticipation { constructor({ @@ -32,4 +32,4 @@ class CampaignToStartParticipation { } } -module.exports = CampaignToStartParticipation; +export { CampaignToStartParticipation }; diff --git a/api/lib/domain/models/CampaignTypes.js b/api/lib/domain/models/CampaignTypes.js index d757fe1aa86..fc4db246654 100644 --- a/api/lib/domain/models/CampaignTypes.js +++ b/api/lib/domain/models/CampaignTypes.js @@ -3,4 +3,4 @@ const CampaignTypes = { PROFILES_COLLECTION: 'PROFILES_COLLECTION', }; -module.exports = CampaignTypes; +export { CampaignTypes }; diff --git a/api/lib/domain/models/CertifiableBadgeAcquisition.js b/api/lib/domain/models/CertifiableBadgeAcquisition.js index 153d12656e4..09b90ec4752 100644 --- a/api/lib/domain/models/CertifiableBadgeAcquisition.js +++ b/api/lib/domain/models/CertifiableBadgeAcquisition.js @@ -20,4 +20,4 @@ class CertifiableBadgeAcquisition { } } -module.exports = CertifiableBadgeAcquisition; +export { CertifiableBadgeAcquisition }; diff --git a/api/lib/domain/models/CertifiableProfileForLearningContent.js b/api/lib/domain/models/CertifiableProfileForLearningContent.js index ff901a84074..a386ce52d10 100644 --- a/api/lib/domain/models/CertifiableProfileForLearningContent.js +++ b/api/lib/domain/models/CertifiableProfileForLearningContent.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const KnowledgeElement = require('./KnowledgeElement.js'); +import _ from 'lodash'; +import { KnowledgeElement } from './KnowledgeElement.js'; class CertifiableProfileForLearningContent { constructor({ learningContent, knowledgeElements, answerAndChallengeIdsByAnswerId }) { @@ -144,4 +144,4 @@ class ResultByArea { } } -module.exports = CertifiableProfileForLearningContent; +export { CertifiableProfileForLearningContent }; diff --git a/api/lib/domain/models/CertificationAnswerStatusChangeAttempt.js b/api/lib/domain/models/CertificationAnswerStatusChangeAttempt.js index f4f9d14b034..3e4ca9af10b 100644 --- a/api/lib/domain/models/CertificationAnswerStatusChangeAttempt.js +++ b/api/lib/domain/models/CertificationAnswerStatusChangeAttempt.js @@ -1,4 +1,4 @@ -module.exports = class CertificationAnswerStatusChangeAttempt { +class CertificationAnswerStatusChangeAttempt { constructor(questionNumber, status) { this.questionNumber = questionNumber; this.status = status; @@ -27,7 +27,9 @@ module.exports = class CertificationAnswerStatusChangeAttempt { wasSkipped() { return this.status === CertificationAnswerStatusChangeStatus.SKIPPED; } -}; +} + +export { CertificationAnswerStatusChangeAttempt }; const CertificationAnswerStatusChangeStatus = { CHANGED: 'CHANGED', diff --git a/api/lib/domain/models/CertificationAssessment.js b/api/lib/domain/models/CertificationAssessment.js index 481ebef2cf1..733dafac827 100644 --- a/api/lib/domain/models/CertificationAssessment.js +++ b/api/lib/domain/models/CertificationAssessment.js @@ -1,12 +1,14 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { validateEntity } = require('../validators/entity-validator.js'); -const _ = require('lodash'); -const { ChallengeToBeNeutralizedNotFoundError, ChallengeToBeDeneutralizedNotFoundError } = require('../errors.js'); -const AnswerStatus = require('./AnswerStatus.js'); -const NeutralizationAttempt = require('./NeutralizationAttempt.js'); -const CertificationAnswerStatusChangeAttempt = require('./CertificationAnswerStatusChangeAttempt.js'); +import { validateEntity } from '../validators/entity-validator.js'; +import _ from 'lodash'; + +import { ChallengeToBeNeutralizedNotFoundError, ChallengeToBeDeneutralizedNotFoundError } from '../errors.js'; + +import { AnswerStatus } from './AnswerStatus.js'; +import { NeutralizationAttempt } from './NeutralizationAttempt.js'; +import { CertificationAnswerStatusChangeAttempt } from './CertificationAnswerStatusChangeAttempt.js'; const states = { COMPLETED: 'completed', @@ -169,4 +171,4 @@ function _isAnswerKoOrSkippedOrPartially(answerStatus) { CertificationAssessment.states = states; -module.exports = CertificationAssessment; +export { CertificationAssessment, states }; diff --git a/api/lib/domain/models/CertificationAssessmentScore.js b/api/lib/domain/models/CertificationAssessmentScore.js index 09e0dda337e..2a39b958432 100644 --- a/api/lib/domain/models/CertificationAssessmentScore.js +++ b/api/lib/domain/models/CertificationAssessmentScore.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const { status } = require('./AssessmentResult.js'); +import _ from 'lodash'; +import { status } from './AssessmentResult.js'; class CertificationAssessmentScore { constructor({ @@ -35,5 +35,6 @@ class CertificationAssessmentScore { } } -module.exports = CertificationAssessmentScore; -module.exports.statuses = status; +CertificationAssessmentScore.statuses = status; + +export { CertificationAssessmentScore, status as statuses }; diff --git a/api/lib/domain/models/CertificationAttestation.js b/api/lib/domain/models/CertificationAttestation.js index e3d22efdd47..43686be3dbd 100644 --- a/api/lib/domain/models/CertificationAttestation.js +++ b/api/lib/domain/models/CertificationAttestation.js @@ -46,4 +46,4 @@ class CertificationAttestation { } } -module.exports = CertificationAttestation; +export { CertificationAttestation }; diff --git a/api/lib/domain/models/CertificationCandidate.js b/api/lib/domain/models/CertificationCandidate.js index d8f3c89454d..1a53a967a85 100644 --- a/api/lib/domain/models/CertificationCandidate.js +++ b/api/lib/domain/models/CertificationCandidate.js @@ -1,14 +1,16 @@ -const isNil = require('lodash/isNil'); -const endsWith = require('lodash/endsWith'); -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import lodash from 'lodash'; + +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { +const { isNil, endsWith } = lodash; +import { InvalidCertificationCandidate, CertificationCandidatePersonalInfoFieldMissingError, CertificationCandidatePersonalInfoWrongFormat, -} = require('../errors.js'); -const { CERTIFICATION_CANDIDATES_ERRORS } = require('../constants/certification-candidates-errors'); +} from '../errors.js'; + +import { CERTIFICATION_CANDIDATES_ERRORS } from '../constants/certification-candidates-errors.js'; const BILLING_MODES = { FREE: 'FREE', @@ -258,4 +260,4 @@ class CertificationCandidate { CertificationCandidate.BILLING_MODES = BILLING_MODES; -module.exports = CertificationCandidate; +export { CertificationCandidate }; diff --git a/api/lib/domain/models/CertificationCandidateForSupervising.js b/api/lib/domain/models/CertificationCandidateForSupervising.js index 8edda9e4172..f3a3ab70192 100644 --- a/api/lib/domain/models/CertificationCandidateForSupervising.js +++ b/api/lib/domain/models/CertificationCandidateForSupervising.js @@ -1,5 +1,6 @@ -const isNil = require('lodash/isNil'); +import lodash from 'lodash'; +const { isNil } = lodash; class CertificationCandidateForSupervising { constructor({ id, @@ -41,4 +42,4 @@ class CertificationCandidateForSupervising { } } -module.exports = CertificationCandidateForSupervising; +export { CertificationCandidateForSupervising }; diff --git a/api/lib/domain/models/CertificationCenter.js b/api/lib/domain/models/CertificationCenter.js index 847e40e3393..ba1194c95ac 100644 --- a/api/lib/domain/models/CertificationCenter.js +++ b/api/lib/domain/models/CertificationCenter.js @@ -1,4 +1,4 @@ -const { CERTIFICATION_CENTER_TYPES } = require('../constants.js'); +import { CERTIFICATION_CENTER_TYPES } from '../constants.js'; class CertificationCenter { constructor({ id, name, externalId, type, createdAt, updatedAt, habilitations = [] } = {}) { @@ -23,6 +23,6 @@ class CertificationCenter { return this.habilitations.some((habilitation) => habilitation.key === key); } } +CertificationCenter.types = CERTIFICATION_CENTER_TYPES; -module.exports = CertificationCenter; -module.exports.types = CERTIFICATION_CENTER_TYPES; +export { CertificationCenter, CERTIFICATION_CENTER_TYPES as types }; diff --git a/api/lib/domain/models/CertificationCenterForAdmin.js b/api/lib/domain/models/CertificationCenterForAdmin.js index 23e5c1aba15..13adf52f0ca 100644 --- a/api/lib/domain/models/CertificationCenterForAdmin.js +++ b/api/lib/domain/models/CertificationCenterForAdmin.js @@ -1,4 +1,4 @@ -const { CERTIFICATION_CENTER_TYPES } = require('../constants.js'); +import { CERTIFICATION_CENTER_TYPES } from '../constants.js'; class CertificationCenterForAdmin { constructor({ @@ -34,5 +34,6 @@ class CertificationCenterForAdmin { } } -module.exports = CertificationCenterForAdmin; -module.exports.types = CERTIFICATION_CENTER_TYPES; +CertificationCenterForAdmin.types = CERTIFICATION_CENTER_TYPES; + +export { CertificationCenterForAdmin, CERTIFICATION_CENTER_TYPES as types }; diff --git a/api/lib/domain/models/CertificationCenterInvitation.js b/api/lib/domain/models/CertificationCenterInvitation.js index f313e4559a8..a731a90aec2 100644 --- a/api/lib/domain/models/CertificationCenterInvitation.js +++ b/api/lib/domain/models/CertificationCenterInvitation.js @@ -1,8 +1,8 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { validateEntity } = require('../validators/entity-validator.js'); -const randomString = require('randomstring'); +import { validateEntity } from '../validators/entity-validator.js'; +import randomString from 'randomstring'; const statuses = { PENDING: 'pending', @@ -67,4 +67,4 @@ class CertificationCenterInvitation { CertificationCenterInvitation.StatusType = statuses; -module.exports = CertificationCenterInvitation; +export { CertificationCenterInvitation }; diff --git a/api/lib/domain/models/CertificationCenterInvitedUser.js b/api/lib/domain/models/CertificationCenterInvitedUser.js index 5742b7da879..c066c975c6c 100644 --- a/api/lib/domain/models/CertificationCenterInvitedUser.js +++ b/api/lib/domain/models/CertificationCenterInvitedUser.js @@ -1,5 +1,5 @@ -const { NotFoundError, AlreadyAcceptedOrCancelledInvitationError } = require('../errors.js'); -const CertificationCenterInvitation = require('./CertificationCenterInvitation.js'); +import { NotFoundError, AlreadyAcceptedOrCancelledInvitationError } from '../errors.js'; +import { CertificationCenterInvitation } from './CertificationCenterInvitation.js'; class CertificationCenterInvitedUser { constructor({ userId, invitation, status } = {}) { @@ -23,4 +23,4 @@ class CertificationCenterInvitedUser { } } -module.exports = CertificationCenterInvitedUser; +export { CertificationCenterInvitedUser }; diff --git a/api/lib/domain/models/CertificationCenterMembership.js b/api/lib/domain/models/CertificationCenterMembership.js index deb42f65d83..01d6b1838a2 100644 --- a/api/lib/domain/models/CertificationCenterMembership.js +++ b/api/lib/domain/models/CertificationCenterMembership.js @@ -9,4 +9,4 @@ class CertificationCenterMembership { } } -module.exports = CertificationCenterMembership; +export { CertificationCenterMembership }; diff --git a/api/lib/domain/models/CertificationChallenge.js b/api/lib/domain/models/CertificationChallenge.js index 85cd880f3b2..43ca3c8de1f 100644 --- a/api/lib/domain/models/CertificationChallenge.js +++ b/api/lib/domain/models/CertificationChallenge.js @@ -52,4 +52,4 @@ class CertificationChallenge { } } -module.exports = CertificationChallenge; +export { CertificationChallenge }; diff --git a/api/lib/domain/models/CertificationChallengeWithType.js b/api/lib/domain/models/CertificationChallengeWithType.js index 80f0b02dd8d..6fb2356b7ce 100644 --- a/api/lib/domain/models/CertificationChallengeWithType.js +++ b/api/lib/domain/models/CertificationChallengeWithType.js @@ -1,4 +1,4 @@ -const { Type } = require('./Challenge.js'); +import { Type } from './Challenge.js'; class CertificationChallengeWithType { constructor({ @@ -39,4 +39,4 @@ class CertificationChallengeWithType { } } -module.exports = CertificationChallengeWithType; +export { CertificationChallengeWithType }; diff --git a/api/lib/domain/models/CertificationContract.js b/api/lib/domain/models/CertificationContract.js index 033b6b2ce33..2f658db6428 100644 --- a/api/lib/domain/models/CertificationContract.js +++ b/api/lib/domain/models/CertificationContract.js @@ -1,5 +1,5 @@ -const { CertificationComputeError } = require('../../../lib/domain/errors.js'); -const _ = require('lodash'); +import { CertificationComputeError } from '../../../lib/domain/errors.js'; +import _ from 'lodash'; class CertificationContract { /* PUBLIC INTERFACE */ @@ -56,4 +56,4 @@ class CertificationContract { } } -module.exports = CertificationContract; +export { CertificationContract }; diff --git a/api/lib/domain/models/CertificationCourse.js b/api/lib/domain/models/CertificationCourse.js index 5568ff6582b..9131e8a8359 100644 --- a/api/lib/domain/models/CertificationCourse.js +++ b/api/lib/domain/models/CertificationCourse.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import _ from 'lodash'; +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { EntityValidationError } = require('../errors.js'); +import { EntityValidationError } from '../errors.js'; const ABORT_REASONS = ['candidate', 'technical']; const cpfImportStatus = { @@ -260,4 +260,4 @@ function _sanitizedString(string) { CertificationCourse.cpfImportStatus = cpfImportStatus; -module.exports = CertificationCourse; +export { CertificationCourse, cpfImportStatus }; diff --git a/api/lib/domain/models/CertificationCpfCity.js b/api/lib/domain/models/CertificationCpfCity.js index 6e4f5cfbae4..47692c2fb55 100644 --- a/api/lib/domain/models/CertificationCpfCity.js +++ b/api/lib/domain/models/CertificationCpfCity.js @@ -8,4 +8,4 @@ class CertificationCpfCity { } } -module.exports = CertificationCpfCity; +export { CertificationCpfCity }; diff --git a/api/lib/domain/models/CertificationCpfCountry.js b/api/lib/domain/models/CertificationCpfCountry.js index 38636600df8..e1609ed7ca7 100644 --- a/api/lib/domain/models/CertificationCpfCountry.js +++ b/api/lib/domain/models/CertificationCpfCountry.js @@ -16,4 +16,4 @@ class CertificationCpfCountry { } } -module.exports = CertificationCpfCountry; +export { CertificationCpfCountry }; diff --git a/api/lib/domain/models/CertificationIssueReport.js b/api/lib/domain/models/CertificationIssueReport.js index 406381286dc..d57cac78448 100644 --- a/api/lib/domain/models/CertificationIssueReport.js +++ b/api/lib/domain/models/CertificationIssueReport.js @@ -1,17 +1,19 @@ -const Joi = require('joi'); -const { +import Joi from 'joi'; + +import { InvalidCertificationIssueReportForSaving, DeprecatedCertificationIssueReportCategoryError, DeprecatedCertificationIssueReportSubcategoryError, -} = require('../errors.js'); -const { - CertificationIssueReportCategories, +} from '../errors.js'; + +import { + CertificationIssueReportCategory as CertificationIssueReportCategories, CertificationIssueReportSubcategories, ImpactfulCategories, ImpactfulSubcategories, DeprecatedCategories, DeprecatedSubcategories, -} = require('./CertificationIssueReportCategory.js'); +} from './CertificationIssueReportCategory.js'; const categoryNonBlockingTechnicalIssueJoiSchema = Joi.object({ certificationCourseId: Joi.number().required().empty(null), @@ -180,7 +182,7 @@ class CertificationIssueReport { } } -module.exports = CertificationIssueReport; +export { CertificationIssueReport }; function _isImpactful({ category, subcategory }) { return ImpactfulCategories.includes(category) || ImpactfulSubcategories.includes(subcategory); diff --git a/api/lib/domain/models/CertificationIssueReportCategory.js b/api/lib/domain/models/CertificationIssueReportCategory.js index f30f4b0ec5f..e84a346e4dc 100644 --- a/api/lib/domain/models/CertificationIssueReportCategory.js +++ b/api/lib/domain/models/CertificationIssueReportCategory.js @@ -63,8 +63,8 @@ const DeprecatedSubcategories = [ CertificationIssueReportSubcategories.LEFT_EXAM_ROOM, ]; -module.exports = { - CertificationIssueReportCategories, +export { + CertificationIssueReportCategories as CertificationIssueReportCategory, CertificationIssueReportSubcategories, ImpactfulCategories, ImpactfulSubcategories, diff --git a/api/lib/domain/models/CertificationIssueReportResolutionAttempt.js b/api/lib/domain/models/CertificationIssueReportResolutionAttempt.js index fa7a4daf17e..7ec5ce29fce 100644 --- a/api/lib/domain/models/CertificationIssueReportResolutionAttempt.js +++ b/api/lib/domain/models/CertificationIssueReportResolutionAttempt.js @@ -1,4 +1,4 @@ -module.exports = class CertificationIssueReportResolutionAttempt { +class CertificationIssueReportResolutionAttempt { constructor(status) { this.status = status; } @@ -18,7 +18,9 @@ module.exports = class CertificationIssueReportResolutionAttempt { isResolvedWithEffect() { return this.status === ResolutionStatus.RESOLVED_WITH_EFFECT; } -}; +} + +export { CertificationIssueReportResolutionAttempt }; const ResolutionStatus = { RESOLVED_WITH_EFFECT: 'RESOLVED_WITH_EFFECT', diff --git a/api/lib/domain/models/CertificationIssueReportResolutionStrategies.js b/api/lib/domain/models/CertificationIssueReportResolutionStrategies.js index 5fe7cc21468..1ae1d5c462e 100644 --- a/api/lib/domain/models/CertificationIssueReportResolutionStrategies.js +++ b/api/lib/domain/models/CertificationIssueReportResolutionStrategies.js @@ -1,5 +1,5 @@ -const CertificationIssueReportResolutionAttempt = require('./CertificationIssueReportResolutionAttempt.js'); -const { CertificationIssueReportSubcategories } = require('./CertificationIssueReportCategory.js'); +import { CertificationIssueReportResolutionAttempt } from './CertificationIssueReportResolutionAttempt.js'; +import { CertificationIssueReportSubcategories } from './CertificationIssueReportCategory.js'; async function neutralizeIfTimedChallengeStrategy({ certificationIssueReport, @@ -163,7 +163,7 @@ class CertificationIssueReportResolutionStrategies { } } -module.exports = { +export { neutralizeWithoutCheckingStrategy, neutralizeIfImageOrEmbedStrategy, neutralizeIfAttachmentStrategy, diff --git a/api/lib/domain/models/CertificationOfficer.js b/api/lib/domain/models/CertificationOfficer.js index f91d380fe0c..45830afb75c 100644 --- a/api/lib/domain/models/CertificationOfficer.js +++ b/api/lib/domain/models/CertificationOfficer.js @@ -10,4 +10,4 @@ class CertificationOfficer { } } -module.exports = CertificationOfficer; +export { CertificationOfficer }; diff --git a/api/lib/domain/models/CertificationReport.js b/api/lib/domain/models/CertificationReport.js index f56655b96fc..758a1a86d58 100644 --- a/api/lib/domain/models/CertificationReport.js +++ b/api/lib/domain/models/CertificationReport.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); -const Joi = require('joi'); +import _ from 'lodash'; +import Joi from 'joi'; -const { InvalidCertificationReportForFinalization } = require('../errors.js'); +import { InvalidCertificationReportForFinalization } from '../errors.js'; const NO_EXAMINER_COMMENT = null; @@ -74,5 +74,6 @@ class CertificationReport { } } -module.exports = CertificationReport; -module.exports.NO_EXAMINER_COMMENT = NO_EXAMINER_COMMENT; +CertificationReport.NO_EXAMINER_COMMENT = NO_EXAMINER_COMMENT; + +export { CertificationReport, NO_EXAMINER_COMMENT }; diff --git a/api/lib/domain/models/CertificationResult.js b/api/lib/domain/models/CertificationResult.js index 48bf6e5a33b..ec86f7e6818 100644 --- a/api/lib/domain/models/CertificationResult.js +++ b/api/lib/domain/models/CertificationResult.js @@ -1,6 +1,6 @@ -const _ = require('lodash'); -const CompetenceMark = require('./CompetenceMark.js'); -const ComplementaryCertificationCourseResult = require('./ComplementaryCertificationCourseResult.js'); +import _ from 'lodash'; +import { CompetenceMark } from './CompetenceMark.js'; +import { ComplementaryCertificationCourseResult } from './ComplementaryCertificationCourseResult.js'; const status = { REJECTED: 'rejected', @@ -153,4 +153,4 @@ class CertificationResult { CertificationResult.status = status; CertificationResult.emitters = emitters; -module.exports = CertificationResult; +export { CertificationResult }; diff --git a/api/lib/domain/models/CertifiedLevel.js b/api/lib/domain/models/CertifiedLevel.js index c23692ee543..f2f5c8f54ba 100644 --- a/api/lib/domain/models/CertifiedLevel.js +++ b/api/lib/domain/models/CertifiedLevel.js @@ -1,5 +1,5 @@ -const { UNCERTIFIED_LEVEL } = require('../constants.js'); -const { DomainError } = require('../errors.js'); +import { UNCERTIFIED_LEVEL } from '../constants.js'; +import { DomainError } from '../errors.js'; class CertifiedLevel { constructor({ value, status }) { @@ -57,9 +57,7 @@ const statuses = { VALIDATED: 'VALIDATED', }; -module.exports = { - CertifiedLevel, -}; +export { CertifiedLevel }; class Rule { constructor({ diff --git a/api/lib/domain/models/CertifiedScore.js b/api/lib/domain/models/CertifiedScore.js index 64d391cb431..bbaeae3b5cd 100644 --- a/api/lib/domain/models/CertifiedScore.js +++ b/api/lib/domain/models/CertifiedScore.js @@ -1,4 +1,4 @@ -const { PIX_COUNT_BY_LEVEL } = require('../constants.js'); +import { PIX_COUNT_BY_LEVEL } from '../constants.js'; class CertifiedScore { constructor(value) { @@ -15,6 +15,4 @@ class CertifiedScore { } } -module.exports = { - CertifiedScore, -}; +export { CertifiedScore }; diff --git a/api/lib/domain/models/Challenge.js b/api/lib/domain/models/Challenge.js index 8207b88a09d..56a5808d7bf 100644 --- a/api/lib/domain/models/Challenge.js +++ b/api/lib/domain/models/Challenge.js @@ -1,10 +1,10 @@ -const _ = require('lodash'); -const Validator = require('./Validator.js'); -const ValidatorQCM = require('./ValidatorQCM.js'); -const ValidatorQCU = require('./ValidatorQCU.js'); -const ValidatorQROC = require('./ValidatorQROC.js'); -const ValidatorQROCMDep = require('./ValidatorQROCMDep.js'); -const ValidatorQROCMInd = require('./ValidatorQROCMInd.js'); +import _ from 'lodash'; +import { Validator } from './Validator.js'; +import { ValidatorQCM } from './ValidatorQCM.js'; +import { ValidatorQCU } from './ValidatorQCU.js'; +import { ValidatorQROC } from './ValidatorQROC.js'; +import { ValidatorQROCMDep } from './ValidatorQROCMDep.js'; +import { ValidatorQROCMInd } from './ValidatorQROCMInd.js'; const ChallengeType = Object.freeze({ QCU: 'QCU', @@ -168,4 +168,4 @@ class Challenge { Challenge.Type = ChallengeType; -module.exports = Challenge; +export { Challenge, ChallengeType as Type }; diff --git a/api/lib/domain/models/Competence.js b/api/lib/domain/models/Competence.js index 7526f4c24d9..a7affb82672 100644 --- a/api/lib/domain/models/Competence.js +++ b/api/lib/domain/models/Competence.js @@ -37,4 +37,4 @@ class Competence { } } -module.exports = Competence; +export { Competence }; diff --git a/api/lib/domain/models/CompetenceEvaluation.js b/api/lib/domain/models/CompetenceEvaluation.js index 480129f9f2b..72ae082df0c 100644 --- a/api/lib/domain/models/CompetenceEvaluation.js +++ b/api/lib/domain/models/CompetenceEvaluation.js @@ -20,4 +20,4 @@ class CompetenceEvaluation { CompetenceEvaluation.statuses = statuses; -module.exports = CompetenceEvaluation; +export { CompetenceEvaluation }; diff --git a/api/lib/domain/models/CompetenceMark.js b/api/lib/domain/models/CompetenceMark.js index de94fd203a2..f5e8ffb19c3 100644 --- a/api/lib/domain/models/CompetenceMark.js +++ b/api/lib/domain/models/CompetenceMark.js @@ -1,5 +1,5 @@ -const Joi = require('joi'); -const { validateEntity } = require('../validators/entity-validator.js'); +import Joi from 'joi'; +import { validateEntity } from '../validators/entity-validator.js'; const schema = Joi.object({ id: Joi.number().integer().optional(), @@ -27,4 +27,4 @@ class CompetenceMark { } } -module.exports = CompetenceMark; +export { CompetenceMark }; diff --git a/api/lib/domain/models/CompetenceResult.js b/api/lib/domain/models/CompetenceResult.js index 8bbc6e774ba..5b5a0a1a911 100644 --- a/api/lib/domain/models/CompetenceResult.js +++ b/api/lib/domain/models/CompetenceResult.js @@ -28,4 +28,4 @@ class CompetenceResult { } } -module.exports = CompetenceResult; +export { CompetenceResult }; diff --git a/api/lib/domain/models/CompetenceTree.js b/api/lib/domain/models/CompetenceTree.js index c0c5910b12e..3847d49f18b 100644 --- a/api/lib/domain/models/CompetenceTree.js +++ b/api/lib/domain/models/CompetenceTree.js @@ -5,4 +5,4 @@ class CompetenceTree { } } -module.exports = CompetenceTree; +export { CompetenceTree }; diff --git a/api/lib/domain/models/ComplementaryCertification.js b/api/lib/domain/models/ComplementaryCertification.js index c778a6ac6a1..ad62efd87da 100644 --- a/api/lib/domain/models/ComplementaryCertification.js +++ b/api/lib/domain/models/ComplementaryCertification.js @@ -16,4 +16,4 @@ ComplementaryCertification.CLEA = CLEA; ComplementaryCertification.PIX_PLUS_EDU_1ER_DEGRE = PIX_PLUS_EDU_1ER_DEGRE; ComplementaryCertification.PIX_PLUS_EDU_2ND_DEGRE = PIX_PLUS_EDU_2ND_DEGRE; -module.exports = ComplementaryCertification; +export { ComplementaryCertification, PIX_PLUS_DROIT, CLEA, PIX_PLUS_EDU_1ER_DEGRE, PIX_PLUS_EDU_2ND_DEGRE }; diff --git a/api/lib/domain/models/ComplementaryCertificationCourse.js b/api/lib/domain/models/ComplementaryCertificationCourse.js index 3c73c4169e2..0dc8e837f45 100644 --- a/api/lib/domain/models/ComplementaryCertificationCourse.js +++ b/api/lib/domain/models/ComplementaryCertificationCourse.js @@ -7,4 +7,4 @@ class ComplementaryCertificationCourse { } } -module.exports = ComplementaryCertificationCourse; +export { ComplementaryCertificationCourse }; diff --git a/api/lib/domain/models/ComplementaryCertificationCourseResult.js b/api/lib/domain/models/ComplementaryCertificationCourseResult.js index cfa2bf76aa3..908a7c39349 100644 --- a/api/lib/domain/models/ComplementaryCertificationCourseResult.js +++ b/api/lib/domain/models/ComplementaryCertificationCourseResult.js @@ -55,4 +55,4 @@ class ComplementaryCertificationCourseResult { ComplementaryCertificationCourseResult.sources = sources; -module.exports = ComplementaryCertificationCourseResult; +export { ComplementaryCertificationCourseResult, sources }; diff --git a/api/lib/domain/models/ComplementaryCertificationForSupervising.js b/api/lib/domain/models/ComplementaryCertificationForSupervising.js index 09a03fdf212..e1986187f4d 100644 --- a/api/lib/domain/models/ComplementaryCertificationForSupervising.js +++ b/api/lib/domain/models/ComplementaryCertificationForSupervising.js @@ -6,4 +6,4 @@ class ComplementaryCertificationForSupervising { } } -module.exports = ComplementaryCertificationForSupervising; +export { ComplementaryCertificationForSupervising }; diff --git a/api/lib/domain/models/ComplementaryCertificationHabilitation.js b/api/lib/domain/models/ComplementaryCertificationHabilitation.js index 3d4c8837dc8..01c75ad0ed1 100644 --- a/api/lib/domain/models/ComplementaryCertificationHabilitation.js +++ b/api/lib/domain/models/ComplementaryCertificationHabilitation.js @@ -6,4 +6,4 @@ class ComplementaryCertificationHabilitation { } } -module.exports = ComplementaryCertificationHabilitation; +export { ComplementaryCertificationHabilitation }; diff --git a/api/lib/domain/models/ComplementaryCertificationScoringCriteria.js b/api/lib/domain/models/ComplementaryCertificationScoringCriteria.js index 9e580938139..ca42199568a 100644 --- a/api/lib/domain/models/ComplementaryCertificationScoringCriteria.js +++ b/api/lib/domain/models/ComplementaryCertificationScoringCriteria.js @@ -14,4 +14,4 @@ class ComplementaryCertificationScoringCriteria { } } -module.exports = ComplementaryCertificationScoringCriteria; +export { ComplementaryCertificationScoringCriteria }; diff --git a/api/lib/domain/models/ComplementaryCertificationScoringWithComplementaryReferential.js b/api/lib/domain/models/ComplementaryCertificationScoringWithComplementaryReferential.js index ecb907a53a1..85e532faf99 100644 --- a/api/lib/domain/models/ComplementaryCertificationScoringWithComplementaryReferential.js +++ b/api/lib/domain/models/ComplementaryCertificationScoringWithComplementaryReferential.js @@ -1,5 +1,5 @@ -const ComplementaryCertificationCourseResult = require('./ComplementaryCertificationCourseResult.js'); -const PartnerCertificationScoring = require('./PartnerCertificationScoring.js'); +import { ComplementaryCertificationCourseResult } from './ComplementaryCertificationCourseResult.js'; +import { PartnerCertificationScoring } from './PartnerCertificationScoring.js'; class ComplementaryCertificationScoringWithComplementaryReferential extends PartnerCertificationScoring { constructor({ @@ -25,4 +25,4 @@ class ComplementaryCertificationScoringWithComplementaryReferential extends Part } } -module.exports = ComplementaryCertificationScoringWithComplementaryReferential; +export { ComplementaryCertificationScoringWithComplementaryReferential }; diff --git a/api/lib/domain/models/ComplementaryCertificationScoringWithoutComplementaryReferential.js b/api/lib/domain/models/ComplementaryCertificationScoringWithoutComplementaryReferential.js index 746d6f2eb5d..9bdb5068b27 100644 --- a/api/lib/domain/models/ComplementaryCertificationScoringWithoutComplementaryReferential.js +++ b/api/lib/domain/models/ComplementaryCertificationScoringWithoutComplementaryReferential.js @@ -1,4 +1,4 @@ -const PartnerCertificationScoring = require('./PartnerCertificationScoring.js'); +import { PartnerCertificationScoring } from './PartnerCertificationScoring.js'; class ComplementaryCertificationScoringWithoutComplementaryReferential extends PartnerCertificationScoring { constructor({ @@ -34,4 +34,4 @@ class ComplementaryCertificationScoringWithoutComplementaryReferential extends P } } -module.exports = ComplementaryCertificationScoringWithoutComplementaryReferential; +export { ComplementaryCertificationScoringWithoutComplementaryReferential }; diff --git a/api/lib/domain/models/Correction.js b/api/lib/domain/models/Correction.js index 2a690c649e3..6e30c1f9071 100644 --- a/api/lib/domain/models/Correction.js +++ b/api/lib/domain/models/Correction.js @@ -9,4 +9,4 @@ class Correction { } } -module.exports = Correction; +export { Correction }; diff --git a/api/lib/domain/models/CorrectionBlockQROCMDep.js b/api/lib/domain/models/CorrectionBlockQROCMDep.js index 7b3da8291a0..d078aca0b33 100644 --- a/api/lib/domain/models/CorrectionBlockQROCMDep.js +++ b/api/lib/domain/models/CorrectionBlockQROCMDep.js @@ -1,4 +1,4 @@ -const Joi = require('joi'); +import Joi from 'joi'; class CorrectionBlockQROCMDep { /** @@ -60,4 +60,4 @@ class CorrectionBlockQROCMDep { } } -module.exports = CorrectionBlockQROCMDep; +export { CorrectionBlockQROCMDep }; diff --git a/api/lib/domain/models/Course.js b/api/lib/domain/models/Course.js index 31c634a15ab..67c377795e8 100644 --- a/api/lib/domain/models/Course.js +++ b/api/lib/domain/models/Course.js @@ -13,4 +13,4 @@ class Course { } } -module.exports = Course; +export { Course }; diff --git a/api/lib/domain/models/DataProtectionOfficer.js b/api/lib/domain/models/DataProtectionOfficer.js index 8d10e52462c..c3b771eff00 100644 --- a/api/lib/domain/models/DataProtectionOfficer.js +++ b/api/lib/domain/models/DataProtectionOfficer.js @@ -20,4 +20,4 @@ class DataProtectionOfficer { } } -module.exports = DataProtectionOfficer; +export { DataProtectionOfficer }; diff --git a/api/lib/domain/models/Division.js b/api/lib/domain/models/Division.js index 4f4f92240da..48da47210af 100644 --- a/api/lib/domain/models/Division.js +++ b/api/lib/domain/models/Division.js @@ -4,4 +4,4 @@ class Division { } } -module.exports = Division; +export { Division }; diff --git a/api/lib/domain/models/EmailModificationDemand.js b/api/lib/domain/models/EmailModificationDemand.js index fd9c073c9f9..664fb5d33f1 100644 --- a/api/lib/domain/models/EmailModificationDemand.js +++ b/api/lib/domain/models/EmailModificationDemand.js @@ -5,4 +5,4 @@ class EmailModificationDemand { } } -module.exports = EmailModificationDemand; +export { EmailModificationDemand }; diff --git a/api/lib/domain/models/EmailingAttempt.js b/api/lib/domain/models/EmailingAttempt.js index f1bbd928588..f7b6ef935e4 100644 --- a/api/lib/domain/models/EmailingAttempt.js +++ b/api/lib/domain/models/EmailingAttempt.js @@ -1,4 +1,4 @@ -module.exports = class EmailingAttempt { +class EmailingAttempt { static errorCode = { PROVIDER_ERROR: 'PROVIDER_ERROR', INVALID_DOMAIN: 'INVALID_DOMAIN', @@ -35,7 +35,9 @@ module.exports = class EmailingAttempt { static failure(email, errorCode = EmailingAttempt.errorCode.PROVIDER_ERROR, errorMessage) { return new EmailingAttempt(email, AttemptStatus.FAILURE, errorCode, errorMessage); } -}; +} + +export { EmailingAttempt }; const AttemptStatus = { SUCCESS: 'SUCCESS', diff --git a/api/lib/domain/models/Examiner.js b/api/lib/domain/models/Examiner.js index 6407aa727b6..d2a11a02980 100644 --- a/api/lib/domain/models/Examiner.js +++ b/api/lib/domain/models/Examiner.js @@ -1,6 +1,6 @@ -const logger = require('../../infrastructure/logger.js'); -const Answer = require('./Answer.js'); -const AnswerStatus = require('./AnswerStatus.js'); +import { logger } from '../../infrastructure/logger.js'; +import { Answer } from './Answer.js'; +import { AnswerStatus } from './AnswerStatus.js'; /** * Traduction: Correcteur @@ -76,4 +76,4 @@ class Examiner { } } -module.exports = Examiner; +export { Examiner }; diff --git a/api/lib/domain/models/FinalizedSession.js b/api/lib/domain/models/FinalizedSession.js index 9d6a860f9c8..8f7ffd41917 100644 --- a/api/lib/domain/models/FinalizedSession.js +++ b/api/lib/domain/models/FinalizedSession.js @@ -1,4 +1,4 @@ -module.exports = class FinalizedSession { +class FinalizedSession { constructor({ sessionId, finalizedAt, @@ -57,7 +57,9 @@ module.exports = class FinalizedSession { this.isPublishable = false; this.assignedCertificationOfficerName = certificationOfficerName; } -}; +} + +export { FinalizedSession }; function _hasNoIssueReportsWithRequiredAction(juryCertificationSummaries) { return !juryCertificationSummaries.some((summary) => summary.isActionRequired()); diff --git a/api/lib/domain/models/FlashAssessmentAlgorithm.js b/api/lib/domain/models/FlashAssessmentAlgorithm.js index 51ef405d5fc..7aebbab7fa6 100644 --- a/api/lib/domain/models/FlashAssessmentAlgorithm.js +++ b/api/lib/domain/models/FlashAssessmentAlgorithm.js @@ -1,5 +1,5 @@ -const { AssessmentEndedError } = require('../errors'); -const { getPossibleNextChallenges } = require('../services/algorithm-methods/flash'); +import { AssessmentEndedError } from '../errors.js'; +import { getPossibleNextChallenges } from '../services/algorithm-methods/flash.js'; class FlashAssessmentAlgorithm { getPossibleNextChallenges({ allAnswers, challenges, estimatedLevel }) { @@ -17,4 +17,4 @@ class FlashAssessmentAlgorithm { } } -module.exports = FlashAssessmentAlgorithm; +export { FlashAssessmentAlgorithm }; diff --git a/api/lib/domain/models/Framework.js b/api/lib/domain/models/Framework.js index b4910711d4d..4649d7e07ba 100644 --- a/api/lib/domain/models/Framework.js +++ b/api/lib/domain/models/Framework.js @@ -6,4 +6,4 @@ class Framework { } } -module.exports = Framework; +export { Framework }; diff --git a/api/lib/domain/models/Group.js b/api/lib/domain/models/Group.js index 99108d6dade..1714852dbeb 100644 --- a/api/lib/domain/models/Group.js +++ b/api/lib/domain/models/Group.js @@ -4,4 +4,4 @@ class Group { } } -module.exports = Group; +export { Group }; diff --git a/api/lib/domain/models/Hint.js b/api/lib/domain/models/Hint.js index 281921a6cb7..5e134de45f3 100644 --- a/api/lib/domain/models/Hint.js +++ b/api/lib/domain/models/Hint.js @@ -5,4 +5,4 @@ class Hint { } } -module.exports = Hint; +export { Hint }; diff --git a/api/lib/domain/models/JuryCertification.js b/api/lib/domain/models/JuryCertification.js index e54bf3f1790..f6793f745db 100644 --- a/api/lib/domain/models/JuryCertification.js +++ b/api/lib/domain/models/JuryCertification.js @@ -1,4 +1,4 @@ -const CompetenceMark = require('./CompetenceMark.js'); +import { CompetenceMark } from './CompetenceMark.js'; class JuryCertification { constructor({ @@ -102,4 +102,4 @@ class JuryCertification { } } -module.exports = JuryCertification; +export { JuryCertification }; diff --git a/api/lib/domain/models/JurySession.js b/api/lib/domain/models/JurySession.js index a52cebda4ff..7b5d890996d 100644 --- a/api/lib/domain/models/JurySession.js +++ b/api/lib/domain/models/JurySession.js @@ -1,4 +1,4 @@ -const { statuses } = require('./Session.js'); +import { statuses } from './Session.js'; class JurySession { constructor({ @@ -63,5 +63,4 @@ class JurySession { } } -module.exports = JurySession; -module.exports.statuses = statuses; +export { JurySession, statuses }; diff --git a/api/lib/domain/models/KnowledgeElement.js b/api/lib/domain/models/KnowledgeElement.js index fb35df6fbc6..1280408fc1b 100644 --- a/api/lib/domain/models/KnowledgeElement.js +++ b/api/lib/domain/models/KnowledgeElement.js @@ -1,6 +1,6 @@ -const Skill = require('../models/Skill.js'); -const _ = require('lodash'); -const moment = require('moment'); +import { Skill } from '../models/Skill.js'; +import _ from 'lodash'; +import moment from 'moment'; const statuses = { VALIDATED: 'validated', @@ -201,4 +201,4 @@ function _createKnowledgeElement({ answer, skill, userId, status, source }) { }); } -module.exports = KnowledgeElement; +export { KnowledgeElement }; diff --git a/api/lib/domain/models/LearningContent.js b/api/lib/domain/models/LearningContent.js index 8467b341e36..8b92043ac2f 100644 --- a/api/lib/domain/models/LearningContent.js +++ b/api/lib/domain/models/LearningContent.js @@ -1,4 +1,4 @@ -module.exports = class LearningContent { +class LearningContent { constructor(frameworks) { this.frameworks = frameworks; } @@ -55,4 +55,6 @@ module.exports = class LearningContent { if (!frameworkId) return ''; return this.findFramework(frameworkId).name; } -}; +} + +export { LearningContent }; diff --git a/api/lib/domain/models/Membership.js b/api/lib/domain/models/Membership.js index 71c18554eef..ade0eafe724 100644 --- a/api/lib/domain/models/Membership.js +++ b/api/lib/domain/models/Membership.js @@ -1,4 +1,4 @@ -const { InvalidMembershipOrganizationRoleError } = require('../errors.js'); +import { InvalidMembershipOrganizationRoleError } from '../errors.js'; const roles = { ADMIN: 'ADMIN', MEMBER: 'MEMBER', @@ -27,4 +27,4 @@ class Membership { Membership.roles = roles; -module.exports = Membership; +export { Membership, roles }; diff --git a/api/lib/domain/models/NeutralizationAttempt.js b/api/lib/domain/models/NeutralizationAttempt.js index d24953d3752..0298c9ef204 100644 --- a/api/lib/domain/models/NeutralizationAttempt.js +++ b/api/lib/domain/models/NeutralizationAttempt.js @@ -1,4 +1,4 @@ -module.exports = class NeutralizationAttempt { +class NeutralizationAttempt { constructor(questionNumber, status) { this.questionNumber = questionNumber; this.status = status; @@ -27,7 +27,9 @@ module.exports = class NeutralizationAttempt { wasSkipped() { return this.status === NeutralizationStatus.SKIPPED; } -}; +} + +export { NeutralizationAttempt }; const NeutralizationStatus = { NEUTRALIZED: 'NEUTRALIZED', diff --git a/api/lib/domain/models/Organization.js b/api/lib/domain/models/Organization.js index b11295b8689..7ba63f23ad2 100644 --- a/api/lib/domain/models/Organization.js +++ b/api/lib/domain/models/Organization.js @@ -1,4 +1,4 @@ -const Tag = require('./Tag.js'); +import { Tag } from './Tag.js'; const types = { SCO: 'SCO', @@ -88,4 +88,4 @@ class Organization { Organization.types = types; Organization.defaultValues = defaultValues; -module.exports = Organization; +export { Organization, types }; diff --git a/api/lib/domain/models/OrganizationInvitation.js b/api/lib/domain/models/OrganizationInvitation.js index 680972ff331..cc38f8c81ed 100644 --- a/api/lib/domain/models/OrganizationInvitation.js +++ b/api/lib/domain/models/OrganizationInvitation.js @@ -1,7 +1,7 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { validateEntity } = require('../validators/entity-validator.js'); +import { validateEntity } from '../validators/entity-validator.js'; const statuses = { PENDING: 'pending', @@ -71,4 +71,4 @@ class OrganizationInvitation { OrganizationInvitation.StatusType = statuses; -module.exports = OrganizationInvitation; +export { OrganizationInvitation, statuses }; diff --git a/api/lib/domain/models/OrganizationInvitedUser.js b/api/lib/domain/models/OrganizationInvitedUser.js index c4d9c1a7a65..e96184a65a7 100644 --- a/api/lib/domain/models/OrganizationInvitedUser.js +++ b/api/lib/domain/models/OrganizationInvitedUser.js @@ -1,7 +1,10 @@ -const { AlreadyExistingMembershipError } = require('../../domain/errors.js'); -const { NotFoundError, AlreadyAcceptedOrCancelledInvitationError } = require('../errors.js'); -const { roles } = require('./Membership.js'); -const OrganizationInvitation = require('./OrganizationInvitation.js'); +import { + AlreadyExistingMembershipError, + NotFoundError, + AlreadyAcceptedOrCancelledInvitationError, +} from '../../domain/errors.js'; +import { roles } from './Membership.js'; +import { OrganizationInvitation } from './OrganizationInvitation.js'; class OrganizationInvitedUser { constructor({ userId, invitation, currentRole, organizationHasMemberships, currentMembershipId, status } = {}) { @@ -42,4 +45,4 @@ class OrganizationInvitedUser { } } -module.exports = OrganizationInvitedUser; +export { OrganizationInvitedUser }; diff --git a/api/lib/domain/models/OrganizationLearner.js b/api/lib/domain/models/OrganizationLearner.js index e409ce7fa27..07db4e0ddd3 100644 --- a/api/lib/domain/models/OrganizationLearner.js +++ b/api/lib/domain/models/OrganizationLearner.js @@ -50,4 +50,4 @@ class OrganizationLearner { OrganizationLearner.STATUS = STATUS; -module.exports = OrganizationLearner; +export { OrganizationLearner }; diff --git a/api/lib/domain/models/OrganizationMemberIdentity.js b/api/lib/domain/models/OrganizationMemberIdentity.js index 3a8ba834c2f..7dba5a746c1 100644 --- a/api/lib/domain/models/OrganizationMemberIdentity.js +++ b/api/lib/domain/models/OrganizationMemberIdentity.js @@ -6,4 +6,4 @@ class OrganizationMemberIdentity { } } -module.exports = OrganizationMemberIdentity; +export { OrganizationMemberIdentity }; diff --git a/api/lib/domain/models/OrganizationPlacesLot.js b/api/lib/domain/models/OrganizationPlacesLot.js index 4fa0c01f986..5e613dafd99 100644 --- a/api/lib/domain/models/OrganizationPlacesLot.js +++ b/api/lib/domain/models/OrganizationPlacesLot.js @@ -1,5 +1,5 @@ -const categories = require('../constants/organization-places-categories.js'); -const validate = require('../validators/organization-places-lot-validator.js'); +import * as categories from '../constants/organization-places-categories.js'; +import { validate } from '../validators/organization-places-lot-validator.js'; const codeByCategories = { [categories.FREE_RATE]: categories.T0, @@ -23,4 +23,4 @@ class OrganizationPlacesLot { OrganizationPlacesLot.categories = categories; -module.exports = OrganizationPlacesLot; +export { OrganizationPlacesLot }; diff --git a/api/lib/domain/models/OrganizationTag.js b/api/lib/domain/models/OrganizationTag.js index 9ac7e483ef8..a63a7a681df 100644 --- a/api/lib/domain/models/OrganizationTag.js +++ b/api/lib/domain/models/OrganizationTag.js @@ -6,4 +6,4 @@ class OrganizationTag { } } -module.exports = OrganizationTag; +export { OrganizationTag }; diff --git a/api/lib/domain/models/OrganizationsToAttachToTargetProfile.js b/api/lib/domain/models/OrganizationsToAttachToTargetProfile.js index 7ce16953495..332e69fb91a 100644 --- a/api/lib/domain/models/OrganizationsToAttachToTargetProfile.js +++ b/api/lib/domain/models/OrganizationsToAttachToTargetProfile.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const { NoOrganizationToAttach } = require('../errors.js'); +import _ from 'lodash'; +import { NoOrganizationToAttach } from '../errors.js'; class OrganizationsToAttachToTargetProfile { constructor({ id }) { @@ -14,4 +14,4 @@ class OrganizationsToAttachToTargetProfile { } } -module.exports = OrganizationsToAttachToTargetProfile; +export { OrganizationsToAttachToTargetProfile }; diff --git a/api/lib/domain/models/ParticipantResultsShared.js b/api/lib/domain/models/ParticipantResultsShared.js index 899d568466f..292c8174796 100644 --- a/api/lib/domain/models/ParticipantResultsShared.js +++ b/api/lib/domain/models/ParticipantResultsShared.js @@ -1,6 +1,6 @@ -const KnowledgeElement = require('./KnowledgeElement.js'); -const { calculatePixScore } = require('../services/scoring/scoring-service.js'); -const { MAX_REACHABLE_PIX_BY_COMPETENCE } = require('../constants.js'); +import { KnowledgeElement } from './KnowledgeElement.js'; +import { calculatePixScore } from '../services/scoring/scoring-service.js'; +import { MAX_REACHABLE_PIX_BY_COMPETENCE } from '../constants.js'; const MAX_PIX_SCORE = MAX_REACHABLE_PIX_BY_COMPETENCE * 16; class ParticipantResultsShared { @@ -29,4 +29,4 @@ function _getValidatedKnowledgeElements(knowledgeElements, skillIds) { return filteredKnowledgeElements; } -module.exports = ParticipantResultsShared; +export { ParticipantResultsShared }; diff --git a/api/lib/domain/models/ParticipationForCampaignManagement.js b/api/lib/domain/models/ParticipationForCampaignManagement.js index 7a44ffdaec8..465d28b63c5 100644 --- a/api/lib/domain/models/ParticipationForCampaignManagement.js +++ b/api/lib/domain/models/ParticipationForCampaignManagement.js @@ -32,4 +32,4 @@ class ParticipationForCampaignManagement { } } -module.exports = ParticipationForCampaignManagement; +export { ParticipationForCampaignManagement }; diff --git a/api/lib/domain/models/PartnerCertificationScoring.js b/api/lib/domain/models/PartnerCertificationScoring.js index efe4de1660e..dd4dea33630 100644 --- a/api/lib/domain/models/PartnerCertificationScoring.js +++ b/api/lib/domain/models/PartnerCertificationScoring.js @@ -1,8 +1,8 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { validateEntity } = require('../validators/entity-validator.js'); -const { NotImplementedError } = require('../errors.js'); +import { validateEntity } from '../validators/entity-validator.js'; +import { NotImplementedError } from '../errors.js'; const SOURCES = { PIX: 'PIX', @@ -29,4 +29,4 @@ class PartnerCertificationScoring { } } -module.exports = PartnerCertificationScoring; +export { PartnerCertificationScoring }; diff --git a/api/lib/domain/models/PlacementProfile.js b/api/lib/domain/models/PlacementProfile.js index f588b412679..0ba7e21cb04 100644 --- a/api/lib/domain/models/PlacementProfile.js +++ b/api/lib/domain/models/PlacementProfile.js @@ -1,5 +1,5 @@ -const { MINIMUM_CERTIFIABLE_COMPETENCES_FOR_CERTIFIABILITY } = require('../constants.js'); -const _ = require('lodash'); +import { MINIMUM_CERTIFIABLE_COMPETENCES_FOR_CERTIFIABILITY } from '../constants.js'; +import _ from 'lodash'; class PlacementProfile { constructor({ profileDate, userId, userCompetences } = {}) { @@ -35,4 +35,4 @@ class PlacementProfile { } } -module.exports = PlacementProfile; +export { PlacementProfile }; diff --git a/api/lib/domain/models/PoleEmploiSending.js b/api/lib/domain/models/PoleEmploiSending.js index 179b421ad5c..8964b01d166 100644 --- a/api/lib/domain/models/PoleEmploiSending.js +++ b/api/lib/domain/models/PoleEmploiSending.js @@ -45,4 +45,4 @@ class PoleEmploiSending { } PoleEmploiSending.TYPES = TYPES; -module.exports = PoleEmploiSending; +export { PoleEmploiSending }; diff --git a/api/lib/domain/models/PrivateCertificate.js b/api/lib/domain/models/PrivateCertificate.js index a8dc187ff14..907913caef1 100644 --- a/api/lib/domain/models/PrivateCertificate.js +++ b/api/lib/domain/models/PrivateCertificate.js @@ -1,4 +1,4 @@ -const { status: assessmentResultStatuses } = require('./AssessmentResult.js'); +import { status as assessmentResultStatuses } from './AssessmentResult.js'; const status = { REJECTED: 'rejected', @@ -104,4 +104,4 @@ function _computeStatus(assessmentResultStatus, isCancelled) { PrivateCertificate.status = status; -module.exports = PrivateCertificate; +export { PrivateCertificate }; diff --git a/api/lib/domain/models/Progression.js b/api/lib/domain/models/Progression.js index 5241c01fd01..cf3af303cfd 100644 --- a/api/lib/domain/models/Progression.js +++ b/api/lib/domain/models/Progression.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; const PROGRESSION_ID_PREFIX = 'progression-'; const ONE_HUNDRED_PERCENT = 1; @@ -38,4 +38,4 @@ class Progression { } } -module.exports = Progression; +export { Progression }; diff --git a/api/lib/domain/models/ReproducibilityRate.js b/api/lib/domain/models/ReproducibilityRate.js index 1ca947b7253..dd30fd5d8e3 100644 --- a/api/lib/domain/models/ReproducibilityRate.js +++ b/api/lib/domain/models/ReproducibilityRate.js @@ -1,4 +1,4 @@ -const { MINIMUM_REPRODUCIBILITY_RATE_TO_BE_CERTIFIED } = require('../constants.js'); +import { MINIMUM_REPRODUCIBILITY_RATE_TO_BE_CERTIFIED } from '../constants.js'; class ReproducibilityRate { constructor(value) { @@ -19,6 +19,4 @@ class ReproducibilityRate { } } -module.exports = { - ReproducibilityRate, -}; +export { ReproducibilityRate }; diff --git a/api/lib/domain/models/ResultCompetence.js b/api/lib/domain/models/ResultCompetence.js index 02358f29f8d..6f774dd6b70 100644 --- a/api/lib/domain/models/ResultCompetence.js +++ b/api/lib/domain/models/ResultCompetence.js @@ -8,4 +8,4 @@ class ResultCompetence { } } -module.exports = ResultCompetence; +export { ResultCompetence }; diff --git a/api/lib/domain/models/ResultCompetenceTree.js b/api/lib/domain/models/ResultCompetenceTree.js index 2491595b503..6dc21a67d96 100644 --- a/api/lib/domain/models/ResultCompetenceTree.js +++ b/api/lib/domain/models/ResultCompetenceTree.js @@ -1,5 +1,5 @@ -const Area = require('./Area.js'); -const ResultCompetence = require('./ResultCompetence.js'); +import { Area } from './Area.js'; +import { ResultCompetence } from './ResultCompetence.js'; const NOT_PASSED_LEVEL = -1; const NOT_PASSED_SCORE = 0; @@ -42,4 +42,4 @@ class ResultCompetenceTree { } } -module.exports = ResultCompetenceTree; +export { ResultCompetenceTree }; diff --git a/api/lib/domain/models/SCOCertificationCandidate.js b/api/lib/domain/models/SCOCertificationCandidate.js index 65120c52251..a3cedf31ecd 100644 --- a/api/lib/domain/models/SCOCertificationCandidate.js +++ b/api/lib/domain/models/SCOCertificationCandidate.js @@ -1,7 +1,7 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { InvalidCertificationCandidate } = require('../errors.js'); +import { InvalidCertificationCandidate } from '../errors.js'; const scoCertificationCandidateValidationJoiSchema = Joi.object({ firstName: Joi.string().required().empty(null), @@ -49,4 +49,4 @@ class SCOCertificationCandidate { } } -module.exports = SCOCertificationCandidate; +export { SCOCertificationCandidate }; diff --git a/api/lib/domain/models/Scorecard.js b/api/lib/domain/models/Scorecard.js index 7186b74bdd8..9e38211592c 100644 --- a/api/lib/domain/models/Scorecard.js +++ b/api/lib/domain/models/Scorecard.js @@ -1,9 +1,14 @@ -const _ = require('lodash'); -const Assessment = require('./Assessment.js'); -const CompetenceEvaluation = require('./CompetenceEvaluation.js'); -const KnowledgeElement = require('./KnowledgeElement.js'); -const { constants } = require('../constants.js'); -const scoringService = require('../services/scoring/scoring-service.js'); +import _ from 'lodash'; +import { Assessment } from './Assessment.js'; +import { CompetenceEvaluation } from './CompetenceEvaluation.js'; +import { KnowledgeElement } from './KnowledgeElement.js'; +import { + MINIMUM_DELAY_IN_DAYS_FOR_RESET, + MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING, + PIX_COUNT_BY_LEVEL, + MAX_REACHABLE_LEVEL, +} from '../constants.js'; +import * as scoringService from '../services/scoring/scoring-service.js'; const statuses = { NOT_STARTED: 'NOT_STARTED', @@ -27,6 +32,7 @@ class Scorecard { remainingDaysBeforeReset, remainingDaysBeforeImproving, tutorials, + maxReachableLevel = MAX_REACHABLE_LEVEL, } = {}) { this.id = id; this.name = name; @@ -42,6 +48,7 @@ class Scorecard { this.remainingDaysBeforeReset = remainingDaysBeforeReset; this.remainingDaysBeforeImproving = remainingDaysBeforeImproving; this.tutorials = tutorials; + this.maxReachableLevel = maxReachableLevel; } static parseId(scorecardId) { @@ -85,16 +92,14 @@ class Scorecard { static computeRemainingDaysBeforeReset(knowledgeElements) { const daysSinceLastKnowledgeElement = KnowledgeElement.computeDaysSinceLastKnowledgeElement(knowledgeElements); - const remainingDaysToWait = Math.ceil(constants.MINIMUM_DELAY_IN_DAYS_FOR_RESET - daysSinceLastKnowledgeElement); + const remainingDaysToWait = Math.ceil(MINIMUM_DELAY_IN_DAYS_FOR_RESET - daysSinceLastKnowledgeElement); return remainingDaysToWait > 0 ? remainingDaysToWait : 0; } static computeRemainingDaysBeforeImproving(knowledgeElements) { const daysSinceLastKnowledgeElement = KnowledgeElement.computeDaysSinceLastKnowledgeElement(knowledgeElements); - const remainingDaysToWait = Math.ceil( - constants.MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING - daysSinceLastKnowledgeElement - ); + const remainingDaysToWait = Math.ceil(MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING - daysSinceLastKnowledgeElement); return remainingDaysToWait > 0 ? remainingDaysToWait : 0; } @@ -108,7 +113,7 @@ class Scorecard { } get isMaxLevel() { - return this.level >= constants.MAX_REACHABLE_LEVEL; + return this.level >= this.maxReachableLevel; } get isNotStarted() { @@ -148,11 +153,11 @@ class Scorecard { } get percentageAheadOfNextLevel() { - return (this.pixScoreAheadOfNextLevel / constants.PIX_COUNT_BY_LEVEL) * 100; + return (this.pixScoreAheadOfNextLevel / PIX_COUNT_BY_LEVEL) * 100; } get remainingPixToNextLevel() { - return constants.PIX_COUNT_BY_LEVEL - this.pixScoreAheadOfNextLevel; + return PIX_COUNT_BY_LEVEL - this.pixScoreAheadOfNextLevel; } } @@ -169,4 +174,4 @@ function _getScorecardStatus(competenceEvaluation, knowledgeElements) { Scorecard.statuses = statuses; -module.exports = Scorecard; +export { Scorecard }; diff --git a/api/lib/domain/models/ScoringSimulation.js b/api/lib/domain/models/ScoringSimulation.js index 77dc251943a..368ff0d0c33 100644 --- a/api/lib/domain/models/ScoringSimulation.js +++ b/api/lib/domain/models/ScoringSimulation.js @@ -13,4 +13,4 @@ class ScoringSimulationUser { } } -module.exports = ScoringSimulation; +export { ScoringSimulation }; diff --git a/api/lib/domain/models/ScoringSimulationContext.js b/api/lib/domain/models/ScoringSimulationContext.js index 204882f39a1..4662b15a872 100644 --- a/api/lib/domain/models/ScoringSimulationContext.js +++ b/api/lib/domain/models/ScoringSimulationContext.js @@ -6,4 +6,4 @@ class ScoringSimulationContext { } } -module.exports = ScoringSimulationContext; +export { ScoringSimulationContext }; diff --git a/api/lib/domain/models/ScoringSimulationDataset.js b/api/lib/domain/models/ScoringSimulationDataset.js index 8f110810914..0b92715a68b 100644 --- a/api/lib/domain/models/ScoringSimulationDataset.js +++ b/api/lib/domain/models/ScoringSimulationDataset.js @@ -5,4 +5,4 @@ class ScoringSimulationDataset { } } -module.exports = ScoringSimulationDataset; +export { ScoringSimulationDataset }; diff --git a/api/lib/domain/models/ScoringSimulationResult.js b/api/lib/domain/models/ScoringSimulationResult.js index b093cf1c2db..ff20ca65ebb 100644 --- a/api/lib/domain/models/ScoringSimulationResult.js +++ b/api/lib/domain/models/ScoringSimulationResult.js @@ -17,4 +17,4 @@ class SimulationCompetenceResult { } } -module.exports = ScoringSimulationResult; +export { ScoringSimulationResult }; diff --git a/api/lib/domain/models/Session.js b/api/lib/domain/models/Session.js index d248b916d40..67bd9c16e0d 100644 --- a/api/lib/domain/models/Session.js +++ b/api/lib/domain/models/Session.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const config = require('../../config.js'); +import _ from 'lodash'; +import { config } from '../../config.js'; const CREATED = 'created'; const FINALIZED = 'finalized'; @@ -105,9 +105,9 @@ class Session { } } -module.exports = Session; -module.exports.statuses = statuses; -module.exports.NO_EXAMINER_GLOBAL_COMMENT = NO_EXAMINER_GLOBAL_COMMENT; +Session.statuses = statuses; + +export { Session, statuses, NO_EXAMINER_GLOBAL_COMMENT }; function _randomCharacter() { return _.sample(availableCharactersForPasswordGeneration); diff --git a/api/lib/domain/models/SessionJuryComment.js b/api/lib/domain/models/SessionJuryComment.js index d5aa46029ea..7c5325a3ec5 100644 --- a/api/lib/domain/models/SessionJuryComment.js +++ b/api/lib/domain/models/SessionJuryComment.js @@ -13,4 +13,4 @@ class SessionJuryComment { } } -module.exports = SessionJuryComment; +export { SessionJuryComment }; diff --git a/api/lib/domain/models/SessionMassImportReport.js b/api/lib/domain/models/SessionMassImportReport.js index 7016d57960c..9c2009a805e 100644 --- a/api/lib/domain/models/SessionMassImportReport.js +++ b/api/lib/domain/models/SessionMassImportReport.js @@ -35,4 +35,4 @@ class SessionMassImportReport { } } -module.exports = SessionMassImportReport; +export { SessionMassImportReport }; diff --git a/api/lib/domain/models/SessionPublicationBatchResult.js b/api/lib/domain/models/SessionPublicationBatchResult.js index 8ec06b30e8f..556327d59c0 100644 --- a/api/lib/domain/models/SessionPublicationBatchResult.js +++ b/api/lib/domain/models/SessionPublicationBatchResult.js @@ -13,6 +13,4 @@ class SessionPublicationBatchResult { } } -module.exports = { - SessionPublicationBatchResult, -}; +export { SessionPublicationBatchResult }; diff --git a/api/lib/domain/models/ShareableCertificate.js b/api/lib/domain/models/ShareableCertificate.js index c786dc8aea1..4a357fcdb7b 100644 --- a/api/lib/domain/models/ShareableCertificate.js +++ b/api/lib/domain/models/ShareableCertificate.js @@ -36,4 +36,4 @@ class ShareableCertificate { } } -module.exports = ShareableCertificate; +export { ShareableCertificate }; diff --git a/api/lib/domain/models/Skill.js b/api/lib/domain/models/Skill.js index c336e4409b2..a2ef891991d 100644 --- a/api/lib/domain/models/Skill.js +++ b/api/lib/domain/models/Skill.js @@ -46,4 +46,4 @@ class Skill { } } -module.exports = Skill; +export { Skill }; diff --git a/api/lib/domain/models/SkillSet.js b/api/lib/domain/models/SkillSet.js index 8ec37c61557..158322335c0 100644 --- a/api/lib/domain/models/SkillSet.js +++ b/api/lib/domain/models/SkillSet.js @@ -7,4 +7,4 @@ class SkillSet { } } -module.exports = SkillSet; +export { SkillSet }; diff --git a/api/lib/domain/models/Solution.js b/api/lib/domain/models/Solution.js index 5567366d090..9acee34bfe4 100644 --- a/api/lib/domain/models/Solution.js +++ b/api/lib/domain/models/Solution.js @@ -64,4 +64,4 @@ class Solution { } } -module.exports = Solution; +export { Solution }; diff --git a/api/lib/domain/models/Stage.js b/api/lib/domain/models/Stage.js index 93c62532eaa..27d8a93ef4d 100644 --- a/api/lib/domain/models/Stage.js +++ b/api/lib/domain/models/Stage.js @@ -11,4 +11,4 @@ class Stage { } } -module.exports = Stage; +export { Stage }; diff --git a/api/lib/domain/models/Student.js b/api/lib/domain/models/Student.js index 6ff56fa6e7a..9892862a78c 100644 --- a/api/lib/domain/models/Student.js +++ b/api/lib/domain/models/Student.js @@ -5,4 +5,4 @@ class Student { } } -module.exports = Student; +export { Student }; diff --git a/api/lib/domain/models/SupOrganizationLearner.js b/api/lib/domain/models/SupOrganizationLearner.js index 3caec24f45d..6c843c67af6 100644 --- a/api/lib/domain/models/SupOrganizationLearner.js +++ b/api/lib/domain/models/SupOrganizationLearner.js @@ -1,4 +1,4 @@ -const { checkValidation } = require('../validators/sup-organization-learner-validator.js'); +import { checkValidation } from '../validators/sup-organization-learner-validator.js'; class SupOrganizationLearner { constructor({ @@ -35,4 +35,4 @@ class SupOrganizationLearner { } } -module.exports = SupOrganizationLearner; +export { SupOrganizationLearner }; diff --git a/api/lib/domain/models/SupOrganizationLearnerSet.js b/api/lib/domain/models/SupOrganizationLearnerSet.js index 3d204265fb9..b7d6ef9e942 100644 --- a/api/lib/domain/models/SupOrganizationLearnerSet.js +++ b/api/lib/domain/models/SupOrganizationLearnerSet.js @@ -1,6 +1,6 @@ -const SupOrganizationLearner = require('./SupOrganizationLearner.js'); -const { checkValidation } = require('../validators/sup-organization-learner-set-validator.js'); -const { areTwoStringsCloseEnough } = require('../services/string-comparison-service.js'); +import { SupOrganizationLearner } from './SupOrganizationLearner.js'; +import { checkValidation } from '../validators/sup-organization-learner-set-validator.js'; +import { areTwoStringsCloseEnough } from '../services/string-comparison-service.js'; const RATIO = 0.25; @@ -84,4 +84,4 @@ class SupOrganizationLearnerSet { } } -module.exports = SupOrganizationLearnerSet; +export { SupOrganizationLearnerSet }; diff --git a/api/lib/domain/models/Tag.js b/api/lib/domain/models/Tag.js index 53d0856c1eb..e1dd8927caf 100644 --- a/api/lib/domain/models/Tag.js +++ b/api/lib/domain/models/Tag.js @@ -10,4 +10,4 @@ Tag.MEDIATION_NUMERIQUE = 'MEDNUM'; Tag.CFA = 'CFA'; Tag.AEFE = 'AEFE'; Tag.MLF = 'MLF'; -module.exports = Tag; +export { Tag }; diff --git a/api/lib/domain/models/TargetProfile.js b/api/lib/domain/models/TargetProfile.js index 5d85218e7ec..8f49fd91c1f 100644 --- a/api/lib/domain/models/TargetProfile.js +++ b/api/lib/domain/models/TargetProfile.js @@ -44,4 +44,4 @@ class TargetProfile { TargetProfile.categories = categories; -module.exports = TargetProfile; +export { TargetProfile, categories }; diff --git a/api/lib/domain/models/TargetProfileForAdmin.js b/api/lib/domain/models/TargetProfileForAdmin.js index 60bab45ec87..74a01aad4de 100644 --- a/api/lib/domain/models/TargetProfileForAdmin.js +++ b/api/lib/domain/models/TargetProfileForAdmin.js @@ -188,4 +188,4 @@ class TP_Tube { } } -module.exports = TargetProfileForAdmin; +export { TargetProfileForAdmin }; diff --git a/api/lib/domain/models/TargetProfileForCreation.js b/api/lib/domain/models/TargetProfileForCreation.js index 612726cce0c..f53b67234ed 100644 --- a/api/lib/domain/models/TargetProfileForCreation.js +++ b/api/lib/domain/models/TargetProfileForCreation.js @@ -1,4 +1,4 @@ -const { validate } = require('../validators/target-profile/creation-command-validation.js'); +import { validate } from '../validators/target-profile/creation-command-validation.js'; const DEFAULT_IMAGE_URL = 'https://images.pix.fr/profil-cible/Illu_GEN.svg'; class TargetProfileForCreation { @@ -28,4 +28,4 @@ class TargetProfileForCreation { } } -module.exports = TargetProfileForCreation; +export { TargetProfileForCreation }; diff --git a/api/lib/domain/models/TargetProfileSummaryForAdmin.js b/api/lib/domain/models/TargetProfileSummaryForAdmin.js index d86fce381eb..56eaa71889f 100644 --- a/api/lib/domain/models/TargetProfileSummaryForAdmin.js +++ b/api/lib/domain/models/TargetProfileSummaryForAdmin.js @@ -7,4 +7,4 @@ class TargetProfileSummaryForAdmin { } } -module.exports = TargetProfileSummaryForAdmin; +export { TargetProfileSummaryForAdmin }; diff --git a/api/lib/domain/models/Thematic.js b/api/lib/domain/models/Thematic.js index b6fa04ad4a0..29187284895 100644 --- a/api/lib/domain/models/Thematic.js +++ b/api/lib/domain/models/Thematic.js @@ -8,4 +8,4 @@ class Thematic { } } -module.exports = Thematic; +export { Thematic }; diff --git a/api/lib/domain/models/Training.js b/api/lib/domain/models/Training.js index 08458a4229d..7a82c391830 100644 --- a/api/lib/domain/models/Training.js +++ b/api/lib/domain/models/Training.js @@ -32,4 +32,4 @@ class Training { } } -module.exports = Training; +export { Training }; diff --git a/api/lib/domain/models/TrainingTrigger.js b/api/lib/domain/models/TrainingTrigger.js index fe37f6a7a55..c3fe619ba47 100644 --- a/api/lib/domain/models/TrainingTrigger.js +++ b/api/lib/domain/models/TrainingTrigger.js @@ -47,4 +47,4 @@ function _getValidatedKnowledgeElementsCount({ knowledgeElements }) { return knowledgeElements.filter((knowledgeElement) => knowledgeElement.isValidated).length; } -module.exports = TrainingTrigger; +export { TrainingTrigger }; diff --git a/api/lib/domain/models/TrainingTriggerTube.js b/api/lib/domain/models/TrainingTriggerTube.js index 81e22875e75..486823350d2 100644 --- a/api/lib/domain/models/TrainingTriggerTube.js +++ b/api/lib/domain/models/TrainingTriggerTube.js @@ -10,4 +10,4 @@ class TrainingTriggerTube { } } -module.exports = TrainingTriggerTube; +export { TrainingTriggerTube }; diff --git a/api/lib/domain/models/Tube.js b/api/lib/domain/models/Tube.js index 835cfd10afa..92260562813 100644 --- a/api/lib/domain/models/Tube.js +++ b/api/lib/domain/models/Tube.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; class Tube { constructor({ @@ -59,4 +59,4 @@ class Tube { } } -module.exports = Tube; +export { Tube }; diff --git a/api/lib/domain/models/Tutorial.js b/api/lib/domain/models/Tutorial.js index daba0c4cc25..aa68f3d01aa 100644 --- a/api/lib/domain/models/Tutorial.js +++ b/api/lib/domain/models/Tutorial.js @@ -16,4 +16,4 @@ class Tutorial { Tutorial.TYPES = TYPES; -module.exports = Tutorial; +export { Tutorial }; diff --git a/api/lib/domain/models/TutorialEvaluation.js b/api/lib/domain/models/TutorialEvaluation.js index 6fff84a740e..67c292527dd 100644 --- a/api/lib/domain/models/TutorialEvaluation.js +++ b/api/lib/domain/models/TutorialEvaluation.js @@ -15,4 +15,4 @@ class TutorialEvaluation { TutorialEvaluation.statuses = statuses; -module.exports = TutorialEvaluation; +export { TutorialEvaluation }; diff --git a/api/lib/domain/models/User.js b/api/lib/domain/models/User.js index ddadfc35009..d82f7183143 100644 --- a/api/lib/domain/models/User.js +++ b/api/lib/domain/models/User.js @@ -1,10 +1,12 @@ -const toLower = require('lodash/toLower'); -const isNil = require('lodash/isNil'); -const dayjs = require('dayjs'); +import lodash from 'lodash'; -const config = require('../../config.js'); -const localeService = require('../services/locale-service'); -const AuthenticationMethod = require('./AuthenticationMethod.js'); +const { toLower, isNil } = lodash; + +import dayjs from 'dayjs'; + +import { config } from '../../config.js'; +import * as localeService from '../services/locale-service.js'; +import { AuthenticationMethod } from './AuthenticationMethod.js'; class User { constructor( @@ -126,4 +128,4 @@ class User { } } -module.exports = User; +export { User }; diff --git a/api/lib/domain/models/UserCompetence.js b/api/lib/domain/models/UserCompetence.js index 225fa03600a..aba8b8b158b 100644 --- a/api/lib/domain/models/UserCompetence.js +++ b/api/lib/domain/models/UserCompetence.js @@ -1,6 +1,6 @@ -const { MINIMUM_COMPETENCE_LEVEL_FOR_CERTIFIABILITY } = require('../constants.js'); +import { MINIMUM_COMPETENCE_LEVEL_FOR_CERTIFIABILITY } from '../constants.js'; -const _ = require('lodash'); +import _ from 'lodash'; class UserCompetence { constructor({ id, index, name, areaId, pixScore, estimatedLevel, skills = [] } = {}) { @@ -33,4 +33,4 @@ class UserCompetence { } } -module.exports = UserCompetence; +export { UserCompetence }; diff --git a/api/lib/domain/models/UserDetailsForAdmin.js b/api/lib/domain/models/UserDetailsForAdmin.js index 4f78a230c9e..487aed89bd2 100644 --- a/api/lib/domain/models/UserDetailsForAdmin.js +++ b/api/lib/domain/models/UserDetailsForAdmin.js @@ -1,4 +1,4 @@ -const localeService = require('../services/locale-service'); +import * as localeService from '../services/locale-service.js'; class UserDetailsForAdmin { constructor( @@ -65,4 +65,4 @@ class UserDetailsForAdmin { } } -module.exports = UserDetailsForAdmin; +export { UserDetailsForAdmin }; diff --git a/api/lib/domain/models/UserLogin.js b/api/lib/domain/models/UserLogin.js index 44140fee92a..b494ce0da77 100644 --- a/api/lib/domain/models/UserLogin.js +++ b/api/lib/domain/models/UserLogin.js @@ -1,4 +1,4 @@ -const settings = require('../../config.js'); +import { config } from '../../config.js'; class UserLogin { constructor({ id, userId, failureCount = 0, temporaryBlockedUntil, blockedAt, createdAt, updatedAt } = {}) { @@ -26,12 +26,12 @@ class UserLogin { } shouldMarkUserAsTemporarilyBlocked() { - return this.failureCount % settings.login.temporaryBlockingThresholdFailureCount === 0; + return this.failureCount % config.login.temporaryBlockingThresholdFailureCount === 0; } markUserAsTemporarilyBlocked() { - const commonRatio = Math.pow(2, this.failureCount / settings.login.temporaryBlockingThresholdFailureCount - 1); - this.temporaryBlockedUntil = new Date(Date.now() + settings.login.temporaryBlockingBaseTimeMs * commonRatio); + const commonRatio = Math.pow(2, this.failureCount / config.login.temporaryBlockingThresholdFailureCount - 1); + this.temporaryBlockedUntil = new Date(Date.now() + config.login.temporaryBlockingBaseTimeMs * commonRatio); } hasFailedAtLeastOnce() { @@ -39,7 +39,7 @@ class UserLogin { } shouldMarkUserAsBlocked() { - return this.failureCount >= settings.login.blockingLimitFailureCount; + return this.failureCount >= config.login.blockingLimitFailureCount; } markUserAsBlocked() { @@ -57,4 +57,4 @@ class UserLogin { } } -module.exports = UserLogin; +export { UserLogin }; diff --git a/api/lib/domain/models/UserOrgaSettings.js b/api/lib/domain/models/UserOrgaSettings.js index 33abb66c1ef..3ee81c274df 100644 --- a/api/lib/domain/models/UserOrgaSettings.js +++ b/api/lib/domain/models/UserOrgaSettings.js @@ -6,4 +6,4 @@ class UserOrgaSettings { } } -module.exports = UserOrgaSettings; +export { UserOrgaSettings }; diff --git a/api/lib/domain/models/UserSavedTutorial.js b/api/lib/domain/models/UserSavedTutorial.js index 15b9388c136..071fdf969f4 100644 --- a/api/lib/domain/models/UserSavedTutorial.js +++ b/api/lib/domain/models/UserSavedTutorial.js @@ -8,4 +8,4 @@ class UserSavedTutorial { } } -module.exports = UserSavedTutorial; +export { UserSavedTutorial }; diff --git a/api/lib/domain/models/UserSavedTutorialWithTutorial.js b/api/lib/domain/models/UserSavedTutorialWithTutorial.js index 46db3255e11..79023e226a7 100644 --- a/api/lib/domain/models/UserSavedTutorialWithTutorial.js +++ b/api/lib/domain/models/UserSavedTutorialWithTutorial.js @@ -7,4 +7,4 @@ class UserSavedTutorialWithTutorial { } } -module.exports = UserSavedTutorialWithTutorial; +export { UserSavedTutorialWithTutorial }; diff --git a/api/lib/domain/models/UserToCreate.js b/api/lib/domain/models/UserToCreate.js index 979e06a744c..4208ffb7de8 100644 --- a/api/lib/domain/models/UserToCreate.js +++ b/api/lib/domain/models/UserToCreate.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const localeService = require('../services/locale-service'); +import _ from 'lodash'; +import * as localeService from '../services/locale-service.js'; class UserToCreate { constructor({ @@ -75,4 +75,4 @@ class UserToCreate { } } -module.exports = UserToCreate; +export { UserToCreate }; diff --git a/api/lib/domain/models/Validation.js b/api/lib/domain/models/Validation.js index b571e76f737..12d7cf7ded2 100644 --- a/api/lib/domain/models/Validation.js +++ b/api/lib/domain/models/Validation.js @@ -10,4 +10,4 @@ class Validation { } } -module.exports = Validation; +export { Validation }; diff --git a/api/lib/domain/models/Validator.js b/api/lib/domain/models/Validator.js index 4ee2763e529..51786ccd09b 100644 --- a/api/lib/domain/models/Validator.js +++ b/api/lib/domain/models/Validator.js @@ -1,5 +1,5 @@ -const AnswerStatus = require('./AnswerStatus.js'); -const Validation = require('./Validation.js'); +import { AnswerStatus } from './AnswerStatus.js'; +import { Validation } from './Validation.js'; /** * Traduction: Vérificateur de réponse par défaut @@ -17,4 +17,4 @@ class Validator { } } -module.exports = Validator; +export { Validator }; diff --git a/api/lib/domain/models/ValidatorAlwaysOK.js b/api/lib/domain/models/ValidatorAlwaysOK.js index c42cb83e708..08c4ff7e848 100644 --- a/api/lib/domain/models/ValidatorAlwaysOK.js +++ b/api/lib/domain/models/ValidatorAlwaysOK.js @@ -1,6 +1,6 @@ -const Validation = require('./Validation.js'); -const Validator = require('./Validator.js'); -const AnswerStatus = require('./AnswerStatus.js'); +import { Validation } from './Validation.js'; +import { Validator } from './Validator.js'; +import { AnswerStatus } from './AnswerStatus.js'; class ValidatorAlwaysOK extends Validator { assess() { @@ -11,4 +11,4 @@ class ValidatorAlwaysOK extends Validator { } } -module.exports = ValidatorAlwaysOK; +export { ValidatorAlwaysOK }; diff --git a/api/lib/domain/models/ValidatorQCM.js b/api/lib/domain/models/ValidatorQCM.js index 004fa5de650..92e5df70863 100644 --- a/api/lib/domain/models/ValidatorQCM.js +++ b/api/lib/domain/models/ValidatorQCM.js @@ -1,6 +1,6 @@ -const solutionServiceQCM = require('../services/solution-service-qcm.js'); -const Validation = require('./Validation.js'); -const Validator = require('./Validator.js'); +import * as solutionServiceQCM from '../services/solution-service-qcm.js'; +import { Validation } from './Validation.js'; +import { Validator } from './Validator.js'; /** * Traduction: Vérificateur de réponse pour un QCM @@ -21,4 +21,4 @@ class ValidatorQCM extends Validator { } } -module.exports = ValidatorQCM; +export { ValidatorQCM }; diff --git a/api/lib/domain/models/ValidatorQCU.js b/api/lib/domain/models/ValidatorQCU.js index d175b4b6df2..f7c7d7fbbaa 100644 --- a/api/lib/domain/models/ValidatorQCU.js +++ b/api/lib/domain/models/ValidatorQCU.js @@ -1,6 +1,6 @@ -const solutionServiceQCU = require('../services/solution-service-qcu.js'); -const Validation = require('./Validation.js'); -const Validator = require('./Validator.js'); +import * as solutionServiceQCU from '../services/solution-service-qcu.js'; +import { Validation } from './Validation.js'; +import { Validator } from './Validator.js'; /** * Traduction: Vérificateur de réponse pour un QCU @@ -21,4 +21,4 @@ class ValidatorQCU extends Validator { } } -module.exports = ValidatorQCU; +export { ValidatorQCU }; diff --git a/api/lib/domain/models/ValidatorQROC.js b/api/lib/domain/models/ValidatorQROC.js index 93a1579822c..a7087a03486 100644 --- a/api/lib/domain/models/ValidatorQROC.js +++ b/api/lib/domain/models/ValidatorQROC.js @@ -1,17 +1,23 @@ -const solutionServiceQROC = require('../services/solution-service-qroc.js'); -const Validation = require('./Validation.js'); -const Validator = require('./Validator.js'); +import * as solutionServiceQROC from '../services/solution-service-qroc.js'; +import { Validation } from './Validation.js'; +import { Validator } from './Validator.js'; /** * Traduction: Vérificateur de réponse pour un QROC */ class ValidatorQROC extends Validator { - constructor({ solution } = {}) { + injectedSolutionServiceQROC; + constructor({ solution } = {}, injectedSolutionServiceQROC = solutionServiceQROC) { super({ solution }); + this.injectedSolutionServiceQROC = injectedSolutionServiceQROC; } assess({ answer, challengeFormat }) { - const result = solutionServiceQROC.match({ answer: answer.value, solution: this.solution, challengeFormat }); + const result = this.injectedSolutionServiceQROC.match({ + answer: answer.value, + solution: this.solution, + challengeFormat, + }); return new Validation({ result, @@ -20,4 +26,4 @@ class ValidatorQROC extends Validator { } } -module.exports = ValidatorQROC; +export { ValidatorQROC }; diff --git a/api/lib/domain/models/ValidatorQROCMDep.js b/api/lib/domain/models/ValidatorQROCMDep.js index b8af3f5629d..631cee09718 100644 --- a/api/lib/domain/models/ValidatorQROCMDep.js +++ b/api/lib/domain/models/ValidatorQROCMDep.js @@ -1,6 +1,6 @@ -const solutionServiceQROCMDep = require('../services/solution-service-qrocm-dep.js'); -const Validation = require('./Validation.js'); -const Validator = require('./Validator.js'); +import * as solutionServiceQROCMDep from '../services/solution-service-qrocm-dep.js'; +import { Validation } from './Validation.js'; +import { Validator } from './Validator.js'; /** * Traduction: Vérificateur de réponse pour un QROCM Dep @@ -24,4 +24,4 @@ class ValidatorQROCMDep extends Validator { } } -module.exports = ValidatorQROCMDep; +export { ValidatorQROCMDep }; diff --git a/api/lib/domain/models/ValidatorQROCMInd.js b/api/lib/domain/models/ValidatorQROCMInd.js index 9ec929c8301..32f4c9f6468 100644 --- a/api/lib/domain/models/ValidatorQROCMInd.js +++ b/api/lib/domain/models/ValidatorQROCMInd.js @@ -1,6 +1,6 @@ -const solutionServiceQROCMInd = require('../services/solution-service-qrocm-ind.js'); -const Validation = require('./Validation.js'); -const Validator = require('./Validator.js'); +import * as solutionServiceQROCMInd from '../services/solution-service-qrocm-ind.js'; +import { Validation } from './Validation.js'; +import { Validator } from './Validator.js'; /** * Traduction: Vérificateur de réponse pour un QROCM Ind @@ -24,4 +24,4 @@ class ValidatorQROCMInd extends Validator { } } -module.exports = ValidatorQROCMInd; +export { ValidatorQROCMInd }; diff --git a/api/lib/domain/models/index.js b/api/lib/domain/models/index.js index f9a76601b56..57e160b401b 100644 --- a/api/lib/domain/models/index.js +++ b/api/lib/domain/models/index.js @@ -1,175 +1,155 @@ -// the following list of imports has been generated by the commented code -// const fs = require('fs'); -// const path = require('path'); -// -// fs.readdir(__dirname, { withFileTypes: true }, (err, dirents) => { -// dirents.forEach((dirent) => { -// if (!dirent.isFile() || dirent.name === 'index.js') return; -// const filePath = dirent.name; -// const fileName = path.basename(dirent.name, '.js'); -// console.log(`const ${fileName} = require('./${filePath}');`); -// }); -// -// console.log(`module.exports = {`); -// dirents.forEach((dirent) => { -// if (!dirent.isFile() || dirent.name === 'index.js') return; -// const fileName = path.basename(dirent.name, '.js'); -// console.log(`${fileName},`); -// }); -// console.log(`}`); -// }); -const AccountRecoveryDemand = require('./AccountRecoveryDemand.js'); -const AdminMember = require('./AdminMember.js'); -const Answer = require('./Answer.js'); -const AnswerCollectionForScoring = require('./AnswerCollectionForScoring.js'); -const AnswerStatus = require('./AnswerStatus.js'); -const Area = require('./Area.js'); -const Assessment = require('./Assessment.js'); -const FlashAssessmentAlgorithm = require('./FlashAssessmentAlgorithm.js'); -const AssessmentResult = require('./AssessmentResult.js'); -const Authentication = require('./Authentication.js'); -const AuthenticationMethod = require('./AuthenticationMethod.js'); -const AuthenticationSessionContent = require('./AuthenticationSessionContent.js'); -const Badge = require('./Badge.js'); -const BadgeAcquisition = require('./BadgeAcquisition.js'); -const BadgeCriterion = require('./BadgeCriterion.js'); -const BadgeDetails = require('./BadgeDetails.js'); -const BadgeForCalculation = require('./BadgeForCalculation.js'); -const Campaign = require('./Campaign.js'); -const CampaignCreator = require('./CampaignCreator.js'); -const CampaignForArchiving = require('./CampaignForArchiving.js'); -const CampaignForCreation = require('./CampaignForCreation.js'); -const CampaignLearningContent = require('./CampaignLearningContent.js'); -const CampaignParticipant = require('./CampaignParticipant.js'); -const CampaignParticipation = require('./CampaignParticipation.js'); -const CampaignParticipationBadge = require('./CampaignParticipationBadge.js'); -const CampaignParticipationResult = require('./CampaignParticipationResult.js'); -const CampaignParticipationStatuses = require('./CampaignParticipationStatuses.js'); -const CampaignToStartParticipation = require('./CampaignToStartParticipation.js'); -const CampaignTypes = require('./CampaignTypes.js'); -const CertifiableBadgeAcquisition = require('./CertifiableBadgeAcquisition.js'); -const CertifiableProfileForLearningContent = require('./CertifiableProfileForLearningContent.js'); -const CertificationAnswerStatusChangeAttempt = require('./CertificationAnswerStatusChangeAttempt.js'); -const CertificationAssessment = require('./CertificationAssessment.js'); -const CertificationAssessmentScore = require('./CertificationAssessmentScore.js'); -const CertificationAttestation = require('./CertificationAttestation.js'); -const CertificationCandidate = require('./CertificationCandidate.js'); -const CertificationCandidateForSupervising = require('./CertificationCandidateForSupervising.js'); -const CertificationCenter = require('./CertificationCenter.js'); -const CertificationCenterForAdmin = require('./CertificationCenterForAdmin.js'); -const CertificationCenterInvitation = require('./CertificationCenterInvitation.js'); -const CertificationCenterInvitedUser = require('./CertificationCenterInvitedUser.js'); -const CertificationCenterMembership = require('./CertificationCenterMembership.js'); -const CertificationChallenge = require('./CertificationChallenge.js'); -const CertificationChallengeWithType = require('./CertificationChallengeWithType.js'); -const CertificationContract = require('./CertificationContract.js'); -const CertificationCourse = require('./CertificationCourse.js'); -const CertificationCpfCity = require('./CertificationCpfCity.js'); -const CertificationCpfCountry = require('./CertificationCpfCountry.js'); -const CertificationIssueReport = require('./CertificationIssueReport.js'); -const CertificationIssueReportCategory = require('./CertificationIssueReportCategory.js'); -const CertificationIssueReportResolutionAttempt = require('./CertificationIssueReportResolutionAttempt.js'); -const CertificationIssueReportResolutionStrategies = require('./CertificationIssueReportResolutionStrategies.js'); -const CertificationOfficer = require('./CertificationOfficer.js'); -const CertificationReport = require('./CertificationReport.js'); -const CertificationResult = require('./CertificationResult.js'); -const CertifiedLevel = require('./CertifiedLevel.js'); -const CertifiedScore = require('./CertifiedScore.js'); -const Challenge = require('./Challenge.js'); -const Competence = require('./Competence.js'); -const CompetenceEvaluation = require('./CompetenceEvaluation.js'); -const CompetenceMark = require('./CompetenceMark.js'); -const CompetenceResult = require('./CompetenceResult.js'); -const CompetenceTree = require('./CompetenceTree.js'); -const ComplementaryCertification = require('./ComplementaryCertification.js'); -const ComplementaryCertificationCourse = require('./ComplementaryCertificationCourse.js'); -const ComplementaryCertificationCourseResult = require('./ComplementaryCertificationCourseResult.js'); -const ComplementaryCertificationHabilitation = require('./ComplementaryCertificationHabilitation.js'); -const ComplementaryCertificationScoringCriteria = require('./ComplementaryCertificationScoringCriteria.js'); -const ComplementaryCertificationScoringWithComplementaryReferential = require('./ComplementaryCertificationScoringWithComplementaryReferential.js'); -const ComplementaryCertificationScoringWithoutComplementaryReferential = require('./ComplementaryCertificationScoringWithoutComplementaryReferential.js'); -const Correction = require('./Correction.js'); -const Course = require('./Course.js'); -const DataProtectionOfficer = require('./DataProtectionOfficer.js'); -const Division = require('./Division.js'); -const EmailModificationDemand = require('./EmailModificationDemand.js'); -const EmailingAttempt = require('./EmailingAttempt.js'); -const Examiner = require('./Examiner.js'); -const FinalizedSession = require('./FinalizedSession.js'); -const Framework = require('./Framework.js'); -const Group = require('./Group.js'); -const Hint = require('./Hint.js'); -const JuryCertification = require('./JuryCertification.js'); -const JurySession = require('./JurySession.js'); -const KnowledgeElement = require('./KnowledgeElement.js'); -const LearningContent = require('./LearningContent.js'); -const Membership = require('./Membership.js'); -const NeutralizationAttempt = require('./NeutralizationAttempt.js'); -const Organization = require('./Organization.js'); -const OrganizationForAdmin = require('./organizations-administration/Organization.js'); -const OrganizationInvitation = require('./OrganizationInvitation.js'); -const OrganizationInvitedUser = require('./OrganizationInvitedUser.js'); -const OrganizationLearner = require('./OrganizationLearner.js'); -const OrganizationMemberIdentity = require('./OrganizationMemberIdentity.js'); -const OrganizationPlacesLot = require('./OrganizationPlacesLot.js'); -const OrganizationTag = require('./OrganizationTag.js'); -const OrganizationsToAttachToTargetProfile = require('./OrganizationsToAttachToTargetProfile.js'); -const ParticipantResultsShared = require('./ParticipantResultsShared.js'); -const ParticipationForCampaignManagement = require('./ParticipationForCampaignManagement.js'); -const PartnerCertificationScoring = require('./PartnerCertificationScoring.js'); -const PlacementProfile = require('./PlacementProfile.js'); -const PoleEmploiSending = require('./PoleEmploiSending.js'); -const PrivateCertificate = require('./PrivateCertificate.js'); -const Progression = require('./Progression.js'); -const ReproducibilityRate = require('./ReproducibilityRate.js'); -const ResultCompetence = require('./ResultCompetence.js'); -const ResultCompetenceTree = require('./ResultCompetenceTree.js'); -const SCOCertificationCandidate = require('./SCOCertificationCandidate.js'); -const Scorecard = require('./Scorecard.js'); -const ScoringSimulation = require('./ScoringSimulation.js'); -const ScoringSimulationContext = require('./ScoringSimulationContext.js'); -const ScoringSimulationDataset = require('./ScoringSimulationDataset.js'); -const ScoringSimulationResult = require('./ScoringSimulationResult.js'); -const Session = require('./Session.js'); -const SessionJuryComment = require('./SessionJuryComment.js'); -const SessionPublicationBatchResult = require('./SessionPublicationBatchResult.js'); -const ShareableCertificate = require('./ShareableCertificate.js'); -const Skill = require('./Skill.js'); -const SkillSet = require('./SkillSet.js'); -const Solution = require('./Solution.js'); -const Stage = require('./Stage.js'); -const Student = require('./Student.js'); -const SupOrganizationLearner = require('./SupOrganizationLearner.js'); -const SupOrganizationLearnerSet = require('./SupOrganizationLearnerSet.js'); -const Tag = require('./Tag.js'); -const TargetProfile = require('./TargetProfile.js'); -const TargetProfileForAdmin = require('./TargetProfileForAdmin.js'); -const TargetProfileForCreation = require('./TargetProfileForCreation.js'); -const TargetProfileSummaryForAdmin = require('./TargetProfileSummaryForAdmin.js'); -const Thematic = require('./Thematic.js'); -const Training = require('./Training.js'); -const TrainingTrigger = require('./TrainingTrigger.js'); -const TrainingTriggerTube = require('./TrainingTriggerTube.js'); -const Tube = require('./Tube.js'); -const Tutorial = require('./Tutorial.js'); -const TutorialEvaluation = require('./TutorialEvaluation.js'); -const User = require('./User.js'); -const UserCompetence = require('./UserCompetence.js'); -const UserDetailsForAdmin = require('./UserDetailsForAdmin.js'); -const UserLogin = require('./UserLogin.js'); -const UserOrgaSettings = require('./UserOrgaSettings.js'); -const UserSavedTutorial = require('./UserSavedTutorial.js'); -const UserSavedTutorialWithTutorial = require('./UserSavedTutorialWithTutorial.js'); -const UserToCreate = require('./UserToCreate.js'); -const Validation = require('./Validation.js'); -const Validator = require('./Validator.js'); -const ValidatorAlwaysOK = require('./ValidatorAlwaysOK.js'); -const ValidatorQCM = require('./ValidatorQCM.js'); -const ValidatorQCU = require('./ValidatorQCU.js'); -const ValidatorQROC = require('./ValidatorQROC.js'); -const ValidatorQROCMDep = require('./ValidatorQROCMDep.js'); -const ValidatorQROCMInd = require('./ValidatorQROCMInd.js'); -module.exports = { +import { AccountRecoveryDemand } from './AccountRecoveryDemand.js'; +import { AdminMember } from './AdminMember.js'; +import { Answer } from './Answer.js'; +import { AnswerCollectionForScoring } from './AnswerCollectionForScoring.js'; +import { AnswerStatus } from './AnswerStatus.js'; +import { Area } from './Area.js'; +import { Assessment } from './Assessment.js'; +import { FlashAssessmentAlgorithm } from './FlashAssessmentAlgorithm.js'; +import { AssessmentResult } from './AssessmentResult.js'; +import { Authentication } from './Authentication.js'; +import { AuthenticationMethod } from './AuthenticationMethod.js'; +import { AuthenticationSessionContent } from './AuthenticationSessionContent.js'; +import { Badge } from './Badge.js'; +import { BadgeAcquisition } from './BadgeAcquisition.js'; +import { BadgeCriterion } from './BadgeCriterion.js'; +import { BadgeDetails } from './BadgeDetails.js'; +import { BadgeForCalculation } from './BadgeForCalculation.js'; +import { Campaign } from './Campaign.js'; +import { CampaignCreator } from './CampaignCreator.js'; +import { CampaignForArchiving } from './CampaignForArchiving.js'; +import { CampaignForCreation } from './CampaignForCreation.js'; +import { CampaignLearningContent } from './CampaignLearningContent.js'; +import { CampaignParticipant } from './CampaignParticipant.js'; +import { CampaignParticipation } from './CampaignParticipation.js'; +import { CampaignParticipationBadge } from './CampaignParticipationBadge.js'; +import { CampaignParticipationResult } from './CampaignParticipationResult.js'; +import { CampaignParticipationStatuses } from './CampaignParticipationStatuses.js'; +import { CampaignToStartParticipation } from './CampaignToStartParticipation.js'; +import { CampaignTypes } from './CampaignTypes.js'; +import { CertifiableBadgeAcquisition } from './CertifiableBadgeAcquisition.js'; +import { CertifiableProfileForLearningContent } from './CertifiableProfileForLearningContent.js'; +import { CertificationAnswerStatusChangeAttempt } from './CertificationAnswerStatusChangeAttempt.js'; +import { CertificationAssessment } from './CertificationAssessment.js'; +import { CertificationAssessmentScore } from './CertificationAssessmentScore.js'; +import { CertificationAttestation } from './CertificationAttestation.js'; +import { CertificationCandidate } from './CertificationCandidate.js'; +import { CertificationCandidateForSupervising } from './CertificationCandidateForSupervising.js'; +import { CertificationCenter } from './CertificationCenter.js'; +import { CertificationCenterForAdmin } from './CertificationCenterForAdmin.js'; +import { CertificationCenterInvitation } from './CertificationCenterInvitation.js'; +import { CertificationCenterInvitedUser } from './CertificationCenterInvitedUser.js'; +import { CertificationCenterMembership } from './CertificationCenterMembership.js'; +import { CertificationChallenge } from './CertificationChallenge.js'; +import { CertificationChallengeWithType } from './CertificationChallengeWithType.js'; +import { CertificationContract } from './CertificationContract.js'; +import { CertificationCourse } from './CertificationCourse.js'; +import { CertificationCpfCity } from './CertificationCpfCity.js'; +import { CertificationCpfCountry } from './CertificationCpfCountry.js'; +import { CertificationIssueReport } from './CertificationIssueReport.js'; +import { CertificationIssueReportCategory } from './CertificationIssueReportCategory.js'; +import { CertificationIssueReportResolutionAttempt } from './CertificationIssueReportResolutionAttempt.js'; +import { CertificationIssueReportResolutionStrategies } from './CertificationIssueReportResolutionStrategies.js'; +import { CertificationOfficer } from './CertificationOfficer.js'; +import { CertificationReport } from './CertificationReport.js'; +import { CertificationResult } from './CertificationResult.js'; +import { CertifiedLevel } from './CertifiedLevel.js'; +import { CertifiedScore } from './CertifiedScore.js'; +import { Challenge } from './Challenge.js'; +import { Competence } from './Competence.js'; +import { CompetenceEvaluation } from './CompetenceEvaluation.js'; +import { CompetenceMark } from './CompetenceMark.js'; +import { CompetenceResult } from './CompetenceResult.js'; +import { CompetenceTree } from './CompetenceTree.js'; +import { ComplementaryCertification } from './ComplementaryCertification.js'; +import { ComplementaryCertificationCourse } from './ComplementaryCertificationCourse.js'; +import { ComplementaryCertificationCourseResult } from './ComplementaryCertificationCourseResult.js'; +import { ComplementaryCertificationHabilitation } from './ComplementaryCertificationHabilitation.js'; +import { ComplementaryCertificationScoringCriteria } from './ComplementaryCertificationScoringCriteria.js'; +import { ComplementaryCertificationScoringWithComplementaryReferential } from './ComplementaryCertificationScoringWithComplementaryReferential.js'; +import { ComplementaryCertificationScoringWithoutComplementaryReferential } from './ComplementaryCertificationScoringWithoutComplementaryReferential.js'; +import { Correction } from './Correction.js'; +import { Course } from './Course.js'; +import { DataProtectionOfficer } from './DataProtectionOfficer.js'; +import { Division } from './Division.js'; +import { EmailModificationDemand } from './EmailModificationDemand.js'; +import { EmailingAttempt } from './EmailingAttempt.js'; +import { Examiner } from './Examiner.js'; +import { FinalizedSession } from './FinalizedSession.js'; +import { Framework } from './Framework.js'; +import { Group } from './Group.js'; +import { Hint } from './Hint.js'; +import { JuryCertification } from './JuryCertification.js'; +import { JurySession } from './JurySession.js'; +import { KnowledgeElement } from './KnowledgeElement.js'; +import { LearningContent } from './LearningContent.js'; +import { Membership } from './Membership.js'; +import { NeutralizationAttempt } from './NeutralizationAttempt.js'; +import { Organization } from './Organization.js'; +import { OrganizationForAdmin } from './organizations-administration/Organization.js'; +import { OrganizationInvitation } from './OrganizationInvitation.js'; +import { OrganizationInvitedUser } from './OrganizationInvitedUser.js'; +import { OrganizationLearner } from './OrganizationLearner.js'; +import { OrganizationMemberIdentity } from './OrganizationMemberIdentity.js'; +import { OrganizationPlacesLot } from './OrganizationPlacesLot.js'; +import { OrganizationTag } from './OrganizationTag.js'; +import { OrganizationsToAttachToTargetProfile } from './OrganizationsToAttachToTargetProfile.js'; +import { ParticipantResultsShared } from './ParticipantResultsShared.js'; +import { ParticipationForCampaignManagement } from './ParticipationForCampaignManagement.js'; +import { PartnerCertificationScoring } from './PartnerCertificationScoring.js'; +import { PlacementProfile } from './PlacementProfile.js'; +import { PoleEmploiSending } from './PoleEmploiSending.js'; +import { PrivateCertificate } from './PrivateCertificate.js'; +import { Progression } from './Progression.js'; +import { ReproducibilityRate } from './ReproducibilityRate.js'; +import { ResultCompetence } from './ResultCompetence.js'; +import { ResultCompetenceTree } from './ResultCompetenceTree.js'; +import { SCOCertificationCandidate } from './SCOCertificationCandidate.js'; +import { Scorecard } from './Scorecard.js'; +import { ScoringSimulation } from './ScoringSimulation.js'; +import { ScoringSimulationContext } from './ScoringSimulationContext.js'; +import { ScoringSimulationDataset } from './ScoringSimulationDataset.js'; +import { ScoringSimulationResult } from './ScoringSimulationResult.js'; +import { Session } from './Session.js'; +import { SessionJuryComment } from './SessionJuryComment.js'; +import { SessionPublicationBatchResult } from './SessionPublicationBatchResult.js'; +import { ShareableCertificate } from './ShareableCertificate.js'; +import { Skill } from './Skill.js'; +import { SkillSet } from './SkillSet.js'; +import { Solution } from './Solution.js'; +import { Stage } from './Stage.js'; +import { Student } from './Student.js'; +import { SupOrganizationLearner } from './SupOrganizationLearner.js'; +import { SupOrganizationLearnerSet } from './SupOrganizationLearnerSet.js'; +import { Tag } from './Tag.js'; +import { TargetProfile } from './TargetProfile.js'; +import { TargetProfileForAdmin } from './TargetProfileForAdmin.js'; +import { TargetProfileForCreation } from './TargetProfileForCreation.js'; +import { TargetProfileSummaryForAdmin } from './TargetProfileSummaryForAdmin.js'; +import { Thematic } from './Thematic.js'; +import { Training } from './Training.js'; +import { TrainingTrigger } from './TrainingTrigger.js'; +import { TrainingTriggerTube } from './TrainingTriggerTube.js'; +import { Tube } from './Tube.js'; +import { Tutorial } from './Tutorial.js'; +import { TutorialEvaluation } from './TutorialEvaluation.js'; +import { User } from './User.js'; +import { UserCompetence } from './UserCompetence.js'; +import { UserDetailsForAdmin } from './UserDetailsForAdmin.js'; +import { UserLogin } from './UserLogin.js'; +import { UserOrgaSettings } from './UserOrgaSettings.js'; +import { UserSavedTutorial } from './UserSavedTutorial.js'; +import { UserSavedTutorialWithTutorial } from './UserSavedTutorialWithTutorial.js'; +import { UserToCreate } from './UserToCreate.js'; +import { Validation } from './Validation.js'; +import { Validator } from './Validator.js'; +import { ValidatorAlwaysOK } from './ValidatorAlwaysOK.js'; +import { ValidatorQCM } from './ValidatorQCM.js'; +import { ValidatorQCU } from './ValidatorQCU.js'; +import { ValidatorQROC } from './ValidatorQROC.js'; +import { ValidatorQROCMDep } from './ValidatorQROCMDep.js'; +import { ValidatorQROCMInd } from './ValidatorQROCMInd.js'; +export { AccountRecoveryDemand, AdminMember, Answer, diff --git a/api/lib/domain/models/organizations-administration/Organization.js b/api/lib/domain/models/organizations-administration/Organization.js index 2d658e68205..db91de906a1 100644 --- a/api/lib/domain/models/organizations-administration/Organization.js +++ b/api/lib/domain/models/organizations-administration/Organization.js @@ -66,4 +66,4 @@ class OrganizationForAdmin { } } -module.exports = OrganizationForAdmin; +export { OrganizationForAdmin }; diff --git a/api/lib/domain/models/target-profile-management/StageCollection.js b/api/lib/domain/models/target-profile-management/StageCollection.js index 9bd138b8222..10ea5cf50e3 100644 --- a/api/lib/domain/models/target-profile-management/StageCollection.js +++ b/api/lib/domain/models/target-profile-management/StageCollection.js @@ -49,4 +49,4 @@ class StageCollection { } } -module.exports = StageCollection; +export { StageCollection }; diff --git a/api/lib/domain/models/target-profile-management/StageCollectionUpdate.js b/api/lib/domain/models/target-profile-management/StageCollectionUpdate.js index c7cce3c547c..7b3714c0d08 100644 --- a/api/lib/domain/models/target-profile-management/StageCollectionUpdate.js +++ b/api/lib/domain/models/target-profile-management/StageCollectionUpdate.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const { InvalidStageError } = require('../../errors.js'); +import _ from 'lodash'; +import { InvalidStageError } from '../../errors.js'; const DEFAULT_VALUE_FIRST_SKILL = -1; @@ -142,4 +142,4 @@ function _checkTargetProfileIds(stagesDTO, stageCollection) { } } -module.exports = StageCollectionUpdate; +export { StageCollectionUpdate }; diff --git a/api/lib/domain/models/user-campaign-results/StageCollection.js b/api/lib/domain/models/user-campaign-results/StageCollection.js index 6c7154c5b09..a2680a62ef6 100644 --- a/api/lib/domain/models/user-campaign-results/StageCollection.js +++ b/api/lib/domain/models/user-campaign-results/StageCollection.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; class StageCollection { constructor({ campaignId, stages }) { @@ -184,4 +184,4 @@ class StageCollection { } } -module.exports = StageCollection; +export { StageCollection }; diff --git a/api/lib/domain/read-models/AllowedCertificationCenterAccess.js b/api/lib/domain/read-models/AllowedCertificationCenterAccess.js index f532a852f5c..adf18017999 100644 --- a/api/lib/domain/read-models/AllowedCertificationCenterAccess.js +++ b/api/lib/domain/read-models/AllowedCertificationCenterAccess.js @@ -1,5 +1,5 @@ -const { features } = require('../../config.js'); - +import { config } from '../../config.js'; +const { features } = config; class AllowedCertificationCenterAccess { constructor({ id, @@ -79,4 +79,4 @@ class AllowedCertificationCenterAccess { } } -module.exports = AllowedCertificationCenterAccess; +export { AllowedCertificationCenterAccess }; diff --git a/api/lib/domain/read-models/CampaignAnalysis.js b/api/lib/domain/read-models/CampaignAnalysis.js index 4d8df9e9327..8bb072fb45c 100644 --- a/api/lib/domain/read-models/CampaignAnalysis.js +++ b/api/lib/domain/read-models/CampaignAnalysis.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const recommendationService = require('../services/recommendation-service.js'); +import _ from 'lodash'; +import * as recommendationService from '../services/recommendation-service.js'; class CampaignAnalysis { constructor({ campaignId, campaignLearningContent, tutorials, participantCount = 0 } = {}) { @@ -92,4 +92,4 @@ class CampaignTubeRecommendation { } } -module.exports = CampaignAnalysis; +export { CampaignAnalysis }; diff --git a/api/lib/domain/read-models/CampaignAssessmentParticipation.js b/api/lib/domain/read-models/CampaignAssessmentParticipation.js index e26ae9376ef..4b1270c0364 100644 --- a/api/lib/domain/read-models/CampaignAssessmentParticipation.js +++ b/api/lib/domain/read-models/CampaignAssessmentParticipation.js @@ -1,6 +1,6 @@ -const Assessment = require('../models/Assessment.js'); -const CampaignParticipationStatuses = require('../models/CampaignParticipationStatuses.js'); -const _ = require('lodash'); +import { Assessment } from '../models/Assessment.js'; +import { CampaignParticipationStatuses } from '../models/CampaignParticipationStatuses.js'; +import _ from 'lodash'; const { SHARED } = CampaignParticipationStatuses; @@ -64,4 +64,4 @@ class CampaignAssessmentParticipation { } } -module.exports = CampaignAssessmentParticipation; +export { CampaignAssessmentParticipation }; diff --git a/api/lib/domain/read-models/CampaignAssessmentParticipationCompetenceResult.js b/api/lib/domain/read-models/CampaignAssessmentParticipationCompetenceResult.js index 60ca2681d3a..f07915417d3 100644 --- a/api/lib/domain/read-models/CampaignAssessmentParticipationCompetenceResult.js +++ b/api/lib/domain/read-models/CampaignAssessmentParticipationCompetenceResult.js @@ -14,4 +14,4 @@ class CampaignAssessmentParticipationCompetenceResult { } } -module.exports = CampaignAssessmentParticipationCompetenceResult; +export { CampaignAssessmentParticipationCompetenceResult }; diff --git a/api/lib/domain/read-models/CampaignAssessmentParticipationResult.js b/api/lib/domain/read-models/CampaignAssessmentParticipationResult.js index 13b9437d40d..dfc447d06af 100644 --- a/api/lib/domain/read-models/CampaignAssessmentParticipationResult.js +++ b/api/lib/domain/read-models/CampaignAssessmentParticipationResult.js @@ -1,5 +1,5 @@ -const CampaignParticipationStatuses = require('../models/CampaignParticipationStatuses.js'); -const CampaignAssessmentParticipationCompetenceResult = require('./CampaignAssessmentParticipationCompetenceResult.js'); +import { CampaignParticipationStatuses } from '../models/CampaignParticipationStatuses.js'; +import { CampaignAssessmentParticipationCompetenceResult } from './CampaignAssessmentParticipationCompetenceResult.js'; const { SHARED } = CampaignParticipationStatuses; @@ -32,4 +32,4 @@ class CampaignAssessmentParticipationResult { } } -module.exports = CampaignAssessmentParticipationResult; +export { CampaignAssessmentParticipationResult }; diff --git a/api/lib/domain/read-models/CampaignCollectiveResult.js b/api/lib/domain/read-models/CampaignCollectiveResult.js index 930df6419a2..365a2af9d9d 100644 --- a/api/lib/domain/read-models/CampaignCollectiveResult.js +++ b/api/lib/domain/read-models/CampaignCollectiveResult.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; class CampaignCollectiveResult { constructor({ id, campaignLearningContent } = {}) { @@ -54,4 +54,4 @@ class CampaignCompetenceCollectiveResult { } } -module.exports = CampaignCollectiveResult; +export { CampaignCollectiveResult }; diff --git a/api/lib/domain/read-models/CampaignManagement.js b/api/lib/domain/read-models/CampaignManagement.js index 6505f0bb53a..32acc51f138 100644 --- a/api/lib/domain/read-models/CampaignManagement.js +++ b/api/lib/domain/read-models/CampaignManagement.js @@ -63,4 +63,4 @@ class CampaignManagement { } } -module.exports = CampaignManagement; +export { CampaignManagement }; diff --git a/api/lib/domain/read-models/CampaignParticipantActivity.js b/api/lib/domain/read-models/CampaignParticipantActivity.js index a1c7a659fe5..50d8d4c0932 100644 --- a/api/lib/domain/read-models/CampaignParticipantActivity.js +++ b/api/lib/domain/read-models/CampaignParticipantActivity.js @@ -10,4 +10,4 @@ class CampaignParticipantActivity { } } -module.exports = CampaignParticipantActivity; +export { CampaignParticipantActivity }; diff --git a/api/lib/domain/read-models/CampaignParticipationForUserManagement.js b/api/lib/domain/read-models/CampaignParticipationForUserManagement.js index 3b805dc0b2d..8502fabf69f 100644 --- a/api/lib/domain/read-models/CampaignParticipationForUserManagement.js +++ b/api/lib/domain/read-models/CampaignParticipationForUserManagement.js @@ -30,4 +30,4 @@ class CampaignParticipationForUserManagement { } } -module.exports = CampaignParticipationForUserManagement; +export { CampaignParticipationForUserManagement }; diff --git a/api/lib/domain/read-models/CampaignParticipationInfo.js b/api/lib/domain/read-models/CampaignParticipationInfo.js index f8f5e0cefb6..b74f2a1bad6 100644 --- a/api/lib/domain/read-models/CampaignParticipationInfo.js +++ b/api/lib/domain/read-models/CampaignParticipationInfo.js @@ -1,8 +1,8 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { validateEntity } = require('../validators/entity-validator.js'); -const _ = require('lodash'); +import { validateEntity } from '../validators/entity-validator.js'; +import _ from 'lodash'; const validationSchema = Joi.object({ participantFirstName: Joi.string().required().allow(''), @@ -57,4 +57,4 @@ class CampaignParticipationInfo { } } -module.exports = CampaignParticipationInfo; +export { CampaignParticipationInfo }; diff --git a/api/lib/domain/read-models/CampaignParticipationOverview.js b/api/lib/domain/read-models/CampaignParticipationOverview.js index e498a749f70..f60701ee2df 100644 --- a/api/lib/domain/read-models/CampaignParticipationOverview.js +++ b/api/lib/domain/read-models/CampaignParticipationOverview.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const CampaignParticipationStatuses = require('../models/CampaignParticipationStatuses.js'); +import _ from 'lodash'; +import { CampaignParticipationStatuses } from '../models/CampaignParticipationStatuses.js'; const { SHARED } = CampaignParticipationStatuses; @@ -46,4 +46,4 @@ class CampaignParticipationOverview { } } -module.exports = CampaignParticipationOverview; +export { CampaignParticipationOverview }; diff --git a/api/lib/domain/read-models/CampaignProfile.js b/api/lib/domain/read-models/CampaignProfile.js index b153b2b7a87..0e35e18ad4d 100644 --- a/api/lib/domain/read-models/CampaignProfile.js +++ b/api/lib/domain/read-models/CampaignProfile.js @@ -1,5 +1,5 @@ -const CampaignProfileCompetence = require('./CampaignProfileCompetence.js'); -const CampaignParticipationStatuses = require('../models/CampaignParticipationStatuses.js'); +import { CampaignProfileCompetence } from './CampaignProfileCompetence.js'; +import { CampaignParticipationStatuses } from '../models/CampaignParticipationStatuses.js'; const { SHARED } = CampaignParticipationStatuses; @@ -71,4 +71,4 @@ class CampaignProfile { } } -module.exports = CampaignProfile; +export { CampaignProfile }; diff --git a/api/lib/domain/read-models/CampaignProfileCompetence.js b/api/lib/domain/read-models/CampaignProfileCompetence.js index 9aea11bb9d0..f66351bce18 100644 --- a/api/lib/domain/read-models/CampaignProfileCompetence.js +++ b/api/lib/domain/read-models/CampaignProfileCompetence.js @@ -9,4 +9,4 @@ class CampaignProfileCompetence { } } -module.exports = CampaignProfileCompetence; +export { CampaignProfileCompetence }; diff --git a/api/lib/domain/read-models/CampaignProfilesCollectionParticipationSummary.js b/api/lib/domain/read-models/CampaignProfilesCollectionParticipationSummary.js index dab1f6f29a5..304241c7fb8 100644 --- a/api/lib/domain/read-models/CampaignProfilesCollectionParticipationSummary.js +++ b/api/lib/domain/read-models/CampaignProfilesCollectionParticipationSummary.js @@ -20,4 +20,4 @@ class CampaignProfilesCollectionParticipationSummary { } } -module.exports = CampaignProfilesCollectionParticipationSummary; +export { CampaignProfilesCollectionParticipationSummary }; diff --git a/api/lib/domain/read-models/CampaignReport.js b/api/lib/domain/read-models/CampaignReport.js index 53988211292..4b356ac98b9 100644 --- a/api/lib/domain/read-models/CampaignReport.js +++ b/api/lib/domain/read-models/CampaignReport.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const CampaignTypes = require('../models/CampaignTypes.js'); +import _ from 'lodash'; +import { CampaignTypes } from '../models/CampaignTypes.js'; class CampaignReport { constructor({ @@ -97,4 +97,4 @@ class CampaignReport { } } -module.exports = CampaignReport; +export { CampaignReport }; diff --git a/api/lib/domain/read-models/CampaignToJoin.js b/api/lib/domain/read-models/CampaignToJoin.js index b77584080c9..8b97fda50e2 100644 --- a/api/lib/domain/read-models/CampaignToJoin.js +++ b/api/lib/domain/read-models/CampaignToJoin.js @@ -1,5 +1,5 @@ -const Assessment = require('../models/Assessment.js'); -const CampaignTypes = require('../models/CampaignTypes.js'); +import { Assessment } from '../models/Assessment.js'; +import { CampaignTypes } from '../models/CampaignTypes.js'; class CampaignToJoin { constructor({ @@ -75,4 +75,4 @@ class CampaignToJoin { } } -module.exports = CampaignToJoin; +export { CampaignToJoin }; diff --git a/api/lib/domain/read-models/CertificationCandidateForAttendanceSheet.js b/api/lib/domain/read-models/CertificationCandidateForAttendanceSheet.js index db48456b2c3..4af01d1c572 100644 --- a/api/lib/domain/read-models/CertificationCandidateForAttendanceSheet.js +++ b/api/lib/domain/read-models/CertificationCandidateForAttendanceSheet.js @@ -1,4 +1,6 @@ -const isNil = require('lodash/isNil'); +import lodash from 'lodash'; + +const { isNil } = lodash; class CertificationCandidateForAttendanceSheet { constructor({ lastName, firstName, birthdate, externalId, division, extraTimePercentage }) { @@ -11,4 +13,4 @@ class CertificationCandidateForAttendanceSheet { } } -module.exports = CertificationCandidateForAttendanceSheet; +export { CertificationCandidateForAttendanceSheet }; diff --git a/api/lib/domain/read-models/CertificationCandidateSubscription.js b/api/lib/domain/read-models/CertificationCandidateSubscription.js index 8d5510b7b75..24dd4c7542a 100644 --- a/api/lib/domain/read-models/CertificationCandidateSubscription.js +++ b/api/lib/domain/read-models/CertificationCandidateSubscription.js @@ -1,8 +1,10 @@ -module.exports = class CertificationCandidateSubscription { +class CertificationCandidateSubscription { constructor({ id, sessionId, eligibleSubscriptions, nonEligibleSubscriptions }) { this.id = id; this.sessionId = sessionId; this.eligibleSubscriptions = eligibleSubscriptions; this.nonEligibleSubscriptions = nonEligibleSubscriptions; } -}; +} + +export { CertificationCandidateSubscription }; diff --git a/api/lib/domain/read-models/CertificationDetails.js b/api/lib/domain/read-models/CertificationDetails.js index 085dfc8e077..aa6084e63f3 100644 --- a/api/lib/domain/read-models/CertificationDetails.js +++ b/api/lib/domain/read-models/CertificationDetails.js @@ -1,6 +1,6 @@ -const _ = require('lodash'); -const AnswerCollectionForScoring = require('../models/AnswerCollectionForScoring.js'); -const { ReproducibilityRate } = require('../models/ReproducibilityRate.js'); +import _ from 'lodash'; +import { AnswerCollectionForScoring } from '../models/AnswerCollectionForScoring.js'; +import { ReproducibilityRate } from '../models/ReproducibilityRate.js'; class CertificationDetails { constructor({ @@ -150,4 +150,4 @@ function _getCompetenceIndexForChallenge(certificationChallenge, competencesWith return competenceWithMark ? competenceWithMark.index : ''; } -module.exports = CertificationDetails; +export { CertificationDetails }; diff --git a/api/lib/domain/read-models/CertificationEligibility.js b/api/lib/domain/read-models/CertificationEligibility.js index e89ac9521f6..d830631efd9 100644 --- a/api/lib/domain/read-models/CertificationEligibility.js +++ b/api/lib/domain/read-models/CertificationEligibility.js @@ -10,4 +10,4 @@ class CertificationEligibility { } } -module.exports = CertificationEligibility; +export { CertificationEligibility }; diff --git a/api/lib/domain/read-models/CertificationPointOfContact.js b/api/lib/domain/read-models/CertificationPointOfContact.js index a52d642f5dc..46725d0394c 100644 --- a/api/lib/domain/read-models/CertificationPointOfContact.js +++ b/api/lib/domain/read-models/CertificationPointOfContact.js @@ -18,4 +18,4 @@ class CertificationPointOfContact { } } -module.exports = CertificationPointOfContact; +export { CertificationPointOfContact }; diff --git a/api/lib/domain/read-models/CertifiedBadge.js b/api/lib/domain/read-models/CertifiedBadge.js index 059deff065b..4c4c2d730d9 100644 --- a/api/lib/domain/read-models/CertifiedBadge.js +++ b/api/lib/domain/read-models/CertifiedBadge.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; class CertifiedBadge { constructor({ partnerKey, label, imageUrl, stickerUrl, isTemporaryBadge, message }) { @@ -83,4 +83,4 @@ function _getAcquiredCertifiedBadgesDTOWithExternalJury(complementaryCertificati } } -module.exports = CertifiedBadge; +export { CertifiedBadge }; diff --git a/api/lib/domain/read-models/CertifiedProfile.js b/api/lib/domain/read-models/CertifiedProfile.js index 23fbcfcafa2..8fd67aab512 100644 --- a/api/lib/domain/read-models/CertifiedProfile.js +++ b/api/lib/domain/read-models/CertifiedProfile.js @@ -44,10 +44,4 @@ class CertifiedProfile { } } -module.exports = { - CertifiedProfile, - CertifiedArea, - CertifiedCompetence, - CertifiedTube, - CertifiedSkill, -}; +export { CertifiedProfile, CertifiedArea, CertifiedCompetence, CertifiedTube, CertifiedSkill }; diff --git a/api/lib/domain/read-models/ChallengeForPixAutoAnswer.js b/api/lib/domain/read-models/ChallengeForPixAutoAnswer.js index 8984c8432fa..1372bececd4 100644 --- a/api/lib/domain/read-models/ChallengeForPixAutoAnswer.js +++ b/api/lib/domain/read-models/ChallengeForPixAutoAnswer.js @@ -25,4 +25,4 @@ class ChallengeForPixAutoAnswer { ChallengeForPixAutoAnswer.Type = ChallengeType; -module.exports = ChallengeForPixAutoAnswer; +export { ChallengeForPixAutoAnswer }; diff --git a/api/lib/domain/read-models/CleaCertifiedCandidate.js b/api/lib/domain/read-models/CleaCertifiedCandidate.js index 78a6f785824..fd151d6dea8 100644 --- a/api/lib/domain/read-models/CleaCertifiedCandidate.js +++ b/api/lib/domain/read-models/CleaCertifiedCandidate.js @@ -47,4 +47,4 @@ class CleaCertifiedCandidate { } } -module.exports = CleaCertifiedCandidate; +export { CleaCertifiedCandidate }; diff --git a/api/lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification.js b/api/lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification.js index 211e44d78e6..6f521676da4 100644 --- a/api/lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification.js +++ b/api/lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification.js @@ -22,4 +22,4 @@ class ComplementaryCertificationCourseResultsForJuryCertification { ComplementaryCertificationCourseResultsForJuryCertification.statuses = complementaryCertificationStatus; -module.exports = ComplementaryCertificationCourseResultsForJuryCertification; +export { ComplementaryCertificationCourseResultsForJuryCertification }; diff --git a/api/lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal.js b/api/lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal.js index c7ab55f822c..458fb881d01 100644 --- a/api/lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal.js +++ b/api/lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal.js @@ -1,5 +1,10 @@ -const minBy = require('lodash/minBy'); -const { EXTERNAL, PIX } = require('../models/ComplementaryCertificationCourseResult.js').sources; +import lodash from 'lodash'; + +const { minBy } = lodash; + +import { sources } from '../models/ComplementaryCertificationCourseResult.js'; + +const { EXTERNAL, PIX } = sources; class ComplementaryCertificationCourseResultsForJuryCertificationWithExternal { constructor({ @@ -98,4 +103,4 @@ class Section { } } -module.exports = ComplementaryCertificationCourseResultsForJuryCertificationWithExternal; +export { ComplementaryCertificationCourseResultsForJuryCertificationWithExternal }; diff --git a/api/lib/domain/read-models/Country.js b/api/lib/domain/read-models/Country.js index 443bed6860e..29fcbfff640 100644 --- a/api/lib/domain/read-models/Country.js +++ b/api/lib/domain/read-models/Country.js @@ -6,6 +6,4 @@ class Country { } } -module.exports = { - Country, -}; +export { Country }; diff --git a/api/lib/domain/read-models/CpfCertificationResult.js b/api/lib/domain/read-models/CpfCertificationResult.js index 2f394d45c54..f89b863fd38 100644 --- a/api/lib/domain/read-models/CpfCertificationResult.js +++ b/api/lib/domain/read-models/CpfCertificationResult.js @@ -1,4 +1,4 @@ -const EuropeanNumericLevelFactory = require('./EuropeanNumericLevelFactory.js'); +import { EuropeanNumericLevelFactory } from './EuropeanNumericLevelFactory.js'; class CpfCertificationResult { constructor({ @@ -52,4 +52,4 @@ class CpfCertificationResult { } } -module.exports = CpfCertificationResult; +export { CpfCertificationResult }; diff --git a/api/lib/domain/read-models/EuropeanNumericLevel.js b/api/lib/domain/read-models/EuropeanNumericLevel.js index be0fab05101..8f0614e84b8 100644 --- a/api/lib/domain/read-models/EuropeanNumericLevel.js +++ b/api/lib/domain/read-models/EuropeanNumericLevel.js @@ -11,4 +11,4 @@ class EuropeanNumericLevel { } } -module.exports = EuropeanNumericLevel; +export { EuropeanNumericLevel }; diff --git a/api/lib/domain/read-models/EuropeanNumericLevelFactory.js b/api/lib/domain/read-models/EuropeanNumericLevelFactory.js index f31a85557d7..49eab555c97 100644 --- a/api/lib/domain/read-models/EuropeanNumericLevelFactory.js +++ b/api/lib/domain/read-models/EuropeanNumericLevelFactory.js @@ -1,6 +1,8 @@ -const uniqBy = require('lodash/uniqBy'); -const remove = require('lodash/remove'); -const EuropeanNumericLevel = require('./EuropeanNumericLevel.js'); +import lodash from 'lodash'; + +const { remove, uniqBy } = lodash; + +import { EuropeanNumericLevel } from './EuropeanNumericLevel.js'; class EuropeanNumericLevelFactory { static buildFromCompetenceMarks(competenceMarks) { @@ -94,4 +96,4 @@ function _areAtLeastOneCompetenceByDomain(competenceMarks) { return uniqBy(competenceMarks, 'areaCode').length === 5; } -module.exports = EuropeanNumericLevelFactory; +export { EuropeanNumericLevelFactory }; diff --git a/api/lib/domain/read-models/GeneralCertificationInformation.js b/api/lib/domain/read-models/GeneralCertificationInformation.js index c6947ce01cc..903d1a5e2cc 100644 --- a/api/lib/domain/read-models/GeneralCertificationInformation.js +++ b/api/lib/domain/read-models/GeneralCertificationInformation.js @@ -42,4 +42,4 @@ class GeneralCertificationInformation { } } -module.exports = GeneralCertificationInformation; +export { GeneralCertificationInformation }; diff --git a/api/lib/domain/read-models/JuryCertificationSummary.js b/api/lib/domain/read-models/JuryCertificationSummary.js index fd1b081b133..efac25cc24b 100644 --- a/api/lib/domain/read-models/JuryCertificationSummary.js +++ b/api/lib/domain/read-models/JuryCertificationSummary.js @@ -1,4 +1,4 @@ -const { status: assessmentResultStatuses } = require('../models/AssessmentResult.js'); +import { status as assessmentResultStatuses } from '../models/AssessmentResult.js'; const STARTED = 'started'; const ENDED_BY_SUPERVISOR = 'endedBySupervisor'; @@ -58,6 +58,8 @@ function _getStatus({ status, isEndedBySupervisor }) { return status; } +const statuses = { ...assessmentResultStatuses, STARTED, ENDED_BY_SUPERVISOR }; -module.exports = JuryCertificationSummary; -module.exports.statuses = { ...assessmentResultStatuses, STARTED, ENDED_BY_SUPERVISOR }; +JuryCertificationSummary.statuses = statuses; + +export { JuryCertificationSummary, statuses }; diff --git a/api/lib/domain/read-models/OrganizationLearnerActivity.js b/api/lib/domain/read-models/OrganizationLearnerActivity.js index 3cea4e9bf70..af7e32224d4 100644 --- a/api/lib/domain/read-models/OrganizationLearnerActivity.js +++ b/api/lib/domain/read-models/OrganizationLearnerActivity.js @@ -1,5 +1,7 @@ -const CampaignTypes = require('../models/CampaignTypes.js'); -const countBy = require('lodash/countBy'); +import { CampaignTypes } from '../models/CampaignTypes.js'; +import lodash from 'lodash'; + +const { countBy } = lodash; class OrganizationLearnerActivity { constructor({ organizationLearnerId, participations }) { @@ -36,4 +38,4 @@ function _statistics(participations) { return Object.values(CampaignTypes).map((campaignType) => _getStatisticsForType(participations, campaignType)); } -module.exports = OrganizationLearnerActivity; +export { OrganizationLearnerActivity }; diff --git a/api/lib/domain/read-models/OrganizationLearnerForAdmin.js b/api/lib/domain/read-models/OrganizationLearnerForAdmin.js index 0a47bbadd28..045dd180aa1 100644 --- a/api/lib/domain/read-models/OrganizationLearnerForAdmin.js +++ b/api/lib/domain/read-models/OrganizationLearnerForAdmin.js @@ -1,7 +1,7 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { validateEntity } = require('../validators/entity-validator.js'); +import { validateEntity } from '../validators/entity-validator.js'; const validationSchema = Joi.object({ id: Joi.number().integer().required(), @@ -50,4 +50,4 @@ class OrganizationLearnerForAdmin { } } -module.exports = OrganizationLearnerForAdmin; +export { OrganizationLearnerForAdmin }; diff --git a/api/lib/domain/read-models/OrganizationLearnerParticipation.js b/api/lib/domain/read-models/OrganizationLearnerParticipation.js index 90f5df48687..5995df51eb5 100644 --- a/api/lib/domain/read-models/OrganizationLearnerParticipation.js +++ b/api/lib/domain/read-models/OrganizationLearnerParticipation.js @@ -10,4 +10,4 @@ class OrganizationLearnerParticipation { } } -module.exports = OrganizationLearnerParticipation; +export { OrganizationLearnerParticipation }; diff --git a/api/lib/domain/read-models/OrganizationParticipant.js b/api/lib/domain/read-models/OrganizationParticipant.js index 8d3c6a3c7eb..b9920fd9b76 100644 --- a/api/lib/domain/read-models/OrganizationParticipant.js +++ b/api/lib/domain/read-models/OrganizationParticipant.js @@ -24,4 +24,4 @@ class OrganizationParticipant { } } -module.exports = OrganizationParticipant; +export { OrganizationParticipant }; diff --git a/api/lib/domain/read-models/OrganizationPlacesCapacity.js b/api/lib/domain/read-models/OrganizationPlacesCapacity.js index 31bee5b3aa5..6cbb015e19b 100644 --- a/api/lib/domain/read-models/OrganizationPlacesCapacity.js +++ b/api/lib/domain/read-models/OrganizationPlacesCapacity.js @@ -1,5 +1,8 @@ -const sumBy = require('lodash/sumBy'); -const categories = require('../constants/organization-places-categories.js'); +import lodash from 'lodash'; + +const { sumBy } = lodash; + +import * as categories from '../constants/organization-places-categories.js'; const categoriesByCode = { [categories.T0]: categories.FREE_RATE, @@ -29,4 +32,4 @@ class OrganizationPlacesCapacity { } } -module.exports = OrganizationPlacesCapacity; +export { OrganizationPlacesCapacity }; diff --git a/api/lib/domain/read-models/OrganizationPlacesLotManagement.js b/api/lib/domain/read-models/OrganizationPlacesLotManagement.js index c7901b4f7a2..b86c7b31212 100644 --- a/api/lib/domain/read-models/OrganizationPlacesLotManagement.js +++ b/api/lib/domain/read-models/OrganizationPlacesLotManagement.js @@ -1,4 +1,4 @@ -const categories = require('../constants/organization-places-categories.js'); +import * as categories from '../constants/organization-places-categories.js'; const statuses = { ACTIVE: 'ACTIVE', @@ -53,4 +53,4 @@ function _setStatus(activationDate, expirationDate) { OrganizationPlacesLotManagement.statuses = statuses; OrganizationPlacesLotManagement.categories = categoriesByCode; -module.exports = OrganizationPlacesLotManagement; +export { OrganizationPlacesLotManagement }; diff --git a/api/lib/domain/read-models/Prescriber.js b/api/lib/domain/read-models/Prescriber.js index 8455b9ee689..0193723e99c 100644 --- a/api/lib/domain/read-models/Prescriber.js +++ b/api/lib/domain/read-models/Prescriber.js @@ -24,4 +24,4 @@ class Prescriber { } } -module.exports = Prescriber; +export { Prescriber }; diff --git a/api/lib/domain/read-models/ScoOrganizationParticipant.js b/api/lib/domain/read-models/ScoOrganizationParticipant.js index 22387cbf22d..117a36eb83b 100644 --- a/api/lib/domain/read-models/ScoOrganizationParticipant.js +++ b/api/lib/domain/read-models/ScoOrganizationParticipant.js @@ -36,4 +36,4 @@ class ScoOrganizationParticipant { } } -module.exports = ScoOrganizationParticipant; +export { ScoOrganizationParticipant }; diff --git a/api/lib/domain/read-models/SessionForAttendanceSheet.js b/api/lib/domain/read-models/SessionForAttendanceSheet.js index bea68377bd4..0726c3d8d6a 100644 --- a/api/lib/domain/read-models/SessionForAttendanceSheet.js +++ b/api/lib/domain/read-models/SessionForAttendanceSheet.js @@ -24,4 +24,4 @@ class SessionForAttendanceSheet { } } -module.exports = SessionForAttendanceSheet; +export { SessionForAttendanceSheet }; diff --git a/api/lib/domain/read-models/SessionForSupervising.js b/api/lib/domain/read-models/SessionForSupervising.js index 1370bf17660..cbf0491d5e7 100644 --- a/api/lib/domain/read-models/SessionForSupervising.js +++ b/api/lib/domain/read-models/SessionForSupervising.js @@ -11,4 +11,4 @@ class SessionForSupervising { } } -module.exports = SessionForSupervising; +export { SessionForSupervising }; diff --git a/api/lib/domain/read-models/SessionForSupervisorKit.js b/api/lib/domain/read-models/SessionForSupervisorKit.js index 9e0cffdbe09..16c04a59ec0 100644 --- a/api/lib/domain/read-models/SessionForSupervisorKit.js +++ b/api/lib/domain/read-models/SessionForSupervisorKit.js @@ -11,4 +11,4 @@ class SessionForSupervisorKit { } } -module.exports = SessionForSupervisorKit; +export { SessionForSupervisorKit }; diff --git a/api/lib/domain/read-models/SessionSummary.js b/api/lib/domain/read-models/SessionSummary.js index 36692e13312..edbf7094a55 100644 --- a/api/lib/domain/read-models/SessionSummary.js +++ b/api/lib/domain/read-models/SessionSummary.js @@ -1,4 +1,4 @@ -const { statuses } = require('../models/Session.js'); +import { statuses } from '../models/Session.js'; class SessionSummary { constructor({ @@ -70,4 +70,4 @@ SessionSummary.statuses = { PROCESSED: statuses.PROCESSED, }; -module.exports = SessionSummary; +export { SessionSummary }; diff --git a/api/lib/domain/read-models/SharedProfileForCampaign.js b/api/lib/domain/read-models/SharedProfileForCampaign.js index e2b08d847bf..3690d8fd484 100644 --- a/api/lib/domain/read-models/SharedProfileForCampaign.js +++ b/api/lib/domain/read-models/SharedProfileForCampaign.js @@ -1,6 +1,8 @@ -const map = require('lodash/map'); -const isEmpty = require('lodash/isEmpty'); -const Scorecard = require('../models/Scorecard.js'); +import lodash from 'lodash'; + +const { map, isEmpty } = lodash; + +import { Scorecard } from '../models/Scorecard.js'; class SharedProfileForCampaign { constructor({ @@ -49,4 +51,4 @@ class SharedProfileForCampaign { } } -module.exports = SharedProfileForCampaign; +export { SharedProfileForCampaign }; diff --git a/api/lib/domain/read-models/StudentForEnrolment.js b/api/lib/domain/read-models/StudentForEnrolment.js index daa279de63e..292bb7fed25 100644 --- a/api/lib/domain/read-models/StudentForEnrolment.js +++ b/api/lib/domain/read-models/StudentForEnrolment.js @@ -22,4 +22,4 @@ class StudentForEnrolment { } } -module.exports = StudentForEnrolment; +export { StudentForEnrolment }; diff --git a/api/lib/domain/read-models/StudentInformationForAccountRecovery.js b/api/lib/domain/read-models/StudentInformationForAccountRecovery.js index 89b55d96ff8..17e73c728fe 100644 --- a/api/lib/domain/read-models/StudentInformationForAccountRecovery.js +++ b/api/lib/domain/read-models/StudentInformationForAccountRecovery.js @@ -8,4 +8,4 @@ class StudentInformationForAccountRecovery { } } -module.exports = StudentInformationForAccountRecovery; +export { StudentInformationForAccountRecovery }; diff --git a/api/lib/domain/read-models/SupOrganizationParticipant.js b/api/lib/domain/read-models/SupOrganizationParticipant.js index 511977aebda..bb6a719e929 100644 --- a/api/lib/domain/read-models/SupOrganizationParticipant.js +++ b/api/lib/domain/read-models/SupOrganizationParticipant.js @@ -30,4 +30,4 @@ class SupOrganizationParticipant { } } -module.exports = SupOrganizationParticipant; +export { SupOrganizationParticipant }; diff --git a/api/lib/domain/read-models/TrainingForAdmin.js b/api/lib/domain/read-models/TrainingForAdmin.js index 028fad947e7..7af8eb255b0 100644 --- a/api/lib/domain/read-models/TrainingForAdmin.js +++ b/api/lib/domain/read-models/TrainingForAdmin.js @@ -28,4 +28,4 @@ class TrainingForAdmin { } } -module.exports = TrainingForAdmin; +export { TrainingForAdmin }; diff --git a/api/lib/domain/read-models/TrainingSummary.js b/api/lib/domain/read-models/TrainingSummary.js index ca3dc4936eb..e4b9c0a09b2 100644 --- a/api/lib/domain/read-models/TrainingSummary.js +++ b/api/lib/domain/read-models/TrainingSummary.js @@ -6,4 +6,4 @@ class TrainingSummary { } } -module.exports = TrainingSummary; +export { TrainingSummary }; diff --git a/api/lib/domain/read-models/TrainingTriggerForAdmin.js b/api/lib/domain/read-models/TrainingTriggerForAdmin.js index 1d9ed51e532..1cbab7c6d71 100644 --- a/api/lib/domain/read-models/TrainingTriggerForAdmin.js +++ b/api/lib/domain/read-models/TrainingTriggerForAdmin.js @@ -1,4 +1,6 @@ -const types = require('../models/TrainingTrigger.js').types; +import { TrainingTrigger } from '../models/TrainingTrigger.js'; + +const { types } = TrainingTrigger; class TrainingTriggerForAdmin { constructor({ id, trainingId, triggerTubes, type, threshold, areas = [], competences = [], thematics = [] } = {}) { @@ -14,7 +16,7 @@ class TrainingTriggerForAdmin { } } -TrainingTriggerForAdmin.types = types; +TrainingTriggerForAdmin.types = TrainingTrigger.types; class _Area { constructor({ id, title, code, color, competences = [], thematics = [], triggerTubes = [] } = {}) { @@ -51,4 +53,4 @@ class _Thematic { } } -module.exports = TrainingTriggerForAdmin; +export { TrainingTriggerForAdmin }; diff --git a/api/lib/domain/read-models/TutorialForUser.js b/api/lib/domain/read-models/TutorialForUser.js index 75d4db053d9..b886f8e0ba4 100644 --- a/api/lib/domain/read-models/TutorialForUser.js +++ b/api/lib/domain/read-models/TutorialForUser.js @@ -1,4 +1,4 @@ -const Tutorial = require('../models/Tutorial.js'); +import { Tutorial } from '../models/Tutorial.js'; class TutorialForUser extends Tutorial { constructor({ userSavedTutorial, tutorialEvaluation, skillId, ...tutorial }) { @@ -9,4 +9,4 @@ class TutorialForUser extends Tutorial { } } -module.exports = TutorialForUser; +export { TutorialForUser }; diff --git a/api/lib/domain/read-models/UserOrganizationForAdmin.js b/api/lib/domain/read-models/UserOrganizationForAdmin.js index 8b83ffa7336..a9266a4d176 100644 --- a/api/lib/domain/read-models/UserOrganizationForAdmin.js +++ b/api/lib/domain/read-models/UserOrganizationForAdmin.js @@ -18,4 +18,4 @@ class UserOrganizationForAdmin { } } -module.exports = UserOrganizationForAdmin; +export { UserOrganizationForAdmin }; diff --git a/api/lib/domain/read-models/UserRecommendedTraining.js b/api/lib/domain/read-models/UserRecommendedTraining.js index 8a12e7a8a81..44460f529ec 100644 --- a/api/lib/domain/read-models/UserRecommendedTraining.js +++ b/api/lib/domain/read-models/UserRecommendedTraining.js @@ -11,4 +11,4 @@ class UserRecommendedTraining { } } -module.exports = UserRecommendedTraining; +export { UserRecommendedTraining }; diff --git a/api/lib/domain/read-models/UserWithActivity.js b/api/lib/domain/read-models/UserWithActivity.js index 1ce461e4541..f7c6d5f9ae5 100644 --- a/api/lib/domain/read-models/UserWithActivity.js +++ b/api/lib/domain/read-models/UserWithActivity.js @@ -14,4 +14,4 @@ class UserWithActivity { } } -module.exports = UserWithActivity; +export { UserWithActivity }; diff --git a/api/lib/domain/read-models/campaign-results/CampaignAssessmentParticipationResultMinimal.js b/api/lib/domain/read-models/campaign-results/CampaignAssessmentParticipationResultMinimal.js index 132a8ce4dd7..873d9ad715b 100644 --- a/api/lib/domain/read-models/campaign-results/CampaignAssessmentParticipationResultMinimal.js +++ b/api/lib/domain/read-models/campaign-results/CampaignAssessmentParticipationResultMinimal.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; class CampaignAssessmentParticipationResultMinimal { constructor({ @@ -28,4 +28,4 @@ class CampaignAssessmentParticipationResultMinimal { } } -module.exports = CampaignAssessmentParticipationResultMinimal; +export { CampaignAssessmentParticipationResultMinimal }; diff --git a/api/lib/domain/read-models/campaign/TargetProfileForSpecifier.js b/api/lib/domain/read-models/campaign/TargetProfileForSpecifier.js index 57e89705060..ea9dcca3a44 100644 --- a/api/lib/domain/read-models/campaign/TargetProfileForSpecifier.js +++ b/api/lib/domain/read-models/campaign/TargetProfileForSpecifier.js @@ -10,4 +10,4 @@ class TargetProfileForSpecifier { } } -module.exports = TargetProfileForSpecifier; +export { TargetProfileForSpecifier }; diff --git a/api/lib/domain/read-models/livret-scolaire/Area.js b/api/lib/domain/read-models/livret-scolaire/Area.js index 82c198249df..11c5c334fe1 100644 --- a/api/lib/domain/read-models/livret-scolaire/Area.js +++ b/api/lib/domain/read-models/livret-scolaire/Area.js @@ -7,4 +7,4 @@ class Area { } } -module.exports = Area; +export { Area }; diff --git a/api/lib/domain/read-models/livret-scolaire/Certificate.js b/api/lib/domain/read-models/livret-scolaire/Certificate.js index 8df6064caa7..664db487718 100644 --- a/api/lib/domain/read-models/livret-scolaire/Certificate.js +++ b/api/lib/domain/read-models/livret-scolaire/Certificate.js @@ -1,4 +1,4 @@ -const { VALIDATED, PENDING } = require('./CertificateStatus.js'); +import { VALIDATED, PENDING } from './CertificateStatus.js'; class Certificate { constructor({ @@ -76,7 +76,7 @@ class Certificate { } } -module.exports = Certificate; +export { Certificate }; function _isValidated(status) { return status === VALIDATED; diff --git a/api/lib/domain/read-models/livret-scolaire/CertificateStatus.js b/api/lib/domain/read-models/livret-scolaire/CertificateStatus.js index 18d85f6528d..5a829a2cc40 100644 --- a/api/lib/domain/read-models/livret-scolaire/CertificateStatus.js +++ b/api/lib/domain/read-models/livret-scolaire/CertificateStatus.js @@ -1,7 +1,11 @@ +const REJECTED = 'rejected'; +const VALIDATED = 'validated'; +const PENDING = 'pending'; + const status = { - REJECTED: 'rejected', - VALIDATED: 'validated', - PENDING: 'pending', + REJECTED, + VALIDATED, + PENDING, }; -module.exports = status; +export { status, REJECTED, VALIDATED, PENDING }; diff --git a/api/lib/domain/read-models/livret-scolaire/CertificationsResults.js b/api/lib/domain/read-models/livret-scolaire/CertificationsResults.js index d23780ecc92..c237be0fdf8 100644 --- a/api/lib/domain/read-models/livret-scolaire/CertificationsResults.js +++ b/api/lib/domain/read-models/livret-scolaire/CertificationsResults.js @@ -5,4 +5,4 @@ class CertificationsResults { } } -module.exports = CertificationsResults; +export { CertificationsResults }; diff --git a/api/lib/domain/read-models/livret-scolaire/Competence.js b/api/lib/domain/read-models/livret-scolaire/Competence.js index 6f536548c2b..106332acfd3 100644 --- a/api/lib/domain/read-models/livret-scolaire/Competence.js +++ b/api/lib/domain/read-models/livret-scolaire/Competence.js @@ -6,4 +6,4 @@ class Competence { } } -module.exports = Competence; +export { Competence }; diff --git a/api/lib/domain/read-models/livret-scolaire/CompetenceResults.js b/api/lib/domain/read-models/livret-scolaire/CompetenceResults.js index be66ab45cac..36df026e602 100644 --- a/api/lib/domain/read-models/livret-scolaire/CompetenceResults.js +++ b/api/lib/domain/read-models/livret-scolaire/CompetenceResults.js @@ -4,4 +4,4 @@ class CompetenceResults { } } -module.exports = CompetenceResults; +export { CompetenceResults }; diff --git a/api/lib/domain/read-models/organization-learner-follow-up/OrganizationLearner.js b/api/lib/domain/read-models/organization-learner-follow-up/OrganizationLearner.js index e761769d6f1..5df1b60fe82 100644 --- a/api/lib/domain/read-models/organization-learner-follow-up/OrganizationLearner.js +++ b/api/lib/domain/read-models/organization-learner-follow-up/OrganizationLearner.js @@ -24,4 +24,4 @@ class OrganizationLearner { } } -module.exports = OrganizationLearner; +export { OrganizationLearner }; diff --git a/api/lib/domain/read-models/participant-results/AssessmentResult.js b/api/lib/domain/read-models/participant-results/AssessmentResult.js index 09d4125a634..36de457c5a9 100644 --- a/api/lib/domain/read-models/participant-results/AssessmentResult.js +++ b/api/lib/domain/read-models/participant-results/AssessmentResult.js @@ -1,7 +1,11 @@ -const BadgeResult = require('./BadgeResult.js'); -const CompetenceResult = require('./CompetenceResult.js'); -const { constants } = require('../../constants.js'); -const moment = require('moment'); +import { BadgeResult } from './BadgeResult.js'; +import { CompetenceResult } from './CompetenceResult.js'; +import { + MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING, + MAX_MASTERY_RATE, + MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING, +} from '../../constants.js'; +import moment from 'moment'; class AssessmentResult { constructor({ @@ -98,7 +102,7 @@ class AssessmentResult { knowledgeElements.filter((knowledgeElement) => { const isOldEnoughToBeImproved = moment(assessmentCreatedAt).diff(knowledgeElement.createdAt, 'days', true) >= - constants.MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING; + MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING; return knowledgeElement.isInvalidated && isOldEnoughToBeImproved; }).length > 0; return isImprovementPossible && !isShared; @@ -108,7 +112,7 @@ class AssessmentResult { return ( isCampaignMultipleSendings && this._timeBeforeRetryingPassed(sharedAt) && - masteryRate < constants.MAX_MASTERY_RATE && + masteryRate < MAX_MASTERY_RATE && isOrganizationLearnerActive && !isDisabled ); @@ -121,7 +125,7 @@ class AssessmentResult { _timeBeforeRetryingPassed(sharedAt) { const isShared = Boolean(sharedAt); if (!isShared) return false; - return sharedAt && moment().diff(sharedAt, 'days', true) >= constants.MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING; + return sharedAt && moment().diff(sharedAt, 'days', true) >= MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING; } } @@ -143,4 +147,4 @@ function _buildCompetenceResult({ }); } -module.exports = AssessmentResult; +export { AssessmentResult }; diff --git a/api/lib/domain/read-models/participant-results/BadgeResult.js b/api/lib/domain/read-models/participant-results/BadgeResult.js index 486482175c2..52dd687790b 100644 --- a/api/lib/domain/read-models/participant-results/BadgeResult.js +++ b/api/lib/domain/read-models/participant-results/BadgeResult.js @@ -1,4 +1,4 @@ -const SkillSetResult = require('./SkillSetResult.js'); +import { SkillSetResult } from './SkillSetResult.js'; class BadgeResult { constructor(badge, participationResults) { @@ -27,4 +27,4 @@ function _buildSkillSetResult(badgeCompetence, knowledgeElements) { return new SkillSetResult(badgeCompetence, competenceKnowledgeElements); } -module.exports = BadgeResult; +export { BadgeResult }; diff --git a/api/lib/domain/read-models/participant-results/CompetenceResult.js b/api/lib/domain/read-models/participant-results/CompetenceResult.js index 9d9d8986af5..9b56c2eb3c7 100644 --- a/api/lib/domain/read-models/participant-results/CompetenceResult.js +++ b/api/lib/domain/read-models/participant-results/CompetenceResult.js @@ -25,4 +25,4 @@ class CompetenceResult { } } -module.exports = CompetenceResult; +export { CompetenceResult }; diff --git a/api/lib/domain/read-models/participant-results/SkillSetResult.js b/api/lib/domain/read-models/participant-results/SkillSetResult.js index a72a71913f8..21f1a06de57 100644 --- a/api/lib/domain/read-models/participant-results/SkillSetResult.js +++ b/api/lib/domain/read-models/participant-results/SkillSetResult.js @@ -12,4 +12,4 @@ class SkillSetResult { } } -module.exports = SkillSetResult; +export { SkillSetResult }; diff --git a/api/lib/domain/services/algorithm-methods/cat-algorithm.js b/api/lib/domain/services/algorithm-methods/cat-algorithm.js index ab5cc6ca4a6..219bba06869 100644 --- a/api/lib/domain/services/algorithm-methods/cat-algorithm.js +++ b/api/lib/domain/services/algorithm-methods/cat-algorithm.js @@ -1,15 +1,9 @@ -const KnowledgeElement = require('../../models/KnowledgeElement.js'); -const _ = require('lodash'); -const { pipe } = require('lodash/fp'); - -// This file implements methods useful for a CAT algorithm -// https://en.wikipedia.org/wiki/Computerized_adaptive_testing -// https://en.wikipedia.org/wiki/Item_response_theory - -module.exports = { - findMaxRewardingSkills, - getPredictedLevel, -}; +import { KnowledgeElement } from '../../models/KnowledgeElement.js'; +import _ from 'lodash'; +import fp from 'lodash/fp.js'; + +const { pipe } = fp; +export { findMaxRewardingSkills, getPredictedLevel }; function getPredictedLevel(knowledgeElements, skills) { return _.maxBy(_enumerateCatLevels(), (level) => diff --git a/api/lib/domain/services/algorithm-methods/data-fetcher.js b/api/lib/domain/services/algorithm-methods/data-fetcher.js index 553dbaf2435..22cc5d0eda9 100644 --- a/api/lib/domain/services/algorithm-methods/data-fetcher.js +++ b/api/lib/domain/services/algorithm-methods/data-fetcher.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; async function fetchForCampaigns({ assessment, @@ -115,9 +115,4 @@ async function fetchForFlashLevelEstimation({ assessment, answerRepository, chal }; } -module.exports = { - fetchForCampaigns, - fetchForCompetenceEvaluations, - fetchForFlashCampaigns, - fetchForFlashLevelEstimation, -}; +export { fetchForCampaigns, fetchForCompetenceEvaluations, fetchForFlashCampaigns, fetchForFlashLevelEstimation }; diff --git a/api/lib/domain/services/algorithm-methods/flash.js b/api/lib/domain/services/algorithm-methods/flash.js index 29185c428c9..c94c1b2df07 100644 --- a/api/lib/domain/services/algorithm-methods/flash.js +++ b/api/lib/domain/services/algorithm-methods/flash.js @@ -1,6 +1,8 @@ -const { orderBy, range, sortBy, sortedUniqBy, sumBy } = require('lodash'); +import lodash from 'lodash'; -const config = require('../../../config.js'); +const { orderBy, range, sortBy, sortedUniqBy, sumBy } = lodash; + +import { config } from '../../../config.js'; const DEFAULT_ESTIMATED_LEVEL = 0; const START_OF_SAMPLES = -9; @@ -11,7 +13,7 @@ const DEFAULT_PROBABILITY_TO_ANSWER = 1; const DEFAULT_ERROR_RATE = 5; const ERROR_RATE_CLASS_INTERVAL = 9 / 80; -module.exports = { +export { getPossibleNextChallenges, getEstimatedLevelAndErrorRate, getChallengesForNonAnsweredSkills, diff --git a/api/lib/domain/services/algorithm-methods/skills-filter.js b/api/lib/domain/services/algorithm-methods/skills-filter.js index c6f215a1379..0c658d352e4 100644 --- a/api/lib/domain/services/algorithm-methods/skills-filter.js +++ b/api/lib/domain/services/algorithm-methods/skills-filter.js @@ -1,11 +1,15 @@ -const _ = require('lodash'); -const { pipe } = require('lodash/fp'); -const { constants } = require('../../constants.js'); +import _ from 'lodash'; -module.exports = { - getFilteredSkillsForFirstChallenge, - getFilteredSkillsForNextChallenge, -}; +import fp from 'lodash/fp.js'; + +const { pipe } = fp; +import { + MAX_LEVEL_TO_BE_AN_EASY_TUBE, + MAX_DIFF_BETWEEN_USER_LEVEL_AND_SKILL_LEVEL, + DEFAULT_LEVEL_FOR_FIRST_CHALLENGE, +} from '../../constants.js'; + +export { getFilteredSkillsForFirstChallenge, getFilteredSkillsForNextChallenge }; function getFilteredSkillsForFirstChallenge({ knowledgeElements, tubes, targetSkills }) { return pipe( @@ -55,7 +59,7 @@ function _keepSkillsFromEasyTubes(tubes, targetSkills) { } function _getEasyTubes(tubes) { - return _.filter(tubes, (tube) => tube.getHardestSkill().difficulty <= constants.MAX_LEVEL_TO_BE_AN_EASY_TUBE); + return _.filter(tubes, (tube) => tube.getHardestSkill().difficulty <= MAX_LEVEL_TO_BE_AN_EASY_TUBE); } function _getSkillsFromTubes(tubes) { @@ -83,7 +87,7 @@ function _focusOnDefaultLevel(targetSkills) { } const remapDifficulty = (difficulty) => - difficulty == constants.DEFAULT_LEVEL_FOR_FIRST_CHALLENGE ? Number.MIN_VALUE : difficulty; + difficulty == DEFAULT_LEVEL_FOR_FIRST_CHALLENGE ? Number.MIN_VALUE : difficulty; const [, potentialFirstSkills] = _(targetSkills) .groupBy('difficulty') .entries() @@ -97,5 +101,5 @@ function _removeTooDifficultSkills(predictedLevel, targetSkills) { } function _isSkillTooHard(skill, predictedLevel) { - return skill.difficulty - predictedLevel > constants.MAX_DIFF_BETWEEN_USER_LEVEL_AND_SKILL_LEVEL; + return skill.difficulty - predictedLevel > MAX_DIFF_BETWEEN_USER_LEVEL_AND_SKILL_LEVEL; } diff --git a/api/lib/domain/services/algorithm-methods/smart-random.js b/api/lib/domain/services/algorithm-methods/smart-random.js index 4237360da6b..3d4b7869232 100644 --- a/api/lib/domain/services/algorithm-methods/smart-random.js +++ b/api/lib/domain/services/algorithm-methods/smart-random.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const catAlgorithm = require('./cat-algorithm.js'); -const { getFilteredSkillsForNextChallenge, getFilteredSkillsForFirstChallenge } = require('./skills-filter.js'); -const { computeTubesFromSkills } = require('./../tube-service.js'); +import _ from 'lodash'; +import * as catAlgorithm from './cat-algorithm.js'; +import { getFilteredSkillsForNextChallenge, getFilteredSkillsForFirstChallenge } from './skills-filter.js'; +import { computeTubesFromSkills } from './../tube-service.js'; -module.exports = { getPossibleSkillsForNextChallenge }; +export { getPossibleSkillsForNextChallenge }; function getPossibleSkillsForNextChallenge({ knowledgeElements, diff --git a/api/lib/domain/services/assessment-result-service.js b/api/lib/domain/services/assessment-result-service.js index c2f3bfce0fa..061f02a06c5 100644 --- a/api/lib/domain/services/assessment-result-service.js +++ b/api/lib/domain/services/assessment-result-service.js @@ -1,7 +1,7 @@ -const assessmentResultRepository = require('../../infrastructure/repositories/assessment-result-repository.js'); -const competenceMarkRepository = require('../../infrastructure/repositories/competence-mark-repository.js'); -const CompetenceMark = require('../models/CompetenceMark.js'); -const bluebird = require('bluebird'); +import * as assessmentResultRepository from '../../infrastructure/repositories/assessment-result-repository.js'; +import * as competenceMarkRepository from '../../infrastructure/repositories/competence-mark-repository.js'; +import { CompetenceMark } from '../models/CompetenceMark.js'; +import bluebird from 'bluebird'; async function _validatedDataForAllCompetenceMark(competenceMarks) { for (const competenceMark of competenceMarks) { @@ -28,6 +28,4 @@ async function save({ ); } -module.exports = { - save, -}; +export { save }; diff --git a/api/lib/domain/services/authentication/authentication-service-registry.js b/api/lib/domain/services/authentication/authentication-service-registry.js index ace133df8aa..d57a3a915b1 100644 --- a/api/lib/domain/services/authentication/authentication-service-registry.js +++ b/api/lib/domain/services/authentication/authentication-service-registry.js @@ -1,5 +1,5 @@ -const OidcIdentityProviders = require('../../constants/oidc-identity-providers.js'); -const { InvalidIdentityProviderError } = require('../../errors.js'); +import * as OidcIdentityProviders from '../../constants/oidc-identity-providers.js'; +import { InvalidIdentityProviderError } from '../../errors.js'; function lookupAuthenticationService(identityProvider) { const identityProviderService = Object.values(OidcIdentityProviders).find( @@ -11,6 +11,4 @@ function lookupAuthenticationService(identityProvider) { return identityProviderService.service; } -module.exports = { - lookupAuthenticationService, -}; +export { lookupAuthenticationService }; diff --git a/api/lib/domain/services/authentication/authentication-session-service.js b/api/lib/domain/services/authentication/authentication-session-service.js index 1412c3af672..741aa1552ee 100644 --- a/api/lib/domain/services/authentication/authentication-session-service.js +++ b/api/lib/domain/services/authentication/authentication-session-service.js @@ -1,22 +1,22 @@ -const settings = require('../../../config.js'); -const { temporaryStorage } = require('../../../infrastructure/temporary-storage/index.js'); +import { config } from '../../../config.js'; +import { temporaryStorage } from '../../../infrastructure/temporary-storage/index.js'; const authenticationSessionTemporaryStorage = temporaryStorage.withPrefix('authentication-session:'); -const EXPIRATION_DELAY_SECONDS = settings.authenticationSession.temporaryStorage.expirationDelaySeconds; +const EXPIRATION_DELAY_SECONDS = config.authenticationSession.temporaryStorage.expirationDelaySeconds; -module.exports = { - getByKey(key) { - return authenticationSessionTemporaryStorage.get(key); - }, +const getByKey = function (key) { + return authenticationSessionTemporaryStorage.get(key); +}; - save(authenticationContent) { - return authenticationSessionTemporaryStorage.save({ - value: authenticationContent, - expirationDelaySeconds: EXPIRATION_DELAY_SECONDS, - }); - }, +const save = function (authenticationContent) { + return authenticationSessionTemporaryStorage.save({ + value: authenticationContent, + expirationDelaySeconds: EXPIRATION_DELAY_SECONDS, + }); +}; - update(key, value) { - authenticationSessionTemporaryStorage.update(key, value); - }, +const update = function (key, value) { + authenticationSessionTemporaryStorage.update(key, value); }; + +export { getByKey, save, update }; diff --git a/api/lib/domain/services/authentication/cnav-oidc-authentication-service.js b/api/lib/domain/services/authentication/cnav-oidc-authentication-service.js index d61ba906f65..5e07f23507b 100644 --- a/api/lib/domain/services/authentication/cnav-oidc-authentication-service.js +++ b/api/lib/domain/services/authentication/cnav-oidc-authentication-service.js @@ -1,5 +1,5 @@ -const settings = require('../../../config.js'); -const OidcAuthenticationService = require('./oidc-authentication-service.js'); +import { config } from '../../../config.js'; +import { OidcAuthenticationService } from './oidc-authentication-service.js'; class CnavOidcAuthenticationService extends OidcAuthenticationService { constructor() { @@ -9,15 +9,15 @@ class CnavOidcAuthenticationService extends OidcAuthenticationService { slug: 'cnav', organizationName: 'CNAV', hasLogoutUrl: false, - jwtOptions: { expiresIn: settings.cnav.accessTokenLifespanMs / 1000 }, - clientSecret: settings.cnav.clientSecret, - clientId: settings.cnav.clientId, - tokenUrl: settings.cnav.tokenUrl, - authenticationUrl: settings.cnav.authenticationUrl, + jwtOptions: { expiresIn: config.cnav.accessTokenLifespanMs / 1000 }, + clientSecret: config.cnav.clientSecret, + clientId: config.cnav.clientId, + tokenUrl: config.cnav.tokenUrl, + authenticationUrl: config.cnav.authenticationUrl, authenticationUrlParameters: [{ key: 'scope', value: 'openid profile' }], - userInfoUrl: settings.cnav.userInfoUrl, + userInfoUrl: config.cnav.userInfoUrl, }); } } -module.exports = CnavOidcAuthenticationService; +export { CnavOidcAuthenticationService }; diff --git a/api/lib/domain/services/authentication/fwb-oidc-authentication-service.js b/api/lib/domain/services/authentication/fwb-oidc-authentication-service.js index 6bf3e25042f..1771f2fe878 100644 --- a/api/lib/domain/services/authentication/fwb-oidc-authentication-service.js +++ b/api/lib/domain/services/authentication/fwb-oidc-authentication-service.js @@ -1,7 +1,7 @@ -const { v4: uuidv4 } = require('uuid'); -const settings = require('../../../config.js'); -const OidcAuthenticationService = require('./oidc-authentication-service.js'); -const { temporaryStorage } = require('../../../infrastructure/temporary-storage/index.js'); +import { v4 as uuidv4 } from 'uuid'; +import { config } from '../../../config.js'; +import { OidcAuthenticationService } from './oidc-authentication-service.js'; +import { temporaryStorage } from '../../../infrastructure/temporary-storage/index.js'; const logoutUrlTemporaryStorage = temporaryStorage.withPrefix('logout-url:'); @@ -13,17 +13,17 @@ class FwbOidcAuthenticationService extends OidcAuthenticationService { slug: 'fwb', organizationName: 'Fédération Wallonie-Bruxelles', hasLogoutUrl: true, - jwtOptions: { expiresIn: settings.fwb.accessTokenLifespanMs / 1000 }, - clientSecret: settings.fwb.clientSecret, - clientId: settings.fwb.clientId, - tokenUrl: settings.fwb.tokenUrl, - authenticationUrl: settings.fwb.authenticationUrl, + jwtOptions: { expiresIn: config.fwb.accessTokenLifespanMs / 1000 }, + clientSecret: config.fwb.clientSecret, + clientId: config.fwb.clientId, + tokenUrl: config.fwb.tokenUrl, + authenticationUrl: config.fwb.authenticationUrl, authenticationUrlParameters: [{ key: 'scope', value: 'openid profile' }], - userInfoUrl: settings.fwb.userInfoUrl, + userInfoUrl: config.fwb.userInfoUrl, }); - this.logoutUrl = settings.fwb.logoutUrl; - this.temporaryStorage = settings.fwb.temporaryStorage; + this.logoutUrl = config.fwb.logoutUrl; + this.temporaryStorage = config.fwb.temporaryStorage; } async getRedirectLogoutUrl({ userId, logoutUrlUUID }) { @@ -53,4 +53,4 @@ class FwbOidcAuthenticationService extends OidcAuthenticationService { } } -module.exports = FwbOidcAuthenticationService; +export { FwbOidcAuthenticationService }; diff --git a/api/lib/domain/services/authentication/oidc-authentication-service.js b/api/lib/domain/services/authentication/oidc-authentication-service.js index 6973a5e1f18..5e64b027c98 100644 --- a/api/lib/domain/services/authentication/oidc-authentication-service.js +++ b/api/lib/domain/services/authentication/oidc-authentication-service.js @@ -1,21 +1,22 @@ -const jsonwebtoken = require('jsonwebtoken'); -const querystring = require('querystring'); -const { v4: uuidv4 } = require('uuid'); +import jsonwebtoken from 'jsonwebtoken'; +import querystring from 'querystring'; +import { v4 as uuidv4 } from 'uuid'; -const { +import { InvalidExternalAPIResponseError, OidcInvokingTokenEndpointError, OidcMissingFieldsError, OidcUserInfoFormatError, -} = require('../../errors.js'); -const AuthenticationMethod = require('../../models/AuthenticationMethod.js'); -const AuthenticationSessionContent = require('../../models/AuthenticationSessionContent.js'); -const settings = require('../../../config.js'); -const httpAgent = require('../../../infrastructure/http/http-agent.js'); -const httpErrorsHelper = require('../../../infrastructure/http/errors-helper.js'); -const DomainTransaction = require('../../../infrastructure/DomainTransaction.js'); -const monitoringTools = require('../../../infrastructure/monitoring-tools.js'); -const { OIDC_ERRORS } = require('../../constants.js'); +} from '../../errors.js'; + +import { AuthenticationMethod } from '../../models/AuthenticationMethod.js'; +import { AuthenticationSessionContent } from '../../models/AuthenticationSessionContent.js'; +import { config } from '../../../config.js'; +import { httpAgent } from '../../../infrastructure/http/http-agent.js'; +import * as httpErrorsHelper from '../../../infrastructure/http/errors-helper.js'; +import { DomainTransaction } from '../../../infrastructure/DomainTransaction.js'; +import { monitoringTools } from '../../../infrastructure/monitoring-tools.js'; +import { OIDC_ERRORS } from '../../constants.js'; class OidcAuthenticationService { constructor({ @@ -51,7 +52,7 @@ class OidcAuthenticationService { } createAccessToken(userId) { - return jsonwebtoken.sign({ user_id: userId }, settings.authentication.secret, this.jwtOptions); + return jsonwebtoken.sign({ user_id: userId }, config.authentication.secret, this.jwtOptions); } createAuthenticationComplement() { @@ -75,7 +76,7 @@ class OidcAuthenticationService { url: this.tokenUrl, payload: querystring.stringify(data), headers: { 'content-type': 'application/x-www-form-urlencoded' }, - timeout: settings.partner.fetchTimeOut, + timeout: config.partner.fetchTimeOut, }); if (!httpResponse.isSuccessful) { @@ -116,7 +117,7 @@ class OidcAuthenticationService { const httpResponse = await httpAgent.get({ url: userInfoUrl, headers: { Authorization: `Bearer ${accessToken}` }, - timeout: settings.partner.fetchTimeOut, + timeout: config.partner.fetchTimeOut, }); if (!httpResponse.isSuccessful) { @@ -223,4 +224,4 @@ class OidcAuthenticationService { } } -module.exports = OidcAuthenticationService; +export { OidcAuthenticationService }; diff --git a/api/lib/domain/services/authentication/pix-authentication-service.js b/api/lib/domain/services/authentication/pix-authentication-service.js index 4ca6eb5d22b..5e38d95cca4 100644 --- a/api/lib/domain/services/authentication/pix-authentication-service.js +++ b/api/lib/domain/services/authentication/pix-authentication-service.js @@ -1,6 +1,6 @@ -const { PasswordNotMatching } = require('../../errors.js'); -const encryptionService = require('../encryption-service.js'); -const userLoginRepository = require('../../../infrastructure/repositories/user-login-repository.js'); +import { PasswordNotMatching } from '../../errors.js'; +import * as encryptionService from '../encryption-service.js'; +import * as userLoginRepository from '../../../infrastructure/repositories/user-login-repository.js'; async function getUserByUsernameAndPassword({ username, @@ -45,6 +45,4 @@ async function getUserByUsernameAndPassword({ return foundUser; } -module.exports = { - getUserByUsernameAndPassword, -}; +export { getUserByUsernameAndPassword }; diff --git a/api/lib/domain/services/authentication/pole-emploi-oidc-authentication-service.js b/api/lib/domain/services/authentication/pole-emploi-oidc-authentication-service.js index cbb61202a33..2309ebec511 100644 --- a/api/lib/domain/services/authentication/pole-emploi-oidc-authentication-service.js +++ b/api/lib/domain/services/authentication/pole-emploi-oidc-authentication-service.js @@ -1,15 +1,16 @@ -const settings = require('../../../config.js'); -const OidcAuthenticationService = require('./oidc-authentication-service.js'); -const DomainTransaction = require('../../../infrastructure/DomainTransaction.js'); -const AuthenticationMethod = require('../../models/AuthenticationMethod.js'); -const dayjs = require('dayjs'); -const { v4: uuidv4 } = require('uuid'); -const { temporaryStorage } = require('../../../infrastructure/temporary-storage/index.js'); +import { config } from '../../../config.js'; +import { OidcAuthenticationService } from './oidc-authentication-service.js'; +import { DomainTransaction } from '../../../infrastructure/DomainTransaction.js'; +import { AuthenticationMethod } from '../../models/AuthenticationMethod.js'; +import dayjs from 'dayjs'; +import { v4 as uuidv4 } from 'uuid'; +import { temporaryStorage } from '../../../infrastructure/temporary-storage/index.js'; + const logoutUrlTemporaryStorage = temporaryStorage.withPrefix('logout-url:'); class PoleEmploiOidcAuthenticationService extends OidcAuthenticationService { constructor() { - const clientId = settings.poleEmploi.clientId; + const clientId = config.poleEmploi.clientId; // Attention, les scopes serviceDigitauxExposition api_peconnect-servicesdigitauxv1 ne sont pas présents dans la documentation de Pole Emploi mais ils sont nécessaires à l'envoi des résultats const authenticationUrlParameters = [ { key: 'realm', value: '/individu' }, @@ -25,18 +26,18 @@ class PoleEmploiOidcAuthenticationService extends OidcAuthenticationService { slug: 'pole-emploi', organizationName: 'Pôle Emploi', hasLogoutUrl: true, - jwtOptions: { expiresIn: settings.poleEmploi.accessTokenLifespanMs / 1000 }, - clientSecret: settings.poleEmploi.clientSecret, + jwtOptions: { expiresIn: config.poleEmploi.accessTokenLifespanMs / 1000 }, + clientSecret: config.poleEmploi.clientSecret, clientId: clientId, - tokenUrl: settings.poleEmploi.tokenUrl, - authenticationUrl: settings.poleEmploi.authenticationUrl, + tokenUrl: config.poleEmploi.tokenUrl, + authenticationUrl: config.poleEmploi.authenticationUrl, authenticationUrlParameters, - userInfoUrl: settings.poleEmploi.userInfoUrl, + userInfoUrl: config.poleEmploi.userInfoUrl, }); - this.logoutUrl = settings.poleEmploi.logoutUrl; - this.afterLogoutUrl = settings.poleEmploi.afterLogoutUrl; - this.temporaryStorage = settings.poleEmploi.temporaryStorage; + this.logoutUrl = config.poleEmploi.logoutUrl; + this.afterLogoutUrl = config.poleEmploi.afterLogoutUrl; + this.temporaryStorage = config.poleEmploi.temporaryStorage; } // Override because we need idToken to send results after a campaign @@ -103,4 +104,4 @@ class PoleEmploiOidcAuthenticationService extends OidcAuthenticationService { } } -module.exports = PoleEmploiOidcAuthenticationService; +export { PoleEmploiOidcAuthenticationService }; diff --git a/api/lib/domain/services/campaign-csv-export-service.js b/api/lib/domain/services/campaign-csv-export-service.js index c05e9960ca8..8f8cfd2ef73 100644 --- a/api/lib/domain/services/campaign-csv-export-service.js +++ b/api/lib/domain/services/campaign-csv-export-service.js @@ -1,10 +1,8 @@ -const CampaignAssessmentCsvLine = require('../../infrastructure/utils/CampaignAssessmentCsvLine.js'); -const csvSerializer = require('../../infrastructure/serializers/csv/csv-serializer.js'); -const campaignParticipationService = require('../services/campaign-participation-service.js'); +import { CampaignAssessmentCsvLine } from '../../infrastructure/utils/CampaignAssessmentCsvLine.js'; +import * as csvSerializer from '../../infrastructure/serializers/csv/csv-serializer.js'; +import * as campaignParticipationService from '../services/campaign-participation-service.js'; -module.exports = { - createOneCsvLine, -}; +export { createOneCsvLine }; function createOneCsvLine({ organization, diff --git a/api/lib/domain/services/campaign-participation-service.js b/api/lib/domain/services/campaign-participation-service.js index 43cdd1e3b4c..9cbcf2de65e 100644 --- a/api/lib/domain/services/campaign-participation-service.js +++ b/api/lib/domain/services/campaign-participation-service.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; function progress(campaignParticipationCompleted, numberOfKnowledgeElements, numberOfSkillsInTargetProfile) { if (campaignParticipationCompleted) { @@ -7,6 +7,4 @@ function progress(campaignParticipationCompleted, numberOfKnowledgeElements, num return _.round(numberOfKnowledgeElements / numberOfSkillsInTargetProfile, 3); } -module.exports = { - progress, -}; +export { progress }; diff --git a/api/lib/domain/services/campaigns/campaign-code-generator.js b/api/lib/domain/services/campaigns/campaign-code-generator.js index 1ad8f4b856e..51df6de8462 100644 --- a/api/lib/domain/services/campaigns/campaign-code-generator.js +++ b/api/lib/domain/services/campaigns/campaign-code-generator.js @@ -1,4 +1,4 @@ -const randomString = require('randomstring'); +import randomString from 'randomstring'; function generate(campaignRepository, pendingList = []) { const letters = randomString.generate({ @@ -23,6 +23,4 @@ function generate(campaignRepository, pendingList = []) { }); } -module.exports = { - generate, -}; +export { generate }; diff --git a/api/lib/domain/services/certification-badges-service.js b/api/lib/domain/services/certification-badges-service.js index d624c3b537f..df4061eabcc 100644 --- a/api/lib/domain/services/certification-badges-service.js +++ b/api/lib/domain/services/certification-badges-service.js @@ -1,38 +1,38 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); -const certifiableBadgeAcquisitionRepository = require('../../infrastructure/repositories/certifiable-badge-acquisition-repository.js'); -const knowledgeElementRepository = require('../../infrastructure/repositories/knowledge-element-repository.js'); -const badgeForCalculationRepository = require('../../infrastructure/repositories/badge-for-calculation-repository.js'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import * as certifiableBadgeAcquisitionRepository from '../../infrastructure/repositories/certifiable-badge-acquisition-repository.js'; +import * as knowledgeElementRepository from '../../infrastructure/repositories/knowledge-element-repository.js'; +import * as badgeForCalculationRepository from '../../infrastructure/repositories/badge-for-calculation-repository.js'; -module.exports = { - async findStillValidBadgeAcquisitions({ - userId, - domainTransaction, - dependencies = { certifiableBadgeAcquisitionRepository, knowledgeElementRepository, badgeForCalculationRepository }, - }) { - const highestCertifiableBadgeAcquisitions = - await dependencies.certifiableBadgeAcquisitionRepository.findHighestCertifiable({ - userId, - domainTransaction, - }); - - const knowledgeElements = await dependencies.knowledgeElementRepository.findUniqByUserId({ +const findStillValidBadgeAcquisitions = async function ({ + userId, + domainTransaction, + dependencies = { certifiableBadgeAcquisitionRepository, knowledgeElementRepository, badgeForCalculationRepository }, +}) { + const highestCertifiableBadgeAcquisitions = + await dependencies.certifiableBadgeAcquisitionRepository.findHighestCertifiable({ userId, domainTransaction, }); - const badgeAcquisitions = await bluebird.mapSeries( - highestCertifiableBadgeAcquisitions, - async (certifiableBadgeAcquisition) => { - const badgeForCalculation = await dependencies.badgeForCalculationRepository.getByCertifiableBadgeAcquisition({ - certifiableBadgeAcquisition, - }); - if (!badgeForCalculation) return null; - const isBadgeValid = badgeForCalculation.shouldBeObtained(knowledgeElements); - return isBadgeValid ? certifiableBadgeAcquisition : null; - } - ); + const knowledgeElements = await dependencies.knowledgeElementRepository.findUniqByUserId({ + userId, + domainTransaction, + }); + + const badgeAcquisitions = await bluebird.mapSeries( + highestCertifiableBadgeAcquisitions, + async (certifiableBadgeAcquisition) => { + const badgeForCalculation = await dependencies.badgeForCalculationRepository.getByCertifiableBadgeAcquisition({ + certifiableBadgeAcquisition, + }); + if (!badgeForCalculation) return null; + const isBadgeValid = badgeForCalculation.shouldBeObtained(knowledgeElements); + return isBadgeValid ? certifiableBadgeAcquisition : null; + } + ); - return _.compact(badgeAcquisitions); - }, + return _.compact(badgeAcquisitions); }; + +export { findStillValidBadgeAcquisitions }; diff --git a/api/lib/domain/services/certification-candidates-ods-service.js b/api/lib/domain/services/certification-candidates-ods-service.js index f74bb6cb1a1..5588f9b45c5 100644 --- a/api/lib/domain/services/certification-candidates-ods-service.js +++ b/api/lib/domain/services/certification-candidates-ods-service.js @@ -1,21 +1,17 @@ -const readOdsUtils = require('../../infrastructure/utils/ods/read-ods-utils.js'); -const { - getTransformationStructsForPixCertifCandidatesImport, -} = require('../../infrastructure/files/candidates-import/candidates-import-transformation-structures.js'); -const CertificationCandidate = require('../models/CertificationCandidate.js'); -const { +import * as readOdsUtils from '../../infrastructure/utils/ods/read-ods-utils.js'; +import { getTransformationStructsForPixCertifCandidatesImport } from '../../infrastructure/files/candidates-import/candidates-import-transformation-structures.js'; +import { CertificationCandidate } from '../models/CertificationCandidate.js'; +import { CLEA, PIX_PLUS_DROIT, PIX_PLUS_EDU_1ER_DEGRE, PIX_PLUS_EDU_2ND_DEGRE, -} = require('../models/ComplementaryCertification.js'); -const { CertificationCandidatesImportError } = require('../errors.js'); -const _ = require('lodash'); -const bluebird = require('bluebird'); - -module.exports = { - extractCertificationCandidatesFromCandidatesImportSheet, -}; +} from '../models/ComplementaryCertification.js'; +import { CertificationCandidatesImportError } from '../errors.js'; +import _ from 'lodash'; +import bluebird from 'bluebird'; + +export { extractCertificationCandidatesFromCandidatesImportSheet }; async function extractCertificationCandidatesFromCandidatesImportSheet({ i18n, diff --git a/api/lib/domain/services/certification-challenges-service.js b/api/lib/domain/services/certification-challenges-service.js index 39956a185bd..6bcaa24bc7b 100644 --- a/api/lib/domain/services/certification-challenges-service.js +++ b/api/lib/domain/services/certification-challenges-service.js @@ -1,81 +1,81 @@ -const _ = require('lodash'); +import _ from 'lodash'; -const CertificationChallenge = require('../models/CertificationChallenge.js'); +import { CertificationChallenge } from '../models/CertificationChallenge.js'; -const { +import { MAX_CHALLENGES_PER_COMPETENCE_FOR_CERTIFICATION, MAX_CHALLENGES_PER_AREA_FOR_CERTIFICATION_PLUS, PIX_ORIGIN, -} = require('../constants.js'); - -const KnowledgeElement = require('../models/KnowledgeElement.js'); -const Challenge = require('../models/Challenge.js'); - -const challengeRepository = require('../../infrastructure/repositories/challenge-repository.js'); -const answerRepository = require('../../infrastructure/repositories/answer-repository.js'); -const knowledgeElementRepository = require('../../infrastructure/repositories/knowledge-element-repository.js'); -const learningContentRepository = require('../../infrastructure/repositories/learning-content-repository.js'); -const certifiableProfileForLearningContentRepository = require('../../infrastructure/repositories/certifiable-profile-for-learning-content-repository.js'); - -module.exports = { - async pickCertificationChallenges( - placementProfile, - locale, - injectedKnowledgeElementRepository = knowledgeElementRepository, - injectedAnswerRepository = answerRepository, - injectedChallengeRepository = challengeRepository - ) { - const certifiableUserCompetences = placementProfile.getCertifiableUserCompetences(); - - const alreadyAnsweredChallengeIds = await _getAlreadyAnsweredChallengeIds( - injectedKnowledgeElementRepository, - injectedAnswerRepository, - placementProfile.userId, - placementProfile.profileDate - ); +} from '../constants.js'; - const allOperativeChallengesForLocale = await injectedChallengeRepository.findOperativeHavingLocale(locale); +import { KnowledgeElement } from '../models/KnowledgeElement.js'; +import { Challenge } from '../models/Challenge.js'; - return _pickCertificationChallengesForCertifiableCompetences( - certifiableUserCompetences, - alreadyAnsweredChallengeIds, - allOperativeChallengesForLocale - ); - }, +import * as challengeRepository from '../../infrastructure/repositories/challenge-repository.js'; +import * as answerRepository from '../../infrastructure/repositories/answer-repository.js'; +import * as knowledgeElementRepository from '../../infrastructure/repositories/knowledge-element-repository.js'; +import * as learningContentRepository from '../../infrastructure/repositories/learning-content-repository.js'; +import * as certifiableProfileForLearningContentRepository from '../../infrastructure/repositories/certifiable-profile-for-learning-content-repository.js'; - async pickCertificationChallengesForPixPlus( - campaignId, - badgeKey, - userId, - locale, - injectedLearningContentRepository = learningContentRepository, - injectedCertifiableProfileForLearningContentRepository = certifiableProfileForLearningContentRepository, - injectedChallengeRepository = challengeRepository - ) { - const learningContent = await injectedLearningContentRepository.findByCampaignId(campaignId, locale); - const certifiableProfile = await injectedCertifiableProfileForLearningContentRepository.get({ - id: userId, - profileDate: new Date(), - learningContent, - }); +const pickCertificationChallenges = async function ( + placementProfile, + locale, + injectedKnowledgeElementRepository = knowledgeElementRepository, + injectedAnswerRepository = answerRepository, + injectedChallengeRepository = challengeRepository +) { + const certifiableUserCompetences = placementProfile.getCertifiableUserCompetences(); - const excludedOrigins = [PIX_ORIGIN]; - const skillIdsByDecreasingDifficultyGroupedByArea = - certifiableProfile.getOrderedCertifiableSkillsByDecreasingDifficultyGroupedByAreaId(excludedOrigins); + const alreadyAnsweredChallengeIds = await _getAlreadyAnsweredChallengeIds( + injectedKnowledgeElementRepository, + injectedAnswerRepository, + placementProfile.userId, + placementProfile.profileDate + ); - const alreadyAnsweredChallengeIds = certifiableProfile.getAlreadyAnsweredChallengeIds(); + const allOperativeChallengesForLocale = await injectedChallengeRepository.findOperativeHavingLocale(locale); - const allOperativeChallengesForLocale = await injectedChallengeRepository.findOperativeHavingLocale(locale); - return _pickCertificationChallengesForAllAreas( - skillIdsByDecreasingDifficultyGroupedByArea, - alreadyAnsweredChallengeIds, - allOperativeChallengesForLocale, - learningContent, - badgeKey - ); - }, + return _pickCertificationChallengesForCertifiableCompetences( + certifiableUserCompetences, + alreadyAnsweredChallengeIds, + allOperativeChallengesForLocale + ); +}; + +const pickCertificationChallengesForPixPlus = async function ( + campaignId, + badgeKey, + userId, + locale, + injectedLearningContentRepository = learningContentRepository, + injectedCertifiableProfileForLearningContentRepository = certifiableProfileForLearningContentRepository, + injectedChallengeRepository = challengeRepository +) { + const learningContent = await injectedLearningContentRepository.findByCampaignId(campaignId, locale); + const certifiableProfile = await injectedCertifiableProfileForLearningContentRepository.get({ + id: userId, + profileDate: new Date(), + learningContent, + }); + + const excludedOrigins = [PIX_ORIGIN]; + const skillIdsByDecreasingDifficultyGroupedByArea = + certifiableProfile.getOrderedCertifiableSkillsByDecreasingDifficultyGroupedByAreaId(excludedOrigins); + + const alreadyAnsweredChallengeIds = certifiableProfile.getAlreadyAnsweredChallengeIds(); + + const allOperativeChallengesForLocale = await injectedChallengeRepository.findOperativeHavingLocale(locale); + return _pickCertificationChallengesForAllAreas( + skillIdsByDecreasingDifficultyGroupedByArea, + alreadyAnsweredChallengeIds, + allOperativeChallengesForLocale, + learningContent, + badgeKey + ); }; +export { pickCertificationChallenges, pickCertificationChallengesForPixPlus }; + async function _getAlreadyAnsweredChallengeIds( injectedKnowledgeElementRepository = knowledgeElementRepository, injectedAnswerRepository = answerRepository, diff --git a/api/lib/domain/services/certification-cpf-service.js b/api/lib/domain/services/certification-cpf-service.js index 53f30503711..479964ca763 100644 --- a/api/lib/domain/services/certification-cpf-service.js +++ b/api/lib/domain/services/certification-cpf-service.js @@ -1,6 +1,9 @@ -const { normalizeAndSortChars } = require('../../infrastructure/utils/string-utils.js'); -const isEmpty = require('lodash/isEmpty'); -const { CERTIFICATION_CANDIDATES_ERRORS } = require('../constants/certification-candidates-errors'); +import { normalizeAndSortChars } from '../../infrastructure/utils/string-utils.js'; +import lodash from 'lodash'; + +const { isEmpty } = lodash; + +import { CERTIFICATION_CANDIDATES_ERRORS } from '../constants/certification-candidates-errors.js'; const CpfValidationStatus = { FAILURE: 'FAILURE', @@ -238,8 +241,4 @@ function _getActualCity(cities) { return actualCity.name; } -module.exports = { - getBirthInformation, - CpfBirthInformationValidation, - CpfValidationStatus, -}; +export { getBirthInformation, CpfBirthInformationValidation, CpfValidationStatus }; diff --git a/api/lib/domain/services/course-service.js b/api/lib/domain/services/course-service.js index f93f788cd4a..397c77546e0 100644 --- a/api/lib/domain/services/course-service.js +++ b/api/lib/domain/services/course-service.js @@ -1,21 +1,21 @@ -const _ = require('lodash'); -const Course = require('../models/Course.js'); -const { NotFoundError } = require('../../domain/errors.js'); +import _ from 'lodash'; +import { Course } from '../models/Course.js'; +import { NotFoundError } from '../../domain/errors.js'; -const courseRepository = require('../../infrastructure/repositories/course-repository.js'); +import * as courseRepository from '../../infrastructure/repositories/course-repository.js'; -module.exports = { - async getCourse({ courseId, dependencies = { courseRepository } }) { - // TODO: delete when campaign assessment does not have courses anymore - if (_.startsWith(courseId, '[NOT USED] Campaign')) { - return Promise.resolve(new Course({ id: courseId })); - } +const getCourse = async function ({ courseId, dependencies = { courseRepository } }) { + // TODO: delete when campaign assessment does not have courses anymore + if (_.startsWith(courseId, '[NOT USED] Campaign')) { + return Promise.resolve(new Course({ id: courseId })); + } - // TODO This repo switch should not be here because we make a technical discrimination on the course id - if (_.startsWith(courseId, 'rec')) { - return dependencies.courseRepository.get(courseId); - } + // TODO This repo switch should not be here because we make a technical discrimination on the course id + if (_.startsWith(courseId, 'rec')) { + return dependencies.courseRepository.get(courseId); + } - throw new NotFoundError(); - }, + throw new NotFoundError(); }; + +export { getCourse }; diff --git a/api/lib/domain/services/cpf-certification-xml-export-service.js b/api/lib/domain/services/cpf-certification-xml-export-service.js index 00b350c9617..ef2c444d1d5 100644 --- a/api/lib/domain/services/cpf-certification-xml-export-service.js +++ b/api/lib/domain/services/cpf-certification-xml-export-service.js @@ -1,16 +1,18 @@ -const { cpf } = require('../../config.js'); -const { create, fragment } = require('xmlbuilder2'); -const { v4: uuidv4 } = require('uuid'); -const dayjs = require('dayjs'); -const utc = require('dayjs/plugin/utc'); -const timezone = require('dayjs/plugin/timezone'); +import { config } from '../../config.js'; +import xmlbuilder2 from 'xmlbuilder2'; + +const { create, fragment } = xmlbuilder2; + +import dayjs from 'dayjs'; +import utc from 'dayjs/plugin/utc.js'; +import timezone from 'dayjs/plugin/timezone.js'; dayjs.extend(utc); dayjs.extend(timezone); const schemaVersion = '1.0.0'; - +const { cpf } = config; // prettier-ignore -async function buildXmlExport({ cpfCertificationResults, writableStream, opts = {}}) { +async function buildXmlExport({ cpfCertificationResults, writableStream, opts = {}, uuidService}) { const overrideOpts = { allowEmptyTags: true, }; const PLACEHOLDER = 'PLACEHOLDER'; const formatedDate = dayjs().tz('Europe/Paris').format('YYYY-MM-DDThh:mm:ss') + '+01:00'; @@ -19,7 +21,7 @@ async function buildXmlExport({ cpfCertificationResults, writableStream, opts = 'xmlns:cpf': `urn:cdc:cpf:pc5:schema:${schemaVersion}`, 'xmlns:xsi': 'http://www.w3.org/2001/XMLSchema-instance', }) - .ele('cpf:idFlux').txt(uuidv4()).up() + .ele('cpf:idFlux').txt(uuidService.v4()).up() .ele('cpf:horodatage').txt(formatedDate).up() .ele('cpf:emetteur') .ele('cpf:idClient').txt(cpf.idClient).up() @@ -143,7 +145,7 @@ async function buildXmlExport({ cpfCertificationResults, writableStream, opts = } communeNaissance .up() - + details .ele('cpf:libelleCommuneNaissance').txt(birthplace) .up() @@ -161,14 +163,12 @@ async function buildXmlExport({ cpfCertificationResults, writableStream, opts = .up(); await _write(writableStream, line.end({ ...opts, ...overrideOpts, })); } - + await _write(writableStream, headerClosingTag); writableStream.end(); } -module.exports = { - buildXmlExport, -}; +export { buildXmlExport }; function _write(writableStream, data) { return new Promise((resolve) => { diff --git a/api/lib/domain/services/email-validator.js b/api/lib/domain/services/email-validator.js index 1fba6868ad8..af652ba9981 100644 --- a/api/lib/domain/services/email-validator.js +++ b/api/lib/domain/services/email-validator.js @@ -1,12 +1,12 @@ -module.exports = { - emailIsValid(email) { - if (!email) { - return false; - } - // Source: http://stackoverflow.com/a/46181/5430854 - const pattern = - /^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/i; +const emailIsValid = function (email) { + if (!email) { + return false; + } + // Source: http://stackoverflow.com/a/46181/5430854 + const pattern = + /^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/i; - return pattern.test(email.trim()); - }, + return pattern.test(email.trim()); }; + +export { emailIsValid }; diff --git a/api/lib/domain/services/encryption-service.js b/api/lib/domain/services/encryption-service.js index f9df77c3cae..842fdf7dfb8 100644 --- a/api/lib/domain/services/encryption-service.js +++ b/api/lib/domain/services/encryption-service.js @@ -1,7 +1,7 @@ -const bcrypt = require('bcrypt'); -const { bcryptNumberOfSaltRounds } = require('../../config.js'); -const PasswordNotMatching = require('../errors.js').PasswordNotMatching; - +import bcrypt from 'bcrypt'; +import { config } from '../../config.js'; +import { PasswordNotMatching } from '../errors.js'; +const { bcryptNumberOfSaltRounds } = config; const hashPassword = function (password) { return bcrypt.hash(password, bcryptNumberOfSaltRounds); }; @@ -18,8 +18,4 @@ const checkPassword = async function ({ password, passwordHash }) { } }; -module.exports = { - hashPassword, - hashPasswordSync, - checkPassword, -}; +export { hashPassword, hashPasswordSync, checkPassword }; diff --git a/api/lib/domain/services/get-competence-level.js b/api/lib/domain/services/get-competence-level.js index 06c235198bc..2dc7a86c904 100644 --- a/api/lib/domain/services/get-competence-level.js +++ b/api/lib/domain/services/get-competence-level.js @@ -1,10 +1,11 @@ -const knowledgeElementRepository = require('../../infrastructure/repositories/knowledge-element-repository.js'); -const scoringService = require('./scoring/scoring-service.js'); +import * as knowledgeElementRepository from '../../infrastructure/repositories/knowledge-element-repository.js'; +import * as scoringService from './scoring/scoring-service.js'; -module.exports = async function getCompetenceLevel({ +const getCompetenceLevel = async function ({ userId, competenceId, domainTransaction, + dependencies = { knowledgeElementRepository, scoringService, @@ -18,3 +19,5 @@ module.exports = async function getCompetenceLevel({ const { currentLevel } = dependencies.scoringService.calculateScoringInformationForCompetence({ knowledgeElements }); return currentLevel; }; + +export { getCompetenceLevel }; diff --git a/api/lib/domain/services/get-translated-text.js b/api/lib/domain/services/get-translated-text.js index 1cb9de69001..e5db442d177 100644 --- a/api/lib/domain/services/get-translated-text.js +++ b/api/lib/domain/services/get-translated-text.js @@ -1,7 +1,9 @@ -const { FRENCH_SPOKEN } = require('../../domain/constants.js').LOCALE; +import { LOCALE } from '../../domain/constants.js'; + +const { FRENCH_SPOKEN } = LOCALE; function getTranslatedKey(key, locale) { return key?.[locale] || key?.[FRENCH_SPOKEN]; } -module.exports = { getTranslatedKey }; +export { getTranslatedKey }; diff --git a/api/lib/domain/services/improvement-service.js b/api/lib/domain/services/improvement-service.js index 276af826862..fd7bc4775c2 100644 --- a/api/lib/domain/services/improvement-service.js +++ b/api/lib/domain/services/improvement-service.js @@ -1,5 +1,5 @@ -const { constants } = require('../constants.js'); -const moment = require('moment'); +import { constants } from '../constants.js'; +import moment from 'moment'; function _keepKnowledgeElementsRecentOrValidated({ currentUserKnowledgeElements, assessment, minimumDelayInDays }) { const startedDateOfAssessment = assessment.createdAt; @@ -26,6 +26,4 @@ function filterKnowledgeElementsIfImproving({ knowledgeElements, assessment, isR return knowledgeElements; } -module.exports = { - filterKnowledgeElementsIfImproving, -}; +export { filterKnowledgeElementsIfImproving }; diff --git a/api/lib/domain/services/learning-content/learning-content-conversion-service.js b/api/lib/domain/services/learning-content/learning-content-conversion-service.js index 08484dfd002..d03ebe5d875 100644 --- a/api/lib/domain/services/learning-content/learning-content-conversion-service.js +++ b/api/lib/domain/services/learning-content/learning-content-conversion-service.js @@ -1,4 +1,4 @@ -const skillRepository = require('../../../infrastructure/repositories/skill-repository.js'); +import * as skillRepository from '../../../infrastructure/repositories/skill-repository.js'; async function findActiveSkillsForCappedTubes(cappedTubes, dependencies = { skillRepository }) { const skills = []; @@ -10,6 +10,4 @@ async function findActiveSkillsForCappedTubes(cappedTubes, dependencies = { skil return skills; } -module.exports = { - findActiveSkillsForCappedTubes, -}; +export { findActiveSkillsForCappedTubes }; diff --git a/api/lib/domain/services/locale-service.js b/api/lib/domain/services/locale-service.js index ed7074b62f2..ae361a1f34b 100644 --- a/api/lib/domain/services/locale-service.js +++ b/api/lib/domain/services/locale-service.js @@ -1,26 +1,26 @@ -const { LocaleFormatError, LocaleNotSupportedError } = require('../errors'); -const { SUPPORTED_LOCALES } = require('../constants'); +import { LocaleFormatError, LocaleNotSupportedError } from '../errors.js'; +import { SUPPORTED_LOCALES } from '../constants.js'; -module.exports = { - getCanonicalLocale(locale) { - let canonicalLocale; +const getCanonicalLocale = function (locale) { + let canonicalLocale; - try { - canonicalLocale = Intl.getCanonicalLocales(locale)[0]; - } catch (error) { - throw new LocaleFormatError(locale); - } + try { + canonicalLocale = Intl.getCanonicalLocales(locale)[0]; + } catch (error) { + throw new LocaleFormatError(locale); + } - // Pix site uses en-GB as international English locale instead of en - // TODO remove this code after handling en as international English locale on Pix site - if (canonicalLocale === 'en-GB') { - canonicalLocale = 'en'; - } + // Pix site uses en-GB as international English locale instead of en + // TODO remove this code after handling en as international English locale on Pix site + if (canonicalLocale === 'en-GB') { + canonicalLocale = 'en'; + } - if (!SUPPORTED_LOCALES.includes(canonicalLocale)) { - throw new LocaleNotSupportedError(canonicalLocale); - } + if (!SUPPORTED_LOCALES.includes(canonicalLocale)) { + throw new LocaleNotSupportedError(canonicalLocale); + } - return canonicalLocale; - }, + return canonicalLocale; }; + +export { getCanonicalLocale }; diff --git a/api/lib/domain/services/mail-service.js b/api/lib/domain/services/mail-service.js index 6eb1f27fe91..b6efe81a69f 100644 --- a/api/lib/domain/services/mail-service.js +++ b/api/lib/domain/services/mail-service.js @@ -1,13 +1,15 @@ -const dayjs = require('dayjs'); +import dayjs from 'dayjs'; -const tokenService = require('./token-service.js'); -const { mailer } = require('../../infrastructure/mailers/mailer.js'); -const settings = require('../../config.js'); +import { tokenService } from './token-service.js'; +import { mailer } from '../../infrastructure/mailers/mailer.js'; +import { config } from '../../config.js'; -const frTranslations = require('../../../translations/fr.json'); -const enTranslations = require('../../../translations/en.json'); +import frTranslations from '../../../translations/fr.json' assert { type: 'json' }; +import enTranslations from '../../../translations/en.json' assert { type: 'json' }; -const { ENGLISH_SPOKEN, FRENCH_FRANCE, FRENCH_SPOKEN } = require('../../domain/constants.js').LOCALE; +import { LOCALE } from '../../domain/constants.js'; + +const { ENGLISH_SPOKEN, FRENCH_FRANCE, FRENCH_SPOKEN } = LOCALE; const EMAIL_ADDRESS_NO_RESPONSE = 'ne-pas-repondre@pix.fr'; const PIX_ORGA_NAME_FR = 'Pix Orga - Ne pas répondre'; @@ -19,10 +21,10 @@ const PIX_NAME_EN = 'PIX - Noreply'; const HELPDESK_FRENCH_FRANCE = 'https://support.pix.fr'; const HELPDESK_ENGLISH_SPOKEN = 'https://support.pix.org/en/support/home'; const HELPDESK_FRENCH_SPOKEN = 'https://support.pix.org'; -const PIX_HOME_NAME_INTERNATIONAL = `pix${settings.domain.tldOrg}`; -const PIX_HOME_NAME_FRENCH_FRANCE = `pix${settings.domain.tldFr}`; -const PIX_HOME_URL_ENGLISH_SPOKEN = `${settings.domain.pix + settings.domain.tldOrg}/en-gb`; -const PIX_HOME_URL_FRENCH_FRANCE = `${settings.domain.pix + settings.domain.tldFr}`; +const PIX_HOME_NAME_INTERNATIONAL = `pix${config.domain.tldOrg}`; +const PIX_HOME_NAME_FRENCH_FRANCE = `pix${config.domain.tldFr}`; +const PIX_HOME_URL_ENGLISH_SPOKEN = `${config.domain.pix + config.domain.tldOrg}/en-gb`; +const PIX_HOME_URL_FRENCH_FRANCE = `${config.domain.pix + config.domain.tldFr}`; const EMAIL_VERIFICATION_CODE_TAG = 'EMAIL_VERIFICATION_CODE'; const SCO_ACCOUNT_RECOVERY_TAG = 'SCO_ACCOUNT_RECOVERY'; @@ -34,9 +36,9 @@ function sendAccountCreationEmail(email, locale, redirectionUrl) { if (locale === FRENCH_SPOKEN) { variables = { - homeName: `pix${settings.domain.tldOrg}`, - homeUrl: `${settings.domain.pix + settings.domain.tldOrg}/fr/`, - redirectionUrl: redirectionUrl || `${settings.domain.pixApp + settings.domain.tldOrg}/connexion/?lang=fr`, + homeName: `pix${config.domain.tldOrg}`, + homeUrl: `${config.domain.pix + config.domain.tldOrg}/fr/`, + redirectionUrl: redirectionUrl || `${config.domain.pixApp + config.domain.tldOrg}/connexion/?lang=fr`, helpdeskUrl: HELPDESK_FRENCH_SPOKEN, displayNationalLogo: false, ...frTranslations['pix-account-creation-email'].params, @@ -46,9 +48,9 @@ function sendAccountCreationEmail(email, locale, redirectionUrl) { accountCreationEmailSubject = frTranslations['pix-account-creation-email'].subject; } else if (locale === ENGLISH_SPOKEN) { variables = { - homeName: `pix${settings.domain.tldOrg}`, - homeUrl: `${settings.domain.pix + settings.domain.tldOrg}/en-gb/`, - redirectionUrl: redirectionUrl || `${settings.domain.pixApp + settings.domain.tldOrg}/connexion/?lang=en`, + homeName: `pix${config.domain.tldOrg}`, + homeUrl: `${config.domain.pix + config.domain.tldOrg}/en-gb/`, + redirectionUrl: redirectionUrl || `${config.domain.pixApp + config.domain.tldOrg}/connexion/?lang=en`, helpdeskUrl: HELPDESK_ENGLISH_SPOKEN, displayNationalLogo: false, ...enTranslations['pix-account-creation-email'].params, @@ -58,9 +60,9 @@ function sendAccountCreationEmail(email, locale, redirectionUrl) { accountCreationEmailSubject = enTranslations['pix-account-creation-email'].subject; } else { variables = { - homeName: `pix${settings.domain.tldFr}`, - homeUrl: `${settings.domain.pix + settings.domain.tldFr}`, - redirectionUrl: redirectionUrl || `${settings.domain.pixApp + settings.domain.tldFr}/connexion`, + homeName: `pix${config.domain.tldFr}`, + homeUrl: `${config.domain.pix + config.domain.tldFr}`, + redirectionUrl: redirectionUrl || `${config.domain.pixApp + config.domain.tldFr}/connexion`, helpdeskUrl: HELPDESK_FRENCH_FRANCE, displayNationalLogo: true, ...frTranslations['pix-account-creation-email'].params, @@ -94,7 +96,7 @@ function sendCertificationResultEmail({ resultRecipientEmail, daysBeforeExpiration, }); - const link = `${settings.domain.pixApp + settings.domain.tldOrg}/api/sessions/download-results/${token}`; + const link = `${config.domain.pixApp + config.domain.tldOrg}/api/sessions/download-results/${token}`; const formattedSessionDate = dayjs(sessionDate).locale('fr').format('DD/MM/YYYY'); @@ -135,18 +137,18 @@ function sendResetPasswordDemandEmail({ email, locale, temporaryKey }) { let templateParams = { locale: localeParam, ...frTranslations['reset-password-demand-email'].params, - homeName: `pix${settings.domain.tldFr}`, - homeUrl: `${settings.domain.pix + settings.domain.tldFr}`, - resetUrl: `${settings.domain.pixApp + settings.domain.tldFr}/changer-mot-de-passe/${temporaryKey}`, + homeName: `pix${config.domain.tldFr}`, + homeUrl: `${config.domain.pix + config.domain.tldFr}`, + resetUrl: `${config.domain.pixApp + config.domain.tldFr}/changer-mot-de-passe/${temporaryKey}`, helpdeskURL: HELPDESK_FRENCH_FRANCE, }; if (localeParam === FRENCH_SPOKEN) { templateParams = { ...templateParams, - homeName: `pix${settings.domain.tldOrg}`, - homeUrl: `${settings.domain.pix + settings.domain.tldOrg}/fr/`, - resetUrl: `${settings.domain.pixApp + settings.domain.tldOrg}/changer-mot-de-passe/${temporaryKey}/?lang=fr`, + homeName: `pix${config.domain.tldOrg}`, + homeUrl: `${config.domain.pix + config.domain.tldOrg}/fr/`, + resetUrl: `${config.domain.pixApp + config.domain.tldOrg}/changer-mot-de-passe/${temporaryKey}/?lang=fr`, helpdeskURL: HELPDESK_FRENCH_SPOKEN, }; } @@ -155,9 +157,9 @@ function sendResetPasswordDemandEmail({ email, locale, temporaryKey }) { templateParams = { locale: localeParam, ...enTranslations['reset-password-demand-email'].params, - homeName: `pix${settings.domain.tldOrg}`, - homeUrl: `${settings.domain.pix + settings.domain.tldOrg}/en-gb/`, - resetUrl: `${settings.domain.pixApp + settings.domain.tldOrg}/changer-mot-de-passe/${temporaryKey}/?lang=en`, + homeName: `pix${config.domain.tldOrg}`, + homeUrl: `${config.domain.pix + config.domain.tldOrg}/en-gb/`, + resetUrl: `${config.domain.pixApp + config.domain.tldOrg}/changer-mot-de-passe/${temporaryKey}/?lang=en`, helpdeskURL: HELPDESK_ENGLISH_SPOKEN, }; @@ -182,11 +184,11 @@ function sendOrganizationInvitationEmail({ email, organizationName, organization let templateParams = { organizationName, - pixHomeName: `pix${settings.domain.tldFr}`, - pixHomeUrl: `${settings.domain.pix + settings.domain.tldFr}`, - pixOrgaHomeUrl: `${settings.domain.pixOrga + settings.domain.tldFr}`, + pixHomeName: `pix${config.domain.tldFr}`, + pixHomeUrl: `${config.domain.pix + config.domain.tldFr}`, + pixOrgaHomeUrl: `${config.domain.pixOrga + config.domain.tldFr}`, redirectionUrl: `${ - settings.domain.pixOrga + settings.domain.tldFr + config.domain.pixOrga + config.domain.tldFr }/rejoindre?invitationId=${organizationInvitationId}&code=${code}`, supportUrl: HELPDESK_FRENCH_FRANCE, ...frTranslations['organization-invitation-email'].params, @@ -195,11 +197,11 @@ function sendOrganizationInvitationEmail({ email, organizationName, organization if (locale === FRENCH_SPOKEN) { templateParams = { organizationName, - pixHomeName: `pix${settings.domain.tldOrg}`, - pixHomeUrl: `${settings.domain.pix + settings.domain.tldOrg}`, - pixOrgaHomeUrl: `${settings.domain.pixOrga + settings.domain.tldOrg}`, + pixHomeName: `pix${config.domain.tldOrg}`, + pixHomeUrl: `${config.domain.pix + config.domain.tldOrg}`, + pixOrgaHomeUrl: `${config.domain.pixOrga + config.domain.tldOrg}`, redirectionUrl: `${ - settings.domain.pixOrga + settings.domain.tldOrg + config.domain.pixOrga + config.domain.tldOrg }/rejoindre?invitationId=${organizationInvitationId}&code=${code}`, supportUrl: HELPDESK_FRENCH_SPOKEN, ...frTranslations['organization-invitation-email'].params, @@ -209,11 +211,11 @@ function sendOrganizationInvitationEmail({ email, organizationName, organization if (locale === ENGLISH_SPOKEN) { templateParams = { organizationName, - pixHomeName: `pix${settings.domain.tldOrg}`, - pixHomeUrl: `${settings.domain.pix + settings.domain.tldOrg}/en-gb/`, - pixOrgaHomeUrl: `${settings.domain.pixOrga + settings.domain.tldOrg}?lang=en`, + pixHomeName: `pix${config.domain.tldOrg}`, + pixHomeUrl: `${config.domain.pix + config.domain.tldOrg}/en-gb/`, + pixOrgaHomeUrl: `${config.domain.pixOrga + config.domain.tldOrg}?lang=en`, redirectionUrl: `${ - settings.domain.pixOrga + settings.domain.tldOrg + config.domain.pixOrga + config.domain.tldOrg }/rejoindre?invitationId=${organizationInvitationId}&code=${code}&lang=en`, supportUrl: HELPDESK_ENGLISH_SPOKEN, ...enTranslations['organization-invitation-email'].params, @@ -249,11 +251,11 @@ function sendScoOrganizationInvitationEmail({ organizationName, firstName, lastName, - pixHomeName: `pix${settings.domain.tldFr}`, - pixHomeUrl: `${settings.domain.pix + settings.domain.tldFr}`, - pixOrgaHomeUrl: `${settings.domain.pixOrga + settings.domain.tldFr}`, + pixHomeName: `pix${config.domain.tldFr}`, + pixHomeUrl: `${config.domain.pix + config.domain.tldFr}`, + pixOrgaHomeUrl: `${config.domain.pixOrga + config.domain.tldFr}`, redirectionUrl: `${ - settings.domain.pixOrga + settings.domain.tldFr + config.domain.pixOrga + config.domain.tldFr }/rejoindre?invitationId=${organizationInvitationId}&code=${code}`, locale, }; @@ -263,11 +265,11 @@ function sendScoOrganizationInvitationEmail({ organizationName, firstName, lastName, - pixHomeName: `pix${settings.domain.tldOrg}`, - pixHomeUrl: `${settings.domain.pix + settings.domain.tldOrg}`, - pixOrgaHomeUrl: `${settings.domain.pixOrga + settings.domain.tldOrg}`, + pixHomeName: `pix${config.domain.tldOrg}`, + pixHomeUrl: `${config.domain.pix + config.domain.tldOrg}`, + pixOrgaHomeUrl: `${config.domain.pixOrga + config.domain.tldOrg}`, redirectionUrl: `${ - settings.domain.pixOrga + settings.domain.tldOrg + config.domain.pixOrga + config.domain.tldOrg }/rejoindre?invitationId=${organizationInvitationId}&code=${code}`, locale, }; @@ -294,33 +296,33 @@ function sendCertificationCenterInvitationEmail({ let templateParams, fromName, subject; const frenchFranceTemplateParams = { certificationCenterName, - pixHomeName: `pix${settings.domain.tldFr}`, - pixHomeUrl: `${settings.domain.pix + settings.domain.tldFr}`, - pixCertifHomeUrl: `${settings.domain.pixCertif + settings.domain.tldFr}`, + pixHomeName: `pix${config.domain.tldFr}`, + pixHomeUrl: `${config.domain.pix + config.domain.tldFr}`, + pixCertifHomeUrl: `${config.domain.pixCertif + config.domain.tldFr}`, redirectionUrl: `${ - settings.domain.pixCertif + settings.domain.tldFr + config.domain.pixCertif + config.domain.tldFr }/rejoindre?invitationId=${certificationCenterInvitationId}&code=${code}`, supportUrl: HELPDESK_FRENCH_FRANCE, ...frTranslations['certification-center-invitation-email'].params, }; const frenchSpokenTemplateParams = { certificationCenterName, - pixHomeName: `pix${settings.domain.tldOrg}`, - pixHomeUrl: `${settings.domain.pix + settings.domain.tldOrg}`, - pixCertifHomeUrl: `${settings.domain.pixCertif + settings.domain.tldOrg}`, + pixHomeName: `pix${config.domain.tldOrg}`, + pixHomeUrl: `${config.domain.pix + config.domain.tldOrg}`, + pixCertifHomeUrl: `${config.domain.pixCertif + config.domain.tldOrg}`, redirectionUrl: `${ - settings.domain.pixCertif + settings.domain.tldOrg + config.domain.pixCertif + config.domain.tldOrg }/rejoindre?invitationId=${certificationCenterInvitationId}&code=${code}`, supportUrl: HELPDESK_FRENCH_SPOKEN, ...frTranslations['certification-center-invitation-email'].params, }; const englishSpokenTemplateParams = { certificationCenterName, - pixHomeName: `pix${settings.domain.tldOrg}`, - pixHomeUrl: `${settings.domain.pix + settings.domain.tldOrg}/en-gb/`, - pixCertifHomeUrl: `${settings.domain.pixCertif + settings.domain.tldOrg}?lang=en`, + pixHomeName: `pix${config.domain.tldOrg}`, + pixHomeUrl: `${config.domain.pix + config.domain.tldOrg}/en-gb/`, + pixCertifHomeUrl: `${config.domain.pixCertif + config.domain.tldOrg}?lang=en`, redirectionUrl: `${ - settings.domain.pixCertif + settings.domain.tldOrg + config.domain.pixCertif + config.domain.tldOrg }/rejoindre?invitationId=${certificationCenterInvitationId}&code=${code}&lang=en`, supportUrl: HELPDESK_ENGLISH_SPOKEN, ...enTranslations['certification-center-invitation-email'].params, @@ -358,11 +360,11 @@ function sendCertificationCenterInvitationEmail({ function sendAccountRecoveryEmail({ email, firstName, temporaryKey }) { const pixName = PIX_NAME_FR; - const redirectionUrl = `${settings.domain.pixApp + settings.domain.tldFr}/recuperer-mon-compte/${temporaryKey}`; + const redirectionUrl = `${config.domain.pixApp + config.domain.tldFr}/recuperer-mon-compte/${temporaryKey}`; const variables = { firstName, redirectionUrl, - homeName: `pix${settings.domain.tldFr}`, + homeName: `pix${config.domain.tldFr}`, ...frTranslations['account-recovery-email'].params, }; @@ -391,8 +393,8 @@ function sendVerificationCodeEmail({ code, email, locale, translate }) { options.variables = { code, - homeName: `pix${settings.domain.tldOrg}`, - homeUrl: `${settings.domain.pix + settings.domain.tldOrg}/fr/`, + homeName: `pix${config.domain.tldOrg}`, + homeUrl: `${config.domain.pix + config.domain.tldOrg}/fr/`, displayNationalLogo: false, ...frTranslations['verification-code-email'].body, }; @@ -401,8 +403,8 @@ function sendVerificationCodeEmail({ code, email, locale, translate }) { options.variables = { code, - homeName: `pix${settings.domain.tldFr}`, - homeUrl: `${settings.domain.pix + settings.domain.tldFr}`, + homeName: `pix${config.domain.tldFr}`, + homeUrl: `${config.domain.pix + config.domain.tldFr}`, displayNationalLogo: true, ...frTranslations['verification-code-email'].body, }; @@ -411,8 +413,8 @@ function sendVerificationCodeEmail({ code, email, locale, translate }) { options.variables = { code, - homeName: `pix${settings.domain.tldOrg}`, - homeUrl: `${settings.domain.pix + settings.domain.tldOrg}/en-gb/`, + homeName: `pix${config.domain.tldOrg}`, + homeUrl: `${config.domain.pix + config.domain.tldOrg}/en-gb/`, displayNationalLogo: false, ...enTranslations['verification-code-email'].body, }; @@ -447,7 +449,19 @@ function sendNotificationToCertificationCenterRefererForCleaResults({ email, ses return mailer.sendEmail(options); } -module.exports = { +const mailService = { + sendAccountCreationEmail, + sendAccountRecoveryEmail, + sendCertificationResultEmail, + sendOrganizationInvitationEmail, + sendScoOrganizationInvitationEmail, + sendCertificationCenterInvitationEmail, + sendResetPasswordDemandEmail, + sendVerificationCodeEmail, + sendCpfEmail, + sendNotificationToCertificationCenterRefererForCleaResults, +}; +export { sendAccountCreationEmail, sendAccountRecoveryEmail, sendCertificationResultEmail, @@ -458,4 +472,5 @@ module.exports = { sendVerificationCodeEmail, sendCpfEmail, sendNotificationToCertificationCenterRefererForCleaResults, + mailService, }; diff --git a/api/lib/domain/services/obfuscation-service.js b/api/lib/domain/services/obfuscation-service.js index 75954da46b4..cab08ea2b96 100644 --- a/api/lib/domain/services/obfuscation-service.js +++ b/api/lib/domain/services/obfuscation-service.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); -const authenticationMethodRepository = require('../../infrastructure/repositories/authentication-method-repository.js'); -const AuthenticationMethod = require('../models/AuthenticationMethod.js'); -const { NotFoundError } = require('../errors.js'); +import _ from 'lodash'; +import * as authenticationMethodRepository from '../../infrastructure/repositories/authentication-method-repository.js'; +import { AuthenticationMethod } from '../models/AuthenticationMethod.js'; +import { NotFoundError } from '../errors.js'; const CONNEXION_TYPES = { username: 'username', @@ -46,8 +46,4 @@ function usernameObfuscation(username) { )}${ASTERISK_OBFUSCATION}${_.last(name)}`; } -module.exports = { - usernameObfuscation, - emailObfuscation, - getUserAuthenticationMethodWithObfuscation, -}; +export { usernameObfuscation, emailObfuscation, getUserAuthenticationMethodWithObfuscation }; diff --git a/api/lib/domain/services/organization-invitation-service.js b/api/lib/domain/services/organization-invitation-service.js index d27404cb7f6..eae62e1341d 100644 --- a/api/lib/domain/services/organization-invitation-service.js +++ b/api/lib/domain/services/organization-invitation-service.js @@ -1,11 +1,12 @@ -const randomString = require('randomstring'); -const Membership = require('../models/Membership.js'); -const mailService = require('../../domain/services/mail-service.js'); -const { +import randomString from 'randomstring'; +import { Membership } from '../models/Membership.js'; +import * as mailService from '../../domain/services/mail-service.js'; + +import { SendingEmailError, SendingEmailToInvalidDomainError, SendingEmailToInvalidEmailAddressError, -} = require('../errors.js'); +} from '../errors.js'; const _generateCode = () => { return randomString.generate({ length: 10, capitalization: 'uppercase' }); @@ -135,8 +136,4 @@ const createScoOrganizationInvitation = async ({ return organizationInvitation; }; -module.exports = { - createOrUpdateOrganizationInvitation, - createScoOrganizationInvitation, - createProOrganizationInvitation, -}; +export { createOrUpdateOrganizationInvitation, createScoOrganizationInvitation, createProOrganizationInvitation }; diff --git a/api/lib/domain/services/organization-learners-csv-service.js b/api/lib/domain/services/organization-learners-csv-service.js index b65b89eeb87..a2040e3ae0a 100644 --- a/api/lib/domain/services/organization-learners-csv-service.js +++ b/api/lib/domain/services/organization-learners-csv-service.js @@ -1,9 +1,8 @@ -const fs = require('fs').promises; -const OrganizationLearnerParser = require('../../infrastructure/serializers/csv/organization-learner-parser.js'); +import * as fs from 'fs/promises'; -module.exports = { - extractOrganizationLearnersInformation, -}; +import { OrganizationLearnerParser } from '../../infrastructure/serializers/csv/organization-learner-parser.js'; + +export { extractOrganizationLearnersInformation }; async function extractOrganizationLearnersInformation(path, organization, i18n) { const buffer = await fs.readFile(path); diff --git a/api/lib/domain/services/organization-learners-xml-service.js b/api/lib/domain/services/organization-learners-xml-service.js index 5ca8839f866..3a4fdba31c5 100644 --- a/api/lib/domain/services/organization-learners-xml-service.js +++ b/api/lib/domain/services/organization-learners-xml-service.js @@ -1,8 +1,6 @@ -const SiecleParser = require('../../infrastructure/serializers/xml/siecle-parser.js'); +import { SiecleParser } from '../../infrastructure/serializers/xml/siecle-parser.js'; -module.exports = { - extractOrganizationLearnersInformationFromSIECLE, -}; +export { extractOrganizationLearnersInformationFromSIECLE }; async function extractOrganizationLearnersInformationFromSIECLE(path, organization) { const parser = new SiecleParser(organization, path); diff --git a/api/lib/domain/services/password-generator.js b/api/lib/domain/services/password-generator.js index 402ebfa9ec0..c2a304660f2 100644 --- a/api/lib/domain/services/password-generator.js +++ b/api/lib/domain/services/password-generator.js @@ -1,21 +1,21 @@ -const randomString = require('randomstring'); -const _ = require('lodash'); +import randomString from 'randomstring'; +import _ from 'lodash'; -module.exports = { - generateSimplePassword() { - const letterPart = randomString.generate({ - length: 6, - charset: 'abcdefghjkmnpqrstuvwxyz', - capitalization: 'lowercase', - }); - const numberPart = _.padStart(_.random(99), 2, '0'); - return `${letterPart}${numberPart}`; - }, +const generateSimplePassword = function () { + const letterPart = randomString.generate({ + length: 6, + charset: 'abcdefghjkmnpqrstuvwxyz', + capitalization: 'lowercase', + }); + const numberPart = _.padStart(_.random(99), 2, '0'); + return `${letterPart}${numberPart}`; +}; - generateComplexPassword() { - return randomString.generate({ - length: 32, - charset: 'alphanumeric', - }); - }, +const generateComplexPassword = function () { + return randomString.generate({ + length: 32, + charset: 'alphanumeric', + }); }; + +export { generateSimplePassword, generateComplexPassword }; diff --git a/api/lib/domain/services/pick-challenge-service.js b/api/lib/domain/services/pick-challenge-service.js index 2d03da18b46..6cea6d57501 100644 --- a/api/lib/domain/services/pick-challenge-service.js +++ b/api/lib/domain/services/pick-challenge-service.js @@ -1,31 +1,31 @@ -const _ = require('lodash'); -const hashInt = require('hash-int'); -const pseudoRandom = require('../../infrastructure/utils/pseudo-random'); +import _ from 'lodash'; +import hashInt from 'hash-int'; +import * as pseudoRandom from '../../infrastructure/utils/pseudo-random.js'; const NON_EXISTING_ITEM = null; const VALIDATED_STATUS = 'validé'; -module.exports = { - pickChallenge({ skills, randomSeed, locale }) { - if (skills.length === 0) { - return NON_EXISTING_ITEM; - } - const keyForSkill = Math.abs(hashInt(randomSeed)); - const keyForChallenge = Math.abs(hashInt(randomSeed + 1)); - const chosenSkill = skills[keyForSkill % skills.length]; +const pickChallenge = function ({ skills, randomSeed, locale }) { + if (skills.length === 0) { + return NON_EXISTING_ITEM; + } + const keyForSkill = Math.abs(hashInt(randomSeed)); + const keyForChallenge = Math.abs(hashInt(randomSeed + 1)); + const chosenSkill = skills[keyForSkill % skills.length]; - return _pickLocaleChallengeAtIndex(chosenSkill.challenges, locale, keyForChallenge); - }, + return _pickLocaleChallengeAtIndex(chosenSkill.challenges, locale, keyForChallenge); +}; - chooseNextChallenge({ possibleChallenges, assessmentId }) { - const PROBABILITY_TO_BE_PICKED = 51; - const pseudoRandomContext = pseudoRandom.create(assessmentId); +const chooseNextChallenge = function ({ possibleChallenges, assessmentId }) { + const PROBABILITY_TO_BE_PICKED = 51; + const pseudoRandomContext = pseudoRandom.create(assessmentId); - const challengeIndex = pseudoRandomContext.binaryTreeRandom(PROBABILITY_TO_BE_PICKED, possibleChallenges.length); + const challengeIndex = pseudoRandomContext.binaryTreeRandom(PROBABILITY_TO_BE_PICKED, possibleChallenges.length); - return possibleChallenges[challengeIndex]; - }, + return possibleChallenges[challengeIndex]; }; +export { pickChallenge, chooseNextChallenge }; + function _pickLocaleChallengeAtIndex(challenges, locale, index) { const localeChallenges = _.filter(challenges, (challenge) => _.includes(challenge.locales, locale)); const possibleChallenges = _findPreferablyValidatedChallenges(localeChallenges); diff --git a/api/lib/domain/services/placement-profile-service.js b/api/lib/domain/services/placement-profile-service.js index 29a05839b2d..0dda2f2efef 100644 --- a/api/lib/domain/services/placement-profile-service.js +++ b/api/lib/domain/services/placement-profile-service.js @@ -1,14 +1,14 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); - -const UserCompetence = require('../models/UserCompetence.js'); -const PlacementProfile = require('../models/PlacementProfile.js'); -const assessmentRepository = require('../../infrastructure/repositories/assessment-repository.js'); -const skillRepository = require('../../infrastructure/repositories/skill-repository.js'); -const assessmentResultRepository = require('../../infrastructure/repositories/assessment-result-repository.js'); -const knowledgeElementRepository = require('../../infrastructure/repositories/knowledge-element-repository.js'); -const competenceRepository = require('../../infrastructure/repositories/competence-repository.js'); -const scoringService = require('./scoring/scoring-service.js'); +import _ from 'lodash'; +import bluebird from 'bluebird'; + +import { UserCompetence } from '../models/UserCompetence.js'; +import { PlacementProfile } from '../models/PlacementProfile.js'; +import * as assessmentRepository from '../../infrastructure/repositories/assessment-repository.js'; +import * as skillRepository from '../../infrastructure/repositories/skill-repository.js'; +import * as assessmentResultRepository from '../../infrastructure/repositories/assessment-result-repository.js'; +import * as knowledgeElementRepository from '../../infrastructure/repositories/knowledge-element-repository.js'; +import * as competenceRepository from '../../infrastructure/repositories/competence-repository.js'; +import * as scoringService from './scoring/scoring-service.js'; async function getPlacementProfile({ userId, @@ -181,8 +181,4 @@ function _matchingDirectlyValidatedSkillsForCompetence(knowledgeElementsForCompe return _.compact(competenceSkills); } -module.exports = { - getPlacementProfile, - getPlacementProfilesWithSnapshotting, - getPlacementProfileWithSnapshotting, -}; +export { getPlacementProfile, getPlacementProfilesWithSnapshotting, getPlacementProfileWithSnapshotting }; diff --git a/api/lib/domain/services/pole-emploi-service.js b/api/lib/domain/services/pole-emploi-service.js index 6a353f6f477..b89c0a45dd7 100644 --- a/api/lib/domain/services/pole-emploi-service.js +++ b/api/lib/domain/services/pole-emploi-service.js @@ -1,7 +1,7 @@ -const settings = require('../../config.js'); +import { config } from '../../config.js'; function generateLink(sending, filters = {}) { - const host = settings.apiManager.url; + const host = config.apiManager.url; const { dateEnvoi, idEnvoi } = sending; const cursor = generateCursor({ idEnvoi, dateEnvoi }); let link = `${host}/pole-emploi/envois?curseur=${cursor}`; @@ -25,4 +25,4 @@ function decodeCursor(strbase64) { return JSON.parse(string); } -module.exports = { generateLink, generateCursor, decodeCursor }; +export { generateLink, generateCursor, decodeCursor }; diff --git a/api/lib/domain/services/recommendation-service.js b/api/lib/domain/services/recommendation-service.js index a63d80a0dbb..9c9ab415247 100644 --- a/api/lib/domain/services/recommendation-service.js +++ b/api/lib/domain/services/recommendation-service.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; const REACH_LEVEL_POINTS = 40; const DIFFICULTY_POINTS = 30; @@ -66,6 +66,4 @@ function _isSkillValidated(validatedKnowledgeElements) { return (skill) => _.map(validatedKnowledgeElements, 'skillId').includes(skill.id); } -module.exports = { - computeRecommendationScore, -}; +export { computeRecommendationScore }; diff --git a/api/lib/domain/services/refresh-token-service.js b/api/lib/domain/services/refresh-token-service.js index 98f9b112816..1f972bb9e7f 100644 --- a/api/lib/domain/services/refresh-token-service.js +++ b/api/lib/domain/services/refresh-token-service.js @@ -1,9 +1,10 @@ -const bluebird = require('bluebird'); -const { v4: uuidv4 } = require('uuid'); -const settings = require('../../config.js'); -const tokenService = require('./token-service.js'); -const { UnauthorizedError } = require('../../application/http-errors.js'); -const { temporaryStorage } = require('../../infrastructure/temporary-storage/index.js'); +import bluebird from 'bluebird'; +import { v4 as uuidv4 } from 'uuid'; +import { tokenService } from './token-service.js'; + +import { config } from '../../config.js'; +import { UnauthorizedError } from '../../application/http-errors.js'; +import { temporaryStorage } from '../../infrastructure/temporary-storage/index.js'; const refreshTokenTemporaryStorage = temporaryStorage.withPrefix('refresh-tokens:'); const userRefreshTokensTemporaryStorage = temporaryStorage.withPrefix('user-refresh-tokens:'); @@ -15,7 +16,7 @@ function _prefixForUser(userId) { } async function createRefreshTokenFromUserId({ userId, source, uuidGenerator = uuidv4 }) { - const expirationDelaySeconds = settings.authentication.refreshTokenLifespanMs / 1000; + const expirationDelaySeconds = config.authentication.refreshTokenLifespanMs / 1000; const refreshToken = `${_prefixForUser(userId)}${uuidGenerator()}`; await refreshTokenTemporaryStorage.save({ @@ -53,12 +54,11 @@ async function revokeRefreshTokensForUserId({ userId }) { }); } -module.exports = { +export { createRefreshTokenFromUserId, createAccessTokenFromRefreshToken, revokeRefreshToken, revokeRefreshTokensForUserId, - - refreshTokenTemporaryStorageForTests: refreshTokenTemporaryStorage, - userRefreshTokensTemporaryStorageForTests: userRefreshTokensTemporaryStorage, + refreshTokenTemporaryStorage, + userRefreshTokensTemporaryStorage, }; diff --git a/api/lib/domain/services/reset-password-service.js b/api/lib/domain/services/reset-password-service.js index 076c1dc2e36..358c4d41edd 100644 --- a/api/lib/domain/services/reset-password-service.js +++ b/api/lib/domain/services/reset-password-service.js @@ -1,34 +1,35 @@ -const jsonwebtoken = require('jsonwebtoken'); -const settings = require('../../config.js'); -const passwordResetDemandRepository = require('../../infrastructure/repositories/reset-password-demands-repository.js'); -const crypto = require('crypto'); +import jsonwebtoken from 'jsonwebtoken'; +import { config } from '../../config.js'; +import * as passwordResetDemandRepository from '../../infrastructure/repositories/reset-password-demands-repository.js'; +import crypto from 'crypto'; -module.exports = { - generateTemporaryKey() { - return jsonwebtoken.sign( - { - data: crypto.randomBytes(16).toString('base64'), - }, - settings.temporaryKey.secret, - { expiresIn: settings.temporaryKey.tokenLifespan } - ); - }, +const generateTemporaryKey = function () { + return jsonwebtoken.sign( + { + data: crypto.randomBytes(16).toString('base64'), + }, + config.temporaryKey.secret, + { expiresIn: config.temporaryKey.tokenLifespan } + ); +}; - invalidateOldResetPasswordDemand(userEmail, resetPasswordDemandRepository = passwordResetDemandRepository) { - return resetPasswordDemandRepository.markAsBeingUsed(userEmail); - }, +const invalidateOldResetPasswordDemand = function ( + userEmail, + resetPasswordDemandRepository = passwordResetDemandRepository +) { + return resetPasswordDemandRepository.markAsBeingUsed(userEmail); +}; - verifyDemand(temporaryKey, resetPasswordDemandRepository = passwordResetDemandRepository) { - return resetPasswordDemandRepository - .findByTemporaryKey(temporaryKey) - .then((fetchedDemand) => fetchedDemand.toJSON()); - }, +const verifyDemand = function (temporaryKey, resetPasswordDemandRepository = passwordResetDemandRepository) { + return resetPasswordDemandRepository.findByTemporaryKey(temporaryKey).then((fetchedDemand) => fetchedDemand.toJSON()); +}; - hasUserAPasswordResetDemandInProgress( - email, - temporaryKey, - resetPasswordDemandRepository = passwordResetDemandRepository - ) { - return resetPasswordDemandRepository.findByUserEmail(email, temporaryKey); - }, +const hasUserAPasswordResetDemandInProgress = function ( + email, + temporaryKey, + resetPasswordDemandRepository = passwordResetDemandRepository +) { + return resetPasswordDemandRepository.findByUserEmail(email, temporaryKey); }; + +export { generateTemporaryKey, invalidateOldResetPasswordDemand, verifyDemand, hasUserAPasswordResetDemandInProgress }; diff --git a/api/lib/domain/services/sco-account-recovery-service.js b/api/lib/domain/services/sco-account-recovery-service.js index a40ca886e5e..88c5e8ee035 100644 --- a/api/lib/domain/services/sco-account-recovery-service.js +++ b/api/lib/domain/services/sco-account-recovery-service.js @@ -1,11 +1,17 @@ -const { features } = require('../../config.js'); -const { +import { config } from '../../config.js'; + +import { AccountRecoveryDemandExpired, MultipleOrganizationLearnersWithDifferentNationalStudentIdError, UserNotFoundError, UserHasAlreadyLeftSCO, -} = require('../errors.js'); -const { uniqBy } = require('lodash'); +} from '../errors.js'; + +import lodash from 'lodash'; + +const { uniqBy } = lodash; + +const { features } = config; async function retrieveOrganizationLearner({ accountRecoveryDemandRepository, @@ -100,7 +106,4 @@ async function _checkIfThereAreMultipleUserForTheSameAccount({ userId, organizat } } -module.exports = { - retrieveOrganizationLearner, - retrieveAndValidateAccountRecoveryDemand, -}; +export { retrieveOrganizationLearner, retrieveAndValidateAccountRecoveryDemand }; diff --git a/api/lib/domain/services/scorecard-service.js b/api/lib/domain/services/scorecard-service.js index d809ab9e2c9..42df54c12bf 100644 --- a/api/lib/domain/services/scorecard-service.js +++ b/api/lib/domain/services/scorecard-service.js @@ -1,8 +1,8 @@ -const Assessment = require('../models/Assessment.js'); -const CompetenceEvaluation = require('../models/CompetenceEvaluation.js'); -const KnowledgeElement = require('../models/KnowledgeElement.js'); -const Scorecard = require('../models/Scorecard.js'); -const _ = require('lodash'); +import { Assessment } from '../models/Assessment.js'; +import { CompetenceEvaluation } from '../models/CompetenceEvaluation.js'; +import { KnowledgeElement } from '../models/KnowledgeElement.js'; +import { Scorecard } from '../models/Scorecard.js'; +import _ from 'lodash'; async function computeScorecard({ userId, @@ -160,8 +160,4 @@ function _computeResetSkillsNotIncludedInCampaign({ skillIds, resetSkillIds }) { return _(skillIds).intersection(resetSkillIds).isEmpty(); } -module.exports = { - resetScorecard, - computeScorecard, - _computeResetSkillsNotIncludedInCampaign, -}; +export { resetScorecard, computeScorecard, _computeResetSkillsNotIncludedInCampaign }; diff --git a/api/lib/domain/services/scoring/scoring-certification-service.js b/api/lib/domain/services/scoring/scoring-certification-service.js index 8d46ef93b19..8f2fdb06e2a 100644 --- a/api/lib/domain/services/scoring/scoring-certification-service.js +++ b/api/lib/domain/services/scoring/scoring-certification-service.js @@ -1,14 +1,14 @@ -const _ = require('lodash'); -const CertificationContract = require('../../models/CertificationContract.js'); -const scoringService = require('./scoring-service.js'); -const placementProfileService = require('../placement-profile-service.js'); -const { CertifiedLevel } = require('../../models/CertifiedLevel.js'); -const { CertifiedScore } = require('../../models/CertifiedScore.js'); -const { ReproducibilityRate } = require('../../models/ReproducibilityRate.js'); -const CompetenceMark = require('../../models/CompetenceMark.js'); -const CertificationAssessmentScore = require('../../models/CertificationAssessmentScore.js'); -const AnswerCollectionForScoring = require('../../models/AnswerCollectionForScoring.js'); -const areaRepository = require('../../../infrastructure/repositories/area-repository.js'); +import _ from 'lodash'; +import { CertificationContract } from '../../models/CertificationContract.js'; +import * as scoringService from './scoring-service.js'; +import * as placementProfileService from '../placement-profile-service.js'; +import { CertifiedLevel } from '../../models/CertifiedLevel.js'; +import { CertifiedScore } from '../../models/CertifiedScore.js'; +import { ReproducibilityRate } from '../../models/ReproducibilityRate.js'; +import { CompetenceMark } from '../../models/CompetenceMark.js'; +import { CertificationAssessmentScore } from '../../models/CertificationAssessmentScore.js'; +import { AnswerCollectionForScoring } from '../../models/AnswerCollectionForScoring.js'; +import * as areaRepository from '../../../infrastructure/repositories/area-repository.js'; function _selectAnswersMatchingCertificationChallenges(answers, certificationChallenges) { return answers.filter(({ challengeId }) => _.some(certificationChallenges, { challengeId })); @@ -129,36 +129,37 @@ async function _getTestedCompetences({ userId, limitDate, isV2Certification, pla .value(); } -module.exports = { - async calculateCertificationAssessmentScore({ - certificationAssessment, - continueOnError, - dependencies = { - areaRepository, - placementProfileService, - }, - }) { - // userService.getPlacementProfile() + filter level > 0 => avec allCompetence (bug) - const testedCompetences = await _getTestedCompetences({ - userId: certificationAssessment.userId, - limitDate: certificationAssessment.createdAt, - isV2Certification: certificationAssessment.isV2Certification, - placementProfileService: dependencies.placementProfileService, - }); +const calculateCertificationAssessmentScore = async function ({ + certificationAssessment, + continueOnError, - // map sur challenges filtre sur competence Id - S'assurer qu'on ne travaille que sur les compétences certifiables - const matchingCertificationChallenges = _selectChallengesMatchingCompetences( - certificationAssessment.certificationChallenges, - testedCompetences - ); + dependencies = { + areaRepository, + placementProfileService, + }, +}) { + // userService.getPlacementProfile() + filter level > 0 => avec allCompetence (bug) + const testedCompetences = await _getTestedCompetences({ + userId: certificationAssessment.userId, + limitDate: certificationAssessment.createdAt, + isV2Certification: certificationAssessment.isV2Certification, + placementProfileService: dependencies.placementProfileService, + }); - // map sur challenges filtre sur challenge Id - const matchingAnswers = _selectAnswersMatchingCertificationChallenges( - certificationAssessment.certificationAnswersByDate, - matchingCertificationChallenges - ); + // map sur challenges filtre sur competence Id - S'assurer qu'on ne travaille que sur les compétences certifiables + const matchingCertificationChallenges = _selectChallengesMatchingCompetences( + certificationAssessment.certificationChallenges, + testedCompetences + ); - const allAreas = await dependencies.areaRepository.list(); - return _getResult(matchingAnswers, matchingCertificationChallenges, testedCompetences, allAreas, continueOnError); - }, + // map sur challenges filtre sur challenge Id + const matchingAnswers = _selectAnswersMatchingCertificationChallenges( + certificationAssessment.certificationAnswersByDate, + matchingCertificationChallenges + ); + + const allAreas = await dependencies.areaRepository.list(); + return _getResult(matchingAnswers, matchingCertificationChallenges, testedCompetences, allAreas, continueOnError); }; + +export { calculateCertificationAssessmentScore }; diff --git a/api/lib/domain/services/scoring/scoring-service.js b/api/lib/domain/services/scoring/scoring-service.js index d75afaf9dc4..9f0c04b3802 100644 --- a/api/lib/domain/services/scoring/scoring-service.js +++ b/api/lib/domain/services/scoring/scoring-service.js @@ -1,6 +1,6 @@ -const { PIX_COUNT_BY_LEVEL, MAX_REACHABLE_LEVEL, MAX_REACHABLE_PIX_BY_COMPETENCE } = require('../../constants.js'); +import { PIX_COUNT_BY_LEVEL, MAX_REACHABLE_LEVEL, MAX_REACHABLE_PIX_BY_COMPETENCE } from '../../constants.js'; -const _ = require('lodash'); +import _ from 'lodash'; function calculateScoringInformationForCompetence({ knowledgeElements, @@ -55,9 +55,4 @@ function calculatePixScore(knowledgeElements) { .sumBy('pixScoreForCompetence'); } -module.exports = { - calculateScoringInformationForCompetence, - getBlockedLevel, - getBlockedPixScore, - calculatePixScore, -}; +export { calculateScoringInformationForCompetence, getBlockedLevel, getBlockedPixScore, calculatePixScore }; diff --git a/api/lib/domain/services/services-utils.js b/api/lib/domain/services/services-utils.js index 2e6f686e40f..6a5efa8ed63 100644 --- a/api/lib/domain/services/services-utils.js +++ b/api/lib/domain/services/services-utils.js @@ -1,5 +1,5 @@ -const { ALL_TREATMENTS } = require('../constants.js'); -const _ = require('../../infrastructure/utils/lodash-utils.js'); +import { ALL_TREATMENTS } from '../constants.js'; +import { _ } from '../../infrastructure/utils/lodash-utils.js'; function getEnabledTreatments(shouldApplyTreatments, deactivations) { return shouldApplyTreatments ? ALL_TREATMENTS.filter((treatment) => !deactivations[treatment]) : []; @@ -9,7 +9,4 @@ function useLevenshteinRatio(enabledTreatments) { return _.includes(enabledTreatments, 't3'); } -module.exports = { - getEnabledTreatments, - useLevenshteinRatio, -}; +export { getEnabledTreatments, useLevenshteinRatio }; diff --git a/api/lib/domain/services/session-code-service.js b/api/lib/domain/services/session-code-service.js index 0dedeaf28e2..a68de2862d8 100644 --- a/api/lib/domain/services/session-code-service.js +++ b/api/lib/domain/services/session-code-service.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const config = require('../../config.js'); +import _ from 'lodash'; +import { config } from '../../config.js'; function _randomLetter() { const letters = config.availableCharacterForCode.letters.split(''); @@ -23,8 +23,8 @@ function _generateSessionCode() { return code; } -module.exports = { - getNewSessionCode() { - return _generateSessionCode(); - }, +const getNewSessionCode = function () { + return _generateSessionCode(); }; + +export { getNewSessionCode }; diff --git a/api/lib/domain/services/session-publication-service.js b/api/lib/domain/services/session-publication-service.js index de82566f552..c64808340ac 100644 --- a/api/lib/domain/services/session-publication-service.js +++ b/api/lib/domain/services/session-publication-service.js @@ -1,9 +1,14 @@ -const { SendingEmailToResultRecipientError, SessionAlreadyPublishedError } = require('../../domain/errors.js'); -const mailService = require('../../domain/services/mail-service.js'); -const uniqBy = require('lodash/uniqBy'); -const some = require('lodash/some'); -const { SendingEmailToRefererError } = require('../errors.js'); -const logger = require('../../infrastructure/logger.js'); +import { + SendingEmailToResultRecipientError, + SessionAlreadyPublishedError, + SendingEmailToRefererError, +} from '../../domain/errors.js'; +import * as mailService from '../../domain/services/mail-service.js'; +import lodash from 'lodash'; + +const { some, uniqBy } = lodash; + +import { logger } from '../../infrastructure/logger.js'; async function publishSession({ i18n, @@ -116,6 +121,4 @@ async function _updateFinalizedSession(finalizedSessionRepository, sessionId, pu await finalizedSessionRepository.save(finalizedSession); } -module.exports = { - publishSession, -}; +export { publishSession }; diff --git a/api/lib/domain/services/session-results-link-service.js b/api/lib/domain/services/session-results-link-service.js index ffc98a23c28..db242734003 100644 --- a/api/lib/domain/services/session-results-link-service.js +++ b/api/lib/domain/services/session-results-link-service.js @@ -1,13 +1,13 @@ -const tokenService = require('./token-service.js'); -const settings = require('../../config.js'); +import { tokenService } from './token-service.js'; +import { config } from '../../config.js'; -module.exports = { - generateResultsLink(sessionId) { - const daysBeforeExpiration = 30; +const generateResultsLink = function (sessionId) { + const daysBeforeExpiration = 30; - const token = tokenService.createCertificationResultsLinkToken({ sessionId, daysBeforeExpiration }); - const link = `${settings.domain.pixApp + settings.domain.tldOrg}/api/sessions/download-all-results/${token}`; + const token = tokenService.createCertificationResultsLinkToken({ sessionId, daysBeforeExpiration }); + const link = `${config.domain.pixApp + config.domain.tldOrg}/api/sessions/download-all-results/${token}`; - return link; - }, + return link; }; + +export { generateResultsLink }; diff --git a/api/lib/domain/services/session-xml-service.js b/api/lib/domain/services/session-xml-service.js index bc217d8e54c..b89a975bd56 100644 --- a/api/lib/domain/services/session-xml-service.js +++ b/api/lib/domain/services/session-xml-service.js @@ -1,4 +1,4 @@ -const writeOdsUtils = require('../../infrastructure/utils/ods/write-ods-utils.js'); +import * as writeOdsUtils from '../../infrastructure/utils/ods/write-ods-utils.js'; // Placeholder in the template ODS file that helps us find the template candidate row in the file. const CANDIDATE_ROW_MARKER_PLACEHOLDER = 'COUNT'; @@ -19,7 +19,4 @@ function getUpdatedXmlWithCertificationCandidatesData({ stringifiedXml, candidat }); } -module.exports = { - getUpdatedXmlWithSessionData, - getUpdatedXmlWithCertificationCandidatesData, -}; +export { getUpdatedXmlWithSessionData, getUpdatedXmlWithCertificationCandidatesData }; diff --git a/api/lib/domain/services/sessions-mass-import/sessions-import-validation-service.js b/api/lib/domain/services/sessions-mass-import/sessions-import-validation-service.js index 99d0143ea65..06c2d87354d 100644 --- a/api/lib/domain/services/sessions-mass-import/sessions-import-validation-service.js +++ b/api/lib/domain/services/sessions-mass-import/sessions-import-validation-service.js @@ -1,169 +1,175 @@ -const sessionValidator = require('../../validators/session-validator.js'); -const certificationCpfService = require('../certification-cpf-service.js'); -const { CERTIFICATION_SESSIONS_ERRORS } = require('../../constants/sessions-errors'); -const dayjs = require('dayjs'); -const { CERTIFICATION_CANDIDATES_ERRORS } = require('../../constants/certification-candidates-errors'); - -module.exports = { - async validateSession({ session, line, certificationCenterId, sessionRepository, certificationCourseRepository }) { - const sessionId = session.id; - const sessionErrors = []; - - if (sessionId) { - if (_hasSessionInfo(session)) { - _addToErrorList({ - errorList: sessionErrors, - line, - codes: [CERTIFICATION_SESSIONS_ERRORS.INFORMATION_NOT_ALLOWED_WITH_SESSION_ID.code], - }); - } +import * as sessionValidator from '../../validators/session-validator.js'; +import * as certificationCpfService from '../certification-cpf-service.js'; +import { CERTIFICATION_SESSIONS_ERRORS } from '../../constants/sessions-errors.js'; +import dayjs from 'dayjs'; +import { CERTIFICATION_CANDIDATES_ERRORS } from '../../constants/certification-candidates-errors.js'; + +const validateSession = async function ({ + session, + line, + certificationCenterId, + sessionRepository, + certificationCourseRepository, +}) { + const sessionId = session.id; + const sessionErrors = []; + + if (sessionId) { + if (_hasSessionInfo(session)) { + _addToErrorList({ + errorList: sessionErrors, + line, + codes: [CERTIFICATION_SESSIONS_ERRORS.INFORMATION_NOT_ALLOWED_WITH_SESSION_ID.code], + }); + } - if (_isSessionIdFormatValid(sessionId)) { - if (await _isSessionExistingInCertificationCenter({ sessionId, certificationCenterId, sessionRepository })) { - if (await _isSessionStarted({ certificationCourseRepository, sessionId })) { - _addToErrorList({ - errorList: sessionErrors, - line, - codes: [CERTIFICATION_SESSIONS_ERRORS.CANDIDATE_NOT_ALLOWED_FOR_STARTED_SESSION.code], - }); - } - } else { + if (_isSessionIdFormatValid(sessionId)) { + if (await _isSessionExistingInCertificationCenter({ sessionId, certificationCenterId, sessionRepository })) { + if (await _isSessionStarted({ certificationCourseRepository, sessionId })) { _addToErrorList({ errorList: sessionErrors, line, - codes: [CERTIFICATION_SESSIONS_ERRORS.SESSION_ID_NOT_EXISTING.code], + codes: [CERTIFICATION_SESSIONS_ERRORS.CANDIDATE_NOT_ALLOWED_FOR_STARTED_SESSION.code], }); } } else { _addToErrorList({ errorList: sessionErrors, line, - codes: [CERTIFICATION_SESSIONS_ERRORS.SESSION_ID_NOT_VALID.code], + codes: [CERTIFICATION_SESSIONS_ERRORS.SESSION_ID_NOT_EXISTING.code], }); } } else { - if (_isDateAndTimeValid(session)) { - const isSessionExisting = await sessionRepository.isSessionExisting({ ...session }); - if (isSessionExisting) { - _addToErrorList({ - errorList: sessionErrors, - line, - codes: [CERTIFICATION_SESSIONS_ERRORS.SESSION_WITH_DATE_AND_TIME_ALREADY_EXISTS.code], - }); - } - } - - if (session.isSessionScheduledInThePast()) { + _addToErrorList({ + errorList: sessionErrors, + line, + codes: [CERTIFICATION_SESSIONS_ERRORS.SESSION_ID_NOT_VALID.code], + }); + } + } else { + if (_isDateAndTimeValid(session)) { + const isSessionExisting = await sessionRepository.isSessionExisting({ ...session }); + if (isSessionExisting) { _addToErrorList({ errorList: sessionErrors, line, - codes: [CERTIFICATION_SESSIONS_ERRORS.SESSION_SCHEDULED_IN_THE_PAST.code], + codes: [CERTIFICATION_SESSIONS_ERRORS.SESSION_WITH_DATE_AND_TIME_ALREADY_EXISTS.code], }); } - - const errorCodes = sessionValidator.validateForMassSessionImport(session); - _addToErrorList({ errorList: sessionErrors, line, codes: errorCodes }); } - if (session.certificationCandidates.length === 0) { + if (session.isSessionScheduledInThePast()) { _addToErrorList({ errorList: sessionErrors, line, - codes: [CERTIFICATION_SESSIONS_ERRORS.EMPTY_SESSION.code], - isBlocking: false, + codes: [CERTIFICATION_SESSIONS_ERRORS.SESSION_SCHEDULED_IN_THE_PAST.code], }); } - return sessionErrors; - }, - - getUniqueCandidates(candidates) { - const duplicateCandidateErrors = []; - - const uniqueCandidates = candidates.filter((candidate, index) => { - const isFirstOccurence = - index === - candidates.findIndex( - (other) => - candidate.firstName === other.firstName && - candidate.lastName === other.lastName && - candidate.birthdate === other.birthdate - ); + const errorCodes = sessionValidator.validateForMassSessionImport(session); + _addToErrorList({ errorList: sessionErrors, line, codes: errorCodes }); + } - if (!isFirstOccurence) { - _addToErrorList({ - errorList: duplicateCandidateErrors, - line: candidate.line, - codes: [CERTIFICATION_SESSIONS_ERRORS.DUPLICATE_CANDIDATE_IN_SESSION.code], - isBlocking: false, - }); - } - - return isFirstOccurence; + if (session.certificationCandidates.length === 0) { + _addToErrorList({ + errorList: sessionErrors, + line, + codes: [CERTIFICATION_SESSIONS_ERRORS.EMPTY_SESSION.code], + isBlocking: false, }); + } - return { uniqueCandidates, duplicateCandidateErrors }; - }, + return sessionErrors; +}; - async getValidatedCandidateBirthInformation({ - candidate, - isSco, - line, - certificationCpfCountryRepository, - certificationCpfCityRepository, - dependencies = { certificationCpfService }, - }) { - const certificationCandidateErrors = []; +const getUniqueCandidates = function (candidates) { + const duplicateCandidateErrors = []; - if (candidate.extraTimePercentage) { - if (candidate.extraTimePercentage >= 1) { - candidate.convertExtraTimePercentageToDecimal(); - } else { - _addToErrorList({ - errorList: certificationCandidateErrors, - line, - codes: [CERTIFICATION_CANDIDATES_ERRORS.CANDIDATE_EXTRA_TIME_OUT_OF_RANGE.code], - }); - } + const uniqueCandidates = candidates.filter((candidate, index) => { + const isFirstOccurence = + index === + candidates.findIndex( + (other) => + candidate.firstName === other.firstName && + candidate.lastName === other.lastName && + candidate.birthdate === other.birthdate + ); + + if (!isFirstOccurence) { + _addToErrorList({ + errorList: duplicateCandidateErrors, + line: candidate.line, + codes: [CERTIFICATION_SESSIONS_ERRORS.DUPLICATE_CANDIDATE_IN_SESSION.code], + isBlocking: false, + }); } - const errorCodes = candidate.validateForMassSessionImport(isSco); - _addToErrorList({ errorList: certificationCandidateErrors, line, codes: errorCodes }); + return isFirstOccurence; + }); - const cpfBirthInformation = await dependencies.certificationCpfService.getBirthInformation({ - birthCountry: candidate.birthCountry, - birthCity: candidate.birthCity, - birthPostalCode: candidate.birthPostalCode, - birthINSEECode: candidate.birthINSEECode, - certificationCpfCountryRepository, - certificationCpfCityRepository, - }); + return { uniqueCandidates, duplicateCandidateErrors }; +}; - if (cpfBirthInformation.hasFailed()) { - cpfBirthInformation.errors.forEach(({ code: errorCode }) => { - if ( - _isErrorNotDuplicated({ - certificationCandidateErrors, - errorCode, - }) - ) { - _addToErrorList({ errorList: certificationCandidateErrors, line, codes: [errorCode] }); - } +const getValidatedCandidateBirthInformation = async function ({ + candidate, + isSco, + line, + certificationCpfCountryRepository, + certificationCpfCityRepository, + dependencies = { certificationCpfService }, +}) { + const certificationCandidateErrors = []; + + if (candidate.extraTimePercentage) { + if (candidate.extraTimePercentage >= 1) { + candidate.convertExtraTimePercentageToDecimal(); + } else { + _addToErrorList({ + errorList: certificationCandidateErrors, + line, + codes: [CERTIFICATION_CANDIDATES_ERRORS.CANDIDATE_EXTRA_TIME_OUT_OF_RANGE.code], }); } + } + + const errorCodes = candidate.validateForMassSessionImport(isSco); + _addToErrorList({ errorList: certificationCandidateErrors, line, codes: errorCodes }); - return { - certificationCandidateErrors, - cpfBirthInformation: { - birthCountry: cpfBirthInformation.birthCountry, - birthCity: cpfBirthInformation.birthCity, - birthPostalCode: cpfBirthInformation.birthPostalCode, - birthINSEECode: cpfBirthInformation.birthINSEECode, - }, - }; - }, + const cpfBirthInformation = await dependencies.certificationCpfService.getBirthInformation({ + birthCountry: candidate.birthCountry, + birthCity: candidate.birthCity, + birthPostalCode: candidate.birthPostalCode, + birthINSEECode: candidate.birthINSEECode, + certificationCpfCountryRepository, + certificationCpfCityRepository, + }); + + if (cpfBirthInformation.hasFailed()) { + cpfBirthInformation.errors.forEach(({ code: errorCode }) => { + if ( + _isErrorNotDuplicated({ + certificationCandidateErrors, + errorCode, + }) + ) { + _addToErrorList({ errorList: certificationCandidateErrors, line, codes: [errorCode] }); + } + }); + } + + return { + certificationCandidateErrors, + cpfBirthInformation: { + birthCountry: cpfBirthInformation.birthCountry, + birthCity: cpfBirthInformation.birthCity, + birthPostalCode: cpfBirthInformation.birthPostalCode, + birthINSEECode: cpfBirthInformation.birthINSEECode, + }, + }; }; +export { validateSession, getUniqueCandidates, getValidatedCandidateBirthInformation }; + function _isDateAndTimeValid(session) { return dayjs(`${session.date} ${session.time}`, 'YYYY-MM-DD HH:mm', true).isValid(); } diff --git a/api/lib/domain/services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service.js b/api/lib/domain/services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service.js index 79913d068f1..251d61428fe 100644 --- a/api/lib/domain/services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service.js +++ b/api/lib/domain/services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service.js @@ -1,31 +1,32 @@ -const settings = require('../../../config'); -const { temporaryStorage } = require('../../../infrastructure/temporary-storage'); +import { config } from '../../../config.js'; +import { temporaryStorage } from '../../../infrastructure/temporary-storage/index.js'; + const sessionMassImportTemporaryStorage = temporaryStorage.withPrefix('sessions-mass-import:'); -const { v4: uuidv4 } = require('uuid'); +import { v4 as uuidv4 } from 'uuid'; -const EXPIRATION_DELAY_SECONDS = settings.temporarySessionsStorageForMassImport.expirationDelaySeconds; +const EXPIRATION_DELAY_SECONDS = config.temporarySessionsStorageForMassImport.expirationDelaySeconds; -module.exports = { - async save({ sessions, userId }) { - const uuid = uuidv4(); - await sessionMassImportTemporaryStorage.save({ - key: `${userId}:${uuid}`, - value: sessions, - expirationDelaySeconds: EXPIRATION_DELAY_SECONDS, - }); +const save = async function ({ sessions, userId }) { + const uuid = uuidv4(); + await sessionMassImportTemporaryStorage.save({ + key: `${userId}:${uuid}`, + value: sessions, + expirationDelaySeconds: EXPIRATION_DELAY_SECONDS, + }); - return uuid; - }, + return uuid; +}; - async getByKeyAndUserId({ cachedValidatedSessionsKey, userId }) { - const key = `${userId}:${cachedValidatedSessionsKey}`; - const sessions = await sessionMassImportTemporaryStorage.get(key); +const getByKeyAndUserId = async function ({ cachedValidatedSessionsKey, userId }) { + const key = `${userId}:${cachedValidatedSessionsKey}`; + const sessions = await sessionMassImportTemporaryStorage.get(key); - return sessions; - }, + return sessions; +}; - async delete({ cachedValidatedSessionsKey, userId }) { - const key = `${userId}:${cachedValidatedSessionsKey}`; - await sessionMassImportTemporaryStorage.delete(key); - }, +const remove = async function ({ cachedValidatedSessionsKey, userId }) { + const key = `${userId}:${cachedValidatedSessionsKey}`; + await sessionMassImportTemporaryStorage.delete(key); }; + +export { save, getByKeyAndUserId, remove }; diff --git a/api/lib/domain/services/solution-service-qcm.js b/api/lib/domain/services/solution-service-qcm.js index efd19b4fb45..3b9a422ba56 100644 --- a/api/lib/domain/services/solution-service-qcm.js +++ b/api/lib/domain/services/solution-service-qcm.js @@ -1,12 +1,11 @@ -const _ = require('../../infrastructure/utils/lodash-utils.js'); +import { _ } from '../../infrastructure/utils/lodash-utils.js'; +import { AnswerStatus } from '../models/AnswerStatus.js'; -const AnswerStatus = require('../models/AnswerStatus.js'); - -module.exports = { - match(answer, solution) { - if (_.areCSVequivalent(answer, solution)) { - return AnswerStatus.OK; - } - return AnswerStatus.KO; - }, +const match = function (answer, solution) { + if (_.areCSVequivalent(answer, solution)) { + return AnswerStatus.OK; + } + return AnswerStatus.KO; }; + +export { match }; diff --git a/api/lib/domain/services/solution-service-qcu.js b/api/lib/domain/services/solution-service-qcu.js index d62de7bff25..333a94bdd56 100644 --- a/api/lib/domain/services/solution-service-qcu.js +++ b/api/lib/domain/services/solution-service-qcu.js @@ -1,10 +1,10 @@ -const AnswerStatus = require('../models/AnswerStatus.js'); +import { AnswerStatus } from '../models/AnswerStatus.js'; -module.exports = { - match(answer, solution) { - if (answer === solution) { - return AnswerStatus.OK; - } - return AnswerStatus.KO; - }, +const match = function (answer, solution) { + if (answer === solution) { + return AnswerStatus.OK; + } + return AnswerStatus.KO; }; + +export { match }; diff --git a/api/lib/domain/services/solution-service-qroc.js b/api/lib/domain/services/solution-service-qroc.js index 934d949af4c..4f3e76c0fb8 100644 --- a/api/lib/domain/services/solution-service-qroc.js +++ b/api/lib/domain/services/solution-service-qroc.js @@ -1,44 +1,43 @@ -const { +import { isNumeric, splitIntoWordsAndRemoveBackspaces, cleanStringAndParseFloat, -} = require('../../../lib/infrastructure/utils/string-utils.js'); -const { every, isEmpty, isString, map } = require('lodash'); -const { applyTreatments, applyPreTreatments } = require('./validation-treatments.js'); -const { validateAnswer } = require('./string-comparison-service.js'); - -const AnswerStatus = require('../models/AnswerStatus.js'); - -const { getEnabledTreatments, useLevenshteinRatio } = require('./services-utils.js'); +} from '../../../lib/infrastructure/utils/string-utils.js'; +import lodash from 'lodash'; +import { applyTreatments, applyPreTreatments } from './validation-treatments.js'; +import { validateAnswer } from './string-comparison-service.js'; +import { AnswerStatus } from '../models/AnswerStatus.js'; +import { getEnabledTreatments, useLevenshteinRatio } from './services-utils.js'; const CHALLENGE_NUMBER_FORMAT = 'nombre'; +const { every, isEmpty, isString, map } = lodash; -module.exports = { - match({ answer, challengeFormat, solution }) { - const solutionValue = solution.value; - const deactivations = solution.deactivations; - const qrocBlocksTypes = solution.qrocBlocksTypes || {}; - const shouldApplyTreatments = qrocBlocksTypes[Object.keys(qrocBlocksTypes)[0]] === 'select' ? false : true; +const match = function ({ answer, challengeFormat, solution }) { + const solutionValue = solution.value; + const deactivations = solution.deactivations; + const qrocBlocksTypes = solution.qrocBlocksTypes || {}; + const shouldApplyTreatments = qrocBlocksTypes[Object.keys(qrocBlocksTypes)[0]] === 'select' ? false : true; - const isIncorrectAnswerFormat = !isString(answer); - const isIncorrectSolutionFormat = !isString(solutionValue) || isEmpty(solutionValue); + const isIncorrectAnswerFormat = !isString(answer); + const isIncorrectSolutionFormat = !isString(solutionValue) || isEmpty(solutionValue); - if (isIncorrectAnswerFormat || isIncorrectSolutionFormat) { - return AnswerStatus.KO; - } + if (isIncorrectAnswerFormat || isIncorrectSolutionFormat) { + return AnswerStatus.KO; + } - const solutions = splitIntoWordsAndRemoveBackspaces(solutionValue); - const areAllNumericSolutions = every(solutions, (solution) => { - return isNumeric(solution); - }); + const solutions = splitIntoWordsAndRemoveBackspaces(solutionValue); + const areAllNumericSolutions = every(solutions, (solution) => { + return isNumeric(solution); + }); - if (isNumeric(answer) && areAllNumericSolutions && challengeFormat === CHALLENGE_NUMBER_FORMAT) { - return _getAnswerStatusFromNumberMatching(answer, solutions); - } + if (isNumeric(answer) && areAllNumericSolutions && challengeFormat === CHALLENGE_NUMBER_FORMAT) { + return _getAnswerStatusFromNumberMatching(answer, solutions); + } - return _getAnswerStatusFromStringMatching(answer, solutions, deactivations, shouldApplyTreatments); - }, + return _getAnswerStatusFromStringMatching(answer, solutions, deactivations, shouldApplyTreatments); }; +export { match }; + function _getAnswerStatusFromNumberMatching(answer, solutions) { const treatedSolutions = solutions.map((solution) => cleanStringAndParseFloat(solution)); const treatedAnswer = cleanStringAndParseFloat(answer); diff --git a/api/lib/domain/services/solution-service-qrocm-dep.js b/api/lib/domain/services/solution-service-qrocm-dep.js index 3073b7677d7..9e0cd6cf403 100644 --- a/api/lib/domain/services/solution-service-qrocm-dep.js +++ b/api/lib/domain/services/solution-service-qrocm-dep.js @@ -1,11 +1,10 @@ -const jsYaml = require('js-yaml'); -const { applyPreTreatments, applyTreatments } = require('./validation-treatments.js'); -const { YamlParsingError } = require('../../domain/errors.js'); -const { getEnabledTreatments, useLevenshteinRatio } = require('./services-utils.js'); -const { validateAnswer } = require('./string-comparison-service.js'); - -const AnswerStatus = require('../models/AnswerStatus.js'); -const CorrectionBlockQROCMDep = require('../models/CorrectionBlockQROCMDep.js'); +import jsYaml from 'js-yaml'; +import { applyPreTreatments, applyTreatments } from './validation-treatments.js'; +import { YamlParsingError } from '../../domain/errors.js'; +import { getEnabledTreatments, useLevenshteinRatio } from './services-utils.js'; +import { validateAnswer } from './string-comparison-service.js'; +import { AnswerStatus } from '../models/AnswerStatus.js'; +import { CorrectionBlockQROCMDep } from '../models/CorrectionBlockQROCMDep.js'; function applyTreatmentsToSolutions(solutions, enabledTreatments) { return Object.fromEntries( @@ -95,57 +94,59 @@ function treatAnswersAndSolutions(deactivations, solutions, answers) { return { enabledTreatments, treatedSolutions, treatedAnswers }; } -module.exports = { - match({ - answerValue, - solution: { deactivations, scoring: yamlScoring, value: yamlSolution }, - dependencies = { - applyPreTreatments, - convertYamlToJsObjects, - getEnabledTreatments, - treatAnswersAndSolutions, - }, - }) { - // Input checking - if (typeof answerValue !== 'string' || !answerValue.length || !String(yamlSolution).includes('\n')) { - return AnswerStatus.KO; - } +const match = function ({ + answerValue, + solution: { deactivations, scoring: yamlScoring, value: yamlSolution }, - // Pre-Treatments - const preTreatedAnswers = dependencies.applyPreTreatments(answerValue); - const { answers, solutions, scoring } = dependencies.convertYamlToJsObjects( - preTreatedAnswers, - yamlSolution, - yamlScoring - ); - const { enabledTreatments, treatedSolutions, treatedAnswers } = dependencies.treatAnswersAndSolutions( - deactivations, - solutions, - answers - ); - const numberOfGoodAnswers = getNumberOfGoodAnswers(treatedAnswers, treatedSolutions, enabledTreatments); - - return formatResult(scoring, numberOfGoodAnswers, Object.keys(answers).length); + dependencies = { + applyPreTreatments, + convertYamlToJsObjects, + getEnabledTreatments, + treatAnswersAndSolutions, }, +}) { + // Input checking + if (typeof answerValue !== 'string' || !answerValue.length || !String(yamlSolution).includes('\n')) { + return AnswerStatus.KO; + } + + // Pre-Treatments + const preTreatedAnswers = dependencies.applyPreTreatments(answerValue); + const { answers, solutions, scoring } = dependencies.convertYamlToJsObjects( + preTreatedAnswers, + yamlSolution, + yamlScoring + ); + const { enabledTreatments, treatedSolutions, treatedAnswers } = dependencies.treatAnswersAndSolutions( + deactivations, + solutions, + answers + ); + const numberOfGoodAnswers = getNumberOfGoodAnswers(treatedAnswers, treatedSolutions, enabledTreatments); - getSolution({ - answerValue, - solution: { deactivations, scoring: yamlScoring, value: yamlSolution }, - dependencies = { - applyPreTreatments, - convertYamlToJsObjects, - treatAnswersAndSolutions, - }, - }) { - // Pre-Treatments - const preTreatedAnswers = dependencies.applyPreTreatments(answerValue); - const { answers, solutions } = dependencies.convertYamlToJsObjects(preTreatedAnswers, yamlSolution, yamlScoring); - const { enabledTreatments, treatedSolutions, treatedAnswers } = dependencies.treatAnswersAndSolutions( - deactivations, - solutions, - answers - ); - - return getAnswersStatuses(treatedAnswers, treatedSolutions, enabledTreatments); + return formatResult(scoring, numberOfGoodAnswers, Object.keys(answers).length); +}; + +const getSolution = function ({ + answerValue, + solution: { deactivations, scoring: yamlScoring, value: yamlSolution }, + + dependencies = { + applyPreTreatments, + convertYamlToJsObjects, + treatAnswersAndSolutions, }, +}) { + // Pre-Treatments + const preTreatedAnswers = dependencies.applyPreTreatments(answerValue); + const { answers, solutions } = dependencies.convertYamlToJsObjects(preTreatedAnswers, yamlSolution, yamlScoring); + const { enabledTreatments, treatedSolutions, treatedAnswers } = dependencies.treatAnswersAndSolutions( + deactivations, + solutions, + answers + ); + + return getAnswersStatuses(treatedAnswers, treatedSolutions, enabledTreatments); }; + +export { match, getSolution }; diff --git a/api/lib/domain/services/solution-service-qrocm-ind.js b/api/lib/domain/services/solution-service-qrocm-ind.js index f4fd88a07a9..d01575a4e70 100644 --- a/api/lib/domain/services/solution-service-qrocm-ind.js +++ b/api/lib/domain/services/solution-service-qrocm-ind.js @@ -1,13 +1,12 @@ -const jsYaml = require('js-yaml'); -const levenshtein = require('fast-levenshtein'); -const _ = require('../../infrastructure/utils/lodash-utils.js'); -const logger = require('../../infrastructure/logger.js'); -const { applyPreTreatments, applyTreatments } = require('./validation-treatments.js'); -const { YamlParsingError } = require('../../domain/errors.js'); -const { LEVENSHTEIN_DISTANCE_MAX_RATE } = require('../constants.js'); -const { useLevenshteinRatio } = require('./services-utils.js'); - -const AnswerStatus = require('../models/AnswerStatus.js'); +import jsYaml from 'js-yaml'; +import levenshtein from 'fast-levenshtein'; +import { _ } from '../../infrastructure/utils/lodash-utils.js'; +import { logger } from '../../infrastructure/logger.js'; +import { applyPreTreatments, applyTreatments } from './validation-treatments.js'; +import { YamlParsingError } from '../../domain/errors.js'; +import { LEVENSHTEIN_DISTANCE_MAX_RATE } from '../constants.js'; +import { useLevenshteinRatio } from './services-utils.js'; +import { AnswerStatus } from '../models/AnswerStatus.js'; function _applyTreatmentsToSolutions(solutions, enabledTreatments, qrocBlocksTypes = {}) { return _.forEach(solutions, (solution, solutionKey) => { @@ -113,10 +112,4 @@ function match({ answerValue, solution }) { }; } -module.exports = { - _applyTreatmentsToSolutions, - _applyTreatmentsToAnswers, - _compareAnswersAndSolutions, - _formatResult, - match, -}; +export { _applyTreatmentsToSolutions, _applyTreatmentsToAnswers, _compareAnswersAndSolutions, _formatResult, match }; diff --git a/api/lib/domain/services/string-comparison-service.js b/api/lib/domain/services/string-comparison-service.js index 4bbc9527710..846b206f289 100644 --- a/api/lib/domain/services/string-comparison-service.js +++ b/api/lib/domain/services/string-comparison-service.js @@ -1,6 +1,6 @@ -const _ = require('lodash'); -const levenshtein = require('fast-levenshtein'); -const { LEVENSHTEIN_DISTANCE_MAX_RATE } = require('../constants.js'); +import _ from 'lodash'; +import levenshtein from 'fast-levenshtein'; +import { LEVENSHTEIN_DISTANCE_MAX_RATE } from '../constants.js'; function getLevenshteinRatio(inputString, reference) { return levenshtein.get(inputString, reference) / inputString.length; @@ -30,7 +30,7 @@ function validateAnswer(answer, solutions, useLevenshteinRatio) { return _.includes(solutions, answer); } -module.exports = { +export { areTwoStringsCloseEnough, isOneStringCloseEnoughFromMultipleStrings, getSmallestLevenshteinDistance, diff --git a/api/lib/domain/services/token-service.js b/api/lib/domain/services/token-service.js index c505f53cb98..a38a2d692b5 100644 --- a/api/lib/domain/services/token-service.js +++ b/api/lib/domain/services/token-service.js @@ -1,32 +1,34 @@ -const jsonwebtoken = require('jsonwebtoken'); -const { +import jsonwebtoken from 'jsonwebtoken'; + +import { InvalidTemporaryKeyError, InvalidExternalUserTokenError, InvalidResultRecipientTokenError, InvalidSessionResultError, -} = require('../../domain/errors.js'); -const settings = require('../../config.js'); -const { ForbiddenAccess } = require('../errors.js'); + ForbiddenAccess, +} from '../../domain/errors.js'; + +import { config } from '../../config.js'; function _createAccessToken({ userId, source, expirationDelaySeconds }) { - return jsonwebtoken.sign({ user_id: userId, source }, settings.authentication.secret, { + return jsonwebtoken.sign({ user_id: userId, source }, config.authentication.secret, { expiresIn: expirationDelaySeconds, }); } function createAccessTokenFromUser(userId, source) { - const expirationDelaySeconds = settings.authentication.accessTokenLifespanMs / 1000; + const expirationDelaySeconds = config.authentication.accessTokenLifespanMs / 1000; const accessToken = _createAccessToken({ userId, source, expirationDelaySeconds }); return { accessToken, expirationDelaySeconds }; } function createAccessTokenFromAnonymousUser(userId) { - const expirationDelaySeconds = settings.anonymous.accessTokenLifespanMs / 1000; + const expirationDelaySeconds = config.anonymous.accessTokenLifespanMs / 1000; return _createAccessToken({ userId, source: 'pix', expirationDelaySeconds }); } function createAccessTokenForSaml(userId) { - const expirationDelaySeconds = settings.saml.accessTokenLifespanMs / 1000; + const expirationDelaySeconds = config.saml.accessTokenLifespanMs / 1000; return _createAccessToken({ userId, source: 'external', expirationDelaySeconds }); } @@ -34,8 +36,8 @@ function createAccessTokenFromApplication( clientId, source, scope, - secret = settings.authentication.secret, - expiresIn = settings.authentication.accessTokenLifespanMs + secret = config.authentication.secret, + expiresIn = config.authentication.accessTokenLifespanMs ) { return jsonwebtoken.sign( { @@ -54,8 +56,8 @@ function createTokenForCampaignResults({ userId, campaignId }) { access_id: userId, campaign_id: campaignId, }, - settings.authentication.secret, - { expiresIn: settings.authentication.tokenForCampaignResultLifespan } + config.authentication.secret, + { expiresIn: config.authentication.tokenForCampaignResultLifespan } ); } @@ -66,8 +68,8 @@ function createIdTokenForUserReconciliation(externalUser) { last_name: externalUser.lastName, saml_id: externalUser.samlId, }, - settings.authentication.secret, - { expiresIn: settings.authentication.tokenForStudentReconciliationLifespan } + config.authentication.secret, + { expiresIn: config.authentication.tokenForStudentReconciliationLifespan } ); } @@ -81,7 +83,7 @@ function createCertificationResultsByRecipientEmailLinkToken({ session_id: sessionId, result_recipient_email: resultRecipientEmail, }, - settings.authentication.secret, + config.authentication.secret, { expiresIn: `${daysBeforeExpiration}d`, } @@ -93,7 +95,7 @@ function createCertificationResultsLinkToken({ sessionId, daysBeforeExpiration } { session_id: sessionId, }, - settings.authentication.secret, + config.authentication.secret, { expiresIn: `${daysBeforeExpiration}d`, } @@ -105,8 +107,8 @@ function createPasswordResetToken(userId) { { user_id: userId, }, - settings.authentication.secret, - { expiresIn: settings.authentication.passwordResetTokenLifespan } + config.authentication.secret, + { expiresIn: config.authentication.passwordResetTokenLifespan } ); } @@ -128,7 +130,7 @@ function decodeIfValid(token) { }); } -function getDecodedToken(token, secret = settings.authentication.secret) { +function getDecodedToken(token, secret = config.authentication.secret) { try { return jsonwebtoken.verify(token, secret); } catch (err) { @@ -169,7 +171,7 @@ function extractUserId(token) { return decoded.user_id || null; } -function extractClientId(token, secret = settings.authentication.secret) { +function extractClientId(token, secret = config.authentication.secret) { const decoded = getDecodedToken(token, secret); return decoded.client_id || null; } @@ -219,7 +221,7 @@ const tokenService = { extractCampaignResultsTokenContent, }; -module.exports = { +export { tokenService, createAccessTokenFromUser, createAccessTokenForSaml, diff --git a/api/lib/domain/services/tube-service.js b/api/lib/domain/services/tube-service.js index a2ebde3707b..19660f7dc1f 100644 --- a/api/lib/domain/services/tube-service.js +++ b/api/lib/domain/services/tube-service.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const Tube = require('../models/Tube.js'); +import _ from 'lodash'; +import { Tube } from '../models/Tube.js'; function computeTubesFromSkills(skills) { const tubes = []; @@ -20,6 +20,4 @@ function computeTubesFromSkills(skills) { return tubes; } -module.exports = { - computeTubesFromSkills, -}; +export { computeTubesFromSkills }; diff --git a/api/lib/domain/services/user-reconciliation-service.js b/api/lib/domain/services/user-reconciliation-service.js index 2087bf78857..f17982f4730 100644 --- a/api/lib/domain/services/user-reconciliation-service.js +++ b/api/lib/domain/services/user-reconciliation-service.js @@ -1,25 +1,26 @@ -const _ = require('lodash'); -const { pipe } = require('lodash/fp'); -const randomString = require('randomstring'); -const { STUDENT_RECONCILIATION_ERRORS } = require('../constants.js'); -const { +import lodash from 'lodash'; +import fp from 'lodash/fp.js'; + +const { pipe } = fp; +import randomString from 'randomstring'; +import { STUDENT_RECONCILIATION_ERRORS } from '../constants.js'; + +import { AlreadyRegisteredUsernameError, NotFoundError, OrganizationLearnerAlreadyLinkedToUserError, OrganizationLearnerAlreadyLinkedToInvalidUserError, -} = require('../errors.js'); -const { - areTwoStringsCloseEnough, - isOneStringCloseEnoughFromMultipleStrings, -} = require('./string-comparison-service.js'); -const { normalizeAndRemoveAccents, removeSpecialCharacters } = require('./validation-treatments.js'); +} from '../errors.js'; + +import { areTwoStringsCloseEnough, isOneStringCloseEnoughFromMultipleStrings } from './string-comparison-service.js'; +import { normalizeAndRemoveAccents, removeSpecialCharacters } from './validation-treatments.js'; const MAX_ACCEPTABLE_RATIO = 0.25; const STRICT_MATCH_RATIO = 0; function findMatchingCandidateIdForGivenUser(matchingUserCandidates, user) { const standardizedUser = _standardizeUser(user); - const standardizedMatchingUserCandidates = _.map(matchingUserCandidates, _standardizeMatchingCandidate); + const standardizedMatchingUserCandidates = lodash.map(matchingUserCandidates, _standardizeMatchingCandidate); const foundUserId = _findMatchingCandidateId( standardizedMatchingUserCandidates, @@ -51,7 +52,7 @@ async function findMatchingSupOrganizationLearnerIdForGivenOrganizationIdAndUser throw new NotFoundError('There were no organizationLearners matching with names'); } - if (!_.isNil(organizationLearner.userId)) { + if (!lodash.isNil(organizationLearner.userId)) { throw new OrganizationLearnerAlreadyLinkedToUserError(); } return organizationLearner; @@ -67,7 +68,7 @@ async function findMatchingOrganizationLearnerIdForGivenOrganizationIdAndUser({ birthdate, }); - if (_.isEmpty(organizationLearners)) { + if (lodash.isEmpty(organizationLearners)) { throw new NotFoundError('There are no organization learners found'); } @@ -76,7 +77,7 @@ async function findMatchingOrganizationLearnerIdForGivenOrganizationIdAndUser({ throw new NotFoundError('There were no organizationLearners matching with names'); } - return _.find(organizationLearners, { id: organizationLearnerId }); + return lodash.find(organizationLearners, { id: organizationLearnerId }); } async function checkIfStudentHasAnAlreadyReconciledAccount( @@ -85,7 +86,7 @@ async function checkIfStudentHasAnAlreadyReconciledAccount( obfuscationService, studentRepository ) { - if (!_.isNil(organizationLearner.userId)) { + if (!lodash.isNil(organizationLearner.userId)) { await _buildStudentReconciliationError( organizationLearner.userId, 'IN_SAME_ORGANIZATION', @@ -97,7 +98,7 @@ async function checkIfStudentHasAnAlreadyReconciledAccount( const student = await studentRepository.getReconciledStudentByNationalStudentId( organizationLearner.nationalStudentId ); - if (_.get(student, 'account')) { + if (lodash.get(student, 'account')) { await _buildStudentReconciliationError( student.account.userId, 'IN_OTHER_ORGANIZATION', @@ -129,29 +130,29 @@ async function _buildStudentReconciliationError(userId, errorContext, userReposi } function _containsOneElement(arr) { - return _.size(arr) === 1; + return lodash.size(arr) === 1; } function _standardizeUser(reconciliationInfo) { - return _(reconciliationInfo).pick(['firstName', 'lastName']).mapValues(_standardize).value(); + return lodash(reconciliationInfo).pick(['firstName', 'lastName']).mapValues(_standardize).value(); } function _standardizeMatchingCandidate(matchingUserCandidate) { - return _(matchingUserCandidate) + return lodash(matchingUserCandidate) .pick(['id', 'firstName', 'middleName', 'thirdName', 'lastName', 'preferredLastName']) .mapValues(_standardize) .value(); } function _standardize(propToStandardize) { - return _.isString(propToStandardize) + return lodash.isString(propToStandardize) ? pipe(normalizeAndRemoveAccents, removeSpecialCharacters)(propToStandardize) : propToStandardize; } function _findMatchingCandidateId(standardizedMatchingUserCandidates, standardizedUser, maxAcceptableRatio) { return ( - _(['firstName', 'middleName', 'thirdName']) + lodash(['firstName', 'middleName', 'thirdName']) .map(_findCandidatesMatchingWithUser(standardizedMatchingUserCandidates, standardizedUser, maxAcceptableRatio)) .filter(_containsOneElement) .flatten() @@ -227,7 +228,7 @@ async function createUsernameByUser({ user: { firstName, lastName, birthdate }, return await generateUsernameUntilAvailable({ firstPart, secondPart, userRepository }); } -module.exports = { +export { generateUsernameUntilAvailable, createUsernameByUser, findMatchingCandidateIdForGivenUser, diff --git a/api/lib/domain/services/user-service.js b/api/lib/domain/services/user-service.js index f962e25783e..d82acb1d798 100644 --- a/api/lib/domain/services/user-service.js +++ b/api/lib/domain/services/user-service.js @@ -1,7 +1,6 @@ -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); - -const AuthenticationMethod = require('../../domain/models/AuthenticationMethod.js'); -const UserToCreate = require('../models/UserToCreate.js'); +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; +import { AuthenticationMethod } from '../../domain/models/AuthenticationMethod.js'; +import { UserToCreate } from '../models/UserToCreate.js'; function _buildPasswordAuthenticationMethod({ userId, hashedPassword }) { return new AuthenticationMethod({ @@ -115,8 +114,4 @@ async function createAndReconcileUserToOrganizationLearner({ }); } -module.exports = { - createAndReconcileUserToOrganizationLearner, - createUserWithPassword, - updateUsernameAndAddPassword, -}; +export { createAndReconcileUserToOrganizationLearner, createUserWithPassword, updateUsernameAndAddPassword }; diff --git a/api/lib/domain/services/validation-treatments.js b/api/lib/domain/services/validation-treatments.js index 9eb28e210ac..348a3726afc 100644 --- a/api/lib/domain/services/validation-treatments.js +++ b/api/lib/domain/services/validation-treatments.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; function normalizeAndRemoveAccents(value) { // Remove uppercase/spaces/accents/diacritics, see http://stackoverflow.com/a/37511463/827989 @@ -45,10 +45,4 @@ function applyTreatments(string, enabledTreatments) { return result; } -module.exports = { - normalizeAndRemoveAccents, - removeSpecialCharacters, - applyPreTreatments, - applyTreatments, - treatments, -}; +export { normalizeAndRemoveAccents, removeSpecialCharacters, applyPreTreatments, applyTreatments, treatments }; diff --git a/api/lib/domain/services/verify-certificate-code-service.js b/api/lib/domain/services/verify-certificate-code-service.js index f35b5aec35c..cd797545df0 100644 --- a/api/lib/domain/services/verify-certificate-code-service.js +++ b/api/lib/domain/services/verify-certificate-code-service.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); -const certificationCourseRepository = require('../../../lib/infrastructure/repositories/certification-course-repository.js'); -const { CertificateVerificationCodeGenerationTooManyTrials } = require('../../../lib/domain/errors.js'); -const config = require('../../config.js'); +import _ from 'lodash'; +import * as certificationCourseRepository from '../../../lib/infrastructure/repositories/certification-course-repository.js'; +import { CertificateVerificationCodeGenerationTooManyTrials } from '../../../lib/domain/errors.js'; +import { config } from '../../config.js'; const availableCharacters = `${config.availableCharacterForCode.numbers}${config.availableCharacterForCode.letters}`.split(''); @@ -16,16 +16,16 @@ function _randomCharacter() { return _.sample(availableCharacters); } -module.exports = { - async generateCertificateVerificationCode({ - generateCode = _generateCode, - dependencies = { certificationCourseRepository }, - } = {}) { - for (let i = 0; i < NB_OF_TRIALS; i++) { - const code = generateCode(); - const isCodeAvailable = await dependencies.certificationCourseRepository.isVerificationCodeAvailable(code); - if (isCodeAvailable) return code; - } - throw new CertificateVerificationCodeGenerationTooManyTrials(NB_OF_TRIALS); - }, +const generateCertificateVerificationCode = async function ({ + generateCode = _generateCode, + dependencies = { certificationCourseRepository }, +} = {}) { + for (let i = 0; i < NB_OF_TRIALS; i++) { + const code = generateCode(); + const isCodeAvailable = await dependencies.certificationCourseRepository.isVerificationCodeAvailable(code); + if (isCodeAvailable) return code; + } + throw new CertificateVerificationCodeGenerationTooManyTrials(NB_OF_TRIALS); }; + +export { generateCertificateVerificationCode }; diff --git a/api/lib/domain/types/identifiers-type.js b/api/lib/domain/types/identifiers-type.js index 36cb4a9a089..022e8fa898a 100644 --- a/api/lib/domain/types/identifiers-type.js +++ b/api/lib/domain/types/identifiers-type.js @@ -1,5 +1,5 @@ -const Joi = require('joi'); -const _ = require('lodash'); +import Joi from 'joi'; +import _ from 'lodash'; const postgreSQLSequenceDefaultStart = 1; const postgreSQLSequenceEnd = 2 ** 31 - 1; @@ -70,4 +70,4 @@ valuesToExport.positiveInteger32bits = { max: postgreSQLSequenceEnd, }; -module.exports = valuesToExport; +export { valuesToExport as identifiersType }; diff --git a/api/lib/domain/usecases/abort-certification-course.js b/api/lib/domain/usecases/abort-certification-course.js index acce828ac4c..d1c7891a797 100644 --- a/api/lib/domain/usecases/abort-certification-course.js +++ b/api/lib/domain/usecases/abort-certification-course.js @@ -1,4 +1,4 @@ -module.exports = async function abortCertificationCourse({ +const abortCertificationCourse = async function ({ certificationCourseRepository, certificationCourseId, abortReason, @@ -7,3 +7,5 @@ module.exports = async function abortCertificationCourse({ certificationCourse.abort(abortReason); await certificationCourseRepository.update(certificationCourse); }; + +export { abortCertificationCourse }; diff --git a/api/lib/domain/usecases/accept-certification-center-invitation.js b/api/lib/domain/usecases/accept-certification-center-invitation.js index 656537a5c4c..c171b0b6f87 100644 --- a/api/lib/domain/usecases/accept-certification-center-invitation.js +++ b/api/lib/domain/usecases/accept-certification-center-invitation.js @@ -1,6 +1,6 @@ -const { AlreadyExistingMembershipError } = require('../errors.js'); +import { AlreadyExistingMembershipError } from '../errors.js'; -module.exports = async function acceptCertificationCenterInvitation({ +const acceptCertificationCenterInvitation = async function ({ certificationCenterInvitationId, code, email, @@ -40,3 +40,5 @@ module.exports = async function acceptCertificationCenterInvitation({ await certificationCenterInvitedUserRepository.save(certificationCenterInvitedUser); }; + +export { acceptCertificationCenterInvitation }; diff --git a/api/lib/domain/usecases/accept-organization-invitation.js b/api/lib/domain/usecases/accept-organization-invitation.js index 20bd82b26cf..692112005b3 100644 --- a/api/lib/domain/usecases/accept-organization-invitation.js +++ b/api/lib/domain/usecases/accept-organization-invitation.js @@ -1,6 +1,6 @@ -const { AlreadyExistingMembershipError } = require('../../domain/errors.js'); +import { AlreadyExistingMembershipError } from '../../domain/errors.js'; -module.exports = async function acceptOrganizationInvitation({ +const acceptOrganizationInvitation = async function ({ organizationInvitationId, code, email, @@ -31,3 +31,5 @@ module.exports = async function acceptOrganizationInvitation({ await organizationInvitedUserRepository.save({ organizationInvitedUser }); return { id: organizationInvitedUser.currentMembershipId, isAdmin: organizationInvitedUser.currentRole === 'ADMIN' }; }; + +export { acceptOrganizationInvitation }; diff --git a/api/lib/domain/usecases/accept-pix-certif-terms-of-service.js b/api/lib/domain/usecases/accept-pix-certif-terms-of-service.js index e66731c21b4..45b47640fa0 100644 --- a/api/lib/domain/usecases/accept-pix-certif-terms-of-service.js +++ b/api/lib/domain/usecases/accept-pix-certif-terms-of-service.js @@ -1,3 +1,5 @@ -module.exports = function acceptPixCertifTermsOfService({ userId, userRepository }) { +const acceptPixCertifTermsOfService = function ({ userId, userRepository }) { return userRepository.updatePixCertifTermsOfServiceAcceptedToTrue(userId); }; + +export { acceptPixCertifTermsOfService }; diff --git a/api/lib/domain/usecases/accept-pix-last-terms-of-service.js b/api/lib/domain/usecases/accept-pix-last-terms-of-service.js index 46e828a2995..b6a48d1945a 100644 --- a/api/lib/domain/usecases/accept-pix-last-terms-of-service.js +++ b/api/lib/domain/usecases/accept-pix-last-terms-of-service.js @@ -1,3 +1,5 @@ -module.exports = function acceptPixLastTermsOfService({ userId, userRepository }) { +const acceptPixLastTermsOfService = function ({ userId, userRepository }) { return userRepository.acceptPixLastTermsOfService(userId); }; + +export { acceptPixLastTermsOfService }; diff --git a/api/lib/domain/usecases/accept-pix-orga-terms-of-service.js b/api/lib/domain/usecases/accept-pix-orga-terms-of-service.js index 67d5ad819ea..1010e884b02 100644 --- a/api/lib/domain/usecases/accept-pix-orga-terms-of-service.js +++ b/api/lib/domain/usecases/accept-pix-orga-terms-of-service.js @@ -1,3 +1,5 @@ -module.exports = function acceptPixOrgaTermsOfService({ userId, userRepository }) { +const acceptPixOrgaTermsOfService = function ({ userId, userRepository }) { return userRepository.updatePixOrgaTermsOfServiceAcceptedToTrue(userId); }; + +export { acceptPixOrgaTermsOfService }; diff --git a/api/lib/domain/usecases/account-recovery/get-account-recovery-details.js b/api/lib/domain/usecases/account-recovery/get-account-recovery-details.js index 4a8f8c8efc1..e70798f829d 100644 --- a/api/lib/domain/usecases/account-recovery/get-account-recovery-details.js +++ b/api/lib/domain/usecases/account-recovery/get-account-recovery-details.js @@ -1,4 +1,4 @@ -module.exports = async function getAccountRecoveryDetails({ +const getAccountRecoveryDetails = async function ({ temporaryKey, accountRecoveryDemandRepository, organizationLearnerRepository, @@ -20,3 +20,5 @@ module.exports = async function getAccountRecoveryDetails({ firstName, }; }; + +export { getAccountRecoveryDetails }; diff --git a/api/lib/domain/usecases/account-recovery/send-email-for-account-recovery.js b/api/lib/domain/usecases/account-recovery/send-email-for-account-recovery.js index 85f2bc5af9e..e6db0030e52 100644 --- a/api/lib/domain/usecases/account-recovery/send-email-for-account-recovery.js +++ b/api/lib/domain/usecases/account-recovery/send-email-for-account-recovery.js @@ -1,7 +1,7 @@ -const crypto = require('crypto'); -const AccountRecoveryDemand = require('../../models/AccountRecoveryDemand.js'); +import crypto from 'crypto'; +import { AccountRecoveryDemand } from '../../models/AccountRecoveryDemand.js'; -module.exports = async function sendEmailForAccountRecovery({ +const sendEmailForAccountRecovery = async function ({ studentInformation, temporaryKey, organizationLearnerRepository, @@ -45,3 +45,5 @@ module.exports = async function sendEmailForAccountRecovery({ temporaryKey: encodedTemporaryKey, }); }; + +export { sendEmailForAccountRecovery }; diff --git a/api/lib/domain/usecases/account-recovery/update-user-for-account-recovery.js b/api/lib/domain/usecases/account-recovery/update-user-for-account-recovery.js index 64e0da0d662..a4f7b9cb597 100644 --- a/api/lib/domain/usecases/account-recovery/update-user-for-account-recovery.js +++ b/api/lib/domain/usecases/account-recovery/update-user-for-account-recovery.js @@ -1,6 +1,6 @@ -const AuthenticationMethod = require('../../models/AuthenticationMethod.js'); +import { AuthenticationMethod } from '../../models/AuthenticationMethod.js'; -module.exports = async function updateUserForAccountRecovery({ +const updateUserForAccountRecovery = async function ({ password, temporaryKey, userRepository, @@ -59,3 +59,5 @@ module.exports = async function updateUserForAccountRecovery({ }); await accountRecoveryDemandRepository.markAsBeingUsed(temporaryKey, domainTransaction); }; + +export { updateUserForAccountRecovery }; diff --git a/api/lib/domain/usecases/add-certification-candidate-to-session.js b/api/lib/domain/usecases/add-certification-candidate-to-session.js index b4b281c3d4b..42209e7ccfa 100644 --- a/api/lib/domain/usecases/add-certification-candidate-to-session.js +++ b/api/lib/domain/usecases/add-certification-candidate-to-session.js @@ -1,11 +1,11 @@ -const { +import { CertificationCandidateByPersonalInfoTooManyMatchesError, CertificationCandidateAddError, CertificationCandidateOnFinalizedSessionError, CpfBirthInformationValidationError, -} = require('../errors.js'); +} from '../errors.js'; -module.exports = async function addCertificationCandidateToSession({ +const addCertificationCandidateToSession = async function ({ sessionId, certificationCandidate, complementaryCertifications, @@ -62,3 +62,5 @@ module.exports = async function addCertificationCandidateToSession({ sessionId: certificationCandidate.sessionId, }); }; + +export { addCertificationCandidateToSession }; diff --git a/api/lib/domain/usecases/add-pix-authentication-method-by-email.js b/api/lib/domain/usecases/add-pix-authentication-method-by-email.js index 212934fa385..9a4d672675d 100644 --- a/api/lib/domain/usecases/add-pix-authentication-method-by-email.js +++ b/api/lib/domain/usecases/add-pix-authentication-method-by-email.js @@ -1,7 +1,7 @@ -const { AuthenticationMethodAlreadyExistsError } = require('../errors.js'); -const AuthenticationMethod = require('../models/AuthenticationMethod.js'); +import { AuthenticationMethodAlreadyExistsError } from '../errors.js'; +import { AuthenticationMethod } from '../models/AuthenticationMethod.js'; -module.exports = async function addPixAuthenticationMethodByEmail({ +const addPixAuthenticationMethodByEmail = async function ({ userId, email, passwordGenerator, @@ -32,3 +32,5 @@ module.exports = async function addPixAuthenticationMethodByEmail({ return userRepository.getUserDetailsForAdmin(userId); } }; + +export { addPixAuthenticationMethodByEmail }; diff --git a/api/lib/domain/usecases/add-tutorial-evaluation.js b/api/lib/domain/usecases/add-tutorial-evaluation.js index b4821b84f7e..d95b630f140 100644 --- a/api/lib/domain/usecases/add-tutorial-evaluation.js +++ b/api/lib/domain/usecases/add-tutorial-evaluation.js @@ -1,4 +1,4 @@ -module.exports = async function addTutorialEvaluation({ +const addTutorialEvaluation = async function ({ tutorialRepository, tutorialEvaluationRepository, userId, @@ -9,3 +9,5 @@ module.exports = async function addTutorialEvaluation({ return tutorialEvaluationRepository.createOrUpdate({ userId, tutorialId, status }); }; + +export { addTutorialEvaluation }; diff --git a/api/lib/domain/usecases/add-tutorial-to-user.js b/api/lib/domain/usecases/add-tutorial-to-user.js index 4182d9ea1ed..ce8a272be9b 100644 --- a/api/lib/domain/usecases/add-tutorial-to-user.js +++ b/api/lib/domain/usecases/add-tutorial-to-user.js @@ -1,4 +1,4 @@ -module.exports = async function addTutorialToUser({ +const addTutorialToUser = async function ({ tutorialRepository, skillRepository, userSavedTutorialRepository, @@ -11,3 +11,5 @@ module.exports = async function addTutorialToUser({ return userSavedTutorialRepository.addTutorial({ userId, tutorialId, skillId }); }; + +export { addTutorialToUser }; diff --git a/api/lib/domain/usecases/anonymize-user.js b/api/lib/domain/usecases/anonymize-user.js index 2752c7ecdcd..eadc7d276ba 100644 --- a/api/lib/domain/usecases/anonymize-user.js +++ b/api/lib/domain/usecases/anonymize-user.js @@ -1,6 +1,6 @@ -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; -module.exports = async function anonymizeUser({ +const anonymizeUser = async function ({ updatedByUserId, userId, userRepository, @@ -38,3 +38,5 @@ module.exports = async function anonymizeUser({ }); return userRepository.getUserDetailsForAdmin(userId); }; + +export { anonymizeUser }; diff --git a/api/lib/domain/usecases/archive-campaign-from-campaign-code.js b/api/lib/domain/usecases/archive-campaign-from-campaign-code.js index 7273d268da9..89e2d797c61 100644 --- a/api/lib/domain/usecases/archive-campaign-from-campaign-code.js +++ b/api/lib/domain/usecases/archive-campaign-from-campaign-code.js @@ -1,9 +1,7 @@ -module.exports = async function archiveCampaignFromCampaignCode({ - campaignCode, - userId, - campaignForArchivingRepository, -}) { +const archiveCampaignFromCampaignCode = async function ({ campaignCode, userId, campaignForArchivingRepository }) { const campaign = await campaignForArchivingRepository.getByCode(campaignCode); campaign.archive(new Date(), userId); await campaignForArchivingRepository.save(campaign); }; + +export { archiveCampaignFromCampaignCode }; diff --git a/api/lib/domain/usecases/archive-campaign.js b/api/lib/domain/usecases/archive-campaign.js index 8be5355112f..d90dccb0e7d 100644 --- a/api/lib/domain/usecases/archive-campaign.js +++ b/api/lib/domain/usecases/archive-campaign.js @@ -1,6 +1,8 @@ -module.exports = async function archiveCampaign({ campaignId, userId, campaignForArchivingRepository }) { +const archiveCampaign = async function ({ campaignId, userId, campaignForArchivingRepository }) { const campaign = await campaignForArchivingRepository.get(campaignId); campaign.archive(new Date(), userId); await campaignForArchivingRepository.save(campaign); return campaign; }; + +export { archiveCampaign }; diff --git a/api/lib/domain/usecases/archive-organization.js b/api/lib/domain/usecases/archive-organization.js index 636035b3103..1fb68cdbcb1 100644 --- a/api/lib/domain/usecases/archive-organization.js +++ b/api/lib/domain/usecases/archive-organization.js @@ -1,4 +1,6 @@ -module.exports = async function archiveOrganization({ organizationId, userId, organizationForAdminRepository }) { +const archiveOrganization = async function ({ organizationId, userId, organizationForAdminRepository }) { await organizationForAdminRepository.archive({ id: organizationId, archivedBy: userId }); return await organizationForAdminRepository.get(organizationId); }; + +export { archiveOrganization }; diff --git a/api/lib/domain/usecases/assign-certification-officer-to-jury-session.js b/api/lib/domain/usecases/assign-certification-officer-to-jury-session.js index c6a9ae3fd80..863f328f5fd 100644 --- a/api/lib/domain/usecases/assign-certification-officer-to-jury-session.js +++ b/api/lib/domain/usecases/assign-certification-officer-to-jury-session.js @@ -1,4 +1,4 @@ -module.exports = async function assignCertificationOfficerToJurySession({ +const assignCertificationOfficerToJurySession = async function ({ sessionId, certificationOfficerId, jurySessionRepository, @@ -17,3 +17,5 @@ module.exports = async function assignCertificationOfficerToJurySession({ assignedCertificationOfficerId: certificationOfficer.id, }); }; + +export { assignCertificationOfficerToJurySession }; diff --git a/api/lib/domain/usecases/attach-organizations-from-existing-target-profile.js b/api/lib/domain/usecases/attach-organizations-from-existing-target-profile.js index 1f013abe7a8..2f31cafe387 100644 --- a/api/lib/domain/usecases/attach-organizations-from-existing-target-profile.js +++ b/api/lib/domain/usecases/attach-organizations-from-existing-target-profile.js @@ -1,6 +1,6 @@ -const { OrganizationsToAttachToTargetProfile } = require('../models/index.js'); +import { OrganizationsToAttachToTargetProfile } from '../models/index.js'; -module.exports = async function attachOrganizationsFromExistingTargetProfile({ +const attachOrganizationsFromExistingTargetProfile = async function ({ targetProfileId, existingTargetProfileId, organizationsToAttachToTargetProfileRepository, @@ -13,3 +13,5 @@ module.exports = async function attachOrganizationsFromExistingTargetProfile({ await organizationsToAttachToTargetProfileRepository.attachOrganizations(targetProfileOrganizations); }; + +export { attachOrganizationsFromExistingTargetProfile }; diff --git a/api/lib/domain/usecases/attach-organizations-to-target-profile.js b/api/lib/domain/usecases/attach-organizations-to-target-profile.js index daf25c8a8e9..b60b17b780e 100644 --- a/api/lib/domain/usecases/attach-organizations-to-target-profile.js +++ b/api/lib/domain/usecases/attach-organizations-to-target-profile.js @@ -1,6 +1,6 @@ -const { OrganizationsToAttachToTargetProfile } = require('../models/index.js'); +import { OrganizationsToAttachToTargetProfile } from '../models/index.js'; -module.exports = async function attachOrganizationsToTargetProfile({ +const attachOrganizationsToTargetProfile = async function ({ targetProfileId, organizationIds, organizationsToAttachToTargetProfileRepository, @@ -11,3 +11,5 @@ module.exports = async function attachOrganizationsToTargetProfile({ return organizationsToAttachToTargetProfileRepository.attachOrganizations(targetProfileOrganizations); }; + +export { attachOrganizationsToTargetProfile }; diff --git a/api/lib/domain/usecases/attach-target-profiles-to-organization.js b/api/lib/domain/usecases/attach-target-profiles-to-organization.js index 5b17d9da120..19c12ba2771 100644 --- a/api/lib/domain/usecases/attach-target-profiles-to-organization.js +++ b/api/lib/domain/usecases/attach-target-profiles-to-organization.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); -const { NotFoundError } = require('../errors.js'); +import _ from 'lodash'; +import { NotFoundError } from '../errors.js'; -module.exports = async function attachTargetProfilesToOrganization({ +const attachTargetProfilesToOrganization = async function ({ organizationId, targetProfileIds, targetProfileRepository, @@ -20,3 +20,5 @@ module.exports = async function attachTargetProfilesToOrganization({ targetProfileIdList: uniqTargetProfileIds, }); }; + +export { attachTargetProfilesToOrganization }; diff --git a/api/lib/domain/usecases/attach-target-profiles-to-training.js b/api/lib/domain/usecases/attach-target-profiles-to-training.js index 8763456b372..96a43072860 100644 --- a/api/lib/domain/usecases/attach-target-profiles-to-training.js +++ b/api/lib/domain/usecases/attach-target-profiles-to-training.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); -const { NotFoundError } = require('../errors.js'); +import _ from 'lodash'; +import { NotFoundError } from '../errors.js'; -module.exports = async function attachTargetProfilesToTraining({ +const attachTargetProfilesToTraining = async function ({ trainingId, targetProfileIds, targetProfileRepository, @@ -20,3 +20,5 @@ module.exports = async function attachTargetProfilesToTraining({ targetProfileIds: uniqTargetProfileIds, }); }; + +export { attachTargetProfilesToTraining }; diff --git a/api/lib/domain/usecases/authenticate-anonymous-user.js b/api/lib/domain/usecases/authenticate-anonymous-user.js index ec85923194a..5c5f3b806dd 100644 --- a/api/lib/domain/usecases/authenticate-anonymous-user.js +++ b/api/lib/domain/usecases/authenticate-anonymous-user.js @@ -1,7 +1,7 @@ -const { UserCantBeCreatedError } = require('../errors.js'); -const UserToCreate = require('../models/UserToCreate.js'); +import { UserCantBeCreatedError } from '../errors.js'; +import { UserToCreate } from '../models/UserToCreate.js'; -module.exports = async function authenticateAnonymousUser({ +const authenticateAnonymousUser = async function ({ campaignCode, lang = 'fr', campaignToJoinRepository, @@ -18,3 +18,5 @@ module.exports = async function authenticateAnonymousUser({ return tokenService.createAccessTokenFromAnonymousUser(newUser.id); }; + +export { authenticateAnonymousUser }; diff --git a/api/lib/domain/usecases/authenticate-application.js b/api/lib/domain/usecases/authenticate-application.js index 86239e36dd8..00e680d3478 100644 --- a/api/lib/domain/usecases/authenticate-application.js +++ b/api/lib/domain/usecases/authenticate-application.js @@ -1,11 +1,15 @@ -const { +import { ApplicationScopeNotAllowedError, ApplicationWithInvalidClientIdError, ApplicationWithInvalidClientSecretError, -} = require('../../domain/errors.js'); +} from '../../domain/errors.js'; -const { find } = require('lodash'); -const { apimRegisterApplicationsCredentials, jwtConfig } = require('../../config.js'); +import lodash from 'lodash'; + +const { find } = lodash; + +import { config } from '../../config.js'; +const { apimRegisterApplicationsCredentials, jwtConfig } = config; function _checkClientId(application, clientId) { if (!application || application.clientId !== clientId) { @@ -25,7 +29,7 @@ function _checkAppScope(application, scope) { } } -module.exports = async function authenticateApplication({ clientId, clientSecret, scope, tokenService }) { +const authenticateApplication = async function ({ clientId, clientSecret, scope, tokenService }) { const application = find(apimRegisterApplicationsCredentials, { clientId }); _checkClientId(application, clientId); _checkClientSecret(application, clientSecret); @@ -39,3 +43,5 @@ module.exports = async function authenticateApplication({ clientId, clientSecret jwtConfig[application.source].tokenLifespan ); }; + +export { authenticateApplication }; diff --git a/api/lib/domain/usecases/authenticate-external-user.js b/api/lib/domain/usecases/authenticate-external-user.js index bf1bdee8dd1..2b7214b82b5 100644 --- a/api/lib/domain/usecases/authenticate-external-user.js +++ b/api/lib/domain/usecases/authenticate-external-user.js @@ -1,13 +1,13 @@ -const { +import { MissingOrInvalidCredentialsError, UserNotFoundError, PasswordNotMatching, UnexpectedUserAccountError, UserAlreadyExistsWithAuthenticationMethodError, UserShouldChangePasswordError, -} = require('../errors.js'); +} from '../errors.js'; -const AuthenticationMethod = require('../models/AuthenticationMethod.js'); +import { AuthenticationMethod } from '../models/AuthenticationMethod.js'; async function authenticateExternalUser({ username, @@ -91,4 +91,4 @@ const _checkIfSamlIdIsNotReconciledWithAnotherUser = async ({ samlId, userId, us } }; -module.exports = authenticateExternalUser; +export { authenticateExternalUser }; diff --git a/api/lib/domain/usecases/authenticate-user.js b/api/lib/domain/usecases/authenticate-user.js index 7b06eb1e5e3..d287948aa70 100644 --- a/api/lib/domain/usecases/authenticate-user.js +++ b/api/lib/domain/usecases/authenticate-user.js @@ -1,29 +1,31 @@ -const get = require('lodash/get'); +import lodash from 'lodash'; -const { +const { get } = lodash; + +import { ForbiddenAccess, LocaleFormatError, LocaleNotSupportedError, MissingOrInvalidCredentialsError, UserShouldChangePasswordError, -} = require('../../domain/errors.js'); +} from '../../domain/errors.js'; -const apps = require('../constants.js'); +import { PIX_ORGA, PIX_ADMIN } from '../constants.js'; async function _checkUserAccessScope(scope, user, adminMemberRepository) { - if (scope === apps.PIX_ORGA.SCOPE && !user.isLinkedToOrganizations()) { - throw new ForbiddenAccess(apps.PIX_ORGA.NOT_LINKED_ORGANIZATION_MSG); + if (scope === PIX_ORGA.SCOPE && !user.isLinkedToOrganizations()) { + throw new ForbiddenAccess(PIX_ORGA.NOT_LINKED_ORGANIZATION_MSG); } - if (scope === apps.PIX_ADMIN.SCOPE) { + if (scope === PIX_ADMIN.SCOPE) { const adminMember = await adminMemberRepository.get({ userId: user.id }); if (!adminMember?.hasAccessToAdminScope) { - throw new ForbiddenAccess(apps.PIX_ADMIN.NOT_ALLOWED_MSG); + throw new ForbiddenAccess(PIX_ADMIN.NOT_ALLOWED_MSG); } } } -module.exports = async function authenticateUser({ +const authenticateUser = async function ({ password, scope, source, @@ -77,3 +79,5 @@ module.exports = async function authenticateUser({ throw new MissingOrInvalidCredentialsError(); } }; + +export { authenticateUser }; diff --git a/api/lib/domain/usecases/authentication/authenticate-oidc-user.js b/api/lib/domain/usecases/authentication/authenticate-oidc-user.js index 89709acb64b..704a5b9b845 100644 --- a/api/lib/domain/usecases/authentication/authenticate-oidc-user.js +++ b/api/lib/domain/usecases/authentication/authenticate-oidc-user.js @@ -1,7 +1,7 @@ -const { UnexpectedOidcStateError } = require('../../errors.js'); -const logger = require('../../../infrastructure/logger.js'); +import { UnexpectedOidcStateError } from '../../errors.js'; +import { logger } from '../../../infrastructure/logger.js'; -module.exports = async function authenticateOidcUser({ +const authenticateOidcUser = async function ({ stateReceived, stateSent, code, @@ -50,6 +50,8 @@ module.exports = async function authenticateOidcUser({ return { pixAccessToken, logoutUrlUUID, isAuthenticationComplete: true }; }; +export { authenticateOidcUser }; + async function _updateAuthenticationMethodWithComplement({ userId, sessionContent, diff --git a/api/lib/domain/usecases/authorize-certification-candidate-to-resume.js b/api/lib/domain/usecases/authorize-certification-candidate-to-resume.js index 2cc6e1e83a7..f480eb72058 100644 --- a/api/lib/domain/usecases/authorize-certification-candidate-to-resume.js +++ b/api/lib/domain/usecases/authorize-certification-candidate-to-resume.js @@ -1,4 +1,4 @@ -module.exports = async function authorizeCertificationCandidateToResume({ +const authorizeCertificationCandidateToResume = async function ({ certificationCandidateId, certificationCandidateForSupervisingRepository, }) { @@ -7,3 +7,5 @@ module.exports = async function authorizeCertificationCandidateToResume({ await certificationCandidateForSupervisingRepository.update(candidate); }; + +export { authorizeCertificationCandidateToResume }; diff --git a/api/lib/domain/usecases/authorize-certification-candidate-to-start.js b/api/lib/domain/usecases/authorize-certification-candidate-to-start.js index 8e139218e81..ef7b5944ac7 100644 --- a/api/lib/domain/usecases/authorize-certification-candidate-to-start.js +++ b/api/lib/domain/usecases/authorize-certification-candidate-to-start.js @@ -1,4 +1,4 @@ -module.exports = async function authorizeCertificationCandidateToStart({ +const authorizeCertificationCandidateToStart = async function ({ certificationCandidateForSupervisingId, authorizedToStart, certificationCandidateForSupervisingRepository, @@ -8,3 +8,5 @@ module.exports = async function authorizeCertificationCandidateToStart({ authorizedToStart, }); }; + +export { authorizeCertificationCandidateToStart }; diff --git a/api/lib/domain/usecases/begin-campaign-participation-improvement.js b/api/lib/domain/usecases/begin-campaign-participation-improvement.js index 6fbcc2a289b..13f65d610da 100644 --- a/api/lib/domain/usecases/begin-campaign-participation-improvement.js +++ b/api/lib/domain/usecases/begin-campaign-participation-improvement.js @@ -1,10 +1,8 @@ -const Assessment = require('../models/Assessment.js'); -const { - AlreadySharedCampaignParticipationError, - UserNotAuthorizedToAccessEntityError, -} = require('../../domain/errors.js'); +import { Assessment } from '../models/Assessment.js'; -module.exports = async function beginCampaignParticipationImprovement({ +import { AlreadySharedCampaignParticipationError, UserNotAuthorizedToAccessEntityError } from '../../domain/errors.js'; + +const beginCampaignParticipationImprovement = async function ({ campaignParticipationId, userId, assessmentRepository, @@ -30,3 +28,5 @@ module.exports = async function beginCampaignParticipationImprovement({ const assessment = Assessment.createImprovingForCampaign({ userId, campaignParticipationId }); await assessmentRepository.save({ assessment, domainTransaction }); }; + +export { beginCampaignParticipationImprovement }; diff --git a/api/lib/domain/usecases/campaigns-administration/archive-campaigns.js b/api/lib/domain/usecases/campaigns-administration/archive-campaigns.js index 95724430fe8..9c5970d2eb8 100644 --- a/api/lib/domain/usecases/campaigns-administration/archive-campaigns.js +++ b/api/lib/domain/usecases/campaigns-administration/archive-campaigns.js @@ -1,3 +1,5 @@ -module.exports = async function archiveCampaigns({ userId, campaignIds, campaignAdministrationRepository }) { +const archiveCampaigns = async function ({ userId, campaignIds, campaignAdministrationRepository }) { await campaignAdministrationRepository.archiveCampaigns(campaignIds, userId); }; + +export { archiveCampaigns }; diff --git a/api/lib/domain/usecases/cancel-certification-center-invitation.js b/api/lib/domain/usecases/cancel-certification-center-invitation.js index 4f72453452e..3cd277dd43f 100644 --- a/api/lib/domain/usecases/cancel-certification-center-invitation.js +++ b/api/lib/domain/usecases/cancel-certification-center-invitation.js @@ -1,6 +1,6 @@ -const { UncancellableCertificationCenterInvitationError } = require('../../domain/errors.js'); +import { UncancellableCertificationCenterInvitationError } from '../../domain/errors.js'; -module.exports = async function cancelCertificationCenterInvitation({ +const cancelCertificationCenterInvitation = async function ({ certificationCenterInvitationId, certificationCenterInvitationRepository, }) { @@ -12,3 +12,5 @@ module.exports = async function cancelCertificationCenterInvitation({ } return await certificationCenterInvitationRepository.markAsCancelled({ id: foundCertificationCenterInvitation.id }); }; + +export { cancelCertificationCenterInvitation }; diff --git a/api/lib/domain/usecases/cancel-certification-course.js b/api/lib/domain/usecases/cancel-certification-course.js index ed214c20dcd..231be506287 100644 --- a/api/lib/domain/usecases/cancel-certification-course.js +++ b/api/lib/domain/usecases/cancel-certification-course.js @@ -1,5 +1,7 @@ -module.exports = async function cancelCertificationCourse({ certificationCourseId, certificationCourseRepository }) { +const cancelCertificationCourse = async function ({ certificationCourseId, certificationCourseRepository }) { const certificationCourse = await certificationCourseRepository.get(certificationCourseId); certificationCourse.cancel(); await certificationCourseRepository.update(certificationCourse); }; + +export { cancelCertificationCourse }; diff --git a/api/lib/domain/usecases/cancel-organization-invitation.js b/api/lib/domain/usecases/cancel-organization-invitation.js index 9a1904586a7..e04c849ed42 100644 --- a/api/lib/domain/usecases/cancel-organization-invitation.js +++ b/api/lib/domain/usecases/cancel-organization-invitation.js @@ -1,9 +1,6 @@ -const { UncancellableOrganizationInvitationError } = require('../../domain/errors.js'); +import { UncancellableOrganizationInvitationError } from '../../domain/errors.js'; -module.exports = async function cancelOrganizationInvitation({ - organizationInvitationId, - organizationInvitationRepository, -}) { +const cancelOrganizationInvitation = async function ({ organizationInvitationId, organizationInvitationRepository }) { const foundOrganizationInvitation = await organizationInvitationRepository.get(organizationInvitationId); if (!foundOrganizationInvitation.isPending) { @@ -12,3 +9,5 @@ module.exports = async function cancelOrganizationInvitation({ return await organizationInvitationRepository.markAsCancelled({ id: organizationInvitationId }); }; + +export { cancelOrganizationInvitation }; diff --git a/api/lib/domain/usecases/certificate/find-certification-attestations-for-division.js b/api/lib/domain/usecases/certificate/find-certification-attestations-for-division.js index 73c155fbea0..3b83589f693 100644 --- a/api/lib/domain/usecases/certificate/find-certification-attestations-for-division.js +++ b/api/lib/domain/usecases/certificate/find-certification-attestations-for-division.js @@ -1,10 +1,6 @@ -const { NoCertificationAttestationForDivisionError } = require('../../errors.js'); +import { NoCertificationAttestationForDivisionError } from '../../errors.js'; -module.exports = async function findCertificationAttestationsForDivision({ - organizationId, - division, - certificateRepository, -}) { +const findCertificationAttestationsForDivision = async function ({ organizationId, division, certificateRepository }) { const certificationAttestations = await certificateRepository.findByDivisionForScoIsManagingStudentsOrganization({ organizationId, division, @@ -15,3 +11,5 @@ module.exports = async function findCertificationAttestationsForDivision({ } return certificationAttestations; }; + +export { findCertificationAttestationsForDivision }; diff --git a/api/lib/domain/usecases/certificate/get-certification-attestation.js b/api/lib/domain/usecases/certificate/get-certification-attestation.js index aab39074857..ee2c48b8f35 100644 --- a/api/lib/domain/usecases/certificate/get-certification-attestation.js +++ b/api/lib/domain/usecases/certificate/get-certification-attestation.js @@ -1,6 +1,6 @@ -const { NotFoundError } = require('../../errors.js'); +import { NotFoundError } from '../../errors.js'; -module.exports = async function getCertificationAttestation({ userId, certificationId, certificateRepository }) { +const getCertificationAttestation = async function ({ userId, certificationId, certificateRepository }) { const certificationAttestation = await certificateRepository.getCertificationAttestation(certificationId); if (certificationAttestation.userId !== userId) { throw new NotFoundError(); @@ -8,3 +8,5 @@ module.exports = async function getCertificationAttestation({ userId, certificat return certificationAttestation; }; + +export { getCertificationAttestation }; diff --git a/api/lib/domain/usecases/certificate/get-certifications-results-for-ls.js b/api/lib/domain/usecases/certificate/get-certifications-results-for-ls.js index b92a95eb7e0..a9c3eb3dbd8 100644 --- a/api/lib/domain/usecases/certificate/get-certifications-results-for-ls.js +++ b/api/lib/domain/usecases/certificate/get-certifications-results-for-ls.js @@ -1,12 +1,10 @@ -const CertificationsResults = require('../../read-models/livret-scolaire/CertificationsResults.js'); -const Competence = require('../../read-models/livret-scolaire/Competence.js'); -const sortBy = require('lodash/sortBy'); +import { CertificationsResults } from '../../read-models/livret-scolaire/CertificationsResults.js'; +import { Competence } from '../../read-models/livret-scolaire/Competence.js'; +import lodash from 'lodash'; -module.exports = async function getCertificationsResultsForLS({ - uai, - certificationLsRepository, - competenceTreeRepository, -}) { +const { sortBy } = lodash; + +const getCertificationsResultsForLS = async function ({ uai, certificationLsRepository, competenceTreeRepository }) { const [referential, certifications] = await Promise.all([ competenceTreeRepository.get(), certificationLsRepository.getCertificatesByOrganizationUAI(uai), @@ -23,3 +21,5 @@ module.exports = async function getCertificationsResultsForLS({ return new CertificationsResults({ certifications, competences: sortedCompetences }); }; + +export { getCertificationsResultsForLS }; diff --git a/api/lib/domain/usecases/certificate/get-private-certificate.js b/api/lib/domain/usecases/certificate/get-private-certificate.js index 24253d5867a..b0983d1fdaa 100644 --- a/api/lib/domain/usecases/certificate/get-private-certificate.js +++ b/api/lib/domain/usecases/certificate/get-private-certificate.js @@ -1,6 +1,6 @@ -const { NotFoundError } = require('../../errors.js'); +import { NotFoundError } from '../../errors.js'; -module.exports = async function getPrivateCertificate({ certificationId, userId, locale, certificateRepository }) { +const getPrivateCertificate = async function ({ certificationId, userId, locale, certificateRepository }) { const privateCertificate = await certificateRepository.getPrivateCertificate(certificationId, { locale }); if (privateCertificate.userId !== userId) { throw new NotFoundError(); @@ -8,3 +8,5 @@ module.exports = async function getPrivateCertificate({ certificationId, userId, return privateCertificate; }; + +export { getPrivateCertificate }; diff --git a/api/lib/domain/usecases/certificate/get-shareable-certificate.js b/api/lib/domain/usecases/certificate/get-shareable-certificate.js index b82923f3d8c..d63220392c7 100644 --- a/api/lib/domain/usecases/certificate/get-shareable-certificate.js +++ b/api/lib/domain/usecases/certificate/get-shareable-certificate.js @@ -1,7 +1,9 @@ -module.exports = async function getShareableCertificate({ verificationCode, certificateRepository, locale }) { +const getShareableCertificate = async function ({ verificationCode, certificateRepository, locale }) { const shareableCertificate = await certificateRepository.getShareableCertificateByVerificationCode(verificationCode, { locale, }); return shareableCertificate; }; + +export { getShareableCertificate }; diff --git a/api/lib/domain/usecases/change-user-lang.js b/api/lib/domain/usecases/change-user-lang.js index 8e1d255e3f2..dfbda701104 100644 --- a/api/lib/domain/usecases/change-user-lang.js +++ b/api/lib/domain/usecases/change-user-lang.js @@ -1,4 +1,6 @@ -module.exports = async function changeUserLang({ userId, lang, userRepository }) { +const changeUserLang = async function ({ userId, lang, userRepository }) { await userRepository.update({ id: userId, lang }); return userRepository.getFullById(userId); }; + +export { changeUserLang }; diff --git a/api/lib/domain/usecases/check-sco-account-recovery.js b/api/lib/domain/usecases/check-sco-account-recovery.js index e3a12f3b018..c93f7b25b3e 100644 --- a/api/lib/domain/usecases/check-sco-account-recovery.js +++ b/api/lib/domain/usecases/check-sco-account-recovery.js @@ -1,6 +1,6 @@ -const StudentInformationForAccountRecovery = require('../read-models/StudentInformationForAccountRecovery.js'); +import { StudentInformationForAccountRecovery } from '../read-models/StudentInformationForAccountRecovery.js'; -module.exports = async function checkScoAccountRecovery({ +const checkScoAccountRecovery = async function ({ studentInformation, organizationLearnerRepository, organizationRepository, @@ -28,3 +28,5 @@ module.exports = async function checkScoAccountRecovery({ latestOrganizationName, }); }; + +export { checkScoAccountRecovery }; diff --git a/api/lib/domain/usecases/comment-session-as-jury.js b/api/lib/domain/usecases/comment-session-as-jury.js index edf6108b67d..07ecc424097 100644 --- a/api/lib/domain/usecases/comment-session-as-jury.js +++ b/api/lib/domain/usecases/comment-session-as-jury.js @@ -1,4 +1,4 @@ -module.exports = async function commentSessionAsJury({ +const commentSessionAsJury = async function ({ sessionId, juryComment, juryCommentAuthorId, @@ -13,3 +13,5 @@ module.exports = async function commentSessionAsJury({ await sessionJuryCommentRepository.save(sessionJuryComment); }; + +export { commentSessionAsJury }; diff --git a/api/lib/domain/usecases/complete-assessment.js b/api/lib/domain/usecases/complete-assessment.js index 6f24d5860c4..4555761f861 100644 --- a/api/lib/domain/usecases/complete-assessment.js +++ b/api/lib/domain/usecases/complete-assessment.js @@ -1,9 +1,8 @@ -const AssessmentCompleted = require('../events/AssessmentCompleted.js'); -const CampaignParticipationStatuses = require('../models/CampaignParticipationStatuses.js'); +import { AssessmentCompleted } from '../events/AssessmentCompleted.js'; +import { CampaignParticipationStatuses } from '../models/CampaignParticipationStatuses.js'; +import { AlreadyRatedAssessmentError } from '../errors.js'; -const { AlreadyRatedAssessmentError } = require('../errors.js'); - -module.exports = async function completeAssessment({ +const completeAssessment = async function ({ assessmentId, domainTransaction, campaignParticipationRepository, @@ -38,3 +37,5 @@ module.exports = async function completeAssessment({ assessment, }; }; + +export { completeAssessment }; diff --git a/api/lib/domain/usecases/compute-campaign-analysis.js b/api/lib/domain/usecases/compute-campaign-analysis.js index 86c78feb52a..e58a0580edb 100644 --- a/api/lib/domain/usecases/compute-campaign-analysis.js +++ b/api/lib/domain/usecases/compute-campaign-analysis.js @@ -1,7 +1,7 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); -const CampaignLearningContent = require('../models/CampaignLearningContent.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; +import { CampaignLearningContent } from '../models/CampaignLearningContent.js'; -module.exports = async function computeCampaignAnalysis({ +const computeCampaignAnalysis = async function ({ userId, campaignId, campaignRepository, @@ -22,3 +22,5 @@ module.exports = async function computeCampaignAnalysis({ return campaignAnalysisRepository.getCampaignAnalysis(campaignId, campaignLearningContent, tutorials); }; + +export { computeCampaignAnalysis }; diff --git a/api/lib/domain/usecases/compute-campaign-collective-result.js b/api/lib/domain/usecases/compute-campaign-collective-result.js index dbffcaaef3a..bdb6e884b49 100644 --- a/api/lib/domain/usecases/compute-campaign-collective-result.js +++ b/api/lib/domain/usecases/compute-campaign-collective-result.js @@ -1,7 +1,7 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); -const CampaignLearningContent = require('../models/CampaignLearningContent.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; +import { CampaignLearningContent } from '../models/CampaignLearningContent.js'; -module.exports = async function computeCampaignCollectiveResult({ +const computeCampaignCollectiveResult = async function ({ userId, campaignId, campaignRepository, @@ -19,3 +19,5 @@ module.exports = async function computeCampaignCollectiveResult({ const campaignLearningContent = new CampaignLearningContent(learningContent); return campaignCollectiveResultRepository.getCampaignCollectiveResult(campaignId, campaignLearningContent); }; + +export { computeCampaignCollectiveResult }; diff --git a/api/lib/domain/usecases/compute-campaign-participation-analysis.js b/api/lib/domain/usecases/compute-campaign-participation-analysis.js index 2f5f7780bb0..3089cc09443 100644 --- a/api/lib/domain/usecases/compute-campaign-participation-analysis.js +++ b/api/lib/domain/usecases/compute-campaign-participation-analysis.js @@ -1,7 +1,7 @@ -const { UserNotAuthorizedToAccessEntityError, CampaignParticipationDeletedError } = require('../errors.js'); -const CampaignLearningContent = require('../models/CampaignLearningContent.js'); +import { UserNotAuthorizedToAccessEntityError, CampaignParticipationDeletedError } from '../errors.js'; +import { CampaignLearningContent } from '../models/CampaignLearningContent.js'; -module.exports = async function computeCampaignParticipationAnalysis({ +const computeCampaignParticipationAnalysis = async function ({ userId, campaignParticipationId, campaignParticipationRepository, @@ -38,3 +38,5 @@ module.exports = async function computeCampaignParticipationAnalysis({ tutorials ); }; + +export { computeCampaignParticipationAnalysis }; diff --git a/api/lib/domain/usecases/correct-answer-then-update-assessment.js b/api/lib/domain/usecases/correct-answer-then-update-assessment.js index 0d7f3821b00..6de5f73965b 100644 --- a/api/lib/domain/usecases/correct-answer-then-update-assessment.js +++ b/api/lib/domain/usecases/correct-answer-then-update-assessment.js @@ -1,14 +1,15 @@ -const { +import { ForbiddenAccess, ChallengeNotAskedError, CertificationEndedBySupervisorError, CertificationEndedByFinalizationError, -} = require('../errors.js'); -const Examiner = require('../models/Examiner.js'); -const KnowledgeElement = require('../models/KnowledgeElement.js'); -const logger = require('../../infrastructure/logger.js'); +} from '../errors.js'; -module.exports = async function correctAnswerThenUpdateAssessment({ +import { Examiner } from '../models/Examiner.js'; +import { KnowledgeElement } from '../models/KnowledgeElement.js'; +import { logger } from '../../infrastructure/logger.js'; + +const correctAnswerThenUpdateAssessment = async function ({ answer, userId, locale, @@ -116,6 +117,8 @@ module.exports = async function correctAnswerThenUpdateAssessment({ return answerSaved; }; +export { correctAnswerThenUpdateAssessment }; + function _evaluateAnswer({ challenge, answer, assessment, examiner: injectedExaminer }) { const examiner = injectedExaminer ?? new Examiner({ validator: challenge.validator }); return examiner.evaluate({ diff --git a/api/lib/domain/usecases/correct-answer.js b/api/lib/domain/usecases/correct-answer.js index bc5ebf2b752..ec94037cc8b 100644 --- a/api/lib/domain/usecases/correct-answer.js +++ b/api/lib/domain/usecases/correct-answer.js @@ -1,11 +1,13 @@ -const Examiner = require('../models/Examiner'); +import { Examiner } from '../models/Examiner.js'; -module.exports = async function correctAnswer({ answer, challengeId, challengeRepository, examiner } = {}) { +const correctAnswer = async function ({ answer, challengeId, challengeRepository, examiner } = {}) { const challenge = await challengeRepository.get(challengeId); const result = _evaluateAnswer({ challenge, answer, examiner }); return result; }; +export { correctAnswer }; + // Evaluation temporaire sans enregistrement de la réponse. Utiliser correct-answer-then-update-assessment après ? Peut être... function _evaluateAnswer({ challenge, answer, examiner: injectedExaminer }) { const examiner = injectedExaminer ?? new Examiner({ validator: challenge.validator }); diff --git a/api/lib/domain/usecases/correct-candidate-identity-in-certification-course.js b/api/lib/domain/usecases/correct-candidate-identity-in-certification-course.js index 6162f56b1d7..a0379d29bd3 100644 --- a/api/lib/domain/usecases/correct-candidate-identity-in-certification-course.js +++ b/api/lib/domain/usecases/correct-candidate-identity-in-certification-course.js @@ -1,6 +1,6 @@ -const { CpfBirthInformationValidationError } = require('../errors'); +import { CpfBirthInformationValidationError } from '../errors.js'; -module.exports = async function correctCandidateIdentityInCertificationCourse({ +const correctCandidateIdentityInCertificationCourse = async function ({ command: { certificationCourseId, firstName, @@ -12,6 +12,7 @@ module.exports = async function correctCandidateIdentityInCertificationCourse({ birthPostalCode, birthINSEECode, }, + certificationCourseRepository, certificationCpfService, certificationCpfCountryRepository, @@ -41,3 +42,5 @@ module.exports = async function correctCandidateIdentityInCertificationCourse({ await certificationCourseRepository.update(certificationCourse); }; + +export { correctCandidateIdentityInCertificationCourse }; diff --git a/api/lib/domain/usecases/create-access-token-from-refresh-token.js b/api/lib/domain/usecases/create-access-token-from-refresh-token.js index 1ae14c6404a..a18038e7c2e 100644 --- a/api/lib/domain/usecases/create-access-token-from-refresh-token.js +++ b/api/lib/domain/usecases/create-access-token-from-refresh-token.js @@ -1,3 +1,5 @@ -module.exports = async function createAccessTokenFromRefreshToken({ refreshToken, refreshTokenService }) { +const createAccessTokenFromRefreshToken = async function ({ refreshToken, refreshTokenService }) { return refreshTokenService.createAccessTokenFromRefreshToken({ refreshToken }); }; + +export { createAccessTokenFromRefreshToken }; diff --git a/api/lib/domain/usecases/create-and-reconcile-user-to-organization-learner.js b/api/lib/domain/usecases/create-and-reconcile-user-to-organization-learner.js index 09503239a03..fd4b3c709a6 100644 --- a/api/lib/domain/usecases/create-and-reconcile-user-to-organization-learner.js +++ b/api/lib/domain/usecases/create-and-reconcile-user-to-organization-learner.js @@ -1,17 +1,18 @@ -const isNil = require('lodash/isNil'); +import lodash from 'lodash'; -const { +const { isNil } = lodash; + +import { AlreadyRegisteredEmailError, AlreadyRegisteredUsernameError, CampaignCodeError, EntityValidationError, OrganizationLearnerAlreadyLinkedToUserError, -} = require('../errors.js'); - -const User = require('../models/User.js'); +} from '../errors.js'; -const { getCampaignUrl } = require('../../infrastructure/utils/url-builder.js'); -const { STUDENT_RECONCILIATION_ERRORS } = require('../constants.js'); +import { User } from '../models/User.js'; +import { getCampaignUrl } from '../../infrastructure/utils/url-builder.js'; +import { STUDENT_RECONCILIATION_ERRORS } from '../constants.js'; function _encryptPassword(userPassword, encryptionService) { const encryptedPassword = encryptionService.hashPassword(userPassword); @@ -112,7 +113,7 @@ async function _validateData({ } } -module.exports = async function createAndReconcileUserToOrganizationLearner({ +const createAndReconcileUserToOrganizationLearner = async function ({ campaignCode, locale, password, @@ -185,3 +186,5 @@ module.exports = async function createAndReconcileUserToOrganizationLearner({ } return createdUser; }; + +export { createAndReconcileUserToOrganizationLearner }; diff --git a/api/lib/domain/usecases/create-badge.js b/api/lib/domain/usecases/create-badge.js index d7c46231411..523b9e934e1 100644 --- a/api/lib/domain/usecases/create-badge.js +++ b/api/lib/domain/usecases/create-badge.js @@ -1,7 +1,7 @@ -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); -const { MissingBadgeCriterionError } = require('../errors.js'); +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; +import { MissingBadgeCriterionError } from '../errors.js'; -module.exports = async function createBadge({ +const createBadge = async function ({ targetProfileId, badgeCreation, badgeRepository, @@ -91,3 +91,5 @@ module.exports = async function createBadge({ return savedBadge; }); }; + +export { createBadge }; diff --git a/api/lib/domain/usecases/create-campaign.js b/api/lib/domain/usecases/create-campaign.js index 20069b5b984..cb73f9d2452 100644 --- a/api/lib/domain/usecases/create-campaign.js +++ b/api/lib/domain/usecases/create-campaign.js @@ -1,4 +1,4 @@ -module.exports = async function createCampaign({ +const createCampaign = async function ({ campaign, campaignRepository, campaignCreatorRepository, @@ -15,3 +15,5 @@ module.exports = async function createCampaign({ return campaignRepository.save(campaignForCreation); }; + +export { createCampaign }; diff --git a/api/lib/domain/usecases/create-certification-center-membership-by-email.js b/api/lib/domain/usecases/create-certification-center-membership-by-email.js index 1744f879c39..8e178bfb458 100644 --- a/api/lib/domain/usecases/create-certification-center-membership-by-email.js +++ b/api/lib/domain/usecases/create-certification-center-membership-by-email.js @@ -1,6 +1,6 @@ -const { AlreadyExistingEntityError } = require('../errors.js'); +import { AlreadyExistingEntityError } from '../errors.js'; -module.exports = async function createCertificationCenterMembershipByEmail({ +const createCertificationCenterMembershipByEmail = async function ({ certificationCenterId, email, certificationCenterMembershipRepository, @@ -21,3 +21,5 @@ module.exports = async function createCertificationCenterMembershipByEmail({ return certificationCenterMembershipRepository.save({ userId, certificationCenterId }); }; + +export { createCertificationCenterMembershipByEmail }; diff --git a/api/lib/domain/usecases/create-certification-center-membership-for-sco-organization-member.js b/api/lib/domain/usecases/create-certification-center-membership-for-sco-organization-member.js index cb035b05ebb..94ae7dc6d2d 100644 --- a/api/lib/domain/usecases/create-certification-center-membership-for-sco-organization-member.js +++ b/api/lib/domain/usecases/create-certification-center-membership-for-sco-organization-member.js @@ -1,4 +1,4 @@ -module.exports = async function createCertificationCenterMembershipForScoOrganizationMember({ +const createCertificationCenterMembershipForScoOrganizationMember = async function ({ membership, membershipRepository, certificationCenterRepository, @@ -27,3 +27,5 @@ module.exports = async function createCertificationCenterMembershipForScoOrganiz } } }; + +export { createCertificationCenterMembershipForScoOrganizationMember }; diff --git a/api/lib/domain/usecases/create-certification-center.js b/api/lib/domain/usecases/create-certification-center.js index 9171227250d..43dc774bdcb 100644 --- a/api/lib/domain/usecases/create-certification-center.js +++ b/api/lib/domain/usecases/create-certification-center.js @@ -1,7 +1,7 @@ -const ComplementaryCertificationHabilitation = require('../models/ComplementaryCertificationHabilitation.js'); -const certificationCenterCreationValidator = require('../validators/certification-center-creation-validator.js'); +import { ComplementaryCertificationHabilitation } from '../models/ComplementaryCertificationHabilitation.js'; +import * as certificationCenterCreationValidator from '../validators/certification-center-creation-validator.js'; -module.exports = async function createCertificationCenter({ +const createCertificationCenter = async function ({ certificationCenter, complementaryCertificationIds, complementaryCertificationHabilitationRepository, @@ -33,3 +33,5 @@ module.exports = async function createCertificationCenter({ return createdCertificationCenter; }; + +export { createCertificationCenter }; diff --git a/api/lib/domain/usecases/create-lcms-release.js b/api/lib/domain/usecases/create-lcms-release.js index 1b4f0860d55..ce7e1ed0bb7 100644 --- a/api/lib/domain/usecases/create-lcms-release.js +++ b/api/lib/domain/usecases/create-lcms-release.js @@ -1,7 +1,9 @@ -const lcms = require('../../infrastructure/lcms.js'); -const { learningContentCache } = require('../../infrastructure/caches/learning-content-cache.js'); +import { lcms } from '../../infrastructure/lcms.js'; +import { learningContentCache } from '../../infrastructure/caches/learning-content-cache.js'; -module.exports = async function createLcmsRelease() { +const createLcmsRelease = async function () { const learningContent = await lcms.createRelease(); learningContentCache.set(learningContent); }; + +export { createLcmsRelease }; diff --git a/api/lib/domain/usecases/create-membership.js b/api/lib/domain/usecases/create-membership.js index 52e2d87eadb..92877fe9912 100644 --- a/api/lib/domain/usecases/create-membership.js +++ b/api/lib/domain/usecases/create-membership.js @@ -1,12 +1,7 @@ -const { roles } = require('../models/Membership.js'); -const { OrganizationArchivedError } = require('../errors.js'); +import { roles } from '../models/Membership.js'; +import { OrganizationArchivedError } from '../errors.js'; -module.exports = async function createMembership({ - userId, - organizationId, - membershipRepository, - organizationRepository, -}) { +const createMembership = async function ({ userId, organizationId, membershipRepository, organizationRepository }) { const organization = await organizationRepository.get(organizationId); if (organization.archivedAt) { @@ -18,3 +13,5 @@ module.exports = async function createMembership({ return membershipRepository.create(userId, organizationId, organizationRole); }; + +export { createMembership }; diff --git a/api/lib/domain/usecases/create-oidc-user.js b/api/lib/domain/usecases/create-oidc-user.js index 12ad582e46f..b39a70fee17 100644 --- a/api/lib/domain/usecases/create-oidc-user.js +++ b/api/lib/domain/usecases/create-oidc-user.js @@ -1,7 +1,7 @@ -const UserToCreate = require('../models/UserToCreate.js'); -const { AuthenticationKeyExpired, UserAlreadyExistsWithAuthenticationMethodError } = require('../errors.js'); +import { UserToCreate } from '../models/UserToCreate.js'; +import { AuthenticationKeyExpired, UserAlreadyExistsWithAuthenticationMethodError } from '../errors.js'; -module.exports = async function createOidcUser({ +const createOidcUser = async function ({ identityProvider, authenticationKey, localeFromCookie, @@ -49,3 +49,5 @@ module.exports = async function createOidcUser({ return { accessToken, logoutUrlUUID }; }; + +export { createOidcUser }; diff --git a/api/lib/domain/usecases/create-or-update-certification-center-invitation-for-admin.js b/api/lib/domain/usecases/create-or-update-certification-center-invitation-for-admin.js index 23fd191dfe3..2568dc41da2 100644 --- a/api/lib/domain/usecases/create-or-update-certification-center-invitation-for-admin.js +++ b/api/lib/domain/usecases/create-or-update-certification-center-invitation-for-admin.js @@ -1,7 +1,7 @@ -const { SendingEmailError, SendingEmailToInvalidDomainError } = require('../errors.js'); -const CertificationCenterInvitation = require('../models/CertificationCenterInvitation.js'); +import { SendingEmailError, SendingEmailToInvalidDomainError } from '../errors.js'; +import { CertificationCenterInvitation } from '../models/CertificationCenterInvitation.js'; -module.exports = async function createOrUpdateCertificationCenterInvitationForAdmin({ +const createOrUpdateCertificationCenterInvitationForAdmin = async function ({ email, certificationCenterId, locale, @@ -45,3 +45,5 @@ module.exports = async function createOrUpdateCertificationCenterInvitationForAd return { isInvitationCreated, certificationCenterInvitation }; }; + +export { createOrUpdateCertificationCenterInvitationForAdmin }; diff --git a/api/lib/domain/usecases/create-or-update-training-trigger.js b/api/lib/domain/usecases/create-or-update-training-trigger.js index 3e87882f689..034840d061e 100644 --- a/api/lib/domain/usecases/create-or-update-training-trigger.js +++ b/api/lib/domain/usecases/create-or-update-training-trigger.js @@ -1,4 +1,4 @@ -module.exports = async function createOrUpdateTrainingTrigger({ +const createOrUpdateTrainingTrigger = async function ({ trainingId, tubes, type, @@ -16,3 +16,5 @@ module.exports = async function createOrUpdateTrainingTrigger({ domainTransaction, }); }; + +export { createOrUpdateTrainingTrigger }; diff --git a/api/lib/domain/usecases/create-or-update-user-orga-settings.js b/api/lib/domain/usecases/create-or-update-user-orga-settings.js index e55c9625bbb..6297306cb3b 100644 --- a/api/lib/domain/usecases/create-or-update-user-orga-settings.js +++ b/api/lib/domain/usecases/create-or-update-user-orga-settings.js @@ -1,7 +1,7 @@ -const { UserNotMemberOfOrganizationError } = require('../errors.js'); -const _ = require('lodash'); +import { UserNotMemberOfOrganizationError } from '../errors.js'; +import _ from 'lodash'; -module.exports = async function createOrUpdateUserOrgaSettings({ +const createOrUpdateUserOrgaSettings = async function ({ userId, organizationId, userOrgaSettingsRepository, @@ -17,3 +17,5 @@ module.exports = async function createOrUpdateUserOrgaSettings({ return userOrgaSettingsRepository.createOrUpdate({ userId, organizationId }); }; + +export { createOrUpdateUserOrgaSettings }; diff --git a/api/lib/domain/usecases/create-organization-invitation-by-admin.js b/api/lib/domain/usecases/create-organization-invitation-by-admin.js index 375f97581c4..8ee98c3ceee 100644 --- a/api/lib/domain/usecases/create-organization-invitation-by-admin.js +++ b/api/lib/domain/usecases/create-organization-invitation-by-admin.js @@ -1,6 +1,6 @@ -const { OrganizationArchivedError } = require('../errors.js'); +import { OrganizationArchivedError } from '../errors.js'; -module.exports = async function createOrganizationInvitationByAdmin({ +const createOrganizationInvitationByAdmin = async function ({ organizationId, email, locale, @@ -24,3 +24,5 @@ module.exports = async function createOrganizationInvitationByAdmin({ organizationRepository, }); }; + +export { createOrganizationInvitationByAdmin }; diff --git a/api/lib/domain/usecases/create-organization-invitations.js b/api/lib/domain/usecases/create-organization-invitations.js index e9dfe35bcdc..beae37ffd2e 100644 --- a/api/lib/domain/usecases/create-organization-invitations.js +++ b/api/lib/domain/usecases/create-organization-invitations.js @@ -1,8 +1,8 @@ -const bluebird = require('bluebird'); +import bluebird from 'bluebird'; -const { OrganizationArchivedError } = require('../errors.js'); +import { OrganizationArchivedError } from '../errors.js'; -module.exports = async function createOrganizationInvitations({ +const createOrganizationInvitations = async function ({ organizationId, emails, locale, @@ -29,3 +29,5 @@ module.exports = async function createOrganizationInvitations({ }); }); }; + +export { createOrganizationInvitations }; diff --git a/api/lib/domain/usecases/create-organization-places-lot.js b/api/lib/domain/usecases/create-organization-places-lot.js index 03472ed4b7e..82e71f5a64d 100644 --- a/api/lib/domain/usecases/create-organization-places-lot.js +++ b/api/lib/domain/usecases/create-organization-places-lot.js @@ -1,6 +1,6 @@ -const OrganizationPlacesLot = require('../models/OrganizationPlacesLot.js'); +import { OrganizationPlacesLot } from '../models/OrganizationPlacesLot.js'; -module.exports = async function createOrganizationPlacesLot({ +const createOrganizationPlacesLot = async function ({ organizationPlacesLotData, organizationId, createdBy, @@ -18,3 +18,5 @@ module.exports = async function createOrganizationPlacesLot({ const id = await organizationPlacesLotRepository.create(organizationPlaceLot); return await organizationPlacesLotRepository.get(id); }; + +export { createOrganizationPlacesLot }; diff --git a/api/lib/domain/usecases/create-organization.js b/api/lib/domain/usecases/create-organization.js index 17dffec927f..e40f9ab8d30 100644 --- a/api/lib/domain/usecases/create-organization.js +++ b/api/lib/domain/usecases/create-organization.js @@ -1,4 +1,4 @@ -module.exports = async function createOrganization({ +const createOrganization = async function ({ organization, dataProtectionOfficerRepository, organizationForAdminRepository, @@ -20,3 +20,5 @@ module.exports = async function createOrganization({ return createdOrganization; }; + +export { createOrganization }; diff --git a/api/lib/domain/usecases/create-organizations-with-tags-and-target-profiles.js b/api/lib/domain/usecases/create-organizations-with-tags-and-target-profiles.js index ccef3ed54a0..036df7e739b 100644 --- a/api/lib/domain/usecases/create-organizations-with-tags-and-target-profiles.js +++ b/api/lib/domain/usecases/create-organizations-with-tags-and-target-profiles.js @@ -1,20 +1,23 @@ -const { isEmpty, uniqBy } = require('lodash'); -const bluebird = require('bluebird'); -const Organization = require('../models/Organization.js'); -const OrganizationTag = require('../models/OrganizationTag.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); +import lodash from 'lodash'; -const { +const { isEmpty, uniqBy } = lodash; + +import bluebird from 'bluebird'; +import { Organization } from '../models/Organization.js'; +import { OrganizationTag } from '../models/OrganizationTag.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; + +import { ManyOrganizationsFoundError, OrganizationAlreadyExistError, OrganizationTagNotFound, ObjectValidationError, TargetProfileInvalidError, -} = require('../errors.js'); +} from '../errors.js'; const SEPARATOR = '_'; -module.exports = async function createOrganizationsWithTagsAndTargetProfiles({ +const createOrganizationsWithTagsAndTargetProfiles = async function ({ organizations, domainTransaction = DomainTransaction, organizationRepository, @@ -123,6 +126,8 @@ module.exports = async function createOrganizationsWithTagsAndTargetProfiles({ return createdOrganizations; }; +export { createOrganizationsWithTagsAndTargetProfiles }; + function _checkIfOrganizationsDataAreUnique(organizations) { const uniqOrganizations = uniqBy(organizations, 'externalId'); diff --git a/api/lib/domain/usecases/create-password-reset-demand.js b/api/lib/domain/usecases/create-password-reset-demand.js index 0e133efd681..b8adb9111c1 100644 --- a/api/lib/domain/usecases/create-password-reset-demand.js +++ b/api/lib/domain/usecases/create-password-reset-demand.js @@ -1,4 +1,4 @@ -module.exports = async function createPasswordResetDemand({ +const createPasswordResetDemand = async function ({ email, locale, mailService, @@ -15,3 +15,5 @@ module.exports = async function createPasswordResetDemand({ return passwordResetDemand; }; + +export { createPasswordResetDemand }; diff --git a/api/lib/domain/usecases/create-session.js b/api/lib/domain/usecases/create-session.js index 4f038432b32..8c3e0d4030d 100644 --- a/api/lib/domain/usecases/create-session.js +++ b/api/lib/domain/usecases/create-session.js @@ -1,9 +1,9 @@ -const { ForbiddenAccess } = require('../errors.js'); -const sessionValidator = require('../validators/session-validator.js'); -const sessionCodeService = require('../services/session-code-service.js'); -const Session = require('../models/Session.js'); +import { ForbiddenAccess } from '../errors.js'; +import * as sessionValidator from '../validators/session-validator.js'; +import * as sessionCodeService from '../services/session-code-service.js'; +import { Session } from '../models/Session.js'; -module.exports = async function createSession({ +const createSession = async function ({ userId, session, certificationCenterRepository, @@ -31,3 +31,5 @@ module.exports = async function createSession({ return sessionRepository.save(domainSession); }; + +export { createSession }; diff --git a/api/lib/domain/usecases/create-tag.js b/api/lib/domain/usecases/create-tag.js index 568dbe31ded..9cb333df789 100644 --- a/api/lib/domain/usecases/create-tag.js +++ b/api/lib/domain/usecases/create-tag.js @@ -1,6 +1,8 @@ -const Tag = require('../models/Tag.js'); +import { Tag } from '../models/Tag.js'; -module.exports = async function createTag({ tagName, tagRepository }) { +const createTag = async function ({ tagName, tagRepository }) { const tag = new Tag({ name: tagName }); return tagRepository.create(tag); }; + +export { createTag }; diff --git a/api/lib/domain/usecases/create-target-profile.js b/api/lib/domain/usecases/create-target-profile.js index 75d49e915ad..490219805f6 100644 --- a/api/lib/domain/usecases/create-target-profile.js +++ b/api/lib/domain/usecases/create-target-profile.js @@ -1,7 +1,7 @@ -const TargetProfileForCreation = require('../models/TargetProfileForCreation.js'); -const { TargetProfileCannotBeCreated } = require('../errors'); +import { TargetProfileForCreation } from '../models/TargetProfileForCreation.js'; +import { TargetProfileCannotBeCreated } from '../errors.js'; -module.exports = async function createTargetProfile({ +const createTargetProfile = async function ({ targetProfileCreationCommand, domainTransaction, targetProfileRepository, @@ -21,3 +21,5 @@ module.exports = async function createTargetProfile({ domainTransaction, }); }; + +export { createTargetProfile }; diff --git a/api/lib/domain/usecases/create-training.js b/api/lib/domain/usecases/create-training.js index 3f151717736..c8df0bff95a 100644 --- a/api/lib/domain/usecases/create-training.js +++ b/api/lib/domain/usecases/create-training.js @@ -1,3 +1,5 @@ -module.exports = function createTraining({ training, domainTransaction, trainingRepository }) { +const createTraining = function ({ training, domainTransaction, trainingRepository }) { return trainingRepository.create({ training, domainTransaction }); }; + +export { createTraining }; diff --git a/api/lib/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user.js b/api/lib/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user.js index e315d6e31d3..9faa6c55923 100644 --- a/api/lib/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user.js +++ b/api/lib/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user.js @@ -1,9 +1,9 @@ -const { CampaignCodeError, ObjectValidationError } = require('../errors.js'); -const User = require('../models/User.js'); -const AuthenticationMethod = require('../models/AuthenticationMethod.js'); -const { STUDENT_RECONCILIATION_ERRORS } = require('../constants.js'); +import { CampaignCodeError, ObjectValidationError } from '../errors.js'; +import { User } from '../models/User.js'; +import { AuthenticationMethod } from '../models/AuthenticationMethod.js'; +import { STUDENT_RECONCILIATION_ERRORS } from '../constants.js'; -module.exports = async function createUserAndReconcileToOrganizationLearnerFromExternalUser({ +const createUserAndReconcileToOrganizationLearnerFromExternalUser = async function ({ birthdate, campaignCode, token, @@ -96,3 +96,5 @@ module.exports = async function createUserAndReconcileToOrganizationLearnerFromE await userRepository.updateLastLoggedAt({ userId: tokenUserId }); return accessToken; }; + +export { createUserAndReconcileToOrganizationLearnerFromExternalUser }; diff --git a/api/lib/domain/usecases/create-user.js b/api/lib/domain/usecases/create-user.js index 4f128cd0eaa..37d08701395 100644 --- a/api/lib/domain/usecases/create-user.js +++ b/api/lib/domain/usecases/create-user.js @@ -1,6 +1,5 @@ -const { AlreadyRegisteredEmailError, EntityValidationError } = require('../errors.js'); - -const { getCampaignUrl } = require('../../infrastructure/utils/url-builder.js'); +import { AlreadyRegisteredEmailError, EntityValidationError } from '../errors.js'; +import { getCampaignUrl } from '../../infrastructure/utils/url-builder.js'; function _manageEmailAvailabilityError(error) { return _manageError(error, AlreadyRegisteredEmailError, 'email', 'ALREADY_REGISTERED_EMAIL'); @@ -52,7 +51,7 @@ async function _validateData({ password, user, userRepository, userValidator, pa return true; } -module.exports = async function createUser({ +const createUser = async function ({ campaignCode, localeFromHeader, password, @@ -104,3 +103,5 @@ module.exports = async function createUser({ return savedUser; } }; + +export { createUser }; diff --git a/api/lib/domain/usecases/deactivate-admin-member.js b/api/lib/domain/usecases/deactivate-admin-member.js index 608f9da0742..c94a8de05e9 100644 --- a/api/lib/domain/usecases/deactivate-admin-member.js +++ b/api/lib/domain/usecases/deactivate-admin-member.js @@ -1,5 +1,7 @@ -module.exports = async function deactivateAdminMember({ id, adminMemberRepository, refreshTokenService }) { +const deactivateAdminMember = async function ({ id, adminMemberRepository, refreshTokenService }) { const { userId } = await adminMemberRepository.getById(id); await adminMemberRepository.deactivate({ id }); await refreshTokenService.revokeRefreshTokensForUserId({ userId }); }; + +export { deactivateAdminMember }; diff --git a/api/lib/domain/usecases/delete-campaign-participation-for-admin.js b/api/lib/domain/usecases/delete-campaign-participation-for-admin.js index 5949a73b8b0..3b6b7585040 100644 --- a/api/lib/domain/usecases/delete-campaign-participation-for-admin.js +++ b/api/lib/domain/usecases/delete-campaign-participation-for-admin.js @@ -1,6 +1,6 @@ -const bluebird = require('bluebird'); +import bluebird from 'bluebird'; -module.exports = async function deleteCampaignParticipationForAdmin({ +const deleteCampaignParticipationForAdmin = async function ({ userId, campaignParticipationId, domainTransaction, @@ -19,6 +19,8 @@ module.exports = async function deleteCampaignParticipationForAdmin({ await bluebird.mapSeries(campaignParticipations, async (campaignParticipation) => { campaignParticipation.delete(userId); const { id, deletedAt, deletedBy } = campaignParticipation; - await campaignParticipationRepository.delete({ id, deletedAt, deletedBy, domainTransaction }); + await campaignParticipationRepository.remove({ id, deletedAt, deletedBy, domainTransaction }); }); }; + +export { deleteCampaignParticipationForAdmin }; diff --git a/api/lib/domain/usecases/delete-campaign-participation.js b/api/lib/domain/usecases/delete-campaign-participation.js index d8cf1d48cb6..01fc364f830 100644 --- a/api/lib/domain/usecases/delete-campaign-participation.js +++ b/api/lib/domain/usecases/delete-campaign-participation.js @@ -1,6 +1,6 @@ -const bluebird = require('bluebird'); +import bluebird from 'bluebird'; -module.exports = async function deleteCampaignParticipation({ +const deleteCampaignParticipation = async function ({ userId, campaignId, domainTransaction, @@ -17,6 +17,8 @@ module.exports = async function deleteCampaignParticipation({ await bluebird.mapSeries(campaignParticipations, async (campaignParticipation) => { campaignParticipation.delete(userId); const { id, deletedAt, deletedBy } = campaignParticipation; - await campaignParticipationRepository.delete({ id, deletedAt, deletedBy, domainTransaction }); + await campaignParticipationRepository.remove({ id, deletedAt, deletedBy, domainTransaction }); }); }; + +export { deleteCampaignParticipation }; diff --git a/api/lib/domain/usecases/delete-certification-issue-report.js b/api/lib/domain/usecases/delete-certification-issue-report.js index 0fc1e76a719..ababea7d2bd 100644 --- a/api/lib/domain/usecases/delete-certification-issue-report.js +++ b/api/lib/domain/usecases/delete-certification-issue-report.js @@ -1,6 +1,6 @@ -const { ForbiddenAccess } = require('../errors.js'); +import { ForbiddenAccess } from '../errors.js'; -module.exports = async function deleteCertificationIssueReport({ +const deleteCertificationIssueReport = async function ({ certificationIssueReportId, certificationCourseRepository, certificationIssueReportRepository, @@ -14,5 +14,7 @@ module.exports = async function deleteCertificationIssueReport({ throw new ForbiddenAccess('Certification issue report deletion forbidden'); } - return certificationIssueReportRepository.delete(certificationIssueReportId); + return certificationIssueReportRepository.remove(certificationIssueReportId); }; + +export { deleteCertificationIssueReport }; diff --git a/api/lib/domain/usecases/delete-organization-place-lot.js b/api/lib/domain/usecases/delete-organization-place-lot.js index d226ffa2d23..895ea8597e7 100644 --- a/api/lib/domain/usecases/delete-organization-place-lot.js +++ b/api/lib/domain/usecases/delete-organization-place-lot.js @@ -1,8 +1,6 @@ -module.exports = async function deleteOrganizationPlaceLot({ - organizationPlaceId, - userId, - organizationPlacesLotRepository, -}) { +const deleteOrganizationPlaceLot = async function ({ organizationPlaceId, userId, organizationPlacesLotRepository }) { await organizationPlacesLotRepository.get(organizationPlaceId); - await organizationPlacesLotRepository.delete({ id: organizationPlaceId, deletedBy: userId }); + await organizationPlacesLotRepository.remove({ id: organizationPlaceId, deletedBy: userId }); }; + +export { deleteOrganizationPlaceLot }; diff --git a/api/lib/domain/usecases/delete-session-jury-comment.js b/api/lib/domain/usecases/delete-session-jury-comment.js index bf06b9fd617..b27d8d1c5d1 100644 --- a/api/lib/domain/usecases/delete-session-jury-comment.js +++ b/api/lib/domain/usecases/delete-session-jury-comment.js @@ -1,3 +1,5 @@ -module.exports = async function deleteSessionJuryComment({ sessionId, sessionJuryCommentRepository }) { - await sessionJuryCommentRepository.delete(sessionId); +const deleteSessionJuryComment = async function ({ sessionId, sessionJuryCommentRepository }) { + await sessionJuryCommentRepository.remove(sessionId); }; + +export { deleteSessionJuryComment }; diff --git a/api/lib/domain/usecases/delete-session.js b/api/lib/domain/usecases/delete-session.js index 94f55e46556..3045dcee4c7 100644 --- a/api/lib/domain/usecases/delete-session.js +++ b/api/lib/domain/usecases/delete-session.js @@ -1,13 +1,15 @@ -const { SessionStartedDeletionError } = require('../errors.js'); +import { SessionStartedDeletionError } from '../errors.js'; -module.exports = async function deleteSession({ sessionId, sessionRepository, certificationCourseRepository }) { +const deleteSession = async function ({ sessionId, sessionRepository, certificationCourseRepository }) { if (await _isSessionStarted(certificationCourseRepository, sessionId)) { throw new SessionStartedDeletionError(); } - await sessionRepository.delete(sessionId); + await sessionRepository.remove(sessionId); }; +export { deleteSession }; + async function _isSessionStarted(certificationCourseRepository, sessionId) { const foundCertificationCourses = await certificationCourseRepository.findCertificationCoursesBySessionId({ sessionId, diff --git a/api/lib/domain/usecases/delete-unassociated-badge.js b/api/lib/domain/usecases/delete-unassociated-badge.js index d16a93f3548..f8a2887b7c0 100644 --- a/api/lib/domain/usecases/delete-unassociated-badge.js +++ b/api/lib/domain/usecases/delete-unassociated-badge.js @@ -1,7 +1,8 @@ -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); -const { AcquiredBadgeForbiddenDeletionError, CertificationBadgeForbiddenDeletionError } = require('../errors.js'); +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; -module.exports = async function deleteUnassociatedBadge({ badgeId, badgeRepository }) { +import { AcquiredBadgeForbiddenDeletionError, CertificationBadgeForbiddenDeletionError } from '../errors.js'; + +const deleteUnassociatedBadge = async function ({ badgeId, badgeRepository }) { return DomainTransaction.execute(async (domainTransaction) => { const isAssociated = await badgeRepository.isAssociated(badgeId, domainTransaction); const isRelatedToCertification = await badgeRepository.isRelatedToCertification(badgeId, domainTransaction); @@ -14,6 +15,8 @@ module.exports = async function deleteUnassociatedBadge({ badgeId, badgeReposito throw new CertificationBadgeForbiddenDeletionError(); } - return badgeRepository.delete(badgeId, domainTransaction); + return badgeRepository.remove(badgeId, domainTransaction); }); }; + +export { deleteUnassociatedBadge }; diff --git a/api/lib/domain/usecases/delete-unlinked-certification-candidate.js b/api/lib/domain/usecases/delete-unlinked-certification-candidate.js index fb8b1d29486..72b35eb799e 100644 --- a/api/lib/domain/usecases/delete-unlinked-certification-candidate.js +++ b/api/lib/domain/usecases/delete-unlinked-certification-candidate.js @@ -1,14 +1,16 @@ -const { CertificationCandidateForbiddenDeletionError } = require('../errors.js'); +import { CertificationCandidateForbiddenDeletionError } from '../errors.js'; -module.exports = async function deleteUnlinkedCertificationCandidate({ +const deleteUnlinkedCertificationCandidate = async function ({ certificationCandidateId, certificationCandidateRepository, }) { const isNotLinked = await certificationCandidateRepository.isNotLinked(certificationCandidateId); if (isNotLinked) { - return certificationCandidateRepository.delete(certificationCandidateId); + return certificationCandidateRepository.remove(certificationCandidateId); } throw new CertificationCandidateForbiddenDeletionError(); }; + +export { deleteUnlinkedCertificationCandidate }; diff --git a/api/lib/domain/usecases/deneutralize-challenge.js b/api/lib/domain/usecases/deneutralize-challenge.js index ad2e6a86d99..56ea5aa9d9a 100644 --- a/api/lib/domain/usecases/deneutralize-challenge.js +++ b/api/lib/domain/usecases/deneutralize-challenge.js @@ -1,6 +1,6 @@ -const ChallengeDeneutralized = require('../events/ChallengeDeneutralized.js'); +import { ChallengeDeneutralized } from '../events/ChallengeDeneutralized.js'; -module.exports = async function deneutralizeChallenge({ +const deneutralizeChallenge = async function ({ certificationAssessmentRepository, certificationCourseId, challengeRecId, @@ -13,3 +13,5 @@ module.exports = async function deneutralizeChallenge({ await certificationAssessmentRepository.save(certificationAssessment); return new ChallengeDeneutralized({ certificationCourseId, juryId }); }; + +export { deneutralizeChallenge }; diff --git a/api/lib/domain/usecases/disable-certification-center-membership.js b/api/lib/domain/usecases/disable-certification-center-membership.js index 924a7fa552d..41a8ae628cf 100644 --- a/api/lib/domain/usecases/disable-certification-center-membership.js +++ b/api/lib/domain/usecases/disable-certification-center-membership.js @@ -1,6 +1,8 @@ -module.exports = async function disableCertificationCenterMembership({ +const disableCertificationCenterMembership = async function ({ certificationCenterMembershipId, certificationCenterMembershipRepository, }) { return certificationCenterMembershipRepository.disableById({ certificationCenterMembershipId }); }; + +export { disableCertificationCenterMembership }; diff --git a/api/lib/domain/usecases/disable-membership.js b/api/lib/domain/usecases/disable-membership.js index 8d0117d9fe0..075a2628312 100644 --- a/api/lib/domain/usecases/disable-membership.js +++ b/api/lib/domain/usecases/disable-membership.js @@ -1,4 +1,6 @@ -module.exports = async function disableMembership({ membershipId, userId, membershipRepository }) { +const disableMembership = async function ({ membershipId, userId, membershipRepository }) { const membership = { disabledAt: new Date(), updatedByUserId: userId }; return membershipRepository.updateById({ id: membershipId, membership }); }; + +export { disableMembership }; diff --git a/api/lib/domain/usecases/dissociate-user-from-organization-learner.js b/api/lib/domain/usecases/dissociate-user-from-organization-learner.js index 410a7735d9d..9acbe953ef0 100644 --- a/api/lib/domain/usecases/dissociate-user-from-organization-learner.js +++ b/api/lib/domain/usecases/dissociate-user-from-organization-learner.js @@ -1,6 +1,6 @@ -const { OrganizationLearnerCannotBeDissociatedError } = require('../errors.js'); +import { OrganizationLearnerCannotBeDissociatedError } from '../errors.js'; -module.exports = async function dissociateUserFromOrganizationLearner({ +const dissociateUserFromOrganizationLearner = async function ({ organizationLearnerId, organizationLearnerRepository, }) { @@ -13,3 +13,5 @@ module.exports = async function dissociateUserFromOrganizationLearner({ await organizationLearnerRepository.dissociateUserFromOrganizationLearner(organizationLearnerId); }; + +export { dissociateUserFromOrganizationLearner }; diff --git a/api/lib/domain/usecases/end-assessment-by-supervisor.js b/api/lib/domain/usecases/end-assessment-by-supervisor.js index 3dcc4a14fab..a5507531b2c 100644 --- a/api/lib/domain/usecases/end-assessment-by-supervisor.js +++ b/api/lib/domain/usecases/end-assessment-by-supervisor.js @@ -1,4 +1,4 @@ -module.exports = async function endAssessmentBySupervisor({ certificationCandidateId, assessmentRepository }) { +const endAssessmentBySupervisor = async function ({ certificationCandidateId, assessmentRepository }) { const assessment = await assessmentRepository.getByCertificationCandidateId(certificationCandidateId); if (assessment.isCompleted()) { @@ -7,3 +7,5 @@ module.exports = async function endAssessmentBySupervisor({ certificationCandida await assessmentRepository.endBySupervisorByAssessmentId(assessment.id); }; + +export { endAssessmentBySupervisor }; diff --git a/api/lib/domain/usecases/enrol-students-to-session.js b/api/lib/domain/usecases/enrol-students-to-session.js index b32c66ae82d..9dd026f18a0 100644 --- a/api/lib/domain/usecases/enrol-students-to-session.js +++ b/api/lib/domain/usecases/enrol-students-to-session.js @@ -1,9 +1,9 @@ -const SCOCertificationCandidate = require('../models/SCOCertificationCandidate.js'); -const _ = require('lodash'); -const { ForbiddenAccess, UnknownCountryForStudentEnrolmentError } = require('../errors.js'); +import { SCOCertificationCandidate } from '../models/SCOCertificationCandidate.js'; +import _ from 'lodash'; +import { ForbiddenAccess, UnknownCountryForStudentEnrolmentError } from '../errors.js'; const INSEE_PREFIX_CODE = '99'; -module.exports = async function enrolStudentsToSession({ +const enrolStudentsToSession = async function ({ sessionId, referentId, studentIds, @@ -61,6 +61,8 @@ module.exports = async function enrolStudentsToSession({ }); }; +export { enrolStudentsToSession }; + function _doesSessionBelongToSameCertificationCenterAsReferent(referentCertificationCenterMemberships, session) { return referentCertificationCenterMemberships.some( (membership) => membership.certificationCenter.id === session.certificationCenterId diff --git a/api/lib/domain/usecases/finalize-session.js b/api/lib/domain/usecases/finalize-session.js index 432eda0af54..741093741c1 100644 --- a/api/lib/domain/usecases/finalize-session.js +++ b/api/lib/domain/usecases/finalize-session.js @@ -1,13 +1,14 @@ -const { +import { SessionAlreadyFinalizedError, SessionWithoutStartedCertificationError, SessionWithAbortReasonOnCompletedCertificationCourseError, SessionWithMissingAbortReasonError, -} = require('../errors.js'); -const SessionFinalized = require('../events/SessionFinalized.js'); -const bluebird = require('bluebird'); +} from '../errors.js'; -module.exports = async function finalizeSession({ +import { SessionFinalized } from '../events/SessionFinalized.js'; +import bluebird from 'bluebird'; + +const finalizeSession = async function ({ sessionId, examinerGlobalComment, certificationReports, @@ -74,6 +75,8 @@ module.exports = async function finalizeSession({ }); }; +export { finalizeSession }; + function _hasAbortReasonForCompletedCertificationCourse({ abortReasonCount, uncompletedCertificationCount }) { return abortReasonCount > uncompletedCertificationCount; } diff --git a/api/lib/domain/usecases/find-all-tags.js b/api/lib/domain/usecases/find-all-tags.js index d126101085b..d4c0119849a 100644 --- a/api/lib/domain/usecases/find-all-tags.js +++ b/api/lib/domain/usecases/find-all-tags.js @@ -1,3 +1,5 @@ -module.exports = function findAllTags({ tagRepository }) { +const findAllTags = function ({ tagRepository }) { return tagRepository.findAll(); }; + +export { findAllTags }; diff --git a/api/lib/domain/usecases/find-answer-by-assessment.js b/api/lib/domain/usecases/find-answer-by-assessment.js index c978df9a59f..344366e4bf4 100644 --- a/api/lib/domain/usecases/find-answer-by-assessment.js +++ b/api/lib/domain/usecases/find-answer-by-assessment.js @@ -1,11 +1,6 @@ -const { UserNotAuthorizedToAccessEntityError, EntityValidationError } = require('../errors.js'); +import { UserNotAuthorizedToAccessEntityError, EntityValidationError } from '../errors.js'; -module.exports = async function findAnswerByAssessment({ - assessmentId, - userId, - answerRepository, - assessmentRepository, -} = {}) { +const findAnswerByAssessment = async function ({ assessmentId, userId, answerRepository, assessmentRepository } = {}) { const integerAssessmentId = parseInt(assessmentId); if (!Number.isFinite(integerAssessmentId)) { throw new EntityValidationError({ @@ -19,3 +14,5 @@ module.exports = async function findAnswerByAssessment({ } return answerRepository.findByAssessment(integerAssessmentId); }; + +export { findAnswerByAssessment }; diff --git a/api/lib/domain/usecases/find-answer-by-challenge-and-assessment.js b/api/lib/domain/usecases/find-answer-by-challenge-and-assessment.js index 9dd7f7b3ac3..b016ed941f6 100644 --- a/api/lib/domain/usecases/find-answer-by-challenge-and-assessment.js +++ b/api/lib/domain/usecases/find-answer-by-challenge-and-assessment.js @@ -1,4 +1,4 @@ -module.exports = async function findAnswerByChallengeAndAssessment({ +const findAnswerByChallengeAndAssessment = async function ({ challengeId, assessmentId, userId, @@ -17,3 +17,5 @@ module.exports = async function findAnswerByChallengeAndAssessment({ return answerRepository.findByChallengeAndAssessment({ challengeId, assessmentId: integerAssessmentId }); }; + +export { findAnswerByChallengeAndAssessment }; diff --git a/api/lib/domain/usecases/find-assessment-participation-result-list.js b/api/lib/domain/usecases/find-assessment-participation-result-list.js index b01fc0036de..1f7aed912d5 100644 --- a/api/lib/domain/usecases/find-assessment-participation-result-list.js +++ b/api/lib/domain/usecases/find-assessment-participation-result-list.js @@ -7,4 +7,4 @@ function findAssessmentParticipationResultList({ return campaignAssessmentParticipationResultListRepository.findPaginatedByCampaignId({ campaignId, filters, page }); } -module.exports = findAssessmentParticipationResultList; +export { findAssessmentParticipationResultList }; diff --git a/api/lib/domain/usecases/find-association-between-user-and-organization-learner.js b/api/lib/domain/usecases/find-association-between-user-and-organization-learner.js index 99ad2e9a2b6..bf0f1d9f273 100644 --- a/api/lib/domain/usecases/find-association-between-user-and-organization-learner.js +++ b/api/lib/domain/usecases/find-association-between-user-and-organization-learner.js @@ -1,10 +1,10 @@ -const { +import { CampaignCodeError, UserNotAuthorizedToAccessEntityError, OrganizationLearnerDisabledError, -} = require('../errors.js'); +} from '../errors.js'; -module.exports = async function findAssociationBetweenUserAndOrganizationLearner({ +const findAssociationBetweenUserAndOrganizationLearner = async function ({ authenticatedUserId, requestedUserId, campaignCode, @@ -31,3 +31,5 @@ module.exports = async function findAssociationBetweenUserAndOrganizationLearner return organizationLearner; }; + +export { findAssociationBetweenUserAndOrganizationLearner }; diff --git a/api/lib/domain/usecases/find-campaign-participation-trainings.js b/api/lib/domain/usecases/find-campaign-participation-trainings.js index 3b00139000f..4ef893be5e4 100644 --- a/api/lib/domain/usecases/find-campaign-participation-trainings.js +++ b/api/lib/domain/usecases/find-campaign-participation-trainings.js @@ -1,6 +1,6 @@ -const { UserNotAuthorizedToFindTrainings } = require('../errors.js'); +import { UserNotAuthorizedToFindTrainings } from '../errors.js'; -module.exports = async function findCampaignParticipationTrainings({ +const findCampaignParticipationTrainings = async function ({ userId, locale, campaignParticipationId, @@ -15,3 +15,5 @@ module.exports = async function findCampaignParticipationTrainings({ return userRecommendedTrainingRepository.findByCampaignParticipationId({ campaignParticipationId, locale }); }; + +export { findCampaignParticipationTrainings }; diff --git a/api/lib/domain/usecases/find-campaign-participations-for-user-management.js b/api/lib/domain/usecases/find-campaign-participations-for-user-management.js index d549e12408b..c80e3eb1efd 100644 --- a/api/lib/domain/usecases/find-campaign-participations-for-user-management.js +++ b/api/lib/domain/usecases/find-campaign-participations-for-user-management.js @@ -1,6 +1,8 @@ -module.exports = async function findCampaignParticipationsForUserManagement({ +const findCampaignParticipationsForUserManagement = async function ({ userId, participationsForUserManagementRepository, }) { return participationsForUserManagementRepository.findByUserId(userId); }; + +export { findCampaignParticipationsForUserManagement }; diff --git a/api/lib/domain/usecases/find-campaign-profiles-collection-participation-summaries.js b/api/lib/domain/usecases/find-campaign-profiles-collection-participation-summaries.js index 175af3a35a5..bf16be682cd 100644 --- a/api/lib/domain/usecases/find-campaign-profiles-collection-participation-summaries.js +++ b/api/lib/domain/usecases/find-campaign-profiles-collection-participation-summaries.js @@ -1,6 +1,6 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; -module.exports = async function findCampaignProfilesCollectionParticipationSummaries({ +const findCampaignProfilesCollectionParticipationSummaries = async function ({ userId, campaignId, page, @@ -13,3 +13,5 @@ module.exports = async function findCampaignProfilesCollectionParticipationSumma } return campaignProfilesCollectionParticipationSummaryRepository.findPaginatedByCampaignId(campaignId, page, filters); }; + +export { findCampaignProfilesCollectionParticipationSummaries }; diff --git a/api/lib/domain/usecases/find-certification-center-memberships-by-certification-center.js b/api/lib/domain/usecases/find-certification-center-memberships-by-certification-center.js index 06b9aebd190..87a5fdd16a8 100644 --- a/api/lib/domain/usecases/find-certification-center-memberships-by-certification-center.js +++ b/api/lib/domain/usecases/find-certification-center-memberships-by-certification-center.js @@ -1,6 +1,8 @@ -module.exports = function findCertificationCenterMembershipsByCertificationCenter({ +const findCertificationCenterMembershipsByCertificationCenter = function ({ certificationCenterId, certificationCenterMembershipRepository, }) { return certificationCenterMembershipRepository.findActiveByCertificationCenterIdSortedById({ certificationCenterId }); }; + +export { findCertificationCenterMembershipsByCertificationCenter }; diff --git a/api/lib/domain/usecases/find-certification-center-memberships-by-user.js b/api/lib/domain/usecases/find-certification-center-memberships-by-user.js index 85150b55a11..21c037b46eb 100644 --- a/api/lib/domain/usecases/find-certification-center-memberships-by-user.js +++ b/api/lib/domain/usecases/find-certification-center-memberships-by-user.js @@ -1,6 +1,5 @@ -module.exports = async function findCertificationCenterMembershipsByUser({ - userId, - certificationCenterMembershipRepository, -}) { +const findCertificationCenterMembershipsByUser = async function ({ userId, certificationCenterMembershipRepository }) { return certificationCenterMembershipRepository.findByUserId(userId); }; + +export { findCertificationCenterMembershipsByUser }; diff --git a/api/lib/domain/usecases/find-competence-evaluations-by-assessment.js b/api/lib/domain/usecases/find-competence-evaluations-by-assessment.js index 7a3066c63f6..96914750c6f 100644 --- a/api/lib/domain/usecases/find-competence-evaluations-by-assessment.js +++ b/api/lib/domain/usecases/find-competence-evaluations-by-assessment.js @@ -1,6 +1,6 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; -module.exports = async function findCompetenceEvaluationsByAssessment({ +const findCompetenceEvaluationsByAssessment = async function ({ userId, assessmentId, assessmentRepository, @@ -12,3 +12,5 @@ module.exports = async function findCompetenceEvaluationsByAssessment({ return competenceEvaluationRepository.findByAssessmentId(assessmentId); }; + +export { findCompetenceEvaluationsByAssessment }; diff --git a/api/lib/domain/usecases/find-complementary-certifications.js b/api/lib/domain/usecases/find-complementary-certifications.js index 0b91c4cf03d..ceb78682a14 100644 --- a/api/lib/domain/usecases/find-complementary-certifications.js +++ b/api/lib/domain/usecases/find-complementary-certifications.js @@ -1,3 +1,5 @@ -module.exports = function findComplementaryCertifications({ complementaryCertificationRepository }) { +const findComplementaryCertifications = function ({ complementaryCertificationRepository }) { return complementaryCertificationRepository.findAll(); }; + +export { findComplementaryCertifications }; diff --git a/api/lib/domain/usecases/find-countries.js b/api/lib/domain/usecases/find-countries.js index e56bb8ba489..bd508040147 100644 --- a/api/lib/domain/usecases/find-countries.js +++ b/api/lib/domain/usecases/find-countries.js @@ -1,3 +1,5 @@ -module.exports = function findCountries({ countryRepository }) { +const findCountries = function ({ countryRepository }) { return countryRepository.findAll(); }; + +export { findCountries }; diff --git a/api/lib/domain/usecases/find-divisions-by-certification-center.js b/api/lib/domain/usecases/find-divisions-by-certification-center.js index ab84fc0c567..86ca40b34b4 100644 --- a/api/lib/domain/usecases/find-divisions-by-certification-center.js +++ b/api/lib/domain/usecases/find-divisions-by-certification-center.js @@ -1,4 +1,4 @@ -module.exports = async function findDivisionsByCertificationCenter({ +const findDivisionsByCertificationCenter = async function ({ certificationCenterId, organizationRepository, divisionRepository, @@ -6,3 +6,5 @@ module.exports = async function findDivisionsByCertificationCenter({ const organizationId = await organizationRepository.getIdByCertificationCenterId(certificationCenterId); return divisionRepository.findByOrganizationIdForCurrentSchoolYear({ organizationId }); }; + +export { findDivisionsByCertificationCenter }; diff --git a/api/lib/domain/usecases/find-divisions-by-organization.js b/api/lib/domain/usecases/find-divisions-by-organization.js index c576ae0a39d..b50a7c6c524 100644 --- a/api/lib/domain/usecases/find-divisions-by-organization.js +++ b/api/lib/domain/usecases/find-divisions-by-organization.js @@ -1,4 +1,4 @@ -module.exports = async function findDivisionsByOrganization({ organizationId, divisionRepository }) { +const findDivisionsByOrganization = async function ({ organizationId, divisionRepository }) { const divisionsOrderedByPostgres = await divisionRepository.findByOrganizationIdForCurrentSchoolYear({ organizationId, }); @@ -7,3 +7,5 @@ module.exports = async function findDivisionsByOrganization({ organizationId, di ); return divisionsOrderedByName; }; + +export { findDivisionsByOrganization }; diff --git a/api/lib/domain/usecases/find-finalized-sessions-to-publish.js b/api/lib/domain/usecases/find-finalized-sessions-to-publish.js index f6281975c78..6adb6b4faef 100644 --- a/api/lib/domain/usecases/find-finalized-sessions-to-publish.js +++ b/api/lib/domain/usecases/find-finalized-sessions-to-publish.js @@ -1,3 +1,5 @@ -module.exports = function findFinalizedSessionsToPublish({ finalizedSessionRepository }) { +const findFinalizedSessionsToPublish = function ({ finalizedSessionRepository }) { return finalizedSessionRepository.findFinalizedSessionsToPublish(); }; + +export { findFinalizedSessionsToPublish }; diff --git a/api/lib/domain/usecases/find-finalized-sessions-with-required-action.js b/api/lib/domain/usecases/find-finalized-sessions-with-required-action.js index 793ba5a46ba..0a194039242 100644 --- a/api/lib/domain/usecases/find-finalized-sessions-with-required-action.js +++ b/api/lib/domain/usecases/find-finalized-sessions-with-required-action.js @@ -1,3 +1,5 @@ -module.exports = function findFinalizedSessionsWithRequiredAction({ finalizedSessionRepository }) { +const findFinalizedSessionsWithRequiredAction = function ({ finalizedSessionRepository }) { return finalizedSessionRepository.findFinalizedSessionsWithRequiredAction(); }; + +export { findFinalizedSessionsWithRequiredAction }; diff --git a/api/lib/domain/usecases/find-groups-by-organization.js b/api/lib/domain/usecases/find-groups-by-organization.js index 424c9465c40..51588084a64 100644 --- a/api/lib/domain/usecases/find-groups-by-organization.js +++ b/api/lib/domain/usecases/find-groups-by-organization.js @@ -1,3 +1,5 @@ -module.exports = async function findGroupByOrganization({ organizationId, groupRepository }) { +const findGroupsByOrganization = async function ({ organizationId, groupRepository }) { return groupRepository.findByOrganizationId({ organizationId }); }; + +export { findGroupsByOrganization }; diff --git a/api/lib/domain/usecases/find-latest-ongoing-user-campaign-participations.js b/api/lib/domain/usecases/find-latest-ongoing-user-campaign-participations.js index 8d5ce469c1d..94b832b1f3f 100644 --- a/api/lib/domain/usecases/find-latest-ongoing-user-campaign-participations.js +++ b/api/lib/domain/usecases/find-latest-ongoing-user-campaign-participations.js @@ -1,6 +1,5 @@ -module.exports = async function findLatestOngoingUserCampaignParticipations({ - userId, - campaignParticipationRepository, -}) { +const findLatestOngoingUserCampaignParticipations = async function ({ userId, campaignParticipationRepository }) { return campaignParticipationRepository.findLatestOngoingByUserId(userId); }; + +export { findLatestOngoingUserCampaignParticipations }; diff --git a/api/lib/domain/usecases/find-organization-places-lot.js b/api/lib/domain/usecases/find-organization-places-lot.js index 4ef18f0105a..f1bb2bc1da1 100644 --- a/api/lib/domain/usecases/find-organization-places-lot.js +++ b/api/lib/domain/usecases/find-organization-places-lot.js @@ -1,3 +1,5 @@ -module.exports = async function findOrganizationPlacesLot({ organizationId, organizationPlacesLotRepository }) { +const findOrganizationPlacesLot = async function ({ organizationId, organizationPlacesLotRepository }) { return organizationPlacesLotRepository.findByOrganizationId(organizationId); }; + +export { findOrganizationPlacesLot }; diff --git a/api/lib/domain/usecases/find-organization-target-profile-summaries-for-admin.js b/api/lib/domain/usecases/find-organization-target-profile-summaries-for-admin.js index ebb14d21a0d..d77ae3bd050 100644 --- a/api/lib/domain/usecases/find-organization-target-profile-summaries-for-admin.js +++ b/api/lib/domain/usecases/find-organization-target-profile-summaries-for-admin.js @@ -1,6 +1,8 @@ -module.exports = function findOrganizationTargetProfileSummariesForAdmin({ +const findOrganizationTargetProfileSummariesForAdmin = function ({ organizationId, targetProfileSummaryForAdminRepository, }) { return targetProfileSummaryForAdminRepository.findByOrganization({ organizationId }); }; + +export { findOrganizationTargetProfileSummariesForAdmin }; diff --git a/api/lib/domain/usecases/find-paginated-campaign-managements.js b/api/lib/domain/usecases/find-paginated-campaign-managements.js index 52326381623..8e0ccf955e7 100644 --- a/api/lib/domain/usecases/find-paginated-campaign-managements.js +++ b/api/lib/domain/usecases/find-paginated-campaign-managements.js @@ -1,3 +1,5 @@ -module.exports = function findPaginatedCampaignManagements({ organizationId, page, campaignManagementRepository }) { +const findPaginatedCampaignManagements = function ({ organizationId, page, campaignManagementRepository }) { return campaignManagementRepository.findPaginatedCampaignManagements({ organizationId, page }); }; + +export { findPaginatedCampaignManagements }; diff --git a/api/lib/domain/usecases/find-paginated-campaign-participants-activities.js b/api/lib/domain/usecases/find-paginated-campaign-participants-activities.js index 95b8ad03cbf..a1ce65a323b 100644 --- a/api/lib/domain/usecases/find-paginated-campaign-participants-activities.js +++ b/api/lib/domain/usecases/find-paginated-campaign-participants-activities.js @@ -1,6 +1,6 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; -module.exports = async function findPaginatedCampaignParticipantsActivities({ +const findPaginatedCampaignParticipantsActivities = async function ({ userId, campaignId, page, @@ -13,6 +13,8 @@ module.exports = async function findPaginatedCampaignParticipantsActivities({ return campaignParticipantActivityRepository.findPaginatedByCampaignId({ page, campaignId, filters }); }; +export { findPaginatedCampaignParticipantsActivities }; + async function _checkUserAccessToCampaign(campaignId, userId, campaignRepository) { const hasAccess = await campaignRepository.checkIfUserOrganizationHasAccessToCampaign(campaignId, userId); if (!hasAccess) { diff --git a/api/lib/domain/usecases/find-paginated-certification-center-session-summaries.js b/api/lib/domain/usecases/find-paginated-certification-center-session-summaries.js index fe19999cf20..da14a0b036d 100644 --- a/api/lib/domain/usecases/find-paginated-certification-center-session-summaries.js +++ b/api/lib/domain/usecases/find-paginated-certification-center-session-summaries.js @@ -1,6 +1,6 @@ -const { ForbiddenAccess } = require('../../domain/errors.js'); +import { ForbiddenAccess } from '../../domain/errors.js'; -module.exports = async function findPaginatedCertificationCenterSessionSummaries({ +const findPaginatedCertificationCenterSessionSummaries = async function ({ userId, certificationCenterId, page, @@ -14,3 +14,5 @@ module.exports = async function findPaginatedCertificationCenterSessionSummaries return sessionSummaryRepository.findPaginatedByCertificationCenterId({ certificationCenterId, page }); }; + +export { findPaginatedCertificationCenterSessionSummaries }; diff --git a/api/lib/domain/usecases/find-paginated-filtered-certification-centers.js b/api/lib/domain/usecases/find-paginated-filtered-certification-centers.js index b4fad00a8c9..9c52f45cdb0 100644 --- a/api/lib/domain/usecases/find-paginated-filtered-certification-centers.js +++ b/api/lib/domain/usecases/find-paginated-filtered-certification-centers.js @@ -1,3 +1,5 @@ -module.exports = function findPaginatedFilteredCertificationCenters({ filter, page, certificationCenterRepository }) { +const findPaginatedFilteredCertificationCenters = function ({ filter, page, certificationCenterRepository }) { return certificationCenterRepository.findPaginatedFiltered({ filter, page }); }; + +export { findPaginatedFilteredCertificationCenters }; diff --git a/api/lib/domain/usecases/find-paginated-filtered-organization-campaigns.js b/api/lib/domain/usecases/find-paginated-filtered-organization-campaigns.js index cef104795f2..2a2da841f1e 100644 --- a/api/lib/domain/usecases/find-paginated-filtered-organization-campaigns.js +++ b/api/lib/domain/usecases/find-paginated-filtered-organization-campaigns.js @@ -1,4 +1,4 @@ -module.exports = function findPaginatedFilteredOrganizationCampaigns({ +const findPaginatedFilteredOrganizationCampaigns = function ({ userId, organizationId, filter, @@ -7,3 +7,5 @@ module.exports = function findPaginatedFilteredOrganizationCampaigns({ }) { return campaignReportRepository.findPaginatedFilteredByOrganizationId({ organizationId, filter, page, userId }); }; + +export { findPaginatedFilteredOrganizationCampaigns }; diff --git a/api/lib/domain/usecases/find-paginated-filtered-organization-memberships.js b/api/lib/domain/usecases/find-paginated-filtered-organization-memberships.js index ab224013a8f..e97a540b72f 100644 --- a/api/lib/domain/usecases/find-paginated-filtered-organization-memberships.js +++ b/api/lib/domain/usecases/find-paginated-filtered-organization-memberships.js @@ -1,8 +1,5 @@ -module.exports = function findPaginatedFilteredOrganizationMemberships({ - organizationId, - filter, - page, - membershipRepository, -}) { +const findPaginatedFilteredOrganizationMemberships = function ({ organizationId, filter, page, membershipRepository }) { return membershipRepository.findPaginatedFiltered({ organizationId, filter, page }); }; + +export { findPaginatedFilteredOrganizationMemberships }; diff --git a/api/lib/domain/usecases/find-paginated-filtered-organizations.js b/api/lib/domain/usecases/find-paginated-filtered-organizations.js index 1969c594fbf..ceccb3e4cbc 100644 --- a/api/lib/domain/usecases/find-paginated-filtered-organizations.js +++ b/api/lib/domain/usecases/find-paginated-filtered-organizations.js @@ -1,3 +1,5 @@ -module.exports = function findPaginatedFilteredOrganizations({ filter, page, organizationRepository }) { +const findPaginatedFilteredOrganizations = function ({ filter, page, organizationRepository }) { return organizationRepository.findPaginatedFiltered({ filter, page }); }; + +export { findPaginatedFilteredOrganizations }; diff --git a/api/lib/domain/usecases/find-paginated-filtered-sco-participants.js b/api/lib/domain/usecases/find-paginated-filtered-sco-participants.js index 9b77fbd3463..d23cdc7fd62 100644 --- a/api/lib/domain/usecases/find-paginated-filtered-sco-participants.js +++ b/api/lib/domain/usecases/find-paginated-filtered-sco-participants.js @@ -1,4 +1,4 @@ -module.exports = function findPaginatedFilteredScoParticipants({ +const findPaginatedFilteredScoParticipants = function ({ organizationId, filter, page, @@ -12,3 +12,5 @@ module.exports = function findPaginatedFilteredScoParticipants({ sort, }); }; + +export { findPaginatedFilteredScoParticipants }; diff --git a/api/lib/domain/usecases/find-paginated-filtered-sup-participants.js b/api/lib/domain/usecases/find-paginated-filtered-sup-participants.js index 12816db1ed3..17d4081cc6c 100644 --- a/api/lib/domain/usecases/find-paginated-filtered-sup-participants.js +++ b/api/lib/domain/usecases/find-paginated-filtered-sup-participants.js @@ -1,4 +1,4 @@ -module.exports = function findPaginatedFilteredSupParticipants({ +const findPaginatedFilteredSupParticipants = function ({ organizationId, filter, page, @@ -12,3 +12,5 @@ module.exports = function findPaginatedFilteredSupParticipants({ sort, }); }; + +export { findPaginatedFilteredSupParticipants }; diff --git a/api/lib/domain/usecases/find-paginated-filtered-target-profile-organizations.js b/api/lib/domain/usecases/find-paginated-filtered-target-profile-organizations.js index 7f34eb61914..f2e42e9766e 100644 --- a/api/lib/domain/usecases/find-paginated-filtered-target-profile-organizations.js +++ b/api/lib/domain/usecases/find-paginated-filtered-target-profile-organizations.js @@ -1,3 +1,5 @@ -module.exports = function findTargetProfileOrganizations({ targetProfileId, filter, page, organizationRepository }) { +const findTargetProfileOrganizations = function ({ targetProfileId, filter, page, organizationRepository }) { return organizationRepository.findPaginatedFilteredByTargetProfile({ targetProfileId, filter, page }); }; + +export { findTargetProfileOrganizations }; diff --git a/api/lib/domain/usecases/find-paginated-filtered-target-profile-summaries-for-admin.js b/api/lib/domain/usecases/find-paginated-filtered-target-profile-summaries-for-admin.js index e74382420bd..afefe3ac13e 100644 --- a/api/lib/domain/usecases/find-paginated-filtered-target-profile-summaries-for-admin.js +++ b/api/lib/domain/usecases/find-paginated-filtered-target-profile-summaries-for-admin.js @@ -1,7 +1,9 @@ -module.exports = function findPaginatedFilteredTargetProfileSummariesForAdmin({ +const findPaginatedFilteredTargetProfileSummariesForAdmin = function ({ filter, page, targetProfileSummaryForAdminRepository, }) { return targetProfileSummaryForAdminRepository.findPaginatedFiltered({ filter, page }); }; + +export { findPaginatedFilteredTargetProfileSummariesForAdmin }; diff --git a/api/lib/domain/usecases/find-paginated-filtered-tutorials.js b/api/lib/domain/usecases/find-paginated-filtered-tutorials.js index 1a8ad72b84c..ef865eb4e7b 100644 --- a/api/lib/domain/usecases/find-paginated-filtered-tutorials.js +++ b/api/lib/domain/usecases/find-paginated-filtered-tutorials.js @@ -1,6 +1,6 @@ -const Tutorial = require('../models/Tutorial.js'); +import { Tutorial } from '../models/Tutorial.js'; -module.exports = async function findPaginatedFilteredTutorials({ userId, filters, page, locale, tutorialRepository }) { +const findPaginatedFilteredTutorials = async function ({ userId, filters, page, locale, tutorialRepository }) { if (filters?.type === Tutorial.TYPES.RECOMMENDED) { const { results: tutorials, pagination } = await tutorialRepository.findPaginatedFilteredRecommendedByUserId({ userId, @@ -18,3 +18,5 @@ module.exports = async function findPaginatedFilteredTutorials({ userId, filters }); return { tutorials, meta: { pagination } }; }; + +export { findPaginatedFilteredTutorials }; diff --git a/api/lib/domain/usecases/find-paginated-filtered-users.js b/api/lib/domain/usecases/find-paginated-filtered-users.js index bfe431549cd..c680bab101a 100644 --- a/api/lib/domain/usecases/find-paginated-filtered-users.js +++ b/api/lib/domain/usecases/find-paginated-filtered-users.js @@ -1,3 +1,5 @@ -module.exports = function findPaginatedFilteredUsers({ filter, page, userRepository }) { +const findPaginatedFilteredUsers = function ({ filter, page, userRepository }) { return userRepository.findPaginatedFiltered({ filter, page }); }; + +export { findPaginatedFilteredUsers }; diff --git a/api/lib/domain/usecases/find-paginated-participations-for-campaign-management.js b/api/lib/domain/usecases/find-paginated-participations-for-campaign-management.js index f28c784f2fb..29621fcc4e0 100644 --- a/api/lib/domain/usecases/find-paginated-participations-for-campaign-management.js +++ b/api/lib/domain/usecases/find-paginated-participations-for-campaign-management.js @@ -1,4 +1,4 @@ -module.exports = function findPaginatedParticipationsForCampaignManagement({ +const findPaginatedParticipationsForCampaignManagement = function ({ campaignId, page, participationsForCampaignManagementRepository, @@ -8,3 +8,5 @@ module.exports = function findPaginatedParticipationsForCampaignManagement({ page, }); }; + +export { findPaginatedParticipationsForCampaignManagement }; diff --git a/api/lib/domain/usecases/find-paginated-target-profile-training-summaries.js b/api/lib/domain/usecases/find-paginated-target-profile-training-summaries.js index 10da7f93aed..5842b592640 100644 --- a/api/lib/domain/usecases/find-paginated-target-profile-training-summaries.js +++ b/api/lib/domain/usecases/find-paginated-target-profile-training-summaries.js @@ -1,4 +1,4 @@ -module.exports = async function findPaginatedTargetProfileTrainings({ targetProfileId, page, trainingRepository }) { +const findPaginatedTargetProfileTrainingSummaries = async function ({ targetProfileId, page, trainingRepository }) { const { trainings, pagination } = await trainingRepository.findPaginatedSummariesByTargetProfileId({ targetProfileId, page, @@ -9,3 +9,5 @@ module.exports = async function findPaginatedTargetProfileTrainings({ targetProf meta: { pagination }, }; }; + +export { findPaginatedTargetProfileTrainingSummaries }; diff --git a/api/lib/domain/usecases/find-paginated-training-summaries.js b/api/lib/domain/usecases/find-paginated-training-summaries.js index f7dc69e31ac..cce558abec6 100644 --- a/api/lib/domain/usecases/find-paginated-training-summaries.js +++ b/api/lib/domain/usecases/find-paginated-training-summaries.js @@ -1,4 +1,4 @@ -module.exports = async function findPaginatedTrainingSummaries({ filter, page, trainingRepository }) { +const findPaginatedTrainingSummaries = async function ({ filter, page, trainingRepository }) { const { trainings, pagination } = await trainingRepository.findPaginatedSummaries({ filter, page }); return { @@ -6,3 +6,5 @@ module.exports = async function findPaginatedTrainingSummaries({ filter, page, t meta: { pagination }, }; }; + +export { findPaginatedTrainingSummaries }; diff --git a/api/lib/domain/usecases/find-paginated-user-recommended-trainings.js b/api/lib/domain/usecases/find-paginated-user-recommended-trainings.js index cae6477a924..80b2b6316d4 100644 --- a/api/lib/domain/usecases/find-paginated-user-recommended-trainings.js +++ b/api/lib/domain/usecases/find-paginated-user-recommended-trainings.js @@ -12,4 +12,4 @@ async function findPaginatedUserRecommendedTrainings({ userId, locale, page, tra }; } -module.exports = findPaginatedUserRecommendedTrainings; +export { findPaginatedUserRecommendedTrainings }; diff --git a/api/lib/domain/usecases/find-pending-certification-center-invitations.js b/api/lib/domain/usecases/find-pending-certification-center-invitations.js index f1d925f4405..5d678a1e375 100644 --- a/api/lib/domain/usecases/find-pending-certification-center-invitations.js +++ b/api/lib/domain/usecases/find-pending-certification-center-invitations.js @@ -1,6 +1,8 @@ -module.exports = async function findPendingCertificationCenterInvitations({ +const findPendingCertificationCenterInvitations = async function ({ certificationCenterId, certificationCenterInvitationRepository, }) { return await certificationCenterInvitationRepository.findPendingByCertificationCenterId({ certificationCenterId }); }; + +export { findPendingCertificationCenterInvitations }; diff --git a/api/lib/domain/usecases/find-pending-organization-invitations.js b/api/lib/domain/usecases/find-pending-organization-invitations.js index bf06aa395ce..330ce8654f1 100644 --- a/api/lib/domain/usecases/find-pending-organization-invitations.js +++ b/api/lib/domain/usecases/find-pending-organization-invitations.js @@ -1,3 +1,5 @@ -module.exports = function findPendingOrganizationInvitations({ organizationId, organizationInvitationRepository }) { +const findPendingOrganizationInvitations = function ({ organizationId, organizationInvitationRepository }) { return organizationInvitationRepository.findPendingByOrganizationId({ organizationId }); }; + +export { findPendingOrganizationInvitations }; diff --git a/api/lib/domain/usecases/find-students-for-enrolment.js b/api/lib/domain/usecases/find-students-for-enrolment.js index e39031f4b58..1bfdaf67ff2 100644 --- a/api/lib/domain/usecases/find-students-for-enrolment.js +++ b/api/lib/domain/usecases/find-students-for-enrolment.js @@ -1,7 +1,7 @@ -const { NotFoundError } = require('../errors.js'); -const StudentForEnrolment = require('../read-models/StudentForEnrolment.js'); +import { NotFoundError } from '../errors.js'; +import { StudentForEnrolment } from '../read-models/StudentForEnrolment.js'; -module.exports = async function findStudentsForEnrolment({ +const findStudentsForEnrolment = async function ({ certificationCenterId, sessionId, page, @@ -32,6 +32,8 @@ module.exports = async function findStudentsForEnrolment({ } }; +export { findStudentsForEnrolment }; + function _buildStudentsForEnrolment({ students, certificationCandidates }) { return students.map((student) => StudentForEnrolment.fromStudentsAndCertificationCandidates({ student, certificationCandidates }) diff --git a/api/lib/domain/usecases/find-target-profile-summaries-for-training.js b/api/lib/domain/usecases/find-target-profile-summaries-for-training.js index 064487d3e92..a6856684e22 100644 --- a/api/lib/domain/usecases/find-target-profile-summaries-for-training.js +++ b/api/lib/domain/usecases/find-target-profile-summaries-for-training.js @@ -1,6 +1,5 @@ -module.exports = function findTargetProfileSummariesForTraining({ - trainingId, - targetProfileSummaryForAdminRepository, -}) { +const findTargetProfileSummariesForTraining = function ({ trainingId, targetProfileSummaryForAdminRepository }) { return targetProfileSummaryForAdminRepository.findByTraining({ trainingId }); }; + +export { findTargetProfileSummariesForTraining }; diff --git a/api/lib/domain/usecases/find-tutorials.js b/api/lib/domain/usecases/find-tutorials.js index 2b0c9776c67..b172668fb39 100644 --- a/api/lib/domain/usecases/find-tutorials.js +++ b/api/lib/domain/usecases/find-tutorials.js @@ -1,9 +1,9 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); -const Scorecard = require('../models/Scorecard.js'); -const KnowledgeElement = require('../models/KnowledgeElement.js'); -const _ = require('lodash'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; +import { Scorecard } from '../models/Scorecard.js'; +import { KnowledgeElement } from '../models/KnowledgeElement.js'; +import _ from 'lodash'; -module.exports = async function findTutorials({ +const findTutorials = async function ({ authenticatedUserId, scorecardId, knowledgeElementRepository, @@ -43,6 +43,8 @@ module.exports = async function findTutorials({ return _.orderBy(_.flatten(tutorialsWithTubesList), 'tubeName'); }; +export { findTutorials }; + async function _getTutorialsWithTubesList(easiestSkills, tubes, tutorialRepository, userId, locale) { return await Promise.all( _.map(easiestSkills, async (skill) => { diff --git a/api/lib/domain/usecases/find-user-authentication-methods.js b/api/lib/domain/usecases/find-user-authentication-methods.js index 5acef5066e7..8b4c8e22007 100644 --- a/api/lib/domain/usecases/find-user-authentication-methods.js +++ b/api/lib/domain/usecases/find-user-authentication-methods.js @@ -1,3 +1,5 @@ -module.exports = function findUserAuthenticationMethods({ userId, authenticationMethodRepository }) { +const findUserAuthenticationMethods = function ({ userId, authenticationMethodRepository }) { return authenticationMethodRepository.findByUserId({ userId }); }; + +export { findUserAuthenticationMethods }; diff --git a/api/lib/domain/usecases/find-user-campaign-participation-overviews.js b/api/lib/domain/usecases/find-user-campaign-participation-overviews.js index 75cf8d921cf..3faf16e3f54 100644 --- a/api/lib/domain/usecases/find-user-campaign-participation-overviews.js +++ b/api/lib/domain/usecases/find-user-campaign-participation-overviews.js @@ -1,4 +1,4 @@ -module.exports = async function findUserCampaignParticipationOverviews({ +const findUserCampaignParticipationOverviews = async function ({ userId, states, page, @@ -14,3 +14,5 @@ module.exports = async function findUserCampaignParticipationOverviews({ return campaignParticipationOverviews; }; + +export { findUserCampaignParticipationOverviews }; diff --git a/api/lib/domain/usecases/find-user-for-oidc-reconciliation.js b/api/lib/domain/usecases/find-user-for-oidc-reconciliation.js index c50073ed9a6..993644c9cb6 100644 --- a/api/lib/domain/usecases/find-user-for-oidc-reconciliation.js +++ b/api/lib/domain/usecases/find-user-for-oidc-reconciliation.js @@ -1,6 +1,6 @@ -const { AuthenticationKeyExpired, DifferentExternalIdentifierError } = require('../errors.js'); +import { AuthenticationKeyExpired, DifferentExternalIdentifierError } from '../errors.js'; -module.exports = async function findUserForOidcReconciliation({ +const findUserForOidcReconciliation = async function ({ authenticationKey, email, password, @@ -46,3 +46,5 @@ module.exports = async function findUserForOidcReconciliation({ authenticationMethods, }; }; + +export { findUserForOidcReconciliation }; diff --git a/api/lib/domain/usecases/find-user-organizations-for-admin.js b/api/lib/domain/usecases/find-user-organizations-for-admin.js index 66244ac5658..17325319fb4 100644 --- a/api/lib/domain/usecases/find-user-organizations-for-admin.js +++ b/api/lib/domain/usecases/find-user-organizations-for-admin.js @@ -1,3 +1,5 @@ -module.exports = async function findUserOrganizationsForAdmin({ userId, userOrganizationsForAdminRepository }) { +const findUserOrganizationsForAdmin = async function ({ userId, userOrganizationsForAdminRepository }) { return userOrganizationsForAdminRepository.findByUserId(userId); }; + +export { findUserOrganizationsForAdmin }; diff --git a/api/lib/domain/usecases/find-user-private-certificates.js b/api/lib/domain/usecases/find-user-private-certificates.js index ade6582b603..4008ed480aa 100644 --- a/api/lib/domain/usecases/find-user-private-certificates.js +++ b/api/lib/domain/usecases/find-user-private-certificates.js @@ -1,3 +1,5 @@ -module.exports = async function findUserPrivateCertificates({ userId, certificateRepository }) { +const findUserPrivateCertificates = async function ({ userId, certificateRepository }) { return certificateRepository.findPrivateCertificatesByUserId({ userId }); }; + +export { findUserPrivateCertificates }; diff --git a/api/lib/domain/usecases/flag-session-results-as-sent-to-prescriber.js b/api/lib/domain/usecases/flag-session-results-as-sent-to-prescriber.js index a2a8bc34698..dc5098f7371 100644 --- a/api/lib/domain/usecases/flag-session-results-as-sent-to-prescriber.js +++ b/api/lib/domain/usecases/flag-session-results-as-sent-to-prescriber.js @@ -1,6 +1,6 @@ -const { NotFoundError } = require('../../domain/errors.js'); +import { NotFoundError } from '../../domain/errors.js'; -module.exports = async function flagSessionResultsAsSentToPrescriber({ sessionId, sessionRepository }) { +const flagSessionResultsAsSentToPrescriber = async function ({ sessionId, sessionRepository }) { const integerSessionId = parseInt(sessionId); const NOT_FOUND_SESSION = `La session ${sessionId} n'existe pas ou son accès est restreint lors du marquage d'envoi des résultats au prescripteur`; @@ -20,3 +20,5 @@ module.exports = async function flagSessionResultsAsSentToPrescriber({ sessionId return { resultsFlaggedAsSent: false, session }; }; + +export { flagSessionResultsAsSentToPrescriber }; diff --git a/api/lib/domain/usecases/generate-username-with-temporary-password.js b/api/lib/domain/usecases/generate-username-with-temporary-password.js index 2199977a34c..f298b15196c 100644 --- a/api/lib/domain/usecases/generate-username-with-temporary-password.js +++ b/api/lib/domain/usecases/generate-username-with-temporary-password.js @@ -1,7 +1,10 @@ -const isEmpty = require('lodash/isEmpty'); -const { UserNotAuthorizedToGenerateUsernamePasswordError } = require('../errors.js'); +import lodash from 'lodash'; -module.exports = async function generateUsernameWithTemporaryPassword({ +const { isEmpty } = lodash; + +import { UserNotAuthorizedToGenerateUsernamePasswordError } from '../errors.js'; + +const generateUsernameWithTemporaryPassword = async function ({ organizationLearnerId, organizationId, passwordGenerator, @@ -47,6 +50,8 @@ module.exports = async function generateUsernameWithTemporaryPassword({ } }; +export { generateUsernameWithTemporaryPassword }; + function _checkIfStudentHasAccessToOrganization(organizationLearner, organizationId) { if (organizationLearner.organizationId !== organizationId) { throw new UserNotAuthorizedToGenerateUsernamePasswordError( diff --git a/api/lib/domain/usecases/generate-username.js b/api/lib/domain/usecases/generate-username.js index 7ef593132d9..232598959a3 100644 --- a/api/lib/domain/usecases/generate-username.js +++ b/api/lib/domain/usecases/generate-username.js @@ -1,12 +1,15 @@ -const { +import { CampaignCodeError, OrganizationLearnerNotFound, OrganizationLearnerAlreadyLinkedToUserError, -} = require('../errors.js'); -const { STUDENT_RECONCILIATION_ERRORS } = require('../constants.js'); -const { find, get } = require('lodash'); +} from '../errors.js'; -module.exports = async function generateUsername({ +import { STUDENT_RECONCILIATION_ERRORS } from '../constants.js'; +import lodash from 'lodash'; + +const { find, get } = lodash; + +const generateUsername = async function ({ studentInformation, campaignCode, campaignRepository, @@ -48,6 +51,8 @@ module.exports = async function generateUsername({ return userReconciliationService.createUsernameByUser({ user: studentInformation, userRepository }); }; +export { generateUsername }; + async function findMatchedOrganizationLearnerForGivenOrganizationIdAndStudentInfo({ organizationId, studentInformation: { firstName, lastName, birthdate }, diff --git a/api/lib/domain/usecases/get-admin-member-details.js b/api/lib/domain/usecases/get-admin-member-details.js index 68efc3eb651..3c176daf677 100644 --- a/api/lib/domain/usecases/get-admin-member-details.js +++ b/api/lib/domain/usecases/get-admin-member-details.js @@ -1,6 +1,6 @@ -const { NotFoundError } = require('../errors.js'); +import { NotFoundError } from '../errors.js'; -module.exports = async function getAdminMemberDetails({ adminMemberRepository, userId }) { +const getAdminMemberDetails = async function ({ adminMemberRepository, userId }) { const adminMemberDetail = await adminMemberRepository.get({ userId }); if (!adminMemberDetail) { @@ -9,3 +9,5 @@ module.exports = async function getAdminMemberDetails({ adminMemberRepository, u return adminMemberDetail; }; + +export { getAdminMemberDetails }; diff --git a/api/lib/domain/usecases/get-admin-members.js b/api/lib/domain/usecases/get-admin-members.js index f5c07fc5c33..4f22f507e80 100644 --- a/api/lib/domain/usecases/get-admin-members.js +++ b/api/lib/domain/usecases/get-admin-members.js @@ -1,3 +1,5 @@ -module.exports = async function getAdminMembers({ adminMemberRepository }) { +const getAdminMembers = async function ({ adminMemberRepository }) { return adminMemberRepository.findAll(); }; + +export { getAdminMembers }; diff --git a/api/lib/domain/usecases/get-answer.js b/api/lib/domain/usecases/get-answer.js index e63ae1d0d10..f54b571591f 100644 --- a/api/lib/domain/usecases/get-answer.js +++ b/api/lib/domain/usecases/get-answer.js @@ -1,6 +1,6 @@ -const { NotFoundError } = require('../errors.js'); +import { NotFoundError } from '../errors.js'; -module.exports = async function getAnswer({ answerId, userId, answerRepository, assessmentRepository } = {}) { +const getAnswer = async function ({ answerId, userId, answerRepository, assessmentRepository } = {}) { const integerAnswerId = parseInt(answerId); if (!Number.isFinite(integerAnswerId)) { throw new NotFoundError(`Not found answer for ID ${answerId}`); @@ -12,3 +12,5 @@ module.exports = async function getAnswer({ answerId, userId, answerRepository, } return answer; }; + +export { getAnswer }; diff --git a/api/lib/domain/usecases/get-assessment.js b/api/lib/domain/usecases/get-assessment.js index 7c668f8d98b..74a3c8ca6c2 100644 --- a/api/lib/domain/usecases/get-assessment.js +++ b/api/lib/domain/usecases/get-assessment.js @@ -1,6 +1,6 @@ -const Assessment = require('../models/Assessment.js'); +import { Assessment } from '../models/Assessment.js'; -module.exports = async function getAssessment({ +const getAssessment = async function ({ assessmentId, locale, assessmentRepository, @@ -26,6 +26,8 @@ module.exports = async function getAssessment({ return assessment; }; +export { getAssessment }; + function _fetchAssessmentTitle({ assessment, locale, competenceRepository, courseRepository, campaignRepository }) { switch (assessment.type) { case Assessment.types.CERTIFICATION: { diff --git a/api/lib/domain/usecases/get-attendance-sheet.js b/api/lib/domain/usecases/get-attendance-sheet.js index 72ed562568c..32c31a83cf1 100644 --- a/api/lib/domain/usecases/get-attendance-sheet.js +++ b/api/lib/domain/usecases/get-attendance-sheet.js @@ -1,14 +1,18 @@ -const _ = require('lodash'); -const moment = require('moment'); -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); -const { +import _ from 'lodash'; +import moment from 'moment'; +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; + +import { EXTRA_EMPTY_CANDIDATE_ROWS, NON_SCO_ATTENDANCE_SHEET_CANDIDATE_TEMPLATE_VALUES, SCO_ATTENDANCE_SHEET_CANDIDATE_TEMPLATE_VALUES, ATTENDANCE_SHEET_SESSION_TEMPLATE_VALUES, -} = require('./../../infrastructure/files/attendance-sheet/attendance-sheet-placeholders.js'); +} from './../../infrastructure/files/attendance-sheet/attendance-sheet-placeholders.js'; + +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); -module.exports = async function getAttendanceSheet({ +const getAttendanceSheet = async function ({ userId, sessionId, sessionRepository, @@ -40,6 +44,8 @@ module.exports = async function getAttendanceSheet({ }); }; +export { getAttendanceSheet }; + function _updateXmlWithSession(stringifiedXml, session, sessionXmlService) { const sessionData = _.transform(session, _transformSessionIntoAttendanceSheetSessionData); const updatedStringifiedXml = sessionXmlService.getUpdatedXmlWithSessionData({ diff --git a/api/lib/domain/usecases/get-available-target-profiles-for-organization.js b/api/lib/domain/usecases/get-available-target-profiles-for-organization.js index 1f84f8a7112..e311de2e76e 100644 --- a/api/lib/domain/usecases/get-available-target-profiles-for-organization.js +++ b/api/lib/domain/usecases/get-available-target-profiles-for-organization.js @@ -1,6 +1,5 @@ -module.exports = function getAvailableTargetProfilesForOrganization({ - organizationId, - TargetProfileForSpecifierRepository, -}) { +const getAvailableTargetProfilesForOrganization = function ({ organizationId, TargetProfileForSpecifierRepository }) { return TargetProfileForSpecifierRepository.availableForOrganization(organizationId); }; + +export { getAvailableTargetProfilesForOrganization }; diff --git a/api/lib/domain/usecases/get-campaign-assessment-participation-result.js b/api/lib/domain/usecases/get-campaign-assessment-participation-result.js index 1aaaf23807f..38ef7eadf83 100644 --- a/api/lib/domain/usecases/get-campaign-assessment-participation-result.js +++ b/api/lib/domain/usecases/get-campaign-assessment-participation-result.js @@ -1,6 +1,6 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; -module.exports = async function getCampaignAssessmentParticipationResult({ +const getCampaignAssessmentParticipationResult = async function ({ userId, campaignId, campaignParticipationId, @@ -18,3 +18,5 @@ module.exports = async function getCampaignAssessmentParticipationResult({ locale, }); }; + +export { getCampaignAssessmentParticipationResult }; diff --git a/api/lib/domain/usecases/get-campaign-assessment-participation.js b/api/lib/domain/usecases/get-campaign-assessment-participation.js index 09941bdb317..9893aebe783 100644 --- a/api/lib/domain/usecases/get-campaign-assessment-participation.js +++ b/api/lib/domain/usecases/get-campaign-assessment-participation.js @@ -1,6 +1,6 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; -module.exports = async function getCampaignAssessmentParticipation({ +const getCampaignAssessmentParticipation = async function ({ userId, campaignId, campaignParticipationId, @@ -35,3 +35,5 @@ module.exports = async function getCampaignAssessmentParticipation({ return campaignAssessmentParticipation; }; + +export { getCampaignAssessmentParticipation }; diff --git a/api/lib/domain/usecases/get-campaign-by-code.js b/api/lib/domain/usecases/get-campaign-by-code.js index a8488a654ef..d3edb5e2a87 100644 --- a/api/lib/domain/usecases/get-campaign-by-code.js +++ b/api/lib/domain/usecases/get-campaign-by-code.js @@ -1,3 +1,5 @@ -module.exports = function getCampaignByCode({ code, campaignToJoinRepository }) { +const getCampaignByCode = function ({ code, campaignToJoinRepository }) { return campaignToJoinRepository.getByCode(code); }; + +export { getCampaignByCode }; diff --git a/api/lib/domain/usecases/get-campaign-details-management.js b/api/lib/domain/usecases/get-campaign-details-management.js index 3c577be000d..bfe6e24f199 100644 --- a/api/lib/domain/usecases/get-campaign-details-management.js +++ b/api/lib/domain/usecases/get-campaign-details-management.js @@ -1,3 +1,5 @@ -module.exports = async function getCampaignManagement({ campaignId, campaignManagementRepository }) { +const getCampaignManagement = async function ({ campaignId, campaignManagementRepository }) { return campaignManagementRepository.get(campaignId); }; + +export { getCampaignManagement }; diff --git a/api/lib/domain/usecases/get-campaign-participations-activity-by-day.js b/api/lib/domain/usecases/get-campaign-participations-activity-by-day.js index 75848cbc6da..6e26c963b13 100644 --- a/api/lib/domain/usecases/get-campaign-participations-activity-by-day.js +++ b/api/lib/domain/usecases/get-campaign-participations-activity-by-day.js @@ -1,6 +1,6 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; -module.exports = async function getCampaignParticipationsActivityByDay({ +const getCampaignParticipationsActivityByDay = async function ({ userId, campaignId, campaignRepository, @@ -12,3 +12,5 @@ module.exports = async function getCampaignParticipationsActivityByDay({ return campaignParticipationsStatsRepository.getParticipationsActivityByDate(campaignId); }; + +export { getCampaignParticipationsActivityByDay }; diff --git a/api/lib/domain/usecases/get-campaign-participations-counts-by-stage.js b/api/lib/domain/usecases/get-campaign-participations-counts-by-stage.js index 8111c4602bf..4e4d461234d 100644 --- a/api/lib/domain/usecases/get-campaign-participations-counts-by-stage.js +++ b/api/lib/domain/usecases/get-campaign-participations-counts-by-stage.js @@ -1,7 +1,7 @@ -const stageCollectionRepository = require('../../infrastructure/repositories/user-campaign-results/stage-collection-repository.js'); -const { UserNotAuthorizedToAccessEntityError, NoStagesForCampaign } = require('../errors.js'); +import * as stageCollectionRepository from '../../infrastructure/repositories/user-campaign-results/stage-collection-repository.js'; +import { UserNotAuthorizedToAccessEntityError, NoStagesForCampaign } from '../errors.js'; -module.exports = async function getCampaignParticipationsCountByStage({ +const getCampaignParticipationsCountByStage = async function ({ userId, campaignId, campaignRepository, @@ -40,3 +40,5 @@ module.exports = async function getCampaignParticipationsCountByStage({ return participantsByStage; }; + +export { getCampaignParticipationsCountByStage }; diff --git a/api/lib/domain/usecases/get-campaign-participations-counts-by-status.js b/api/lib/domain/usecases/get-campaign-participations-counts-by-status.js index f77c6ed3b6e..008464661bb 100644 --- a/api/lib/domain/usecases/get-campaign-participations-counts-by-status.js +++ b/api/lib/domain/usecases/get-campaign-participations-counts-by-status.js @@ -1,6 +1,6 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; -module.exports = async function getCampaignParticipationsCountsByStatus({ +const getCampaignParticipationsCountsByStatus = async function ({ userId, campaignId, campaignRepository, @@ -14,3 +14,5 @@ module.exports = async function getCampaignParticipationsCountsByStatus({ return campaignParticipationRepository.countParticipationsByStatus(campaignId, campaign.type); }; + +export { getCampaignParticipationsCountsByStatus }; diff --git a/api/lib/domain/usecases/get-campaign-profile.js b/api/lib/domain/usecases/get-campaign-profile.js index a71b58fccd8..fa61855a2d2 100644 --- a/api/lib/domain/usecases/get-campaign-profile.js +++ b/api/lib/domain/usecases/get-campaign-profile.js @@ -1,6 +1,6 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; -module.exports = async function getCampaignProfile({ +const getCampaignProfile = async function ({ userId, campaignId, campaignParticipationId, @@ -14,3 +14,5 @@ module.exports = async function getCampaignProfile({ return campaignProfileRepository.findProfile({ campaignId, campaignParticipationId, locale }); }; + +export { getCampaignProfile }; diff --git a/api/lib/domain/usecases/get-campaign.js b/api/lib/domain/usecases/get-campaign.js index 86939c5e309..9f9e2bd4190 100644 --- a/api/lib/domain/usecases/get-campaign.js +++ b/api/lib/domain/usecases/get-campaign.js @@ -1,7 +1,7 @@ -const { NotFoundError, UserNotAuthorizedToAccessEntityError } = require('../../domain/errors.js'); -const stageCollectionRepository = require('../../infrastructure/repositories/user-campaign-results/stage-collection-repository.js'); +import { NotFoundError, UserNotAuthorizedToAccessEntityError } from '../../domain/errors.js'; +import * as stageCollectionRepository from '../../infrastructure/repositories/user-campaign-results/stage-collection-repository.js'; -module.exports = async function getCampaign({ +const getCampaign = async function ({ campaignId, userId, badgeRepository, @@ -38,3 +38,5 @@ module.exports = async function getCampaign({ } return campaignReport; }; + +export { getCampaign }; diff --git a/api/lib/domain/usecases/get-candidate-import-sheet-data.js b/api/lib/domain/usecases/get-candidate-import-sheet-data.js index b6337e5da61..31b426cd053 100644 --- a/api/lib/domain/usecases/get-candidate-import-sheet-data.js +++ b/api/lib/domain/usecases/get-candidate-import-sheet-data.js @@ -1,6 +1,6 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; -module.exports = async function getCandidateImportSheetData({ +const getCandidateImportSheetData = async function ({ userId, sessionId, sessionRepository, @@ -20,3 +20,5 @@ module.exports = async function getCandidateImportSheetData({ isScoCertificationCenter: certificationCenter.isSco, }; }; + +export { getCandidateImportSheetData }; diff --git a/api/lib/domain/usecases/get-certification-candidate-subscription.js b/api/lib/domain/usecases/get-certification-candidate-subscription.js index 7b03ac00af5..908f177a9eb 100644 --- a/api/lib/domain/usecases/get-certification-candidate-subscription.js +++ b/api/lib/domain/usecases/get-certification-candidate-subscription.js @@ -1,7 +1,7 @@ -const CertificationCandidateSubscription = require('../read-models/CertificationCandidateSubscription.js'); -const _ = require('lodash'); +import { CertificationCandidateSubscription } from '../read-models/CertificationCandidateSubscription.js'; +import _ from 'lodash'; -module.exports = async function getCertificationCandidateSubscription({ +const getCertificationCandidateSubscription = async function ({ certificationCandidateId, certificationBadgesService, certificationCandidateRepository, @@ -50,3 +50,5 @@ module.exports = async function getCertificationCandidateSubscription({ nonEligibleSubscriptions, }); }; + +export { getCertificationCandidateSubscription }; diff --git a/api/lib/domain/usecases/get-certification-candidate.js b/api/lib/domain/usecases/get-certification-candidate.js index 953214d74d1..da3cf7f1524 100644 --- a/api/lib/domain/usecases/get-certification-candidate.js +++ b/api/lib/domain/usecases/get-certification-candidate.js @@ -2,4 +2,4 @@ async function getCertificationCandidate({ userId, sessionId, certificationCandi return certificationCandidateRepository.getBySessionIdAndUserId({ userId, sessionId }); } -module.exports = getCertificationCandidate; +export { getCertificationCandidate }; diff --git a/api/lib/domain/usecases/get-certification-center-for-admin.js b/api/lib/domain/usecases/get-certification-center-for-admin.js index d37cfa25a34..55f152413c4 100644 --- a/api/lib/domain/usecases/get-certification-center-for-admin.js +++ b/api/lib/domain/usecases/get-certification-center-for-admin.js @@ -1,3 +1,5 @@ -module.exports = function getCertificationCenterForAdmin({ id, certificationCenterForAdminRepository }) { +const getCertificationCenterForAdmin = function ({ id, certificationCenterForAdminRepository }) { return certificationCenterForAdminRepository.get(id); }; + +export { getCertificationCenterForAdmin }; diff --git a/api/lib/domain/usecases/get-certification-center-invitation.js b/api/lib/domain/usecases/get-certification-center-invitation.js index 066965eb1b8..7431118e0d2 100644 --- a/api/lib/domain/usecases/get-certification-center-invitation.js +++ b/api/lib/domain/usecases/get-certification-center-invitation.js @@ -1,6 +1,6 @@ -const { CancelledInvitationError, AlreadyExistingInvitationError } = require('../errors.js'); +import { CancelledInvitationError, AlreadyExistingInvitationError } from '../errors.js'; -module.exports = async function getCertificationCenterInvitation({ +const getCertificationCenterInvitation = async function ({ certificationCenterInvitationId, certificationCenterInvitationCode, certificationCenterInvitationRepository, @@ -22,3 +22,5 @@ module.exports = async function getCertificationCenterInvitation({ return foundCertificationCenterInvitation; }; + +export { getCertificationCenterInvitation }; diff --git a/api/lib/domain/usecases/get-certification-center.js b/api/lib/domain/usecases/get-certification-center.js index d285ab8cc59..e8b7219d574 100644 --- a/api/lib/domain/usecases/get-certification-center.js +++ b/api/lib/domain/usecases/get-certification-center.js @@ -1,3 +1,5 @@ -module.exports = function getCertificationCenter({ id, certificationCenterRepository }) { +const getCertificationCenter = function ({ id, certificationCenterRepository }) { return certificationCenterRepository.get(id); }; + +export { getCertificationCenter }; diff --git a/api/lib/domain/usecases/get-certification-course.js b/api/lib/domain/usecases/get-certification-course.js index 1f7cee82a74..a721935eee4 100644 --- a/api/lib/domain/usecases/get-certification-course.js +++ b/api/lib/domain/usecases/get-certification-course.js @@ -1,3 +1,5 @@ -module.exports = async function getCertificationCourse({ certificationCourseId, certificationCourseRepository }) { +const getCertificationCourse = async function ({ certificationCourseId, certificationCourseRepository }) { return certificationCourseRepository.get(certificationCourseId); }; + +export { getCertificationCourse }; diff --git a/api/lib/domain/usecases/get-certification-details.js b/api/lib/domain/usecases/get-certification-details.js index 09af425b003..19c7fcf11f9 100644 --- a/api/lib/domain/usecases/get-certification-details.js +++ b/api/lib/domain/usecases/get-certification-details.js @@ -1,6 +1,6 @@ -const CertificationDetails = require('../read-models/CertificationDetails.js'); +import { CertificationDetails } from '../read-models/CertificationDetails.js'; -module.exports = async function getCertificationDetails({ +const getCertificationDetails = async function ({ certificationCourseId, competenceMarkRepository, certificationAssessmentRepository, @@ -24,6 +24,8 @@ module.exports = async function getCertificationDetails({ } }; +export { getCertificationDetails }; + async function _computeCertificationDetailsOnTheFly( certificationAssessment, placementProfileService, diff --git a/api/lib/domain/usecases/get-certification-point-of-contact.js b/api/lib/domain/usecases/get-certification-point-of-contact.js index e252eadd760..dbe8cce7f0d 100644 --- a/api/lib/domain/usecases/get-certification-point-of-contact.js +++ b/api/lib/domain/usecases/get-certification-point-of-contact.js @@ -1,3 +1,5 @@ -module.exports = async function getCertificationPointOfContact({ userId, certificationPointOfContactRepository }) { +const getCertificationPointOfContact = async function ({ userId, certificationPointOfContactRepository }) { return certificationPointOfContactRepository.get(userId); }; + +export { getCertificationPointOfContact }; diff --git a/api/lib/domain/usecases/get-challenge-for-pix-auto-answer.js b/api/lib/domain/usecases/get-challenge-for-pix-auto-answer.js index a732dc6679d..c77181dd9a9 100644 --- a/api/lib/domain/usecases/get-challenge-for-pix-auto-answer.js +++ b/api/lib/domain/usecases/get-challenge-for-pix-auto-answer.js @@ -1,6 +1,6 @@ -const { NotFoundError } = require('../errors.js'); +import { NotFoundError } from '../errors.js'; -module.exports = async function getChallengeForPixAutoAnswer({ +const getChallengeForPixAutoAnswer = async function ({ assessmentId, assessmentRepository, challengeForPixAutoAnswerRepository, @@ -13,3 +13,5 @@ module.exports = async function getChallengeForPixAutoAnswer({ const lastChallengeId = assessment.lastChallengeId; return challengeForPixAutoAnswerRepository.get(lastChallengeId); }; + +export { getChallengeForPixAutoAnswer }; diff --git a/api/lib/domain/usecases/get-clea-certified-candidate-by-session.js b/api/lib/domain/usecases/get-clea-certified-candidate-by-session.js index 772bfd8fedd..d1487d52e31 100644 --- a/api/lib/domain/usecases/get-clea-certified-candidate-by-session.js +++ b/api/lib/domain/usecases/get-clea-certified-candidate-by-session.js @@ -1,4 +1,4 @@ -module.exports = async function getCleaCertifiedCandidateBySession({ +const getCleaCertifiedCandidateBySession = async function ({ sessionId, cleaCertifiedCandidateRepository, sessionRepository, @@ -8,3 +8,5 @@ module.exports = async function getCleaCertifiedCandidateBySession({ return { session, cleaCertifiedCandidateData }; }; + +export { getCleaCertifiedCandidateBySession }; diff --git a/api/lib/domain/usecases/get-correction-for-answer.js b/api/lib/domain/usecases/get-correction-for-answer.js index 2012b8aae61..5cf04c3b7af 100644 --- a/api/lib/domain/usecases/get-correction-for-answer.js +++ b/api/lib/domain/usecases/get-correction-for-answer.js @@ -1,6 +1,6 @@ -const { AssessmentNotCompletedError, NotFoundError } = require('../errors.js'); +import { AssessmentNotCompletedError, NotFoundError } from '../errors.js'; -module.exports = async function getCorrectionForAnswer({ +const getCorrectionForAnswer = async function ({ assessmentRepository, answerRepository, correctionRepository, @@ -22,6 +22,8 @@ module.exports = async function getCorrectionForAnswer({ return correctionRepository.getByChallengeId({ challengeId: answer.challengeId, userId, locale }); }; +export { getCorrectionForAnswer }; + function _validateCorrectionIsAccessible(assessment) { if (assessment.isForCampaign() || assessment.isCompetenceEvaluation()) { return; diff --git a/api/lib/domain/usecases/get-current-user.js b/api/lib/domain/usecases/get-current-user.js index 47ceab28d06..4a9b84ff538 100644 --- a/api/lib/domain/usecases/get-current-user.js +++ b/api/lib/domain/usecases/get-current-user.js @@ -1,6 +1,6 @@ -const UserWithActivity = require('../read-models/UserWithActivity.js'); +import { UserWithActivity } from '../read-models/UserWithActivity.js'; -module.exports = async function getCurrentUser({ +const getCurrentUser = async function ({ authenticatedUserId, userRepository, campaignParticipationRepository, @@ -21,3 +21,5 @@ module.exports = async function getCurrentUser({ shouldSeeDataProtectionPolicyInformationBanner, }); }; + +export { getCurrentUser }; diff --git a/api/lib/domain/usecases/get-external-authentication-redirection-url.js b/api/lib/domain/usecases/get-external-authentication-redirection-url.js index b24d0cdd9dc..f2063d2696c 100644 --- a/api/lib/domain/usecases/get-external-authentication-redirection-url.js +++ b/api/lib/domain/usecases/get-external-authentication-redirection-url.js @@ -1,13 +1,13 @@ -const AuthenticationMethod = require('../models/AuthenticationMethod.js'); +import { AuthenticationMethod } from '../models/AuthenticationMethod.js'; -module.exports = async function getExternalAuthenticationRedirectionUrl({ +const getExternalAuthenticationRedirectionUrl = async function ({ userAttributes, userRepository, authenticationMethodRepository, tokenService, - settings, + config, }) { - const { attributeMapping } = settings.saml; + const { attributeMapping } = config.saml; const externalUser = { firstName: userAttributes[attributeMapping.firstName], lastName: userAttributes[attributeMapping.lastName], @@ -29,6 +29,8 @@ module.exports = async function getExternalAuthenticationRedirectionUrl({ return _getUrlForReconciliationPage({ tokenService, externalUser }); }; +export { getExternalAuthenticationRedirectionUrl }; + async function _getUrlWithAccessToken({ user, externalUser, diff --git a/api/lib/domain/usecases/get-framework-areas.js b/api/lib/domain/usecases/get-framework-areas.js index fd94269d857..36561295f2a 100644 --- a/api/lib/domain/usecases/get-framework-areas.js +++ b/api/lib/domain/usecases/get-framework-areas.js @@ -1,4 +1,4 @@ -module.exports = async function getFrameworkAreas({ +const getFrameworkAreas = async function ({ frameworkId, frameworkName, locale, @@ -24,3 +24,5 @@ module.exports = async function getFrameworkAreas({ return { areas: areasWithCompetences, thematics, tubes }; }; + +export { getFrameworkAreas }; diff --git a/api/lib/domain/usecases/get-frameworks.js b/api/lib/domain/usecases/get-frameworks.js index 33ee7bb7728..ec54816cf17 100644 --- a/api/lib/domain/usecases/get-frameworks.js +++ b/api/lib/domain/usecases/get-frameworks.js @@ -1,3 +1,5 @@ -module.exports = async function getFrameworks({ frameworkRepository }) { +const getFrameworks = async function ({ frameworkRepository }) { return frameworkRepository.list(); }; + +export { getFrameworks }; diff --git a/api/lib/domain/usecases/get-identity-providers.js b/api/lib/domain/usecases/get-identity-providers.js index bd25d8755a0..af39484cc0e 100644 --- a/api/lib/domain/usecases/get-identity-providers.js +++ b/api/lib/domain/usecases/get-identity-providers.js @@ -1,10 +1,14 @@ -const { isEmpty, isNil, pick } = require('lodash'); -const OidcIdentityProviders = require('../constants/oidc-identity-providers.js'); -const config = require('../../config.js'); +import lodash from 'lodash'; -module.exports = function getIdentityProviders() { +const { isEmpty, isNil, pick } = lodash; + +import * as OidcIdentityProviders from '../constants/oidc-identity-providers.js'; +import { config } from '../../config.js'; + +const getIdentityProviders = function () { return Object.keys(OidcIdentityProviders) .map((oidcIdentityProviderKey) => { + // eslint-disable-next-line import/namespace const { configKey, propertyPathsToPick, service } = OidcIdentityProviders[oidcIdentityProviderKey]; const providerConfig = pick(config[configKey], propertyPathsToPick); @@ -24,3 +28,5 @@ module.exports = function getIdentityProviders() { }) .filter((identityProvider) => !isEmpty(identityProvider)); }; + +export { getIdentityProviders }; diff --git a/api/lib/domain/usecases/get-import-session-complementary-certification-habilitations-labels.js b/api/lib/domain/usecases/get-import-session-complementary-certification-habilitations-labels.js index 034ea98d309..ec1f817d4ef 100644 --- a/api/lib/domain/usecases/get-import-session-complementary-certification-habilitations-labels.js +++ b/api/lib/domain/usecases/get-import-session-complementary-certification-habilitations-labels.js @@ -1,4 +1,4 @@ -module.exports = async function getImportSessionComplementaryCertificationHabilitationsLabels({ +const getImportSessionComplementaryCertificationHabilitationsLabels = async function ({ certificationCenterId, complementaryCertificationHabilitationRepository, }) { @@ -10,3 +10,5 @@ module.exports = async function getImportSessionComplementaryCertificationHabili return habilitationsLabels; }; + +export { getImportSessionComplementaryCertificationHabilitationsLabels }; diff --git a/api/lib/domain/usecases/get-jury-certification.js b/api/lib/domain/usecases/get-jury-certification.js index 1d5bcf5bbdb..21deeefdceb 100644 --- a/api/lib/domain/usecases/get-jury-certification.js +++ b/api/lib/domain/usecases/get-jury-certification.js @@ -1,3 +1,5 @@ -module.exports = async function getJuryCertification({ certificationCourseId, juryCertificationRepository }) { +const getJuryCertification = async function ({ certificationCourseId, juryCertificationRepository }) { return juryCertificationRepository.get(certificationCourseId); }; + +export { getJuryCertification }; diff --git a/api/lib/domain/usecases/get-jury-session.js b/api/lib/domain/usecases/get-jury-session.js index 5d11bddb388..b526ddf812a 100644 --- a/api/lib/domain/usecases/get-jury-session.js +++ b/api/lib/domain/usecases/get-jury-session.js @@ -1,4 +1,4 @@ -module.exports = async function getJurySession({ sessionId, jurySessionRepository, supervisorAccessRepository }) { +const getJurySession = async function ({ sessionId, jurySessionRepository, supervisorAccessRepository }) { const jurySession = await jurySessionRepository.get(sessionId); const hasSupervisorAccess = await supervisorAccessRepository.sessionHasSupervisorAccess({ sessionId }); return { @@ -6,3 +6,5 @@ module.exports = async function getJurySession({ sessionId, jurySessionRepositor hasSupervisorAccess, }; }; + +export { getJurySession }; diff --git a/api/lib/domain/usecases/get-last-challenge-id-from-assessment-id.js b/api/lib/domain/usecases/get-last-challenge-id-from-assessment-id.js index 9b4966c571b..d84f444977f 100644 --- a/api/lib/domain/usecases/get-last-challenge-id-from-assessment-id.js +++ b/api/lib/domain/usecases/get-last-challenge-id-from-assessment-id.js @@ -1,6 +1,6 @@ -const { NotFoundError } = require('../errors.js'); +import { NotFoundError } from '../errors.js'; -module.exports = async function getLastChallengeIdFromAssessmentId({ assessmentId, assessmentRepository }) { +const getLastChallengeIdFromAssessmentId = async function ({ assessmentId, assessmentRepository }) { const assessment = await assessmentRepository.get(assessmentId); if (!assessment) { throw new NotFoundError(`Assessment not found for ID ${assessmentId}`); @@ -8,3 +8,5 @@ module.exports = async function getLastChallengeIdFromAssessmentId({ assessmentI return assessment.lastChallengeId; }; + +export { getLastChallengeIdFromAssessmentId }; diff --git a/api/lib/domain/usecases/get-learning-content-by-target-profile.js b/api/lib/domain/usecases/get-learning-content-by-target-profile.js index 65882ac7868..217e80b7552 100644 --- a/api/lib/domain/usecases/get-learning-content-by-target-profile.js +++ b/api/lib/domain/usecases/get-learning-content-by-target-profile.js @@ -1,7 +1,5 @@ -module.exports = async function getLearningContentByTargetProfile({ - targetProfileId, - language, - learningContentRepository, -}) { +const getLearningContentByTargetProfile = async function ({ targetProfileId, language, learningContentRepository }) { return learningContentRepository.findByTargetProfileId(targetProfileId, language); }; + +export { getLearningContentByTargetProfile }; diff --git a/api/lib/domain/usecases/get-learning-content-for-target-profile-submission.js b/api/lib/domain/usecases/get-learning-content-for-target-profile-submission.js index f0561ca8ec3..92175ede66f 100644 --- a/api/lib/domain/usecases/get-learning-content-for-target-profile-submission.js +++ b/api/lib/domain/usecases/get-learning-content-for-target-profile-submission.js @@ -1,8 +1,10 @@ const AUTHORIZED_FRAMEWORKS = ['Pix']; -module.exports = async function getLearningContentForTargetProfileSubmission({ learningContentRepository, locale }) { +const getLearningContentForTargetProfileSubmission = async function ({ learningContentRepository, locale }) { return learningContentRepository.findByFrameworkNames({ frameworkNames: AUTHORIZED_FRAMEWORKS, locale, }); }; + +export { getLearningContentForTargetProfileSubmission }; diff --git a/api/lib/domain/usecases/get-next-challenge-for-campaign-assessment.js b/api/lib/domain/usecases/get-next-challenge-for-campaign-assessment.js index d45ce814d4f..de5d06b426b 100644 --- a/api/lib/domain/usecases/get-next-challenge-for-campaign-assessment.js +++ b/api/lib/domain/usecases/get-next-challenge-for-campaign-assessment.js @@ -1,7 +1,7 @@ -const { AssessmentEndedError } = require('../errors.js'); -const FlashAssessmentAlgorithm = require('../models/FlashAssessmentAlgorithm'); +import { AssessmentEndedError } from '../errors.js'; +import { FlashAssessmentAlgorithm } from '../models/FlashAssessmentAlgorithm.js'; -module.exports = async function getNextChallengeForCampaignAssessment({ +const getNextChallengeForCampaignAssessment = async function ({ challengeRepository, answerRepository, flashAssessmentResultRepository, @@ -46,3 +46,5 @@ module.exports = async function getNextChallengeForCampaignAssessment({ }); } }; + +export { getNextChallengeForCampaignAssessment }; diff --git a/api/lib/domain/usecases/get-next-challenge-for-certification.js b/api/lib/domain/usecases/get-next-challenge-for-certification.js index 97b3e20b81c..f2eeffc19dc 100644 --- a/api/lib/domain/usecases/get-next-challenge-for-certification.js +++ b/api/lib/domain/usecases/get-next-challenge-for-certification.js @@ -1,4 +1,4 @@ -module.exports = function getNextChallengeForCertification({ +const getNextChallengeForCertification = function ({ certificationChallengeRepository, challengeRepository, assessment, @@ -9,3 +9,5 @@ module.exports = function getNextChallengeForCertification({ return challengeRepository.get(certificationChallenge.challengeId); }); }; + +export { getNextChallengeForCertification }; diff --git a/api/lib/domain/usecases/get-next-challenge-for-competence-evaluation.js b/api/lib/domain/usecases/get-next-challenge-for-competence-evaluation.js index 7454e2fd43a..98e419452cf 100644 --- a/api/lib/domain/usecases/get-next-challenge-for-competence-evaluation.js +++ b/api/lib/domain/usecases/get-next-challenge-for-competence-evaluation.js @@ -1,8 +1,7 @@ -const { AssessmentEndedError, UserNotAuthorizedToAccessEntityError } = require('../errors.js'); +import { AssessmentEndedError, UserNotAuthorizedToAccessEntityError } from '../errors.js'; +import * as dataFetcher from '../services/algorithm-methods/data-fetcher.js'; -const dataFetcher = require('../services/algorithm-methods/data-fetcher.js'); - -module.exports = async function getNextChallengeForCompetenceEvaluation({ +const getNextChallengeForCompetenceEvaluation = async function ({ pickChallengeService, assessment, userId, @@ -28,6 +27,8 @@ module.exports = async function getNextChallengeForCompetenceEvaluation({ }); }; +export { getNextChallengeForCompetenceEvaluation }; + function _checkIfAssessmentBelongsToUser(assessment, userId) { if (assessment.userId !== userId) { throw new UserNotAuthorizedToAccessEntityError(); diff --git a/api/lib/domain/usecases/get-next-challenge-for-demo.js b/api/lib/domain/usecases/get-next-challenge-for-demo.js index 1841b8554b9..5f7d7d31955 100644 --- a/api/lib/domain/usecases/get-next-challenge-for-demo.js +++ b/api/lib/domain/usecases/get-next-challenge-for-demo.js @@ -1,13 +1,8 @@ -const { AssessmentEndedError } = require('../errors.js'); -const _ = require('../../infrastructure/utils/lodash-utils.js'); -const logger = require('../../infrastructure/logger.js'); +import { AssessmentEndedError } from '../errors.js'; +import { _ } from '../../infrastructure/utils/lodash-utils.js'; +import { logger } from '../../infrastructure/logger.js'; -module.exports = function getNextChallengeForDemo({ - assessment, - answerRepository, - challengeRepository, - courseRepository, -}) { +const getNextChallengeForDemo = function ({ assessment, answerRepository, challengeRepository, courseRepository }) { const courseId = assessment.courseId; const logContext = { @@ -37,6 +32,8 @@ module.exports = function getNextChallengeForDemo({ .then(challengeRepository.get); }; +export { getNextChallengeForDemo }; + function _selectNextChallengeId(course, answers) { const courseChallengeIds = course.challenges; const answeredChallengeIds = _.map(answers, 'challengeId'); diff --git a/api/lib/domain/usecases/get-next-challenge-for-preview.js b/api/lib/domain/usecases/get-next-challenge-for-preview.js index 38d247ed338..7ec310ab4a8 100644 --- a/api/lib/domain/usecases/get-next-challenge-for-preview.js +++ b/api/lib/domain/usecases/get-next-challenge-for-preview.js @@ -1,5 +1,7 @@ -const { AssessmentEndedError } = require('../errors.js'); +import { AssessmentEndedError } from '../errors.js'; -module.exports = function getNextChallengeForPreview() { +const getNextChallengeForPreview = function () { return Promise.reject(new AssessmentEndedError()); }; + +export { getNextChallengeForPreview }; diff --git a/api/lib/domain/usecases/get-organization-invitation.js b/api/lib/domain/usecases/get-organization-invitation.js index 10ec2bfb21a..1aed88602bf 100644 --- a/api/lib/domain/usecases/get-organization-invitation.js +++ b/api/lib/domain/usecases/get-organization-invitation.js @@ -1,6 +1,6 @@ -const { AlreadyExistingInvitationError, CancelledInvitationError } = require('../../domain/errors.js'); +import { AlreadyExistingInvitationError, CancelledInvitationError } from '../../domain/errors.js'; -module.exports = async function getOrganizationInvitation({ +const getOrganizationInvitation = async function ({ organizationInvitationId, organizationInvitationCode, organizationRepository, @@ -24,3 +24,5 @@ module.exports = async function getOrganizationInvitation({ return foundOrganizationInvitation; }; + +export { getOrganizationInvitation }; diff --git a/api/lib/domain/usecases/get-organization-learner-activity.js b/api/lib/domain/usecases/get-organization-learner-activity.js index 37afb725869..443e0d0096b 100644 --- a/api/lib/domain/usecases/get-organization-learner-activity.js +++ b/api/lib/domain/usecases/get-organization-learner-activity.js @@ -1,6 +1,8 @@ -module.exports = async function getOrganizationLearnerActivity({ +const getOrganizationLearnerActivity = async function ({ organizationLearnerId, organizationLearnerActivityRepository, }) { return organizationLearnerActivityRepository.get(organizationLearnerId); }; + +export { getOrganizationLearnerActivity }; diff --git a/api/lib/domain/usecases/get-organization-learner.js b/api/lib/domain/usecases/get-organization-learner.js index 6509f82b744..db4ea3b3274 100644 --- a/api/lib/domain/usecases/get-organization-learner.js +++ b/api/lib/domain/usecases/get-organization-learner.js @@ -1,6 +1,5 @@ -module.exports = async function getOrganizationLearner({ - organizationLearnerId, - organizationLearnerFollowUpRepository, -}) { +const getOrganizationLearner = async function ({ organizationLearnerId, organizationLearnerFollowUpRepository }) { return organizationLearnerFollowUpRepository.get(organizationLearnerId); }; + +export { getOrganizationLearner }; diff --git a/api/lib/domain/usecases/get-organization-learners-csv-template.js b/api/lib/domain/usecases/get-organization-learners-csv-template.js index 691faf1263c..22dfc03667d 100644 --- a/api/lib/domain/usecases/get-organization-learners-csv-template.js +++ b/api/lib/domain/usecases/get-organization-learners-csv-template.js @@ -1,13 +1,8 @@ -const csvSerializer = require('../../infrastructure/serializers/csv/csv-serializer.js'); -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); -const SupOrganizationLearnerImportHeader = require('../../infrastructure/serializers/csv/sup-organization-learner-import-header.js'); - -module.exports = async function getOrganizationLearnersCsvTemplate({ - userId, - organizationId, - i18n, - membershipRepository, -}) { +import * as csvSerializer from '../../infrastructure/serializers/csv/csv-serializer.js'; +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; +import { SupOrganizationLearnerImportHeader } from '../../infrastructure/serializers/csv/sup-organization-learner-import-header.js'; + +const getOrganizationLearnersCsvTemplate = async function ({ userId, organizationId, i18n, membershipRepository }) { const [membership] = await membershipRepository.findByUserIdAndOrganizationId({ userId, organizationId, @@ -23,6 +18,8 @@ module.exports = async function getOrganizationLearnersCsvTemplate({ return _createHeaderOfCSV(header); }; +export { getOrganizationLearnersCsvTemplate }; + function _getCsvColumns(columns) { return columns.map((column) => column.name); } diff --git a/api/lib/domain/usecases/get-organization-members-identity.js b/api/lib/domain/usecases/get-organization-members-identity.js index 3aa61985544..f23dbb61786 100644 --- a/api/lib/domain/usecases/get-organization-members-identity.js +++ b/api/lib/domain/usecases/get-organization-members-identity.js @@ -1,3 +1,5 @@ -module.exports = function getOrganizationMemberIdentities({ organizationId, organizationMemberIdentityRepository }) { +const getOrganizationMemberIdentities = function ({ organizationId, organizationMemberIdentityRepository }) { return organizationMemberIdentityRepository.findAllByOrganizationId({ organizationId }); }; + +export { getOrganizationMemberIdentities }; diff --git a/api/lib/domain/usecases/get-organization-places-capacity.js b/api/lib/domain/usecases/get-organization-places-capacity.js index 73a27076f00..7c49dd2fe31 100644 --- a/api/lib/domain/usecases/get-organization-places-capacity.js +++ b/api/lib/domain/usecases/get-organization-places-capacity.js @@ -1,3 +1,5 @@ -module.exports = function getOrganizationPlacesCapacity({ organizationId, organizationPlacesCapacityRepository }) { +const getOrganizationPlacesCapacity = function ({ organizationId, organizationPlacesCapacityRepository }) { return organizationPlacesCapacityRepository.findByOrganizationId(organizationId); }; + +export { getOrganizationPlacesCapacity }; diff --git a/api/lib/domain/usecases/get-paginated-participants-for-an-organization.js b/api/lib/domain/usecases/get-paginated-participants-for-an-organization.js index dec4c1c0f74..69e8a5a9f5f 100644 --- a/api/lib/domain/usecases/get-paginated-participants-for-an-organization.js +++ b/api/lib/domain/usecases/get-paginated-participants-for-an-organization.js @@ -1,4 +1,4 @@ -module.exports = function getPaginatedParticipantsForAnOrganization({ +const getPaginatedParticipantsForAnOrganization = function ({ organizationId, filters, page, @@ -12,3 +12,5 @@ module.exports = function getPaginatedParticipantsForAnOrganization({ page, }); }; + +export { getPaginatedParticipantsForAnOrganization }; diff --git a/api/lib/domain/usecases/get-participants-division.js b/api/lib/domain/usecases/get-participants-division.js index 99c22e95b44..248c8559a48 100644 --- a/api/lib/domain/usecases/get-participants-division.js +++ b/api/lib/domain/usecases/get-participants-division.js @@ -1,13 +1,10 @@ -const { ForbiddenAccess } = require('../errors.js'); +import { ForbiddenAccess } from '../errors.js'; -module.exports = async function getParticipantsDivision({ - userId, - campaignId, - campaignRepository, - divisionRepository, -}) { +const getParticipantsDivision = async function ({ userId, campaignId, campaignRepository, divisionRepository }) { if (!(await campaignRepository.checkIfUserOrganizationHasAccessToCampaign(campaignId, userId))) { throw new ForbiddenAccess(); } return divisionRepository.findByCampaignId(campaignId); }; + +export { getParticipantsDivision }; diff --git a/api/lib/domain/usecases/get-participants-group.js b/api/lib/domain/usecases/get-participants-group.js index 663c92fd763..d13819a53b9 100644 --- a/api/lib/domain/usecases/get-participants-group.js +++ b/api/lib/domain/usecases/get-participants-group.js @@ -1,8 +1,10 @@ -const { ForbiddenAccess } = require('../errors.js'); +import { ForbiddenAccess } from '../errors.js'; -module.exports = async function getParticipantsGroup({ userId, campaignId, campaignRepository, groupRepository }) { +const getParticipantsGroup = async function ({ userId, campaignId, campaignRepository, groupRepository }) { if (!(await campaignRepository.checkIfUserOrganizationHasAccessToCampaign(campaignId, userId))) { throw new ForbiddenAccess(); } return groupRepository.findByCampaignId(campaignId); }; + +export { getParticipantsGroup }; diff --git a/api/lib/domain/usecases/get-participations-count-by-mastery-rate.js b/api/lib/domain/usecases/get-participations-count-by-mastery-rate.js index 5620518494c..539c9cc79ea 100644 --- a/api/lib/domain/usecases/get-participations-count-by-mastery-rate.js +++ b/api/lib/domain/usecases/get-participations-count-by-mastery-rate.js @@ -1,5 +1,6 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); -module.exports = async function getParticipationsCountByMasteryRate({ +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; + +const getParticipationsCountByMasteryRate = async function ({ campaignId, userId, campaignParticipationsStatsRepository, @@ -9,6 +10,8 @@ module.exports = async function getParticipationsCountByMasteryRate({ return campaignParticipationsStatsRepository.countParticipationsByMasteryRate({ campaignId }); }; +export { getParticipationsCountByMasteryRate }; + async function _checkUserPermission(campaignId, userId, campaignRepository) { const hasAccess = await campaignRepository.checkIfUserOrganizationHasAccessToCampaign(campaignId, userId); diff --git a/api/lib/domain/usecases/get-pole-emploi-sendings.js b/api/lib/domain/usecases/get-pole-emploi-sendings.js index c7733d67071..8acee0d9ec1 100644 --- a/api/lib/domain/usecases/get-pole-emploi-sendings.js +++ b/api/lib/domain/usecases/get-pole-emploi-sendings.js @@ -1,12 +1,14 @@ -const poleEmploiService = require('../services/pole-emploi-service.js'); +import * as poleEmploiService from '../services/pole-emploi-service.js'; -module.exports = async function getPoleEmploiSendings({ cursor, poleEmploiSendingRepository, filters }) { +const getPoleEmploiSendings = async function ({ cursor, poleEmploiSendingRepository, filters }) { const cursorData = await poleEmploiService.decodeCursor(cursor); const sendings = await poleEmploiSendingRepository.find(cursorData, filters); const link = _generateLink(sendings, filters); return { sendings, link }; }; +export { getPoleEmploiSendings }; + function _generateLink(sendings, filters) { if (!sendings.length) return null; diff --git a/api/lib/domain/usecases/get-prescriber.js b/api/lib/domain/usecases/get-prescriber.js index e5fd54204cf..9d5493f7213 100644 --- a/api/lib/domain/usecases/get-prescriber.js +++ b/api/lib/domain/usecases/get-prescriber.js @@ -1,12 +1,12 @@ -const { UserNotMemberOfOrganizationError } = require('../errors.js'); -const _ = require('lodash'); +import { UserNotMemberOfOrganizationError } from '../errors.js'; +import _ from 'lodash'; function _isCurrentOrganizationInMemberships(userOrgaSettings, memberships) { const currentOrganizationId = userOrgaSettings.currentOrganization.id; return _.find(memberships, { organization: { id: currentOrganizationId } }); } -module.exports = async function getPrescriber({ +const getPrescriber = async function ({ userId, prescriberRepository, membershipRepository, @@ -31,3 +31,5 @@ module.exports = async function getPrescriber({ return prescriberRepository.getPrescriber(userId); }; + +export { getPrescriber }; diff --git a/api/lib/domain/usecases/get-progression.js b/api/lib/domain/usecases/get-progression.js index dd4096429aa..b7845e349ff 100644 --- a/api/lib/domain/usecases/get-progression.js +++ b/api/lib/domain/usecases/get-progression.js @@ -1,6 +1,6 @@ -const Progression = require('../../../lib/domain/models/Progression.js'); +import { Progression } from '../../../lib/domain/models/Progression.js'; -module.exports = async function getProgression({ +const getProgression = async function ({ progressionId, userId, assessmentRepository, @@ -65,3 +65,5 @@ module.exports = async function getProgression({ return progression; }; + +export { getProgression }; diff --git a/api/lib/domain/usecases/get-recently-used-tags.js b/api/lib/domain/usecases/get-recently-used-tags.js index a3768b79bcb..39e840dc990 100644 --- a/api/lib/domain/usecases/get-recently-used-tags.js +++ b/api/lib/domain/usecases/get-recently-used-tags.js @@ -1,3 +1,5 @@ -module.exports = async function getRecentlyUsedTags({ tagId, organizationTagRepository }) { +const getRecentlyUsedTags = async function ({ tagId, organizationTagRepository }) { return organizationTagRepository.getRecentlyUsedTags({ tagId, numberOfRecentTags: 10 }); }; + +export { getRecentlyUsedTags }; diff --git a/api/lib/domain/usecases/get-sco-certification-results-by-division.js b/api/lib/domain/usecases/get-sco-certification-results-by-division.js index 27334a03738..869118687eb 100644 --- a/api/lib/domain/usecases/get-sco-certification-results-by-division.js +++ b/api/lib/domain/usecases/get-sco-certification-results-by-division.js @@ -1,7 +1,10 @@ -const isEmpty = require('lodash/isEmpty'); -const { NoCertificationResultForDivision } = require('../errors.js'); +import lodash from 'lodash'; -module.exports = async function getScoCertificationResultsByDivision({ +const { isEmpty } = lodash; + +import { NoCertificationResultForDivision } from '../errors.js'; + +const getScoCertificationResultsByDivision = async function ({ organizationId, division, scoCertificationCandidateRepository, @@ -24,3 +27,5 @@ module.exports = async function getScoCertificationResultsByDivision({ return certificationResults; }; + +export { getScoCertificationResultsByDivision }; diff --git a/api/lib/domain/usecases/get-scorecard.js b/api/lib/domain/usecases/get-scorecard.js index 30da3fb6d15..6c6d2582d6d 100644 --- a/api/lib/domain/usecases/get-scorecard.js +++ b/api/lib/domain/usecases/get-scorecard.js @@ -1,7 +1,7 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); -const Scorecard = require('../models/Scorecard.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; +import { Scorecard } from '../models/Scorecard.js'; -module.exports = async function getScorecard({ +const getScorecard = async function ({ authenticatedUserId, scorecardId, scorecardService, @@ -27,3 +27,5 @@ module.exports = async function getScorecard({ locale, }); }; + +export { getScorecard }; diff --git a/api/lib/domain/usecases/get-session-certification-candidates.js b/api/lib/domain/usecases/get-session-certification-candidates.js index 5ebc0069d6b..9fb98ee2364 100644 --- a/api/lib/domain/usecases/get-session-certification-candidates.js +++ b/api/lib/domain/usecases/get-session-certification-candidates.js @@ -1,3 +1,5 @@ -module.exports = async function getSessionCertificationCandidates({ sessionId, certificationCandidateRepository }) { +const getSessionCertificationCandidates = async function ({ sessionId, certificationCandidateRepository }) { return certificationCandidateRepository.findBySessionId(sessionId); }; + +export { getSessionCertificationCandidates }; diff --git a/api/lib/domain/usecases/get-session-certification-reports.js b/api/lib/domain/usecases/get-session-certification-reports.js index 34534fe0c63..0ad7b398241 100644 --- a/api/lib/domain/usecases/get-session-certification-reports.js +++ b/api/lib/domain/usecases/get-session-certification-reports.js @@ -1,3 +1,5 @@ -module.exports = async function getSessionCertificationReports({ sessionId, certificationReportRepository }) { +const getSessionCertificationReports = async function ({ sessionId, certificationReportRepository }) { return certificationReportRepository.findBySessionId(sessionId); }; + +export { getSessionCertificationReports }; diff --git a/api/lib/domain/usecases/get-session-for-supervising.js b/api/lib/domain/usecases/get-session-for-supervising.js index 72f122541e5..067d45974bc 100644 --- a/api/lib/domain/usecases/get-session-for-supervising.js +++ b/api/lib/domain/usecases/get-session-for-supervising.js @@ -1,9 +1,9 @@ -const bluebird = require('bluebird'); -const dayjs = require('dayjs'); -const { constants: domainConstants } = require('../constants'); -const { constants: infraConstants } = require('../../infrastructure/constants.js'); +import bluebird from 'bluebird'; +import dayjs from 'dayjs'; +import { constants as domainConstants } from '../constants.js'; +import { constants as infraConstants } from '../../infrastructure/constants.js'; -module.exports = async function getSessionForSupervising({ +const getSessionForSupervising = async function ({ sessionId, sessionForSupervisingRepository, certificationBadgesService, @@ -21,6 +21,8 @@ module.exports = async function getSessionForSupervising({ return sessionForSupervising; }; +export { getSessionForSupervising }; + function _computeComplementaryCertificationEligibility(certificationBadgesService) { return async (candidate) => { if (candidate.enrolledComplementaryCertification?.key) { diff --git a/api/lib/domain/usecases/get-session-results-by-result-recipient-email.js b/api/lib/domain/usecases/get-session-results-by-result-recipient-email.js index 227697596dc..55ce05b2e57 100644 --- a/api/lib/domain/usecases/get-session-results-by-result-recipient-email.js +++ b/api/lib/domain/usecases/get-session-results-by-result-recipient-email.js @@ -1,6 +1,6 @@ -const _ = require('lodash'); +import _ from 'lodash'; -module.exports = async function getSessionResultsByResultRecipientEmail({ +const getSessionResultsByResultRecipientEmail = async function ({ sessionId, resultRecipientEmail, sessionRepository, @@ -18,3 +18,5 @@ module.exports = async function getSessionResultsByResultRecipientEmail({ return { session, certificationResults }; }; + +export { getSessionResultsByResultRecipientEmail }; diff --git a/api/lib/domain/usecases/get-session-results.js b/api/lib/domain/usecases/get-session-results.js index 1624a1e7ab8..3a07ca2f735 100644 --- a/api/lib/domain/usecases/get-session-results.js +++ b/api/lib/domain/usecases/get-session-results.js @@ -1,6 +1,8 @@ -module.exports = async function getSessionResults({ sessionId, sessionRepository, certificationResultRepository }) { +const getSessionResults = async function ({ sessionId, sessionRepository, certificationResultRepository }) { const session = await sessionRepository.get(sessionId); const certificationResults = await certificationResultRepository.findBySessionId({ sessionId }); return { session, certificationResults }; }; + +export { getSessionResults }; diff --git a/api/lib/domain/usecases/get-session.js b/api/lib/domain/usecases/get-session.js index 8feea66705b..df0c22480ca 100644 --- a/api/lib/domain/usecases/get-session.js +++ b/api/lib/domain/usecases/get-session.js @@ -1,4 +1,4 @@ -module.exports = async function getSession({ sessionId, sessionRepository, supervisorAccessRepository }) { +const getSession = async function ({ sessionId, sessionRepository, supervisorAccessRepository }) { const session = await sessionRepository.get(sessionId); const hasSomeCleaAcquired = await sessionRepository.hasSomeCleaAcquired(sessionId); const hasSupervisorAccess = await supervisorAccessRepository.sessionHasSupervisorAccess({ sessionId }); @@ -8,3 +8,5 @@ module.exports = async function getSession({ sessionId, sessionRepository, super hasSomeCleaAcquired, }; }; + +export { getSession }; diff --git a/api/lib/domain/usecases/get-supervisor-kit-session-info.js b/api/lib/domain/usecases/get-supervisor-kit-session-info.js index cf09f0f4e1a..87187d26b76 100644 --- a/api/lib/domain/usecases/get-supervisor-kit-session-info.js +++ b/api/lib/domain/usecases/get-supervisor-kit-session-info.js @@ -1,6 +1,6 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; -module.exports = async function getSupervisorKitSessionInfo({ +const getSupervisorKitSessionInfo = async function ({ userId, sessionId, sessionRepository, @@ -15,3 +15,5 @@ module.exports = async function getSupervisorKitSessionInfo({ return sessionForSupervisorKit; }; + +export { getSupervisorKitSessionInfo }; diff --git a/api/lib/domain/usecases/get-target-profile-content-as-json.js b/api/lib/domain/usecases/get-target-profile-content-as-json.js index 050c0d2ba17..e061f865fae 100644 --- a/api/lib/domain/usecases/get-target-profile-content-as-json.js +++ b/api/lib/domain/usecases/get-target-profile-content-as-json.js @@ -1,7 +1,7 @@ -const { ForbiddenAccess } = require('../../domain/errors.js'); -const dayjs = require('dayjs'); +import { ForbiddenAccess } from '../../domain/errors.js'; +import dayjs from 'dayjs'; -module.exports = async function getTargetProfileContentAsJson({ +const getTargetProfileContentAsJson = async function ({ userId, targetProfileId, adminMemberRepository, @@ -24,6 +24,8 @@ module.exports = async function getTargetProfileContentAsJson({ }; }; +export { getTargetProfileContentAsJson }; + function _hasAuthorizationToDownloadContent(adminMember) { return adminMember.isMetier || adminMember.isSupport || adminMember.isSuperAdmin; } diff --git a/api/lib/domain/usecases/get-target-profile-for-admin.js b/api/lib/domain/usecases/get-target-profile-for-admin.js index 7e8d699bc8d..4ea3d46af12 100644 --- a/api/lib/domain/usecases/get-target-profile-for-admin.js +++ b/api/lib/domain/usecases/get-target-profile-for-admin.js @@ -1,3 +1,5 @@ -module.exports = async function getTargetProfileForAdmin({ targetProfileId, targetProfileForAdminRepository }) { +const getTargetProfileForAdmin = async function ({ targetProfileId, targetProfileForAdminRepository }) { return targetProfileForAdminRepository.get({ id: targetProfileId }); }; + +export { getTargetProfileForAdmin }; diff --git a/api/lib/domain/usecases/get-training.js b/api/lib/domain/usecases/get-training.js index 3c3dd3efbb7..60b1e192d13 100644 --- a/api/lib/domain/usecases/get-training.js +++ b/api/lib/domain/usecases/get-training.js @@ -1,3 +1,5 @@ -module.exports = function getTraining({ trainingId, trainingRepository }) { +const getTraining = function ({ trainingId, trainingRepository }) { return trainingRepository.getWithTriggersForAdmin({ trainingId }); }; + +export { getTraining }; diff --git a/api/lib/domain/usecases/get-user-by-reset-password-demand.js b/api/lib/domain/usecases/get-user-by-reset-password-demand.js index 3ebb975206d..641099ba446 100644 --- a/api/lib/domain/usecases/get-user-by-reset-password-demand.js +++ b/api/lib/domain/usecases/get-user-by-reset-password-demand.js @@ -1,4 +1,4 @@ -module.exports = async function getUserByResetPasswordDemand({ +const getUserByResetPasswordDemand = async function ({ temporaryKey, resetPasswordService, tokenService, @@ -9,3 +9,5 @@ module.exports = async function getUserByResetPasswordDemand({ const { email } = await resetPasswordService.verifyDemand(temporaryKey, resetPasswordDemandRepository); return userRepository.getByEmail(email); }; + +export { getUserByResetPasswordDemand }; diff --git a/api/lib/domain/usecases/get-user-campaign-assessment-result.js b/api/lib/domain/usecases/get-user-campaign-assessment-result.js index 215ae539c1f..300639bd307 100644 --- a/api/lib/domain/usecases/get-user-campaign-assessment-result.js +++ b/api/lib/domain/usecases/get-user-campaign-assessment-result.js @@ -1,6 +1,6 @@ -const { NotFoundError, NoCampaignParticipationForUserAndCampaign } = require('../errors.js'); +import { NotFoundError, NoCampaignParticipationForUserAndCampaign } from '../errors.js'; -module.exports = async function getUserCampaignAssessmentResult({ +const getUserCampaignAssessmentResult = async function ({ userId, campaignId, locale, @@ -34,6 +34,8 @@ module.exports = async function getUserCampaignAssessmentResult({ } }; +export { getUserCampaignAssessmentResult }; + async function _checkStillValidBadges(campaignId, userId, knowledgeElementRepository, badgeForCalculationRepository) { const knowledgeElements = await knowledgeElementRepository.findUniqByUserId({ userId }); const badges = await badgeForCalculationRepository.findByCampaignId({ campaignId }); diff --git a/api/lib/domain/usecases/get-user-campaign-participation-to-campaign.js b/api/lib/domain/usecases/get-user-campaign-participation-to-campaign.js index fc473d30518..c4461945d71 100644 --- a/api/lib/domain/usecases/get-user-campaign-participation-to-campaign.js +++ b/api/lib/domain/usecases/get-user-campaign-participation-to-campaign.js @@ -1,7 +1,9 @@ -module.exports = async function getUserCampaignParticipationToCampaign({ +const getUserCampaignParticipationToCampaign = async function ({ userId, campaignId, campaignParticipationRepository, }) { return campaignParticipationRepository.findOneByCampaignIdAndUserId({ campaignId, userId }); }; + +export { getUserCampaignParticipationToCampaign }; diff --git a/api/lib/domain/usecases/get-user-certification-eligibility.js b/api/lib/domain/usecases/get-user-certification-eligibility.js index a874502d6c8..2fb1c2b9a0b 100644 --- a/api/lib/domain/usecases/get-user-certification-eligibility.js +++ b/api/lib/domain/usecases/get-user-certification-eligibility.js @@ -1,6 +1,6 @@ -const CertificationEligibility = require('../read-models/CertificationEligibility.js'); +import { CertificationEligibility } from '../read-models/CertificationEligibility.js'; -module.exports = async function getUserCertificationEligibility({ +const getUserCertificationEligibility = async function ({ userId, placementProfileService, certificationBadgesService, @@ -30,3 +30,5 @@ module.exports = async function getUserCertificationEligibility({ eligibleComplementaryCertifications, }); }; + +export { getUserCertificationEligibility }; diff --git a/api/lib/domain/usecases/get-user-details-for-admin.js b/api/lib/domain/usecases/get-user-details-for-admin.js index 05102298dfe..021a445c0c1 100644 --- a/api/lib/domain/usecases/get-user-details-for-admin.js +++ b/api/lib/domain/usecases/get-user-details-for-admin.js @@ -1,3 +1,5 @@ -module.exports = async function getUserDetailsForAdmin({ userId, userRepository }) { +const getUserDetailsForAdmin = async function ({ userId, userRepository }) { return await userRepository.getUserDetailsForAdmin(userId); }; + +export { getUserDetailsForAdmin }; diff --git a/api/lib/domain/usecases/get-user-profile-shared-for-campaign.js b/api/lib/domain/usecases/get-user-profile-shared-for-campaign.js index f619749b03a..c246e8be6af 100644 --- a/api/lib/domain/usecases/get-user-profile-shared-for-campaign.js +++ b/api/lib/domain/usecases/get-user-profile-shared-for-campaign.js @@ -1,8 +1,8 @@ -const SharedProfileForCampaign = require('../read-models/SharedProfileForCampaign.js'); -const { NoCampaignParticipationForUserAndCampaign } = require('../errors.js'); -const { constants } = require('../constants.js'); +import { SharedProfileForCampaign } from '../read-models/SharedProfileForCampaign.js'; +import { NoCampaignParticipationForUserAndCampaign } from '../errors.js'; +import { constants } from '../constants.js'; -module.exports = async function getUserProfileSharedForCampaign({ +const getUserProfileSharedForCampaign = async function ({ userId, campaignId, campaignParticipationRepository, @@ -51,3 +51,5 @@ module.exports = async function getUserProfileSharedForCampaign({ maxReachablePixScore, }); }; + +export { getUserProfileSharedForCampaign }; diff --git a/api/lib/domain/usecases/get-user-profile.js b/api/lib/domain/usecases/get-user-profile.js index 96164448d90..165ade2a62b 100644 --- a/api/lib/domain/usecases/get-user-profile.js +++ b/api/lib/domain/usecases/get-user-profile.js @@ -1,8 +1,8 @@ -const Scorecard = require('../models/Scorecard.js'); -const { constants } = require('../constants.js'); -const _ = require('lodash'); +import { Scorecard } from '../models/Scorecard.js'; +import { constants } from '../constants.js'; +import _ from 'lodash'; -module.exports = async function getUserProfile({ +const getUserProfile = async function ({ userId, competenceRepository, areaRepository, @@ -43,3 +43,5 @@ module.exports = async function getUserProfile({ maxReachableLevel, }; }; + +export { getUserProfile }; diff --git a/api/lib/domain/usecases/handle-badge-acquisition.js b/api/lib/domain/usecases/handle-badge-acquisition.js index 2e6d6c2a500..86cdab440ce 100644 --- a/api/lib/domain/usecases/handle-badge-acquisition.js +++ b/api/lib/domain/usecases/handle-badge-acquisition.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; const handleBadgeAcquisition = async function ({ assessment, @@ -46,4 +46,4 @@ function _fetchPossibleCampaignAssociatedBadges( return badgeForCalculationRepository.findByCampaignParticipationId({ campaignParticipationId, domainTransaction }); } -module.exports = handleBadgeAcquisition; +export { handleBadgeAcquisition }; diff --git a/api/lib/domain/usecases/handle-training-recommendation.js b/api/lib/domain/usecases/handle-training-recommendation.js index fe9ebf5baaf..afa55ee4f5c 100644 --- a/api/lib/domain/usecases/handle-training-recommendation.js +++ b/api/lib/domain/usecases/handle-training-recommendation.js @@ -1,4 +1,4 @@ -module.exports = async function handleTrainingRecommendation({ +const handleTrainingRecommendation = async function ({ locale, assessment, campaignRepository, @@ -42,3 +42,5 @@ module.exports = async function handleTrainingRecommendation({ } return; }; + +export { handleTrainingRecommendation }; diff --git a/api/lib/domain/usecases/import-certification-candidates-from-candidates-import-sheet.js b/api/lib/domain/usecases/import-certification-candidates-from-candidates-import-sheet.js index f67c4952ea3..5d84c8ca6fc 100644 --- a/api/lib/domain/usecases/import-certification-candidates-from-candidates-import-sheet.js +++ b/api/lib/domain/usecases/import-certification-candidates-from-candidates-import-sheet.js @@ -1,8 +1,8 @@ -const { CertificationCandidateAlreadyLinkedToUserError } = require('../../domain/errors.js'); -const bluebird = require('bluebird'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); +import { CertificationCandidateAlreadyLinkedToUserError } from '../../domain/errors.js'; +import bluebird from 'bluebird'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; -module.exports = async function importCertificationCandidatesFromCandidatesImportSheet({ +const importCertificationCandidatesFromCandidatesImportSheet = async function ({ sessionId, odsBuffer, i18n, @@ -49,3 +49,5 @@ module.exports = async function importCertificationCandidatesFromCandidatesImpor }); }); }; + +export { importCertificationCandidatesFromCandidatesImportSheet }; diff --git a/api/lib/domain/usecases/import-organization-learners-from-siecle.js b/api/lib/domain/usecases/import-organization-learners-from-siecle.js index 28774bdcfdf..0cc58dad379 100644 --- a/api/lib/domain/usecases/import-organization-learners-from-siecle.js +++ b/api/lib/domain/usecases/import-organization-learners-from-siecle.js @@ -1,16 +1,19 @@ -const { FileValidationError, SiecleXmlImportError } = require('../errors.js'); -const fs = require('fs').promises; -const bluebird = require('bluebird'); -const { ORGANIZATION_LEARNER_CHUNK_SIZE } = require('../../infrastructure/constants.js'); -const { isEmpty, chunk } = require('lodash'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); +import { FileValidationError, SiecleXmlImportError } from '../errors.js'; +import * as fs from 'fs/promises'; + +const { isEmpty, chunk } = lodash; + +import bluebird from 'bluebird'; +import { ORGANIZATION_LEARNER_CHUNK_SIZE } from '../../infrastructure/constants.js'; +import lodash from 'lodash'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; const ERRORS = { EMPTY: 'EMPTY', INVALID_FILE_EXTENSION: 'INVALID_FILE_EXTENSION', }; -module.exports = async function importOrganizationLearnersFromSIECLEFormat({ +const importOrganizationLearnersFromSIECLEFormat = async function ({ organizationId, payload, format, @@ -63,3 +66,5 @@ module.exports = async function importOrganizationLearnersFromSIECLEFormat({ }); }); }; + +export { importOrganizationLearnersFromSIECLEFormat }; diff --git a/api/lib/domain/usecases/import-sup-organization-learners.js b/api/lib/domain/usecases/import-sup-organization-learners.js index b017403497b..5359a9c570c 100644 --- a/api/lib/domain/usecases/import-sup-organization-learners.js +++ b/api/lib/domain/usecases/import-sup-organization-learners.js @@ -1,4 +1,4 @@ -module.exports = async function importSupOrganizationLearners({ +const importSupOrganizationLearners = async function ({ supOrganizationLearnerRepository, supOrganizationLearnerParser, }) { @@ -8,3 +8,5 @@ module.exports = async function importSupOrganizationLearners({ return warnings; }; + +export { importSupOrganizationLearners }; diff --git a/api/lib/domain/usecases/improve-competence-evaluation.js b/api/lib/domain/usecases/improve-competence-evaluation.js index 57db862c90a..c861665a0e6 100644 --- a/api/lib/domain/usecases/improve-competence-evaluation.js +++ b/api/lib/domain/usecases/improve-competence-evaluation.js @@ -1,8 +1,8 @@ -const Assessment = require('../models/Assessment.js'); -const { MAX_REACHABLE_LEVEL } = require('../constants.js'); -const { ImproveCompetenceEvaluationForbiddenError } = require('../errors.js'); +import { Assessment } from '../models/Assessment.js'; +import { MAX_REACHABLE_LEVEL } from '../constants.js'; +import { ImproveCompetenceEvaluationForbiddenError } from '../errors.js'; -module.exports = async function improveCompetenceEvaluation({ +const improveCompetenceEvaluation = async function ({ competenceEvaluationRepository, getCompetenceLevel, assessmentRepository, @@ -39,3 +39,5 @@ module.exports = async function improveCompetenceEvaluation({ return { ...competenceEvaluation, assessmentId }; }; + +export { improveCompetenceEvaluation }; diff --git a/api/lib/domain/usecases/index.js b/api/lib/domain/usecases/index.js index 90b160b96c3..8c661a07687 100644 --- a/api/lib/domain/usecases/index.js +++ b/api/lib/domain/usecases/index.js @@ -1,201 +1,203 @@ -const settings = require('../../config.js'); -const accountRecoveryDemandRepository = require('../../infrastructure/repositories/account-recovery-demand-repository.js'); -const adminMemberRepository = require('../../infrastructure/repositories/admin-member-repository.js'); -const algorithmDataFetcherService = require('../../domain/services/algorithm-methods/data-fetcher.js'); -const answerRepository = require('../../infrastructure/repositories/answer-repository.js'); -const areaRepository = require('../../infrastructure/repositories/area-repository.js'); -const assessmentRepository = require('../../infrastructure/repositories/assessment-repository.js'); -const assessmentResultRepository = require('../../infrastructure/repositories/assessment-result-repository.js'); -const authenticationMethodRepository = require('../../infrastructure/repositories/authentication-method-repository.js'); -const authenticationServiceRegistry = require('../services/authentication/authentication-service-registry.js'); -const authenticationSessionService = require('../../domain/services/authentication/authentication-session-service.js'); -const badgeAcquisitionRepository = require('../../infrastructure/repositories/badge-acquisition-repository.js'); -const badgeCriteriaRepository = require('../../infrastructure/repositories/badge-criteria-repository.js'); -const badgeForCalculationRepository = require('../../infrastructure/repositories/badge-for-calculation-repository.js'); -const badgeRepository = require('../../infrastructure/repositories/badge-repository.js'); -const campaignAdministrationRepository = require('../../infrastructure/repositories/campaigns-administration/campaign-repository.js'); -const campaignAnalysisRepository = require('../../infrastructure/repositories/campaign-analysis-repository.js'); -const campaignAssessmentParticipationRepository = require('../../infrastructure/repositories/campaign-assessment-participation-repository.js'); -const campaignAssessmentParticipationResultListRepository = require('../../infrastructure/repositories/campaign-assessment-participation-result-list-repository.js'); -const campaignAssessmentParticipationResultRepository = require('../../infrastructure/repositories/campaign-assessment-participation-result-repository.js'); -const campaignCreatorRepository = require('../../infrastructure/repositories/campaign-creator-repository.js'); -const campaignForArchivingRepository = require('../../infrastructure/repositories/campaign/campaign-for-archiving-repository.js'); -const campaignParticipantActivityRepository = require('../../infrastructure/repositories/campaign-participant-activity-repository.js'); -const campaignCollectiveResultRepository = require('../../infrastructure/repositories/campaign-collective-result-repository.js'); -const campaignManagementRepository = require('../../infrastructure/repositories/campaign-management-repository.js'); -const campaignParticipationInfoRepository = require('../../infrastructure/repositories/campaign-participation-info-repository.js'); -const campaignParticipantRepository = require('../../infrastructure/repositories/campaign-participant-repository.js'); -const campaignParticipationOverviewRepository = require('../../infrastructure/repositories/campaign-participation-overview-repository.js'); -const campaignParticipationRepository = require('../../infrastructure/repositories/campaign-participation-repository.js'); -const campaignParticipationResultRepository = require('../../infrastructure/repositories/campaign-participation-result-repository.js'); -const campaignParticipationsStatsRepository = require('../../infrastructure/repositories/campaign-participations-stats-repository.js'); -const campaignProfilesCollectionParticipationSummaryRepository = require('../../infrastructure/repositories/campaign-profiles-collection-participation-summary-repository.js'); -const campaignProfileRepository = require('../../infrastructure/repositories/campaign-profile-repository.js'); -const campaignReportRepository = require('../../infrastructure/repositories/campaign-report-repository.js'); -const campaignRepository = require('../../infrastructure/repositories/campaign-repository.js'); -const campaignToJoinRepository = require('../../infrastructure/repositories/campaign-to-join-repository.js'); -const campaignCsvExportService = require('../../domain/services/campaign-csv-export-service.js'); -const certifiableProfileForLearningContentRepository = require('../../infrastructure/repositories/certifiable-profile-for-learning-content-repository'); -const certificateRepository = require('../../infrastructure/repositories/certificate-repository.js'); -const certificationAssessmentRepository = require('../../infrastructure/repositories/certification-assessment-repository.js'); -const certificationAttestationPdf = require('../../infrastructure/utils/pdf/certification-attestation-pdf.js'); -const certificationBadgesService = require('../../domain/services/certification-badges-service.js'); -const certificationCandidateRepository = require('../../infrastructure/repositories/certification-candidate-repository.js'); -const certificationCandidateForSupervisingRepository = require('../../infrastructure/repositories/certification-candidate-for-supervising-repository.js'); -const certificationCandidatesOdsService = require('../../domain/services/certification-candidates-ods-service.js'); -const certificationCenterInvitationRepository = require('../../infrastructure/repositories/certification-center-invitation-repository.js'); -const certificationCenterInvitedUserRepository = require('../../infrastructure/repositories/certification-center-invited-user-repository.js'); -const certificationCenterMembershipRepository = require('../../infrastructure/repositories/certification-center-membership-repository.js'); -const certificationCenterForAdminRepository = require('../../infrastructure/repositories/certification-center-for-admin-repository.js'); -const certificationCenterRepository = require('../../infrastructure/repositories/certification-center-repository.js'); -const certificationChallengeRepository = require('../../infrastructure/repositories/certification-challenge-repository.js'); -const certificationChallengesService = require('../../domain/services/certification-challenges-service.js'); -const certificationCourseRepository = require('../../infrastructure/repositories/certification-course-repository.js'); -const certificationCpfCityRepository = require('../../infrastructure/repositories/certification-cpf-city-repository.js'); -const certificationCpfCountryRepository = require('../../infrastructure/repositories/certification-cpf-country-repository.js'); -const certificationIssueReportRepository = require('../../infrastructure/repositories/certification-issue-report-repository.js'); -const certificationLsRepository = require('../../infrastructure/repositories/certification-livret-scolaire-repository.js'); -const certificationOfficerRepository = require('../../infrastructure/repositories/certification-officer-repository.js'); -const certificationPointOfContactRepository = require('../../infrastructure/repositories/certification-point-of-contact-repository.js'); -const certificationReportRepository = require('../../infrastructure/repositories/certification-report-repository.js'); -const certificationRepository = require('../../infrastructure/repositories/certification-repository.js'); -const certificationCpfService = require('../../domain/services/certification-cpf-service.js'); -const certificationResultRepository = require('../../infrastructure/repositories/certification-result-repository.js'); -const challengeRepository = require('../../infrastructure/repositories/challenge-repository.js'); -const challengeForPixAutoAnswerRepository = require('../../infrastructure/repositories/challenge-for-pix-auto-answer-repository.js'); -const cleaCertifiedCandidateRepository = require('../../infrastructure/repositories/clea-certified-candidate-repository.js'); -const competenceEvaluationRepository = require('../../infrastructure/repositories/competence-evaluation-repository.js'); -const competenceMarkRepository = require('../../infrastructure/repositories/competence-mark-repository.js'); -const competenceRepository = require('../../infrastructure/repositories/competence-repository.js'); -const competenceTreeRepository = require('../../infrastructure/repositories/competence-tree-repository.js'); -const complementaryCertificationHabilitationRepository = require('../../infrastructure/repositories/complementary-certification-habilitation-repository.js'); -const complementaryCertificationRepository = require('../../infrastructure/repositories/complementary-certification-repository.js'); -const complementaryCertificationSubscriptionRepository = require('../../infrastructure/repositories/complementary-certification-subscription-repository.js'); -const complementaryCertificationCourseResultRepository = require('../../infrastructure/repositories/complementary-certification-course-result-repository.js'); -const correctionRepository = require('../../infrastructure/repositories/correction-repository.js'); -const countryRepository = require('../../infrastructure/repositories/country-repository.js'); -const courseRepository = require('../../infrastructure/repositories/course-repository.js'); -const cpfCertificationResultRepository = require('../../infrastructure/repositories/cpf-certification-result-repository.js'); -const dataProtectionOfficerRepository = require('../../infrastructure/repositories/data-protection-officer-repository.js'); -const divisionRepository = require('../../infrastructure/repositories/division-repository.js'); -const encryptionService = require('../../domain/services/encryption-service.js'); -const flashAssessmentResultRepository = require('../../infrastructure/repositories/flash-assessment-result-repository.js'); -const flashAlgorithmService = require('../../domain/services/algorithm-methods/flash.js'); -const frameworkRepository = require('../../infrastructure/repositories/framework-repository.js'); -const getCompetenceLevel = require('../../domain/services/get-competence-level.js'); -const sessionForSupervisorKitRepository = require('../../infrastructure/repositories/sessions/session-for-supervisor-kit-repository.js'); -const groupRepository = require('../../infrastructure/repositories/group-repository.js'); -const finalizedSessionRepository = require('../../infrastructure/repositories/sessions/finalized-session-repository.js'); -const supOrganizationLearnerRepository = require('../../infrastructure/repositories/sup-organization-learner-repository.js'); -const improvementService = require('../../domain/services/improvement-service.js'); -const issueReportCategoryRepository = require('../../infrastructure/repositories/issue-report-category-repository.js'); -const juryCertificationRepository = require('../../infrastructure/repositories/jury-certification-repository.js'); -const juryCertificationSummaryRepository = require('../../infrastructure/repositories/jury-certification-summary-repository.js'); -const jurySessionRepository = require('../../infrastructure/repositories/sessions/jury-session-repository.js'); -const knowledgeElementRepository = require('../../infrastructure/repositories/knowledge-element-repository.js'); -const learningContentRepository = require('../../infrastructure/repositories/learning-content-repository.js'); -const localeService = require('../../domain/services/locale-service.js'); -const mailService = require('../../domain/services/mail-service.js'); -const membershipRepository = require('../../infrastructure/repositories/membership-repository.js'); -const obfuscationService = require('../../domain/services/obfuscation-service.js'); -const organizationMemberIdentityRepository = require('../../infrastructure/repositories/organization-member-identity-repository.js'); -const organizationForAdminRepository = require('../../infrastructure/repositories/organization-for-admin-repository.js'); -const organizationFeatureRepository = require('../../infrastructure/repositories/organizations-administration/organization-feature-repository.js'); -const organizationRepository = require('../../infrastructure/repositories/organization-repository.js'); -const organizationPlacesLotRepository = require('../../infrastructure/repositories/organizations/organization-places-lot-repository.js'); -const organizationPlacesCapacityRepository = require('../../infrastructure/repositories/organization-places-capacity-repository.js'); -const organizationInvitationRepository = require('../../infrastructure/repositories/organization-invitation-repository.js'); -const organizationInvitedUserRepository = require('../../infrastructure/repositories/organization-invited-user-repository.js'); -const organizationTagRepository = require('../../infrastructure/repositories/organization-tag-repository.js'); -const organizationsToAttachToTargetProfileRepository = require('../../infrastructure/repositories/organizations-to-attach-to-target-profile-repository.js'); -const organizationLearnerFollowUpRepository = require('../../infrastructure/repositories/organization-learner-follow-up/organization-learner-repository.js'); -const organizationLearnerRepository = require('../../infrastructure/repositories/organization-learner-repository.js'); -const organizationParticipantRepository = require('../../infrastructure/repositories/organization-participant-repository.js'); -const organizationLearnerActivityRepository = require('../../infrastructure/repositories/organization-learner-activity-repository.js'); -const organizationLearnersCsvService = require('../../domain/services/organization-learners-csv-service.js'); -const organizationLearnersXmlService = require('../../domain/services/organization-learners-xml-service.js'); -const participantResultRepository = require('../../infrastructure/repositories/participant-result-repository.js'); -const participationsForCampaignManagementRepository = require('../../infrastructure/repositories/participations-for-campaign-management-repository.js'); -const participationsForUserManagementRepository = require('../../infrastructure/repositories/participations-for-user-management-repository.js'); -const userOrganizationsForAdminRepository = require('../../infrastructure/repositories/user-organizations-for-admin-repository.js'); -const partnerCertificationScoringRepository = require('../../infrastructure/repositories/partner-certification-scoring-repository.js'); -const passwordGenerator = require('../../domain/services/password-generator.js'); -const pickChallengeService = require('../services/pick-challenge-service.js'); -const pixAuthenticationService = require('../../domain/services/authentication/pix-authentication-service.js'); -const placementProfileService = require('../../domain/services/placement-profile-service.js'); -const poleEmploiSendingRepository = require('../../infrastructure/repositories/pole-emploi-sending-repository.js'); -const prescriberRepository = require('../../infrastructure/repositories/prescriber-repository.js'); -const pseudoRandom = require('../../infrastructure/utils/pseudo-random'); -const resetPasswordService = require('../../domain/services/reset-password-service.js'); -const resetPasswordDemandRepository = require('../../infrastructure/repositories/reset-password-demands-repository.js'); -const scoAccountRecoveryService = require('../services/sco-account-recovery-service.js'); -const scoCertificationCandidateRepository = require('../../infrastructure/repositories/sco-certification-candidate-repository.js'); -const scoOrganizationParticipantRepository = require('../../infrastructure/repositories/sco-organization-participant-repository.js'); -const scorecardService = require('../../domain/services/scorecard-service.js'); -const scoringCertificationService = require('../../domain/services/scoring/scoring-certification-service.js'); -const supOrganizationParticipantRepository = require('../../infrastructure/repositories/sup-organization-participant-repository.js'); -const sessionForAttendanceSheetRepository = require('../../infrastructure/repositories/sessions/session-for-attendance-sheet-repository.js'); -const sessionsImportValidationService = require('../../domain/services/sessions-mass-import/sessions-import-validation-service.js'); -const sessionPublicationService = require('../../domain/services/session-publication-service.js'); -const sessionRepository = require('../../infrastructure/repositories/sessions/session-repository.js'); -const sessionForSupervisingRepository = require('../../infrastructure/repositories/sessions/session-for-supervising-repository.js'); -const sessionJuryCommentRepository = require('../../infrastructure/repositories/sessions/session-jury-comment-repository.js'); -const sessionSummaryRepository = require('../../infrastructure/repositories/sessions/session-summary-repository.js'); -const skillRepository = require('../../infrastructure/repositories/skill-repository.js'); -const skillSetRepository = require('../../infrastructure/repositories/skill-set-repository.js'); -const studentRepository = require('../../infrastructure/repositories/student-repository.js'); -const supervisorAccessRepository = require('../../infrastructure/repositories/supervisor-access-repository.js'); -const tagRepository = require('../../infrastructure/repositories/tag-repository.js'); -const TargetProfileForSpecifierRepository = require('../../infrastructure/repositories/campaign/target-profile-for-specifier-repository.js'); -const targetProfileRepository = require('../../infrastructure/repositories/target-profile-repository.js'); -const targetProfileSummaryForAdminRepository = require('../../infrastructure/repositories/target-profile-summary-for-admin-repository.js'); -const targetProfileForUpdateRepository = require('../../infrastructure/repositories/target-profile-for-update-repository.js'); -const targetProfileShareRepository = require('../../infrastructure/repositories/target-profile-share-repository.js'); -const targetProfileForAdminRepository = require('../../infrastructure/repositories/target-profile-for-admin-repository.js'); -const targetProfileTrainingRepository = require('../../infrastructure/repositories/target-profile-training-repository.js'); -const thematicRepository = require('../../infrastructure/repositories/thematic-repository.js'); -const tokenService = require('../../domain/services/token-service.js'); -const refreshTokenService = require('../../domain/services/refresh-token-service.js'); -const trainingRepository = require('../../infrastructure/repositories/training-repository.js'); -const trainingTriggerRepository = require('../../infrastructure/repositories/training-trigger-repository.js'); -const tubeRepository = require('../../infrastructure/repositories/tube-repository.js'); -const tutorialEvaluationRepository = require('../../infrastructure/repositories/tutorial-evaluation-repository.js'); -const tutorialRepository = require('../../infrastructure/repositories/tutorial-repository.js'); -const userEmailRepository = require('../../infrastructure/repositories/user-email-repository.js'); -const userLoginRepository = require('../../infrastructure/repositories/user-login-repository.js'); -const userOrgaSettingsRepository = require('../../infrastructure/repositories/user-orga-settings-repository.js'); -const userRecommendedTrainingRepository = require('../../infrastructure/repositories/user-recommended-training-repository.js'); -const userReconciliationService = require('../services/user-reconciliation-service.js'); -const userToCreateRepository = require('../../infrastructure/repositories/user-to-create-repository.js'); -const userRepository = require('../../infrastructure/repositories/user-repository.js'); -const userService = require('../../domain/services/user-service.js'); -const userSavedTutorialRepository = require('../../infrastructure/repositories/user-saved-tutorial-repository.js'); -const verifyCertificateCodeService = require('../../domain/services/verify-certificate-code-service.js'); -const participantResultsSharedRepository = require('../../infrastructure/repositories/participant-results-shared-repository.js'); -const poleEmploiNotifier = require('../../infrastructure/externals/pole-emploi/pole-emploi-notifier.js'); -const disabledPoleEmploiNotifier = require('../../infrastructure/externals/pole-emploi/disabled-pole-emploi-notifier.js'); -const organizationInvitationService = require('../services/organization-invitation-service.js'); -const organizationCreationValidator = require('../validators/organization-creation-validator.js'); -const organizationValidator = require('../validators/organization-with-tags-and-target-profiles-script.js'); -const userValidator = require('../validators/user-validator.js'); -const passwordValidator = require('../validators/password-validator.js'); -const stageCollectionRepository = require('../../infrastructure/repositories/user-campaign-results/stage-collection-repository'); -const campaignValidator = require('../validators/campaign-validator.js'); -const learningContentConversionService = require('../services/learning-content/learning-content-conversion-service.js'); -const temporarySessionsStorageForMassImportService = require('../services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service'); -const sessionValidator = require('../validators/session-validator.js'); -const sessionCodeService = require('../services/session-code-service.js'); -const dateUtils = require('../../infrastructure/utils/date-utils.js'); -const campaignCodeGenerator = require('../services/campaigns/campaign-code-generator.js'); -const smartRandom = require('../../domain/services/algorithm-methods/smart-random.js'); -const codeUtils = require('../../infrastructure/utils/code-utils.js'); -const writeOdsUtils = require('../../infrastructure/utils/ods/write-ods-utils.js'); -const readOdsUtils = require('../../infrastructure/utils/ods/read-ods-utils.js'); -const sessionXmlService = require('../../domain/services/session-xml-service.js'); -const dataFetcher = require('../../domain/services/algorithm-methods/data-fetcher.js'); +import { config } from '../../config.js'; +import * as accountRecoveryDemandRepository from '../../infrastructure/repositories/account-recovery-demand-repository.js'; +import * as adminMemberRepository from '../../infrastructure/repositories/admin-member-repository.js'; +// eslint-disable-next-line import/no-duplicates +import * as dataFetcher from '../../domain/services/algorithm-methods/data-fetcher.js'; +// eslint-disable-next-line import/no-duplicates +import * as algorithmDataFetcherService from '../../domain/services/algorithm-methods/data-fetcher.js'; +import * as answerRepository from '../../infrastructure/repositories/answer-repository.js'; +import * as areaRepository from '../../infrastructure/repositories/area-repository.js'; +import * as assessmentRepository from '../../infrastructure/repositories/assessment-repository.js'; +import * as assessmentResultRepository from '../../infrastructure/repositories/assessment-result-repository.js'; +import * as authenticationMethodRepository from '../../infrastructure/repositories/authentication-method-repository.js'; +import * as authenticationServiceRegistry from '../services/authentication/authentication-service-registry.js'; +import * as authenticationSessionService from '../../domain/services/authentication/authentication-session-service.js'; +import * as badgeAcquisitionRepository from '../../infrastructure/repositories/badge-acquisition-repository.js'; +import * as badgeCriteriaRepository from '../../infrastructure/repositories/badge-criteria-repository.js'; +import * as badgeForCalculationRepository from '../../infrastructure/repositories/badge-for-calculation-repository.js'; +import * as badgeRepository from '../../infrastructure/repositories/badge-repository.js'; +import * as campaignAdministrationRepository from '../../infrastructure/repositories/campaigns-administration/campaign-repository.js'; +import * as campaignAnalysisRepository from '../../infrastructure/repositories/campaign-analysis-repository.js'; +import * as campaignAssessmentParticipationRepository from '../../infrastructure/repositories/campaign-assessment-participation-repository.js'; +import * as campaignAssessmentParticipationResultListRepository from '../../infrastructure/repositories/campaign-assessment-participation-result-list-repository.js'; +import * as campaignAssessmentParticipationResultRepository from '../../infrastructure/repositories/campaign-assessment-participation-result-repository.js'; +import * as campaignCreatorRepository from '../../infrastructure/repositories/campaign-creator-repository.js'; +import * as campaignForArchivingRepository from '../../infrastructure/repositories/campaign/campaign-for-archiving-repository.js'; +import { campaignParticipantActivityRepository } from '../../infrastructure/repositories/campaign-participant-activity-repository.js'; +import * as campaignCollectiveResultRepository from '../../infrastructure/repositories/campaign-collective-result-repository.js'; +import * as campaignManagementRepository from '../../infrastructure/repositories/campaign-management-repository.js'; +import * as campaignParticipationInfoRepository from '../../infrastructure/repositories/campaign-participation-info-repository.js'; +import * as campaignParticipantRepository from '../../infrastructure/repositories/campaign-participant-repository.js'; +import * as campaignParticipationOverviewRepository from '../../infrastructure/repositories/campaign-participation-overview-repository.js'; +import * as campaignParticipationRepository from '../../infrastructure/repositories/campaign-participation-repository.js'; +import { campaignParticipationResultRepository } from '../../infrastructure/repositories/campaign-participation-result-repository.js'; +import { CampaignParticipationsStatsRepository as campaignParticipationsStatsRepository } from '../../infrastructure/repositories/campaign-participations-stats-repository.js'; +import * as campaignProfilesCollectionParticipationSummaryRepository from '../../infrastructure/repositories/campaign-profiles-collection-participation-summary-repository.js'; +import * as campaignProfileRepository from '../../infrastructure/repositories/campaign-profile-repository.js'; +import * as campaignReportRepository from '../../infrastructure/repositories/campaign-report-repository.js'; +import * as campaignRepository from '../../infrastructure/repositories/campaign-repository.js'; +import * as campaignToJoinRepository from '../../infrastructure/repositories/campaign-to-join-repository.js'; +import * as campaignCsvExportService from '../../domain/services/campaign-csv-export-service.js'; +import * as certifiableProfileForLearningContentRepository from '../../infrastructure/repositories/certifiable-profile-for-learning-content-repository.js'; +import * as certificateRepository from '../../infrastructure/repositories/certificate-repository.js'; +import * as certificationAssessmentRepository from '../../infrastructure/repositories/certification-assessment-repository.js'; +import * as certificationAttestationPdf from '../../infrastructure/utils/pdf/certification-attestation-pdf.js'; +import * as certificationBadgesService from '../../domain/services/certification-badges-service.js'; +import * as certificationCandidateRepository from '../../infrastructure/repositories/certification-candidate-repository.js'; +import * as certificationCandidateForSupervisingRepository from '../../infrastructure/repositories/certification-candidate-for-supervising-repository.js'; +import * as certificationCandidatesOdsService from '../../domain/services/certification-candidates-ods-service.js'; +import * as certificationCenterInvitationRepository from '../../infrastructure/repositories/certification-center-invitation-repository.js'; +import * as certificationCenterInvitedUserRepository from '../../infrastructure/repositories/certification-center-invited-user-repository.js'; +import * as certificationCenterMembershipRepository from '../../infrastructure/repositories/certification-center-membership-repository.js'; +import * as certificationCenterForAdminRepository from '../../infrastructure/repositories/certification-center-for-admin-repository.js'; +import * as certificationCenterRepository from '../../infrastructure/repositories/certification-center-repository.js'; +import * as certificationChallengeRepository from '../../infrastructure/repositories/certification-challenge-repository.js'; +import * as certificationChallengesService from '../../domain/services/certification-challenges-service.js'; +import * as certificationCourseRepository from '../../infrastructure/repositories/certification-course-repository.js'; +import * as certificationCpfCityRepository from '../../infrastructure/repositories/certification-cpf-city-repository.js'; +import * as certificationCpfCountryRepository from '../../infrastructure/repositories/certification-cpf-country-repository.js'; +import * as certificationIssueReportRepository from '../../infrastructure/repositories/certification-issue-report-repository.js'; +import * as certificationLsRepository from '../../infrastructure/repositories/certification-livret-scolaire-repository.js'; +import * as certificationOfficerRepository from '../../infrastructure/repositories/certification-officer-repository.js'; +import * as certificationPointOfContactRepository from '../../infrastructure/repositories/certification-point-of-contact-repository.js'; +import * as certificationReportRepository from '../../infrastructure/repositories/certification-report-repository.js'; +import * as certificationRepository from '../../infrastructure/repositories/certification-repository.js'; +import * as certificationCpfService from '../../domain/services/certification-cpf-service.js'; +import * as certificationResultRepository from '../../infrastructure/repositories/certification-result-repository.js'; +import * as challengeRepository from '../../infrastructure/repositories/challenge-repository.js'; +import * as challengeForPixAutoAnswerRepository from '../../infrastructure/repositories/challenge-for-pix-auto-answer-repository.js'; +import * as cleaCertifiedCandidateRepository from '../../infrastructure/repositories/clea-certified-candidate-repository.js'; +import * as competenceEvaluationRepository from '../../infrastructure/repositories/competence-evaluation-repository.js'; +import * as competenceMarkRepository from '../../infrastructure/repositories/competence-mark-repository.js'; +import * as competenceRepository from '../../infrastructure/repositories/competence-repository.js'; +import * as competenceTreeRepository from '../../infrastructure/repositories/competence-tree-repository.js'; +import * as complementaryCertificationHabilitationRepository from '../../infrastructure/repositories/complementary-certification-habilitation-repository.js'; +import * as complementaryCertificationRepository from '../../infrastructure/repositories/complementary-certification-repository.js'; +import * as complementaryCertificationSubscriptionRepository from '../../infrastructure/repositories/complementary-certification-subscription-repository.js'; +import * as complementaryCertificationCourseResultRepository from '../../infrastructure/repositories/complementary-certification-course-result-repository.js'; +import * as correctionRepository from '../../infrastructure/repositories/correction-repository.js'; +import * as countryRepository from '../../infrastructure/repositories/country-repository.js'; +import * as courseRepository from '../../infrastructure/repositories/course-repository.js'; +import * as cpfCertificationResultRepository from '../../infrastructure/repositories/cpf-certification-result-repository.js'; +import * as dataProtectionOfficerRepository from '../../infrastructure/repositories/data-protection-officer-repository.js'; +import * as divisionRepository from '../../infrastructure/repositories/division-repository.js'; +import * as encryptionService from '../../domain/services/encryption-service.js'; +import * as flashAssessmentResultRepository from '../../infrastructure/repositories/flash-assessment-result-repository.js'; +import * as flashAlgorithmService from '../../domain/services/algorithm-methods/flash.js'; +import * as frameworkRepository from '../../infrastructure/repositories/framework-repository.js'; +import { getCompetenceLevel } from '../../domain/services/get-competence-level.js'; +import * as sessionForSupervisorKitRepository from '../../infrastructure/repositories/sessions/session-for-supervisor-kit-repository.js'; +import * as groupRepository from '../../infrastructure/repositories/group-repository.js'; +import * as finalizedSessionRepository from '../../infrastructure/repositories/sessions/finalized-session-repository.js'; +import * as supOrganizationLearnerRepository from '../../infrastructure/repositories/sup-organization-learner-repository.js'; +import * as improvementService from '../../domain/services/improvement-service.js'; +import * as issueReportCategoryRepository from '../../infrastructure/repositories/issue-report-category-repository.js'; +import * as juryCertificationRepository from '../../infrastructure/repositories/jury-certification-repository.js'; +import * as juryCertificationSummaryRepository from '../../infrastructure/repositories/jury-certification-summary-repository.js'; +import * as jurySessionRepository from '../../infrastructure/repositories/sessions/jury-session-repository.js'; +import * as knowledgeElementRepository from '../../infrastructure/repositories/knowledge-element-repository.js'; +import * as learningContentRepository from '../../infrastructure/repositories/learning-content-repository.js'; +import * as localeService from '../../domain/services/locale-service.js'; +import * as mailService from '../../domain/services/mail-service.js'; +import * as membershipRepository from '../../infrastructure/repositories/membership-repository.js'; +import * as obfuscationService from '../../domain/services/obfuscation-service.js'; +import * as organizationMemberIdentityRepository from '../../infrastructure/repositories/organization-member-identity-repository.js'; +import * as organizationForAdminRepository from '../../infrastructure/repositories/organization-for-admin-repository.js'; +import * as organizationFeatureRepository from '../../infrastructure/repositories/organizations-administration/organization-feature-repository.js'; +import * as organizationRepository from '../../infrastructure/repositories/organization-repository.js'; +import * as organizationPlacesLotRepository from '../../infrastructure/repositories/organizations/organization-places-lot-repository.js'; +import * as organizationPlacesCapacityRepository from '../../infrastructure/repositories/organization-places-capacity-repository.js'; +import * as organizationInvitationRepository from '../../infrastructure/repositories/organization-invitation-repository.js'; +import * as organizationInvitedUserRepository from '../../infrastructure/repositories/organization-invited-user-repository.js'; +import * as organizationTagRepository from '../../infrastructure/repositories/organization-tag-repository.js'; +import * as organizationsToAttachToTargetProfileRepository from '../../infrastructure/repositories/organizations-to-attach-to-target-profile-repository.js'; +import * as organizationLearnerFollowUpRepository from '../../infrastructure/repositories/organization-learner-follow-up/organization-learner-repository.js'; +import * as organizationLearnerRepository from '../../infrastructure/repositories/organization-learner-repository.js'; +import * as organizationParticipantRepository from '../../infrastructure/repositories/organization-participant-repository.js'; +import * as organizationLearnerActivityRepository from '../../infrastructure/repositories/organization-learner-activity-repository.js'; +import * as organizationLearnersCsvService from '../../domain/services/organization-learners-csv-service.js'; +import * as organizationLearnersXmlService from '../../domain/services/organization-learners-xml-service.js'; +import * as participantResultRepository from '../../infrastructure/repositories/participant-result-repository.js'; +import * as participationsForCampaignManagementRepository from '../../infrastructure/repositories/participations-for-campaign-management-repository.js'; +import * as participationsForUserManagementRepository from '../../infrastructure/repositories/participations-for-user-management-repository.js'; +import * as userOrganizationsForAdminRepository from '../../infrastructure/repositories/user-organizations-for-admin-repository.js'; +import * as partnerCertificationScoringRepository from '../../infrastructure/repositories/partner-certification-scoring-repository.js'; +import * as passwordGenerator from '../../domain/services/password-generator.js'; +import * as pickChallengeService from '../services/pick-challenge-service.js'; +import * as pixAuthenticationService from '../../domain/services/authentication/pix-authentication-service.js'; +import * as placementProfileService from '../../domain/services/placement-profile-service.js'; +import * as poleEmploiSendingRepository from '../../infrastructure/repositories/pole-emploi-sending-repository.js'; +import * as prescriberRepository from '../../infrastructure/repositories/prescriber-repository.js'; +import * as pseudoRandom from '../../infrastructure/utils/pseudo-random.js'; +import * as resetPasswordService from '../../domain/services/reset-password-service.js'; +import * as resetPasswordDemandRepository from '../../infrastructure/repositories/reset-password-demands-repository.js'; +import * as scoAccountRecoveryService from '../services/sco-account-recovery-service.js'; +import * as scoCertificationCandidateRepository from '../../infrastructure/repositories/sco-certification-candidate-repository.js'; +import * as scoOrganizationParticipantRepository from '../../infrastructure/repositories/sco-organization-participant-repository.js'; +import * as scorecardService from '../../domain/services/scorecard-service.js'; +import * as scoringCertificationService from '../../domain/services/scoring/scoring-certification-service.js'; +import * as supOrganizationParticipantRepository from '../../infrastructure/repositories/sup-organization-participant-repository.js'; +import * as sessionForAttendanceSheetRepository from '../../infrastructure/repositories/sessions/session-for-attendance-sheet-repository.js'; +import * as sessionsImportValidationService from '../../domain/services/sessions-mass-import/sessions-import-validation-service.js'; +import * as sessionPublicationService from '../../domain/services/session-publication-service.js'; +import * as sessionRepository from '../../infrastructure/repositories/sessions/session-repository.js'; +import * as sessionForSupervisingRepository from '../../infrastructure/repositories/sessions/session-for-supervising-repository.js'; +import * as sessionJuryCommentRepository from '../../infrastructure/repositories/sessions/session-jury-comment-repository.js'; +import * as sessionSummaryRepository from '../../infrastructure/repositories/sessions/session-summary-repository.js'; +import * as skillRepository from '../../infrastructure/repositories/skill-repository.js'; +import * as skillSetRepository from '../../infrastructure/repositories/skill-set-repository.js'; +import * as studentRepository from '../../infrastructure/repositories/student-repository.js'; +import * as supervisorAccessRepository from '../../infrastructure/repositories/supervisor-access-repository.js'; +import * as tagRepository from '../../infrastructure/repositories/tag-repository.js'; +import * as TargetProfileForSpecifierRepository from '../../infrastructure/repositories/campaign/target-profile-for-specifier-repository.js'; +import * as targetProfileRepository from '../../infrastructure/repositories/target-profile-repository.js'; +import * as targetProfileSummaryForAdminRepository from '../../infrastructure/repositories/target-profile-summary-for-admin-repository.js'; +import * as targetProfileForUpdateRepository from '../../infrastructure/repositories/target-profile-for-update-repository.js'; +import * as targetProfileShareRepository from '../../infrastructure/repositories/target-profile-share-repository.js'; +import * as targetProfileForAdminRepository from '../../infrastructure/repositories/target-profile-for-admin-repository.js'; +import * as targetProfileTrainingRepository from '../../infrastructure/repositories/target-profile-training-repository.js'; +import * as thematicRepository from '../../infrastructure/repositories/thematic-repository.js'; +import { tokenService } from '../../domain/services/token-service.js'; +import * as refreshTokenService from '../../domain/services/refresh-token-service.js'; +import * as trainingRepository from '../../infrastructure/repositories/training-repository.js'; +import * as trainingTriggerRepository from '../../infrastructure/repositories/training-trigger-repository.js'; +import * as tubeRepository from '../../infrastructure/repositories/tube-repository.js'; +import * as tutorialEvaluationRepository from '../../infrastructure/repositories/tutorial-evaluation-repository.js'; +import * as tutorialRepository from '../../infrastructure/repositories/tutorial-repository.js'; +import * as userEmailRepository from '../../infrastructure/repositories/user-email-repository.js'; +import * as userLoginRepository from '../../infrastructure/repositories/user-login-repository.js'; +import * as userOrgaSettingsRepository from '../../infrastructure/repositories/user-orga-settings-repository.js'; +import * as userRecommendedTrainingRepository from '../../infrastructure/repositories/user-recommended-training-repository.js'; +import * as userReconciliationService from '../services/user-reconciliation-service.js'; +import * as userToCreateRepository from '../../infrastructure/repositories/user-to-create-repository.js'; +import * as userRepository from '../../infrastructure/repositories/user-repository.js'; +import * as userService from '../../domain/services/user-service.js'; +import * as userSavedTutorialRepository from '../../infrastructure/repositories/user-saved-tutorial-repository.js'; +import * as verifyCertificateCodeService from '../../domain/services/verify-certificate-code-service.js'; +import { participantResultsSharedRepository } from '../../infrastructure/repositories/participant-results-shared-repository.js'; +import * as poleEmploiNotifier from '../../infrastructure/externals/pole-emploi/pole-emploi-notifier.js'; +import * as disabledPoleEmploiNotifier from '../../infrastructure/externals/pole-emploi/disabled-pole-emploi-notifier.js'; +import * as organizationInvitationService from '../services/organization-invitation-service.js'; +import * as organizationCreationValidator from '../validators/organization-creation-validator.js'; +import * as organizationValidator from '../validators/organization-with-tags-and-target-profiles-script.js'; +import * as userValidator from '../validators/user-validator.js'; +import * as passwordValidator from '../validators/password-validator.js'; +import * as stageCollectionRepository from '../../infrastructure/repositories/user-campaign-results/stage-collection-repository.js'; +import * as campaignValidator from '../validators/campaign-validator.js'; +import * as learningContentConversionService from '../services/learning-content/learning-content-conversion-service.js'; +import * as temporarySessionsStorageForMassImportService from '../services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service.js'; +import * as sessionValidator from '../validators/session-validator.js'; +import * as sessionCodeService from '../services/session-code-service.js'; +import * as dateUtils from '../../infrastructure/utils/date-utils.js'; +import * as campaignCodeGenerator from '../services/campaigns/campaign-code-generator.js'; +import * as smartRandom from '../../domain/services/algorithm-methods/smart-random.js'; +import * as codeUtils from '../../infrastructure/utils/code-utils.js'; +import * as writeOdsUtils from '../../infrastructure/utils/ods/write-ods-utils.js'; +import * as readOdsUtils from '../../infrastructure/utils/ods/read-ods-utils.js'; +import * as sessionXmlService from '../../domain/services/session-xml-service.js'; function requirePoleEmploiNotifier() { - if (settings.poleEmploi.pushEnabled) { + if (config.poleEmploi.pushEnabled) { return poleEmploiNotifier; } else { return disabledPoleEmploiNotifier; @@ -353,10 +355,10 @@ const dependencies = { sessionSummaryRepository, sessionValidator, smartRandom, - settings, pseudoRandom, readOdsUtils, sessionXmlService, + config, skillRepository, skillSetRepository, studentRepository, @@ -399,294 +401,292 @@ const dependencies = { writeOdsUtils, }; -const { injectDependencies } = require('../../infrastructure/utils/dependency-injection.js'); - -const abortCertificationCourse = require('./abort-certification-course.js'); -const acceptCertificationCenterInvitation = require('./accept-certification-center-invitation.js'); -const acceptOrganizationInvitation = require('./accept-organization-invitation.js'); -const acceptPixCertifTermsOfService = require('./accept-pix-certif-terms-of-service.js'); -const acceptPixLastTermsOfService = require('./accept-pix-last-terms-of-service.js'); -const acceptPixOrgaTermsOfService = require('./accept-pix-orga-terms-of-service.js'); -const addCertificationCandidateToSession = require('./add-certification-candidate-to-session.js'); -const addPixAuthenticationMethodByEmail = require('./add-pix-authentication-method-by-email.js'); -const addTutorialEvaluation = require('./add-tutorial-evaluation.js'); -const addTutorialToUser = require('./add-tutorial-to-user.js'); -const anonymizeUser = require('./anonymize-user.js'); -const archiveCampaign = require('./archive-campaign.js'); -const archiveOrganization = require('./archive-organization.js'); -const assignCertificationOfficerToJurySession = require('./assign-certification-officer-to-jury-session.js'); -const attachOrganizationsFromExistingTargetProfile = require('./attach-organizations-from-existing-target-profile.js'); -const attachOrganizationsToTargetProfile = require('./attach-organizations-to-target-profile.js'); -const attachTargetProfilesToOrganization = require('./attach-target-profiles-to-organization.js'); -const attachTargetProfilesToTraining = require('./attach-target-profiles-to-training.js'); -const authenticateAnonymousUser = require('./authenticate-anonymous-user.js'); -const authenticateApplication = require('./authenticate-application.js'); -const authenticateExternalUser = require('./authenticate-external-user.js'); -const authenticateOidcUser = require('./authentication/authenticate-oidc-user.js'); -const authenticateUser = require('./authenticate-user.js'); -const authorizeCertificationCandidateToResume = require('./authorize-certification-candidate-to-resume.js'); -const authorizeCertificationCandidateToStart = require('./authorize-certification-candidate-to-start.js'); -const beginCampaignParticipationImprovement = require('./begin-campaign-participation-improvement.js'); -const campaignAdministrationArchiveCampaign = require('./campaigns-administration/archive-campaigns.js'); -const cancelCertificationCenterInvitation = require('./cancel-certification-center-invitation.js'); -const cancelCertificationCourse = require('./cancel-certification-course.js'); -const cancelOrganizationInvitation = require('./cancel-organization-invitation.js'); -const changeUserLang = require('./change-user-lang.js'); -const checkScoAccountRecovery = require('./check-sco-account-recovery.js'); -const commentSessionAsJury = require('./comment-session-as-jury.js'); -const completeAssessment = require('./complete-assessment.js'); -const computeCampaignAnalysis = require('./compute-campaign-analysis.js'); -const computeCampaignCollectiveResult = require('./compute-campaign-collective-result.js'); -const computeCampaignParticipationAnalysis = require('./compute-campaign-participation-analysis.js'); -const correctAnswerThenUpdateAssessment = require('./correct-answer-then-update-assessment.js'); -const correctAnswer = require('./correct-answer.js'); -const correctCandidateIdentityInCertificationCourse = require('./correct-candidate-identity-in-certification-course.js'); -const createAccessTokenFromRefreshToken = require('./create-access-token-from-refresh-token.js'); -const createAndReconcileUserToOrganizationLearner = require('./create-and-reconcile-user-to-organization-learner.js'); -const createBadge = require('./create-badge.js'); -const createCampaign = require('./create-campaign.js'); -const createCertificationCenter = require('./create-certification-center.js'); -const createCertificationCenterMembershipByEmail = require('./create-certification-center-membership-by-email.js'); -const createCertificationCenterMembershipForScoOrganizationMember = require('./create-certification-center-membership-for-sco-organization-member.js'); -const createLcmsRelease = require('./create-lcms-release.js'); -const createMembership = require('./create-membership.js'); -const createOidcUser = require('./create-oidc-user.js'); -const createOrUpdateCertificationCenterInvitationForAdmin = require('./create-or-update-certification-center-invitation-for-admin.js'); -const createOrUpdateTrainingTrigger = require('./create-or-update-training-trigger.js'); -const createOrUpdateUserOrgaSettings = require('./create-or-update-user-orga-settings.js'); -const createOrganization = require('./create-organization.js'); -const createOrganizationInvitationByAdmin = require('./create-organization-invitation-by-admin.js'); -const createOrganizationInvitations = require('./create-organization-invitations.js'); -const resendOrganizationInvitation = require('./resend-organization-invitation.js'); -const createOrganizationPlacesLot = require('./create-organization-places-lot.js'); -const createOrganizationsWithTagsAndTargetProfiles = require('./create-organizations-with-tags-and-target-profiles.js'); -const createPasswordResetDemand = require('./create-password-reset-demand.js'); -const createSession = require('./create-session.js'); -const createSessions = require('./sessions-mass-import/create-sessions.js'); -const createTag = require('./create-tag.js'); -const createTargetProfile = require('./create-target-profile.js'); -const createTraining = require('./create-training.js'); -const createUser = require('./create-user.js'); -const createUserAndReconcileToOrganizationLearnerFromExternalUser = require('./create-user-and-reconcile-to-organization-learner-from-external-user.js'); -const deactivateAdminMember = require('./deactivate-admin-member.js'); -const deleteCampaignParticipation = require('./delete-campaign-participation.js'); -const deleteCampaignParticipationForAdmin = require('./delete-campaign-participation-for-admin.js'); -const deleteCertificationIssueReport = require('./delete-certification-issue-report.js'); -const deleteOrganizationPlaceLot = require('./delete-organization-place-lot.js'); -const deleteSession = require('./delete-session.js'); -const deleteSessionJuryComment = require('./delete-session-jury-comment.js'); -const deleteUnassociatedBadge = require('./delete-unassociated-badge.js'); -const deleteUnlinkedCertificationCandidate = require('./delete-unlinked-certification-candidate.js'); -const deneutralizeChallenge = require('./deneutralize-challenge.js'); -const disableCertificationCenterMembership = require('./disable-certification-center-membership.js'); -const disableMembership = require('./disable-membership.js'); -const dissociateUserFromOrganizationLearner = require('./dissociate-user-from-organization-learner.js'); -const endAssessmentBySupervisor = require('./end-assessment-by-supervisor.js'); -const enrolStudentsToSession = require('./enrol-students-to-session.js'); -const finalizeSession = require('./finalize-session.js'); -const findAllTags = require('./find-all-tags.js'); -const findAnswerByAssessment = require('./find-answer-by-assessment.js'); -const findAnswerByChallengeAndAssessment = require('./find-answer-by-challenge-and-assessment.js'); -const findAssessmentParticipationResultList = require('./find-assessment-participation-result-list.js'); -const findAssociationBetweenUserAndOrganizationLearner = require('./find-association-between-user-and-organization-learner.js'); -const findCampaignParticipationTrainings = require('./find-campaign-participation-trainings.js'); -const findCampaignParticipationsForUserManagement = require('./find-campaign-participations-for-user-management.js'); -const findCampaignProfilesCollectionParticipationSummaries = require('./find-campaign-profiles-collection-participation-summaries.js'); -const findCertificationAttestationsForDivision = require('./certificate/find-certification-attestations-for-division.js'); -const findCertificationCenterMembershipsByCertificationCenter = require('./find-certification-center-memberships-by-certification-center.js'); -const findCertificationCenterMembershipsByUser = require('./find-certification-center-memberships-by-user.js'); -const findCompetenceEvaluationsByAssessment = require('./find-competence-evaluations-by-assessment.js'); -const findComplementaryCertifications = require('./find-complementary-certifications.js'); -const findCountries = require('./find-countries.js'); -const findDivisionsByCertificationCenter = require('./find-divisions-by-certification-center.js'); -const findDivisionsByOrganization = require('./find-divisions-by-organization.js'); -const findFinalizedSessionsToPublish = require('./find-finalized-sessions-to-publish.js'); -const findFinalizedSessionsWithRequiredAction = require('./find-finalized-sessions-with-required-action.js'); -const findGroupsByOrganization = require('./find-groups-by-organization.js'); -const findLatestOngoingUserCampaignParticipations = require('./find-latest-ongoing-user-campaign-participations.js'); -const findOrganizationPlacesLot = require('./find-organization-places-lot.js'); -const findOrganizationTargetProfileSummariesForAdmin = require('./find-organization-target-profile-summaries-for-admin.js'); -const findPaginatedCampaignManagements = require('./find-paginated-campaign-managements.js'); -const findPaginatedCampaignParticipantsActivities = require('./find-paginated-campaign-participants-activities.js'); -const findPaginatedCertificationCenterSessionSummaries = require('./find-paginated-certification-center-session-summaries.js'); -const findPaginatedFilteredCertificationCenters = require('./find-paginated-filtered-certification-centers.js'); -const findPaginatedFilteredOrganizationCampaigns = require('./find-paginated-filtered-organization-campaigns.js'); -const findPaginatedFilteredOrganizationMemberships = require('./find-paginated-filtered-organization-memberships.js'); -const findPaginatedFilteredOrganizations = require('./find-paginated-filtered-organizations.js'); -const findPaginatedFilteredScoParticipants = require('./find-paginated-filtered-sco-participants.js'); -const findPaginatedFilteredSupParticipants = require('./find-paginated-filtered-sup-participants.js'); -const findPaginatedFilteredTargetProfileOrganizations = require('./find-paginated-filtered-target-profile-organizations.js'); -const findPaginatedFilteredTargetProfileSummariesForAdmin = require('./find-paginated-filtered-target-profile-summaries-for-admin.js'); -const findPaginatedFilteredTutorials = require('./find-paginated-filtered-tutorials.js'); -const findPaginatedFilteredUsers = require('./find-paginated-filtered-users.js'); -const findPaginatedParticipationsForCampaignManagement = require('./find-paginated-participations-for-campaign-management.js'); -const findPaginatedTargetProfileTrainingSummaries = require('./find-paginated-target-profile-training-summaries.js'); -const findPaginatedTrainingSummaries = require('./find-paginated-training-summaries.js'); -const findPaginatedUserRecommendedTrainings = require('./find-paginated-user-recommended-trainings.js'); -const findPendingCertificationCenterInvitations = require('./find-pending-certification-center-invitations.js'); -const findPendingOrganizationInvitations = require('./find-pending-organization-invitations.js'); -const findStudentsForEnrolment = require('./find-students-for-enrolment.js'); -const findTargetProfileSummariesForTraining = require('./find-target-profile-summaries-for-training.js'); -const findTutorials = require('./find-tutorials.js'); -const findUserAuthenticationMethods = require('./find-user-authentication-methods.js'); -const findUserCampaignParticipationOverviews = require('./find-user-campaign-participation-overviews.js'); -const findUserForOidcReconciliation = require('./find-user-for-oidc-reconciliation.js'); -const findUserOrganizationsForAdmin = require('./find-user-organizations-for-admin.js'); -const findUserPrivateCertificates = require('./find-user-private-certificates.js'); -const flagSessionResultsAsSentToPrescriber = require('./flag-session-results-as-sent-to-prescriber.js'); -const generateUsername = require('./generate-username.js'); -const generateUsernameWithTemporaryPassword = require('./generate-username-with-temporary-password.js'); -const getAccountRecoveryDetails = require('./account-recovery/get-account-recovery-details.js'); -const getAdminMemberDetails = require('./get-admin-member-details.js'); -const getAdminMembers = require('./get-admin-members.js'); -const getAnswer = require('./get-answer.js'); -const getAssessment = require('./get-assessment.js'); -const getAttendanceSheet = require('./get-attendance-sheet.js'); -const getAvailableTargetProfilesForOrganization = require('./get-available-target-profiles-for-organization.js'); -const getCampaign = require('./get-campaign.js'); -const getCampaignAssessmentParticipation = require('./get-campaign-assessment-participation.js'); -const getCampaignAssessmentParticipationResult = require('./get-campaign-assessment-participation-result.js'); -const getCampaignByCode = require('./get-campaign-by-code.js'); -const getCampaignDetailsManagement = require('./get-campaign-details-management.js'); -const getCampaignParticipationsActivityByDay = require('./get-campaign-participations-activity-by-day.js'); -const getCampaignParticipationsCountByStage = require('./get-campaign-participations-counts-by-stage.js'); -const getCampaignParticipationsCountsByStatus = require('./get-campaign-participations-counts-by-status.js'); -const getCampaignProfile = require('./get-campaign-profile.js'); -const getCandidateImportSheetData = require('./get-candidate-import-sheet-data.js'); -const getCertificationAttestation = require('./certificate/get-certification-attestation.js'); -const getCertificationCandidate = require('./get-certification-candidate.js'); -const getCertificationCandidateSubscription = require('./get-certification-candidate-subscription.js'); -const getCertificationCenter = require('./get-certification-center.js'); -const getCertificationCenterForAdmin = require('./get-certification-center-for-admin.js'); -const getCertificationCenterInvitation = require('./get-certification-center-invitation.js'); -const getCertificationCourse = require('./get-certification-course.js'); -const getCertificationDetails = require('./get-certification-details.js'); -const getCertificationPointOfContact = require('./get-certification-point-of-contact.js'); -const getCertificationsResultsForLS = require('./certificate/get-certifications-results-for-ls.js'); -const getChallengeForPixAutoAnswer = require('./get-challenge-for-pix-auto-answer.js'); -const getCleaCertifiedCandidateBySession = require('./get-clea-certified-candidate-by-session.js'); -const getCorrectionForAnswer = require('./get-correction-for-answer.js'); -const getCurrentUser = require('./get-current-user.js'); -const getExternalAuthenticationRedirectionUrl = require('./get-external-authentication-redirection-url.js'); -const getFrameworkAreas = require('./get-framework-areas.js'); -const getFrameworks = require('./get-frameworks.js'); -const getIdentityProviders = require('./get-identity-providers.js'); -const getImportSessionComplementaryCertificationHabilitationsLabels = require('./get-import-session-complementary-certification-habilitations-labels.js'); -const getJuryCertification = require('./get-jury-certification.js'); -const getJurySession = require('./get-jury-session.js'); -const getLastChallengeIdFromAssessmentId = require('./get-last-challenge-id-from-assessment-id.js'); -const getLearningContentByTargetProfile = require('./get-learning-content-by-target-profile.js'); -const getLearningContentForTargetProfileSubmission = require('./get-learning-content-for-target-profile-submission.js'); -const getNextChallengeForCampaignAssessment = require('./get-next-challenge-for-campaign-assessment.js'); -const getNextChallengeForCertification = require('./get-next-challenge-for-certification.js'); -const getNextChallengeForCompetenceEvaluation = require('./get-next-challenge-for-competence-evaluation.js'); -const getNextChallengeForDemo = require('./get-next-challenge-for-demo.js'); -const getNextChallengeForPreview = require('./get-next-challenge-for-preview.js'); -const getOrganizationInvitation = require('./get-organization-invitation.js'); -const getOrganizationLearner = require('./get-organization-learner.js'); -const getOrganizationLearnerActivity = require('./get-organization-learner-activity.js'); -const getOrganizationLearnersCsvTemplate = require('./get-organization-learners-csv-template.js'); -const getOrganizationMemberIdentities = require('./get-organization-members-identity.js'); -const getOrganizationPlacesCapacity = require('./get-organization-places-capacity.js'); -const getPaginatedParticipantsForAnOrganization = require('./get-paginated-participants-for-an-organization.js'); -const getParticipantsDivision = require('./get-participants-division.js'); -const getParticipantsGroup = require('./get-participants-group.js'); -const getParticipationsCountByMasteryRate = require('./get-participations-count-by-mastery-rate.js'); -const getPoleEmploiSendings = require('./get-pole-emploi-sendings.js'); -const getPrescriber = require('./get-prescriber.js'); -const getPrivateCertificate = require('./certificate/get-private-certificate.js'); -const getProgression = require('./get-progression.js'); -const getRecentlyUsedTags = require('./get-recently-used-tags.js'); -const getScoCertificationResultsByDivision = require('./get-sco-certification-results-by-division.js'); -const getScorecard = require('./get-scorecard.js'); -const getSession = require('./get-session.js'); -const getSessionCertificationCandidates = require('./get-session-certification-candidates.js'); -const getSessionCertificationReports = require('./get-session-certification-reports.js'); -const getSessionForSupervising = require('./get-session-for-supervising.js'); -const getSessionResults = require('./get-session-results.js'); -const getSessionResultsByResultRecipientEmail = require('./get-session-results-by-result-recipient-email.js'); -const getShareableCertificate = require('./certificate/get-shareable-certificate.js'); -const getSupervisorKitSessionInfo = require('./get-supervisor-kit-session-info.js'); -const getTargetProfileContentAsJson = require('./get-target-profile-content-as-json.js'); -const getTargetProfileForAdmin = require('./get-target-profile-for-admin.js'); -const getTraining = require('./get-training.js'); -const getUserByResetPasswordDemand = require('./get-user-by-reset-password-demand.js'); -const getUserCampaignAssessmentResult = require('./get-user-campaign-assessment-result.js'); -const getUserCampaignParticipationToCampaign = require('./get-user-campaign-participation-to-campaign.js'); -const getUserCertificationEligibility = require('./get-user-certification-eligibility.js'); -const getUserDetailsForAdmin = require('./get-user-details-for-admin.js'); -const getUserProfile = require('./get-user-profile.js'); -const getUserProfileSharedForCampaign = require('./get-user-profile-shared-for-campaign.js'); -const handleBadgeAcquisition = require('./handle-badge-acquisition.js'); -const handleTrainingRecommendation = require('./handle-training-recommendation.js'); -const importCertificationCandidatesFromCandidatesImportSheet = require('./import-certification-candidates-from-candidates-import-sheet.js'); -const importOrganizationLearnersFromSIECLEFormat = require('./import-organization-learners-from-siecle.js'); -const importSupOrganizationLearners = require('./import-sup-organization-learners.js'); -const improveCompetenceEvaluation = require('./improve-competence-evaluation.js'); -const linkUserToSessionCertificationCandidate = require('./link-user-to-session-certification-candidate.js'); -const manuallyResolveCertificationIssueReport = require('./manually-resolve-certification-issue-report.js'); -const markTargetProfileAsSimplifiedAccess = require('./mark-target-profile-as-simplified-access.js'); -const neutralizeChallenge = require('./neutralize-challenge.js'); -const outdateTargetProfile = require('./outdate-target-profile.js'); -const publishSession = require('./publish-session.js'); -const publishSessionsInBatch = require('./publish-sessions-in-batch.js'); -const reassignAuthenticationMethodToAnotherUser = require('./reassign-authentication-method-to-another-user.js'); -const reconcileOidcUser = require('./reconcile-oidc-user.js'); -const reconcileScoOrganizationLearnerAutomatically = require('./reconcile-sco-organization-learner-automatically.js'); -const reconcileScoOrganizationLearnerManually = require('./reconcile-sco-organization-learner-manually.js'); -const reconcileSupOrganizationLearner = require('./reconcile-sup-organization-learner.js'); -const rememberUserHasSeenAssessmentInstructions = require('./remember-user-has-seen-assessment-instructions.js'); -const rememberUserHasSeenChallengeTooltip = require('./remember-user-has-seen-challenge-tooltip.js'); -const rememberUserHasSeenLastDataProtectionPolicyInformation = require('./remember-user-has-seen-last-data-protection-policy-information.js'); -const rememberUserHasSeenNewDashboardInfo = require('./remember-user-has-seen-new-dashboard-info.js'); -const removeAuthenticationMethod = require('./remove-authentication-method.js'); -const replaceSupOrganizationLearners = require('./replace-sup-organization-learner.js'); -const resetScorecard = require('./reset-scorecard.js'); -const retrieveLastOrCreateCertificationCourse = require('./retrieve-last-or-create-certification-course.js'); -const revokeRefreshToken = require('./revoke-refresh-token.js'); -const saveAdminMember = require('./save-admin-member.js'); -const saveCertificationIssueReport = require('./save-certification-issue-report.js'); -const saveComputedCampaignParticipationResult = require('./save-computed-campaign-participation-result.js'); -const saveJuryComplementaryCertificationCourseResult = require('./save-jury-complementary-certification-course-result.js'); -const sendEmailForAccountRecovery = require('./account-recovery/send-email-for-account-recovery.js'); -const sendScoInvitation = require('./send-sco-invitation.js'); -const sendSharedParticipationResultsToPoleEmploi = require('./send-shared-participation-results-to-pole-emploi.js'); -const sendVerificationCode = require('./send-verification-code.js'); -const shareCampaignResult = require('./share-campaign-result.js'); -const simulateFlashScoring = require('./simulate-flash-scoring.js'); -const simulateOldScoring = require('./simulate-old-scoring.js'); -const startCampaignParticipation = require('./start-campaign-participation.js'); -const startOrResumeCompetenceEvaluation = require('./start-or-resume-competence-evaluation.js'); -const startWritingCampaignAssessmentResultsToStream = require('./start-writing-campaign-assessment-results-to-stream.js'); -const startWritingCampaignProfilesCollectionResultsToStream = require('./start-writing-campaign-profiles-collection-results-to-stream.js'); -const superviseSession = require('./supervise-session.js'); -const unarchiveCampaign = require('./unarchive-campaign.js'); -const unblockUserAccount = require('./unblock-user-account.js'); -const uncancelCertificationCourse = require('./uncancel-certification-course.js'); -const unpublishSession = require('./unpublish-session.js'); -const updateAdminMember = require('./update-admin-member.js'); -const updateBadge = require('./update-badge.js'); -const updateCampaign = require('./update-campaign.js'); -const updateCampaignDetailsManagement = require('./update-campaign-details-management.js'); -const updateCertificationCenter = require('./update-certification-center.js'); -const updateCertificationCenterReferer = require('./update-certification-center-referer.js'); -const updateExpiredPassword = require('./update-expired-password.js'); -const updateLastQuestionState = require('./update-last-question-state.js'); -const updateMembership = require('./update-membership.js'); -const updateOrganizationLearnerDependentUserPassword = require('./update-organization-learner-dependent-user-password.js'); -const updateParticipantExternalId = require('./update-participant-external-id.js'); -const updateSession = require('./update-session.js'); -const updateStudentNumber = require('./update-student-number.js'); -const updateTargetProfile = require('./update-target-profile.js'); -const updateTraining = require('./update-training.js'); -const updateUserDetailsForAdministration = require('./update-user-details-for-administration.js'); -const updateUserEmailWithValidation = require('./update-user-email-with-validation.js'); -const updateUserForAccountRecovery = require('./account-recovery/update-user-for-account-recovery.js'); -const updateUserPassword = require('./update-user-password.js'); -const validateSessions = require('./sessions-mass-import/validate-sessions.js'); -// organization-administration -const getOrganizationDetails = require('./organizations-administration/get-organization-details.js'); -const updateOrganizationInformation = require('./organizations-administration/update-organization.js'); +import { injectDependencies } from '../../infrastructure/utils/dependency-injection.js'; +import { abortCertificationCourse } from './abort-certification-course.js'; +import { acceptCertificationCenterInvitation } from './accept-certification-center-invitation.js'; +import { acceptOrganizationInvitation } from './accept-organization-invitation.js'; +import { acceptPixCertifTermsOfService } from './accept-pix-certif-terms-of-service.js'; +import { acceptPixLastTermsOfService } from './accept-pix-last-terms-of-service.js'; +import { acceptPixOrgaTermsOfService } from './accept-pix-orga-terms-of-service.js'; +import { addCertificationCandidateToSession } from './add-certification-candidate-to-session.js'; +import { addPixAuthenticationMethodByEmail } from './add-pix-authentication-method-by-email.js'; +import { addTutorialEvaluation } from './add-tutorial-evaluation.js'; +import { addTutorialToUser } from './add-tutorial-to-user.js'; +import { anonymizeUser } from './anonymize-user.js'; +import { archiveCampaign } from './archive-campaign.js'; +import { archiveOrganization } from './archive-organization.js'; +import { assignCertificationOfficerToJurySession } from './assign-certification-officer-to-jury-session.js'; +import { attachOrganizationsFromExistingTargetProfile } from './attach-organizations-from-existing-target-profile.js'; +import { attachOrganizationsToTargetProfile } from './attach-organizations-to-target-profile.js'; +import { attachTargetProfilesToOrganization } from './attach-target-profiles-to-organization.js'; +import { attachTargetProfilesToTraining } from './attach-target-profiles-to-training.js'; +import { authenticateAnonymousUser } from './authenticate-anonymous-user.js'; +import { authenticateApplication } from './authenticate-application.js'; +import { authenticateExternalUser } from './authenticate-external-user.js'; +import { authenticateOidcUser } from './authentication/authenticate-oidc-user.js'; +import { authenticateUser } from './authenticate-user.js'; +import { authorizeCertificationCandidateToResume } from './authorize-certification-candidate-to-resume.js'; +import { authorizeCertificationCandidateToStart } from './authorize-certification-candidate-to-start.js'; +import { beginCampaignParticipationImprovement } from './begin-campaign-participation-improvement.js'; +import { archiveCampaigns } from './campaigns-administration/archive-campaigns.js'; +import { cancelCertificationCenterInvitation } from './cancel-certification-center-invitation.js'; +import { cancelCertificationCourse } from './cancel-certification-course.js'; +import { cancelOrganizationInvitation } from './cancel-organization-invitation.js'; +import { changeUserLang } from './change-user-lang.js'; +import { checkScoAccountRecovery } from './check-sco-account-recovery.js'; +import { commentSessionAsJury } from './comment-session-as-jury.js'; +import { completeAssessment } from './complete-assessment.js'; +import { computeCampaignAnalysis } from './compute-campaign-analysis.js'; +import { computeCampaignCollectiveResult } from './compute-campaign-collective-result.js'; +import { computeCampaignParticipationAnalysis } from './compute-campaign-participation-analysis.js'; +import { correctAnswerThenUpdateAssessment } from './correct-answer-then-update-assessment.js'; +import { correctAnswer } from './correct-answer.js'; +import { correctCandidateIdentityInCertificationCourse } from './correct-candidate-identity-in-certification-course.js'; +import { createAccessTokenFromRefreshToken } from './create-access-token-from-refresh-token.js'; +import { createAndReconcileUserToOrganizationLearner } from './create-and-reconcile-user-to-organization-learner.js'; +import { createBadge } from './create-badge.js'; +import { createCampaign } from './create-campaign.js'; +import { createCertificationCenter } from './create-certification-center.js'; +import { createCertificationCenterMembershipByEmail } from './create-certification-center-membership-by-email.js'; +import { createCertificationCenterMembershipForScoOrganizationMember } from './create-certification-center-membership-for-sco-organization-member.js'; +import { createLcmsRelease } from './create-lcms-release.js'; +import { createMembership } from './create-membership.js'; +import { createOidcUser } from './create-oidc-user.js'; +import { createOrUpdateCertificationCenterInvitationForAdmin } from './create-or-update-certification-center-invitation-for-admin.js'; +import { createOrUpdateTrainingTrigger } from './create-or-update-training-trigger.js'; +import { createOrUpdateUserOrgaSettings } from './create-or-update-user-orga-settings.js'; +import { createOrganization } from './create-organization.js'; +import { createOrganizationInvitationByAdmin } from './create-organization-invitation-by-admin.js'; +import { createOrganizationInvitations } from './create-organization-invitations.js'; +import { resendOrganizationInvitation } from './resend-organization-invitation.js'; +import { createOrganizationPlacesLot } from './create-organization-places-lot.js'; +import { createOrganizationsWithTagsAndTargetProfiles } from './create-organizations-with-tags-and-target-profiles.js'; +import { createPasswordResetDemand } from './create-password-reset-demand.js'; +import { createSession } from './create-session.js'; +import { createSessions } from './sessions-mass-import/create-sessions.js'; +import { createTag } from './create-tag.js'; +import { createTargetProfile } from './create-target-profile.js'; +import { createTraining } from './create-training.js'; +import { createUser } from './create-user.js'; +import { createUserAndReconcileToOrganizationLearnerFromExternalUser } from './create-user-and-reconcile-to-organization-learner-from-external-user.js'; +import { deactivateAdminMember } from './deactivate-admin-member.js'; +import { deleteCampaignParticipation } from './delete-campaign-participation.js'; +import { deleteCampaignParticipationForAdmin } from './delete-campaign-participation-for-admin.js'; +import { deleteCertificationIssueReport } from './delete-certification-issue-report.js'; +import { deleteOrganizationPlaceLot } from './delete-organization-place-lot.js'; +import { deleteSession } from './delete-session.js'; +import { deleteSessionJuryComment } from './delete-session-jury-comment.js'; +import { deleteUnassociatedBadge } from './delete-unassociated-badge.js'; +import { deleteUnlinkedCertificationCandidate } from './delete-unlinked-certification-candidate.js'; +import { deneutralizeChallenge } from './deneutralize-challenge.js'; +import { disableCertificationCenterMembership } from './disable-certification-center-membership.js'; +import { disableMembership } from './disable-membership.js'; +import { dissociateUserFromOrganizationLearner } from './dissociate-user-from-organization-learner.js'; +import { endAssessmentBySupervisor } from './end-assessment-by-supervisor.js'; +import { enrolStudentsToSession } from './enrol-students-to-session.js'; +import { finalizeSession } from './finalize-session.js'; +import { findAllTags } from './find-all-tags.js'; +import { findAnswerByAssessment } from './find-answer-by-assessment.js'; +import { findAnswerByChallengeAndAssessment } from './find-answer-by-challenge-and-assessment.js'; +import { findAssessmentParticipationResultList } from './find-assessment-participation-result-list.js'; +import { findAssociationBetweenUserAndOrganizationLearner } from './find-association-between-user-and-organization-learner.js'; +import { findCampaignParticipationTrainings } from './find-campaign-participation-trainings.js'; +import { findCampaignParticipationsForUserManagement } from './find-campaign-participations-for-user-management.js'; +import { findCampaignProfilesCollectionParticipationSummaries } from './find-campaign-profiles-collection-participation-summaries.js'; +import { findCertificationAttestationsForDivision } from './certificate/find-certification-attestations-for-division.js'; +import { findCertificationCenterMembershipsByCertificationCenter } from './find-certification-center-memberships-by-certification-center.js'; +import { findCertificationCenterMembershipsByUser } from './find-certification-center-memberships-by-user.js'; +import { findCompetenceEvaluationsByAssessment } from './find-competence-evaluations-by-assessment.js'; +import { findComplementaryCertifications } from './find-complementary-certifications.js'; +import { findCountries } from './find-countries.js'; +import { findDivisionsByCertificationCenter } from './find-divisions-by-certification-center.js'; +import { findDivisionsByOrganization } from './find-divisions-by-organization.js'; +import { findFinalizedSessionsToPublish } from './find-finalized-sessions-to-publish.js'; +import { findFinalizedSessionsWithRequiredAction } from './find-finalized-sessions-with-required-action.js'; +import { findGroupsByOrganization } from './find-groups-by-organization.js'; +import { findLatestOngoingUserCampaignParticipations } from './find-latest-ongoing-user-campaign-participations.js'; +import { findOrganizationPlacesLot } from './find-organization-places-lot.js'; +import { findOrganizationTargetProfileSummariesForAdmin } from './find-organization-target-profile-summaries-for-admin.js'; +import { findPaginatedCampaignManagements } from './find-paginated-campaign-managements.js'; +import { findPaginatedCampaignParticipantsActivities } from './find-paginated-campaign-participants-activities.js'; +import { findPaginatedCertificationCenterSessionSummaries } from './find-paginated-certification-center-session-summaries.js'; +import { findPaginatedFilteredCertificationCenters } from './find-paginated-filtered-certification-centers.js'; +import { findPaginatedFilteredOrganizationCampaigns } from './find-paginated-filtered-organization-campaigns.js'; +import { findPaginatedFilteredOrganizationMemberships } from './find-paginated-filtered-organization-memberships.js'; +import { findPaginatedFilteredOrganizations } from './find-paginated-filtered-organizations.js'; +import { findPaginatedFilteredScoParticipants } from './find-paginated-filtered-sco-participants.js'; +import { findPaginatedFilteredSupParticipants } from './find-paginated-filtered-sup-participants.js'; +import { findTargetProfileOrganizations as findPaginatedFilteredTargetProfileOrganizations } from './find-paginated-filtered-target-profile-organizations.js'; +import { findPaginatedFilteredTargetProfileSummariesForAdmin } from './find-paginated-filtered-target-profile-summaries-for-admin.js'; +import { findPaginatedFilteredTutorials } from './find-paginated-filtered-tutorials.js'; +import { findPaginatedFilteredUsers } from './find-paginated-filtered-users.js'; +import { findPaginatedParticipationsForCampaignManagement } from './find-paginated-participations-for-campaign-management.js'; +import { findPaginatedTargetProfileTrainingSummaries } from './find-paginated-target-profile-training-summaries.js'; +import { findPaginatedTrainingSummaries } from './find-paginated-training-summaries.js'; +import { findPaginatedUserRecommendedTrainings } from './find-paginated-user-recommended-trainings.js'; +import { findPendingCertificationCenterInvitations } from './find-pending-certification-center-invitations.js'; +import { findPendingOrganizationInvitations } from './find-pending-organization-invitations.js'; +import { findStudentsForEnrolment } from './find-students-for-enrolment.js'; +import { findTargetProfileSummariesForTraining } from './find-target-profile-summaries-for-training.js'; +import { findTutorials } from './find-tutorials.js'; +import { findUserAuthenticationMethods } from './find-user-authentication-methods.js'; +import { findUserCampaignParticipationOverviews } from './find-user-campaign-participation-overviews.js'; +import { findUserForOidcReconciliation } from './find-user-for-oidc-reconciliation.js'; +import { findUserOrganizationsForAdmin } from './find-user-organizations-for-admin.js'; +import { findUserPrivateCertificates } from './find-user-private-certificates.js'; +import { flagSessionResultsAsSentToPrescriber } from './flag-session-results-as-sent-to-prescriber.js'; +import { generateUsername } from './generate-username.js'; +import { generateUsernameWithTemporaryPassword } from './generate-username-with-temporary-password.js'; +import { getAccountRecoveryDetails } from './account-recovery/get-account-recovery-details.js'; +import { getAdminMemberDetails } from './get-admin-member-details.js'; +import { getAdminMembers } from './get-admin-members.js'; +import { getAnswer } from './get-answer.js'; +import { getAssessment } from './get-assessment.js'; +import { getAttendanceSheet } from './get-attendance-sheet.js'; +import { getAvailableTargetProfilesForOrganization } from './get-available-target-profiles-for-organization.js'; +import { getCampaign } from './get-campaign.js'; +import { getCampaignAssessmentParticipation } from './get-campaign-assessment-participation.js'; +import { getCampaignAssessmentParticipationResult } from './get-campaign-assessment-participation-result.js'; +import { getCampaignByCode } from './get-campaign-by-code.js'; +import { getCampaignManagement as getCampaignDetailsManagement } from './get-campaign-details-management.js'; +import { getCampaignParticipationsActivityByDay } from './get-campaign-participations-activity-by-day.js'; +import { getCampaignParticipationsCountByStage } from './get-campaign-participations-counts-by-stage.js'; +import { getCampaignParticipationsCountsByStatus } from './get-campaign-participations-counts-by-status.js'; +import { getCampaignProfile } from './get-campaign-profile.js'; +import { getCandidateImportSheetData } from './get-candidate-import-sheet-data.js'; +import { getCertificationAttestation } from './certificate/get-certification-attestation.js'; +import { getCertificationCandidate } from './get-certification-candidate.js'; +import { getCertificationCandidateSubscription } from './get-certification-candidate-subscription.js'; +import { getCertificationCenter } from './get-certification-center.js'; +import { getCertificationCenterForAdmin } from './get-certification-center-for-admin.js'; +import { getCertificationCenterInvitation } from './get-certification-center-invitation.js'; +import { getCertificationCourse } from './get-certification-course.js'; +import { getCertificationDetails } from './get-certification-details.js'; +import { getCertificationPointOfContact } from './get-certification-point-of-contact.js'; +import { getCertificationsResultsForLS } from './certificate/get-certifications-results-for-ls.js'; +import { getChallengeForPixAutoAnswer } from './get-challenge-for-pix-auto-answer.js'; +import { getCleaCertifiedCandidateBySession } from './get-clea-certified-candidate-by-session.js'; +import { getCorrectionForAnswer } from './get-correction-for-answer.js'; +import { getCurrentUser } from './get-current-user.js'; +import { getExternalAuthenticationRedirectionUrl } from './get-external-authentication-redirection-url.js'; +import { getFrameworkAreas } from './get-framework-areas.js'; +import { getFrameworks } from './get-frameworks.js'; +import { getIdentityProviders } from './get-identity-providers.js'; +import { getImportSessionComplementaryCertificationHabilitationsLabels } from './get-import-session-complementary-certification-habilitations-labels.js'; +import { getJuryCertification } from './get-jury-certification.js'; +import { getJurySession } from './get-jury-session.js'; +import { getLastChallengeIdFromAssessmentId } from './get-last-challenge-id-from-assessment-id.js'; +import { getLearningContentByTargetProfile } from './get-learning-content-by-target-profile.js'; +import { getLearningContentForTargetProfileSubmission } from './get-learning-content-for-target-profile-submission.js'; +import { getNextChallengeForCampaignAssessment } from './get-next-challenge-for-campaign-assessment.js'; +import { getNextChallengeForCertification } from './get-next-challenge-for-certification.js'; +import { getNextChallengeForCompetenceEvaluation } from './get-next-challenge-for-competence-evaluation.js'; +import { getNextChallengeForDemo } from './get-next-challenge-for-demo.js'; +import { getNextChallengeForPreview } from './get-next-challenge-for-preview.js'; +import { getOrganizationInvitation } from './get-organization-invitation.js'; +import { getOrganizationLearner } from './get-organization-learner.js'; +import { getOrganizationLearnerActivity } from './get-organization-learner-activity.js'; +import { getOrganizationLearnersCsvTemplate } from './get-organization-learners-csv-template.js'; +import { getOrganizationMemberIdentities } from './get-organization-members-identity.js'; +import { getOrganizationPlacesCapacity } from './get-organization-places-capacity.js'; +import { getPaginatedParticipantsForAnOrganization } from './get-paginated-participants-for-an-organization.js'; +import { getParticipantsDivision } from './get-participants-division.js'; +import { getParticipantsGroup } from './get-participants-group.js'; +import { getParticipationsCountByMasteryRate } from './get-participations-count-by-mastery-rate.js'; +import { getPoleEmploiSendings } from './get-pole-emploi-sendings.js'; +import { getPrescriber } from './get-prescriber.js'; +import { getPrivateCertificate } from './certificate/get-private-certificate.js'; +import { getProgression } from './get-progression.js'; +import { getRecentlyUsedTags } from './get-recently-used-tags.js'; +import { getScoCertificationResultsByDivision } from './get-sco-certification-results-by-division.js'; +import { getScorecard } from './get-scorecard.js'; +import { getSession } from './get-session.js'; +import { getSessionCertificationCandidates } from './get-session-certification-candidates.js'; +import { getSessionCertificationReports } from './get-session-certification-reports.js'; +import { getSessionForSupervising } from './get-session-for-supervising.js'; +import { getSessionResults } from './get-session-results.js'; +import { getSessionResultsByResultRecipientEmail } from './get-session-results-by-result-recipient-email.js'; +import { getShareableCertificate } from './certificate/get-shareable-certificate.js'; +import { getSupervisorKitSessionInfo } from './get-supervisor-kit-session-info.js'; +import { getTargetProfileContentAsJson } from './get-target-profile-content-as-json.js'; +import { getTargetProfileForAdmin } from './get-target-profile-for-admin.js'; +import { getTraining } from './get-training.js'; +import { getUserByResetPasswordDemand } from './get-user-by-reset-password-demand.js'; +import { getUserCampaignAssessmentResult } from './get-user-campaign-assessment-result.js'; +import { getUserCampaignParticipationToCampaign } from './get-user-campaign-participation-to-campaign.js'; +import { getUserCertificationEligibility } from './get-user-certification-eligibility.js'; +import { getUserDetailsForAdmin } from './get-user-details-for-admin.js'; +import { getUserProfile } from './get-user-profile.js'; +import { getUserProfileSharedForCampaign } from './get-user-profile-shared-for-campaign.js'; +import { handleBadgeAcquisition } from './handle-badge-acquisition.js'; +import { handleTrainingRecommendation } from './handle-training-recommendation.js'; +import { importCertificationCandidatesFromCandidatesImportSheet } from './import-certification-candidates-from-candidates-import-sheet.js'; +import { importOrganizationLearnersFromSIECLEFormat } from './import-organization-learners-from-siecle.js'; +import { importSupOrganizationLearners } from './import-sup-organization-learners.js'; +import { improveCompetenceEvaluation } from './improve-competence-evaluation.js'; +import { linkUserToSessionCertificationCandidate } from './link-user-to-session-certification-candidate.js'; +import { manuallyResolveCertificationIssueReport } from './manually-resolve-certification-issue-report.js'; +import { markTargetProfileAsSimplifiedAccess } from './mark-target-profile-as-simplified-access.js'; +import { neutralizeChallenge } from './neutralize-challenge.js'; +import { outdateTargetProfile } from './outdate-target-profile.js'; +import { publishSession } from './publish-session.js'; +import { publishSessionsInBatch } from './publish-sessions-in-batch.js'; +import { reassignAuthenticationMethodToAnotherUser } from './reassign-authentication-method-to-another-user.js'; +import { reconcileOidcUser } from './reconcile-oidc-user.js'; +import { reconcileScoOrganizationLearnerAutomatically } from './reconcile-sco-organization-learner-automatically.js'; +import { reconcileScoOrganizationLearnerManually } from './reconcile-sco-organization-learner-manually.js'; +import { reconcileSupOrganizationLearner } from './reconcile-sup-organization-learner.js'; +import { rememberUserHasSeenAssessmentInstructions } from './remember-user-has-seen-assessment-instructions.js'; +import { rememberUserHasSeenChallengeTooltip } from './remember-user-has-seen-challenge-tooltip.js'; +import { rememberUserHasSeenLastDataProtectionPolicyInformation } from './remember-user-has-seen-last-data-protection-policy-information.js'; +import { rememberUserHasSeenNewDashboardInfo } from './remember-user-has-seen-new-dashboard-info.js'; +import { removeAuthenticationMethod } from './remove-authentication-method.js'; +import { replaceSupOrganizationLearners } from './replace-sup-organization-learner.js'; +import { resetScorecard } from './reset-scorecard.js'; +import { retrieveLastOrCreateCertificationCourse } from './retrieve-last-or-create-certification-course.js'; +import { revokeRefreshToken } from './revoke-refresh-token.js'; +import { saveAdminMember } from './save-admin-member.js'; +import { saveCertificationIssueReport } from './save-certification-issue-report.js'; +import { saveComputedCampaignParticipationResult } from './save-computed-campaign-participation-result.js'; +import { saveJuryComplementaryCertificationCourseResult } from './save-jury-complementary-certification-course-result.js'; +import { sendEmailForAccountRecovery } from './account-recovery/send-email-for-account-recovery.js'; +import { sendScoInvitation } from './send-sco-invitation.js'; +import { sendSharedParticipationResultsToPoleEmploi } from './send-shared-participation-results-to-pole-emploi.js'; +import { sendVerificationCode } from './send-verification-code.js'; +import { shareCampaignResult } from './share-campaign-result.js'; +import { simulateFlashScoring } from './simulate-flash-scoring.js'; +import { simulateOldScoring } from './simulate-old-scoring.js'; +import { startCampaignParticipation } from './start-campaign-participation.js'; +import { startOrResumeCompetenceEvaluation } from './start-or-resume-competence-evaluation.js'; +import { startWritingCampaignAssessmentResultsToStream } from './start-writing-campaign-assessment-results-to-stream.js'; +import { startWritingCampaignProfilesCollectionResultsToStream } from './start-writing-campaign-profiles-collection-results-to-stream.js'; +import { superviseSession } from './supervise-session.js'; +import { unarchiveCampaign } from './unarchive-campaign.js'; +import { unblockUserAccount } from './unblock-user-account.js'; +import { uncancelCertificationCourse } from './uncancel-certification-course.js'; +import { unpublishSession } from './unpublish-session.js'; +import { updateAdminMember } from './update-admin-member.js'; +import { updateBadge } from './update-badge.js'; +import { updateCampaign } from './update-campaign.js'; +import { updateCampaignDetailsManagement } from './update-campaign-details-management.js'; +import { updateCertificationCenter } from './update-certification-center.js'; +import { updateCertificationCenterReferer } from './update-certification-center-referer.js'; +import { updateExpiredPassword } from './update-expired-password.js'; +import { updateLastQuestionState } from './update-last-question-state.js'; +import { updateMembership } from './update-membership.js'; +import { updateOrganizationLearnerDependentUserPassword } from './update-organization-learner-dependent-user-password.js'; +import { updateParticipantExternalId } from './update-participant-external-id.js'; +import { updateSession } from './update-session.js'; +import { updateStudentNumber } from './update-student-number.js'; +import { updateTargetProfile } from './update-target-profile.js'; +import { updateTraining } from './update-training.js'; +import { updateUserDetailsForAdministration } from './update-user-details-for-administration.js'; +import { updateUserEmailWithValidation } from './update-user-email-with-validation.js'; +import { updateUserForAccountRecovery } from './account-recovery/update-user-for-account-recovery.js'; +import { updateUserPassword } from './update-user-password.js'; +import { validateSessions } from './sessions-mass-import/validate-sessions.js'; +import { getOrganizationDetails } from './organizations-administration/get-organization-details.js'; +import { updateOrganizationInformation } from './organizations-administration/update-organization.js'; const usecasesWithoutInjectedDependencies = { abortCertificationCourse, @@ -715,7 +715,7 @@ const usecasesWithoutInjectedDependencies = { authorizeCertificationCandidateToResume, authorizeCertificationCandidateToStart, beginCampaignParticipationImprovement, - campaignAdministrationArchiveCampaign, + archiveCampaigns, cancelCertificationCenterInvitation, cancelCertificationCourse, cancelOrganizationInvitation, @@ -978,4 +978,4 @@ const usecasesWithoutInjectedDependencies = { const usecases = injectDependencies(usecasesWithoutInjectedDependencies, dependencies); -module.exports = usecases; +export { usecases }; diff --git a/api/lib/domain/usecases/link-user-to-session-certification-candidate.js b/api/lib/domain/usecases/link-user-to-session-certification-candidate.js index 01c84c580db..4ee08e72666 100644 --- a/api/lib/domain/usecases/link-user-to-session-certification-candidate.js +++ b/api/lib/domain/usecases/link-user-to-session-certification-candidate.js @@ -1,17 +1,19 @@ -const _ = require('lodash'); -const CertificationCandidate = require('../models/CertificationCandidate.js'); -const { +import _ from 'lodash'; +import { CertificationCandidate } from '../models/CertificationCandidate.js'; + +import { CertificationCandidateByPersonalInfoNotFoundError, MatchingReconciledStudentNotFoundError, CertificationCandidateByPersonalInfoTooManyMatchesError, UserAlreadyLinkedToCandidateInSessionError, SessionNotAccessible, UnexpectedUserAccountError, -} = require('../errors.js'); -const UserLinkedToCertificationCandidate = require('../events/UserLinkedToCertificationCandidate.js'); -const UserAlreadyLinkedToCertificationCandidate = require('../events/UserAlreadyLinkedToCertificationCandidate.js'); +} from '../errors.js'; + +import { UserLinkedToCertificationCandidate } from '../events/UserLinkedToCertificationCandidate.js'; +import { UserAlreadyLinkedToCertificationCandidate } from '../events/UserAlreadyLinkedToCertificationCandidate.js'; -module.exports = async function linkUserToSessionCertificationCandidate({ +const linkUserToSessionCertificationCandidate = async function ({ userId, sessionId, firstName, @@ -71,6 +73,8 @@ module.exports = async function linkUserToSessionCertificationCandidate({ } }; +export { linkUserToSessionCertificationCandidate }; + async function _getSessionCertificationCandidateByPersonalInfo({ sessionId, participatingCertificationCandidate, diff --git a/api/lib/domain/usecases/manually-resolve-certification-issue-report.js b/api/lib/domain/usecases/manually-resolve-certification-issue-report.js index 35b88f53b97..67f249a0d27 100644 --- a/api/lib/domain/usecases/manually-resolve-certification-issue-report.js +++ b/api/lib/domain/usecases/manually-resolve-certification-issue-report.js @@ -1,6 +1,6 @@ -const { CertificationIssueReportAutomaticallyResolvedShouldNotBeUpdatedManually } = require('../errors.js'); +import { CertificationIssueReportAutomaticallyResolvedShouldNotBeUpdatedManually } from '../errors.js'; -module.exports = async function manuallyResolveCertificationIssueReport({ +const manuallyResolveCertificationIssueReport = async function ({ certificationIssueReportId, resolution, certificationIssueReportRepository, @@ -13,3 +13,5 @@ module.exports = async function manuallyResolveCertificationIssueReport({ certificationIssueReport.resolveManually(resolution); await certificationIssueReportRepository.save(certificationIssueReport); }; + +export { manuallyResolveCertificationIssueReport }; diff --git a/api/lib/domain/usecases/mark-target-profile-as-simplified-access.js b/api/lib/domain/usecases/mark-target-profile-as-simplified-access.js index 127e8c7a0f2..08596b4e17e 100644 --- a/api/lib/domain/usecases/mark-target-profile-as-simplified-access.js +++ b/api/lib/domain/usecases/mark-target-profile-as-simplified-access.js @@ -1,3 +1,5 @@ -module.exports = async function markTargetProfileAsSimplifiedAccess({ id, targetProfileRepository }) { +const markTargetProfileAsSimplifiedAccess = async function ({ id, targetProfileRepository }) { return targetProfileRepository.update({ id, isSimplifiedAccess: true }); }; + +export { markTargetProfileAsSimplifiedAccess }; diff --git a/api/lib/domain/usecases/neutralize-challenge.js b/api/lib/domain/usecases/neutralize-challenge.js index b2a850796ec..629a6bd7ac4 100644 --- a/api/lib/domain/usecases/neutralize-challenge.js +++ b/api/lib/domain/usecases/neutralize-challenge.js @@ -1,6 +1,6 @@ -const ChallengeNeutralized = require('../events/ChallengeNeutralized.js'); +import { ChallengeNeutralized } from '../events/ChallengeNeutralized.js'; -module.exports = async function neutralizeChallenge({ +const neutralizeChallenge = async function ({ certificationAssessmentRepository, certificationCourseId, challengeRecId, @@ -13,3 +13,5 @@ module.exports = async function neutralizeChallenge({ await certificationAssessmentRepository.save(certificationAssessment); return new ChallengeNeutralized({ certificationCourseId, juryId }); }; + +export { neutralizeChallenge }; diff --git a/api/lib/domain/usecases/organizations-administration/get-organization-details.js b/api/lib/domain/usecases/organizations-administration/get-organization-details.js index 3a99bafed07..3d5b99e5a12 100644 --- a/api/lib/domain/usecases/organizations-administration/get-organization-details.js +++ b/api/lib/domain/usecases/organizations-administration/get-organization-details.js @@ -1,3 +1,5 @@ -module.exports = function getOrganizationDetails({ organizationId, organizationForAdminRepository }) { +const getOrganizationDetails = function ({ organizationId, organizationForAdminRepository }) { return organizationForAdminRepository.get(organizationId); }; + +export { getOrganizationDetails }; diff --git a/api/lib/domain/usecases/organizations-administration/update-organization.js b/api/lib/domain/usecases/organizations-administration/update-organization.js index 6682ebc001a..9f2f09c6207 100644 --- a/api/lib/domain/usecases/organizations-administration/update-organization.js +++ b/api/lib/domain/usecases/organizations-administration/update-organization.js @@ -1,9 +1,8 @@ -const bluebird = require('bluebird'); -const _ = require('lodash'); -const OrganizationTag = require('../../models/OrganizationTag.js'); -const DataProtectionOfficer = require('../../models/DataProtectionOfficer.js'); - -const apps = require('../../constants.js'); +import bluebird from 'bluebird'; +import _ from 'lodash'; +import { OrganizationTag } from '../../models/OrganizationTag.js'; +import { DataProtectionOfficer } from '../../models/DataProtectionOfficer.js'; +import * as apps from '../../constants.js'; async function _updateOrganizationTags({ organization, @@ -32,7 +31,7 @@ async function _updateOrganizationTags({ organizationId: organization.id, tagId: tag.id, }); - await organizationTagRepository.delete({ organizationTagId: organizationTag.id }); + await organizationTagRepository.remove({ organizationTagId: organizationTag.id }); }); } } @@ -68,7 +67,7 @@ async function _enablingOrganizationFeature(organization, organizationFeatureRep } } -module.exports = async function updateOrganizationInformation({ +const updateOrganizationInformation = async function ({ organization, dataProtectionOfficerRepository, organizationFeatureRepository, @@ -111,3 +110,5 @@ module.exports = async function updateOrganizationInformation({ return updatedOrganization; }; + +export { updateOrganizationInformation }; diff --git a/api/lib/domain/usecases/outdate-target-profile.js b/api/lib/domain/usecases/outdate-target-profile.js index d34d89a350f..75ffe9b4e4b 100644 --- a/api/lib/domain/usecases/outdate-target-profile.js +++ b/api/lib/domain/usecases/outdate-target-profile.js @@ -1,3 +1,5 @@ -module.exports = async function outdateTargetProfile({ id, targetProfileRepository }) { +const outdateTargetProfile = async function ({ id, targetProfileRepository }) { await targetProfileRepository.update({ id, outdated: true }); }; + +export { outdateTargetProfile }; diff --git a/api/lib/domain/usecases/publish-session.js b/api/lib/domain/usecases/publish-session.js index 1906e12a36a..d33e0caf39a 100644 --- a/api/lib/domain/usecases/publish-session.js +++ b/api/lib/domain/usecases/publish-session.js @@ -1,4 +1,4 @@ -module.exports = async function publishSession({ +const publishSession = async function ({ i18n, sessionId, certificationRepository, @@ -20,3 +20,5 @@ module.exports = async function publishSession({ return sessionRepository.get(sessionId); }; + +export { publishSession }; diff --git a/api/lib/domain/usecases/publish-sessions-in-batch.js b/api/lib/domain/usecases/publish-sessions-in-batch.js index 68f2c93fb78..e39fd790653 100644 --- a/api/lib/domain/usecases/publish-sessions-in-batch.js +++ b/api/lib/domain/usecases/publish-sessions-in-batch.js @@ -1,7 +1,8 @@ -const { v4: uuidv4 } = require('uuid'); -const { SessionPublicationBatchResult } = require('../models/SessionPublicationBatchResult.js'); +import { v4 as uuidv4 } from 'uuid'; -module.exports = async function publishSessionsInBatch({ +import { SessionPublicationBatchResult } from '../models/SessionPublicationBatchResult.js'; + +const publishSessionsInBatch = async function ({ sessionIds, certificationCenterRepository, certificationRepository, @@ -28,3 +29,5 @@ module.exports = async function publishSessionsInBatch({ } return result; }; + +export { publishSessionsInBatch }; diff --git a/api/lib/domain/usecases/reassign-authentication-method-to-another-user.js b/api/lib/domain/usecases/reassign-authentication-method-to-another-user.js index b05caf09413..984a643345e 100644 --- a/api/lib/domain/usecases/reassign-authentication-method-to-another-user.js +++ b/api/lib/domain/usecases/reassign-authentication-method-to-another-user.js @@ -1,6 +1,6 @@ -const { AuthenticationMethodAlreadyExistsError } = require('../errors.js'); +import { AuthenticationMethodAlreadyExistsError } from '../errors.js'; -module.exports = async function reassignAuthenticationMethodToAnotherUser({ +const reassignAuthenticationMethodToAnotherUser = async function ({ originUserId, targetUserId, authenticationMethodId, @@ -28,6 +28,8 @@ module.exports = async function reassignAuthenticationMethodToAnotherUser({ }); }; +export { reassignAuthenticationMethodToAnotherUser }; + async function _checkIfTargetUserExists({ targetUserId, userRepository }) { await userRepository.get(targetUserId); } diff --git a/api/lib/domain/usecases/reconcile-oidc-user.js b/api/lib/domain/usecases/reconcile-oidc-user.js index cb03321b192..478ee57260e 100644 --- a/api/lib/domain/usecases/reconcile-oidc-user.js +++ b/api/lib/domain/usecases/reconcile-oidc-user.js @@ -1,7 +1,7 @@ -const { AuthenticationKeyExpired, MissingUserAccountError } = require('../errors.js'); -const AuthenticationMethod = require('../models/AuthenticationMethod.js'); +import { AuthenticationKeyExpired, MissingUserAccountError } from '../errors.js'; +import { AuthenticationMethod } from '../models/AuthenticationMethod.js'; -module.exports = async function reconcileOidcUser({ +const reconcileOidcUser = async function ({ authenticationKey, oidcAuthenticationService, authenticationSessionService, @@ -39,3 +39,5 @@ module.exports = async function reconcileOidcUser({ return { accessToken, logoutUrlUUID }; }; + +export { reconcileOidcUser }; diff --git a/api/lib/domain/usecases/reconcile-sco-organization-learner-automatically.js b/api/lib/domain/usecases/reconcile-sco-organization-learner-automatically.js index 532120ec407..7983c0b691f 100644 --- a/api/lib/domain/usecases/reconcile-sco-organization-learner-automatically.js +++ b/api/lib/domain/usecases/reconcile-sco-organization-learner-automatically.js @@ -1,7 +1,7 @@ -const { CampaignCodeError, UserCouldNotBeReconciledError } = require('../../domain/errors.js'); -const _ = require('lodash'); +import { CampaignCodeError, UserCouldNotBeReconciledError } from '../../domain/errors.js'; +import _ from 'lodash'; -module.exports = async function reconcileScoOrganizationLearnerAutomatically({ +const reconcileScoOrganizationLearnerAutomatically = async function ({ campaignCode, userId, campaignRepository, @@ -27,3 +27,5 @@ module.exports = async function reconcileScoOrganizationLearnerAutomatically({ organizationId: campaign.organizationId, }); }; + +export { reconcileScoOrganizationLearnerAutomatically }; diff --git a/api/lib/domain/usecases/reconcile-sco-organization-learner-manually.js b/api/lib/domain/usecases/reconcile-sco-organization-learner-manually.js index 39ea21920ea..7bfbe87707e 100644 --- a/api/lib/domain/usecases/reconcile-sco-organization-learner-manually.js +++ b/api/lib/domain/usecases/reconcile-sco-organization-learner-manually.js @@ -1,12 +1,15 @@ -const { +import { CampaignCodeError, OrganizationLearnerAlreadyLinkedToUserError, UserShouldNotBeReconciledOnAnotherAccountError, -} = require('../errors.js'); -const { STUDENT_RECONCILIATION_ERRORS } = require('../constants.js'); -const isEmpty = require('lodash/isEmpty'); +} from '../errors.js'; -module.exports = async function reconcileScoOrganizationLearnerManually({ +import { STUDENT_RECONCILIATION_ERRORS } from '../constants.js'; +import lodash from 'lodash'; + +const { isEmpty } = lodash; + +const reconcileScoOrganizationLearnerManually = async function ({ campaignCode, reconciliationInfo, withReconciliation, @@ -56,6 +59,8 @@ module.exports = async function reconcileScoOrganizationLearnerManually({ } }; +export { reconcileScoOrganizationLearnerManually }; + async function _checkIfAnotherStudentIsAlreadyReconciledWithTheSameOrganizationAndUser( userId, organizationId, diff --git a/api/lib/domain/usecases/reconcile-sup-organization-learner.js b/api/lib/domain/usecases/reconcile-sup-organization-learner.js index 8407fe24913..dd828b92212 100644 --- a/api/lib/domain/usecases/reconcile-sup-organization-learner.js +++ b/api/lib/domain/usecases/reconcile-sup-organization-learner.js @@ -1,6 +1,6 @@ -const { NotFoundError } = require('../errors.js'); +import { NotFoundError } from '../errors.js'; -module.exports = async function reconcileSupOrganizationLearner({ +const reconcileSupOrganizationLearner = async function ({ campaignCode, reconciliationInfo: { userId, studentNumber, firstName, lastName, birthdate }, campaignRepository, @@ -25,3 +25,5 @@ module.exports = async function reconcileSupOrganizationLearner({ organizationLearnerId: matchedOrganizationLearner.id, }); }; + +export { reconcileSupOrganizationLearner }; diff --git a/api/lib/domain/usecases/remember-user-has-seen-assessment-instructions.js b/api/lib/domain/usecases/remember-user-has-seen-assessment-instructions.js index 42e9e1295b5..b07d728e80b 100644 --- a/api/lib/domain/usecases/remember-user-has-seen-assessment-instructions.js +++ b/api/lib/domain/usecases/remember-user-has-seen-assessment-instructions.js @@ -1,3 +1,5 @@ -module.exports = function rememberUserHasSeenAssessmentInstructions({ userId, userRepository }) { +const rememberUserHasSeenAssessmentInstructions = function ({ userId, userRepository }) { return userRepository.updateHasSeenAssessmentInstructionsToTrue(userId); }; + +export { rememberUserHasSeenAssessmentInstructions }; diff --git a/api/lib/domain/usecases/remember-user-has-seen-challenge-tooltip.js b/api/lib/domain/usecases/remember-user-has-seen-challenge-tooltip.js index 88527ab0df9..18738ff2d2a 100644 --- a/api/lib/domain/usecases/remember-user-has-seen-challenge-tooltip.js +++ b/api/lib/domain/usecases/remember-user-has-seen-challenge-tooltip.js @@ -1,3 +1,5 @@ -module.exports = function rememberUserHasSeenChallengeTooltip({ userId, challengeType, userRepository }) { +const rememberUserHasSeenChallengeTooltip = function ({ userId, challengeType, userRepository }) { return userRepository.updateHasSeenChallengeTooltip({ userId, challengeType }); }; + +export { rememberUserHasSeenChallengeTooltip }; diff --git a/api/lib/domain/usecases/remember-user-has-seen-last-data-protection-policy-information.js b/api/lib/domain/usecases/remember-user-has-seen-last-data-protection-policy-information.js index 5fe81460a77..966783167a6 100644 --- a/api/lib/domain/usecases/remember-user-has-seen-last-data-protection-policy-information.js +++ b/api/lib/domain/usecases/remember-user-has-seen-last-data-protection-policy-information.js @@ -1,3 +1,5 @@ -module.exports = function rememberUserHasSeenLastDataProtectionPolicyInformation({ userId, userRepository }) { +const rememberUserHasSeenLastDataProtectionPolicyInformation = function ({ userId, userRepository }) { return userRepository.updateLastDataProtectionPolicySeenAt({ userId }); }; + +export { rememberUserHasSeenLastDataProtectionPolicyInformation }; diff --git a/api/lib/domain/usecases/remember-user-has-seen-new-dashboard-info.js b/api/lib/domain/usecases/remember-user-has-seen-new-dashboard-info.js index ae93cfbe6a4..2b5b1a159d7 100644 --- a/api/lib/domain/usecases/remember-user-has-seen-new-dashboard-info.js +++ b/api/lib/domain/usecases/remember-user-has-seen-new-dashboard-info.js @@ -1,3 +1,5 @@ -module.exports = function rememberUserHasSeenNewDashboardInfo({ userId, userRepository }) { +const rememberUserHasSeenNewDashboardInfo = function ({ userId, userRepository }) { return userRepository.updateHasSeenNewDashboardInfoToTrue(userId); }; + +export { rememberUserHasSeenNewDashboardInfo }; diff --git a/api/lib/domain/usecases/remove-authentication-method.js b/api/lib/domain/usecases/remove-authentication-method.js index 5d7b4f3be40..da78c1f6766 100644 --- a/api/lib/domain/usecases/remove-authentication-method.js +++ b/api/lib/domain/usecases/remove-authentication-method.js @@ -1,13 +1,8 @@ -const AuthenticationMethod = require('../models/AuthenticationMethod.js'); -const { UserNotAuthorizedToRemoveAuthenticationMethod } = require('../errors.js'); -const OidcIdentityProviders = require('../constants/oidc-identity-providers.js'); +import { AuthenticationMethod } from '../models/AuthenticationMethod.js'; +import { UserNotAuthorizedToRemoveAuthenticationMethod } from '../errors.js'; +import * as OidcIdentityProviders from '../constants/oidc-identity-providers.js'; -module.exports = async function removeAuthenticationMethod({ - userId, - type, - userRepository, - authenticationMethodRepository, -}) { +const removeAuthenticationMethod = async function ({ userId, type, userRepository, authenticationMethodRepository }) { const user = await userRepository.get(userId); if (type === 'EMAIL') { @@ -53,6 +48,8 @@ module.exports = async function removeAuthenticationMethod({ } }; +export { removeAuthenticationMethod }; + async function _removeAuthenticationMethod(userId, identityProvider, authenticationMethodRepository) { const authenticationMethods = await authenticationMethodRepository.findByUserId({ userId }); diff --git a/api/lib/domain/usecases/replace-sup-organization-learner.js b/api/lib/domain/usecases/replace-sup-organization-learner.js index eabad660a9b..3d5c1a948ef 100644 --- a/api/lib/domain/usecases/replace-sup-organization-learner.js +++ b/api/lib/domain/usecases/replace-sup-organization-learner.js @@ -1,4 +1,4 @@ -module.exports = async function replaceSupOrganizationLearners({ +const replaceSupOrganizationLearners = async function ({ organizationId, supOrganizationLearnerRepository, supOrganizationLearnerParser, @@ -9,3 +9,5 @@ module.exports = async function replaceSupOrganizationLearners({ return warnings; }; + +export { replaceSupOrganizationLearners }; diff --git a/api/lib/domain/usecases/resend-organization-invitation.js b/api/lib/domain/usecases/resend-organization-invitation.js index dc28111cc88..0fb555b05cb 100644 --- a/api/lib/domain/usecases/resend-organization-invitation.js +++ b/api/lib/domain/usecases/resend-organization-invitation.js @@ -1,4 +1,4 @@ -module.exports = async function resendOrganizationInvitation({ +const resendOrganizationInvitation = async function ({ organizationId, email, locale, @@ -14,3 +14,5 @@ module.exports = async function resendOrganizationInvitation({ locale, }); }; + +export { resendOrganizationInvitation }; diff --git a/api/lib/domain/usecases/reset-scorecard.js b/api/lib/domain/usecases/reset-scorecard.js index c599d703ffc..ed9614b945e 100644 --- a/api/lib/domain/usecases/reset-scorecard.js +++ b/api/lib/domain/usecases/reset-scorecard.js @@ -1,8 +1,8 @@ -const Scorecard = require('../models/Scorecard.js'); -const { CompetenceResetError } = require('../errors.js'); -const _ = require('lodash'); +import { Scorecard } from '../models/Scorecard.js'; +import { CompetenceResetError } from '../errors.js'; +import _ from 'lodash'; -module.exports = async function resetScorecard({ +const resetScorecard = async function ({ userId, competenceId, scorecardService, @@ -57,3 +57,5 @@ module.exports = async function resetScorecard({ locale, }); }; + +export { resetScorecard }; diff --git a/api/lib/domain/usecases/retrieve-last-or-create-certification-course.js b/api/lib/domain/usecases/retrieve-last-or-create-certification-course.js index 893169dff1a..935559538db 100644 --- a/api/lib/domain/usecases/retrieve-last-or-create-certification-course.js +++ b/api/lib/domain/usecases/retrieve-last-or-create-certification-course.js @@ -1,18 +1,22 @@ -const CertificationCourse = require('../models/CertificationCourse.js'); -const Assessment = require('../models/Assessment.js'); -const ComplementaryCertificationCourse = require('../models/ComplementaryCertificationCourse.js'); -const { +import { CertificationCourse } from '../models/CertificationCourse.js'; +import { Assessment } from '../models/Assessment.js'; +import { ComplementaryCertificationCourse } from '../models/ComplementaryCertificationCourse.js'; + +import { UserNotAuthorizedToCertifyError, NotFoundError, SessionNotAccessible, CandidateNotAuthorizedToJoinSessionError, CandidateNotAuthorizedToResumeCertificationTestError, UnexpectedUserAccountError, -} = require('../errors.js'); -const { features } = require('../../config.js'); -const bluebird = require('bluebird'); +} from '../errors.js'; + +import { config } from '../../config.js'; +import bluebird from 'bluebird'; -module.exports = async function retrieveLastOrCreateCertificationCourse({ +const { features } = config; + +const retrieveLastOrCreateCertificationCourse = async function ({ domainTransaction, accessCode, sessionId, @@ -88,6 +92,8 @@ module.exports = async function retrieveLastOrCreateCertificationCourse({ }); }; +export { retrieveLastOrCreateCertificationCourse }; + async function _startNewCertification({ domainTransaction, sessionId, diff --git a/api/lib/domain/usecases/revoke-refresh-token.js b/api/lib/domain/usecases/revoke-refresh-token.js index 2bf26eec7fb..0382741ba5a 100644 --- a/api/lib/domain/usecases/revoke-refresh-token.js +++ b/api/lib/domain/usecases/revoke-refresh-token.js @@ -1,3 +1,5 @@ -module.exports = async function revokeRefreshToken({ refreshToken, refreshTokenService }) { +const revokeRefreshToken = async function ({ refreshToken, refreshTokenService }) { await refreshTokenService.revokeRefreshToken({ refreshToken }); }; + +export { revokeRefreshToken }; diff --git a/api/lib/domain/usecases/save-admin-member.js b/api/lib/domain/usecases/save-admin-member.js index a00170865d8..3ed36218d16 100644 --- a/api/lib/domain/usecases/save-admin-member.js +++ b/api/lib/domain/usecases/save-admin-member.js @@ -1,7 +1,7 @@ -const { AlreadyExistingAdminMemberError } = require('../errors.js'); -const AdminMember = require('../models/AdminMember.js'); +import { AlreadyExistingAdminMemberError } from '../errors.js'; +import { AdminMember } from '../models/AdminMember.js'; -module.exports = async function saveAdminMember({ email, role, userRepository, adminMemberRepository }) { +const saveAdminMember = async function ({ email, role, userRepository, adminMemberRepository }) { const { id: userId, firstName, lastName } = await userRepository.getByEmail(email); const adminMember = await adminMemberRepository.get({ userId }); @@ -21,3 +21,5 @@ module.exports = async function saveAdminMember({ email, role, userRepository, a throw new AlreadyExistingAdminMemberError(); }; + +export { saveAdminMember }; diff --git a/api/lib/domain/usecases/save-certification-issue-report.js b/api/lib/domain/usecases/save-certification-issue-report.js index 3e3a9dd4bc8..750c305d6ea 100644 --- a/api/lib/domain/usecases/save-certification-issue-report.js +++ b/api/lib/domain/usecases/save-certification-issue-report.js @@ -1,6 +1,6 @@ -const CertificationIssueReport = require('../models/CertificationIssueReport.js'); +import { CertificationIssueReport } from '../models/CertificationIssueReport.js'; -module.exports = async function saveCertificationIssueReport({ +const saveCertificationIssueReport = async function ({ certificationIssueReportDTO, certificationIssueReportRepository, issueReportCategoryRepository, @@ -16,3 +16,5 @@ module.exports = async function saveCertificationIssueReport({ return certificationIssueReportRepository.save(certificationIssueReport); }; + +export { saveCertificationIssueReport }; diff --git a/api/lib/domain/usecases/save-computed-campaign-participation-result.js b/api/lib/domain/usecases/save-computed-campaign-participation-result.js index ce8d885b64d..226298d2b29 100644 --- a/api/lib/domain/usecases/save-computed-campaign-participation-result.js +++ b/api/lib/domain/usecases/save-computed-campaign-participation-result.js @@ -1,7 +1,9 @@ -module.exports = async function saveComputedCampaignParticipationResult({ +const saveComputedCampaignParticipationResult = async function ({ participantResultsSharedRepository, campaignParticipationId, }) { const participantResultsShared = await participantResultsSharedRepository.get(campaignParticipationId); return participantResultsSharedRepository.save(participantResultsShared); }; + +export { saveComputedCampaignParticipationResult }; diff --git a/api/lib/domain/usecases/save-jury-complementary-certification-course-result.js b/api/lib/domain/usecases/save-jury-complementary-certification-course-result.js index d1fe26c96d3..52b8cd16a88 100644 --- a/api/lib/domain/usecases/save-jury-complementary-certification-course-result.js +++ b/api/lib/domain/usecases/save-jury-complementary-certification-course-result.js @@ -1,7 +1,7 @@ -const { NotFoundError, InvalidJuryLevelError } = require('../errors.js'); -const ComplementaryCertificationCourseResult = require('../models/ComplementaryCertificationCourseResult.js'); +import { NotFoundError, InvalidJuryLevelError } from '../errors.js'; +import { ComplementaryCertificationCourseResult } from '../models/ComplementaryCertificationCourseResult.js'; -module.exports = async function saveJuryComplementaryCertificationCourseResult({ +const saveJuryComplementaryCertificationCourseResult = async function ({ complementaryCertificationCourseId, juryLevel, complementaryCertificationCourseResultRepository, @@ -35,3 +35,5 @@ module.exports = async function saveJuryComplementaryCertificationCourseResult({ return complementaryCertificationCourseResultRepository.save(externalComplementaryCertificationCourseResult); }; + +export { saveJuryComplementaryCertificationCourseResult }; diff --git a/api/lib/domain/usecases/send-sco-invitation.js b/api/lib/domain/usecases/send-sco-invitation.js index 37726b40ab0..7eca83a2c4f 100644 --- a/api/lib/domain/usecases/send-sco-invitation.js +++ b/api/lib/domain/usecases/send-sco-invitation.js @@ -1,12 +1,13 @@ -const _ = require('lodash'); -const { +import _ from 'lodash'; + +import { OrganizationNotFoundError, OrganizationWithoutEmailError, ManyOrganizationsFoundError, OrganizationArchivedError, -} = require('../errors.js'); +} from '../errors.js'; -module.exports = async function sendScoInvitation({ +const sendScoInvitation = async function ({ uai, firstName, lastName, @@ -30,6 +31,8 @@ module.exports = async function sendScoInvitation({ }); }; +export { sendScoInvitation }; + async function _getOrganizationWithGivenUAI({ uai, organizationRepository }) { const organizationsFound = await organizationRepository.findScoOrganizationsByUai({ uai: uai.trim() }); _ensureThereIsNoMoreThanOneOrganization({ organizationCount: organizationsFound.length, uai }); diff --git a/api/lib/domain/usecases/send-shared-participation-results-to-pole-emploi.js b/api/lib/domain/usecases/send-shared-participation-results-to-pole-emploi.js index 9b3d2f4b270..86e29d40705 100644 --- a/api/lib/domain/usecases/send-shared-participation-results-to-pole-emploi.js +++ b/api/lib/domain/usecases/send-shared-participation-results-to-pole-emploi.js @@ -1,7 +1,7 @@ -const PoleEmploiPayload = require('../../infrastructure/externals/pole-emploi/PoleEmploiPayload.js'); -const PoleEmploiSending = require('../models/PoleEmploiSending.js'); +import { PoleEmploiPayload } from '../../infrastructure/externals/pole-emploi/PoleEmploiPayload.js'; +import { PoleEmploiSending } from '../models/PoleEmploiSending.js'; -module.exports = async function sendSharedParticipationResultsToPoleEmploi({ +const sendSharedParticipationResultsToPoleEmploi = async function ({ badgeRepository, badgeAcquisitionRepository, campaignParticipationId, @@ -52,3 +52,5 @@ module.exports = async function sendSharedParticipationResultsToPoleEmploi({ return poleEmploiSendingRepository.create({ poleEmploiSending }); } }; + +export { sendSharedParticipationResultsToPoleEmploi }; diff --git a/api/lib/domain/usecases/send-verification-code.js b/api/lib/domain/usecases/send-verification-code.js index 3e19ef82c31..032da0507be 100644 --- a/api/lib/domain/usecases/send-verification-code.js +++ b/api/lib/domain/usecases/send-verification-code.js @@ -1,8 +1,10 @@ -const AuthenticationMethod = require('../models/AuthenticationMethod.js'); -const { InvalidPasswordForUpdateEmailError, UserNotAuthorizedToUpdateEmailError } = require('../errors.js'); -const get = require('lodash/get'); +import { AuthenticationMethod } from '../models/AuthenticationMethod.js'; +import { InvalidPasswordForUpdateEmailError, UserNotAuthorizedToUpdateEmailError } from '../errors.js'; +import lodash from 'lodash'; -module.exports = async function sendVerificationCode({ +const { get } = lodash; + +const sendVerificationCode = async function ({ i18n, locale, newEmail, @@ -43,3 +45,5 @@ module.exports = async function sendVerificationCode({ await userEmailRepository.saveEmailModificationDemand({ userId, code, newEmail }); await mailService.sendVerificationCodeEmail({ code, locale, translate: i18n.__, email: newEmail }); }; + +export { sendVerificationCode }; diff --git a/api/lib/domain/usecases/sessions-mass-import/create-sessions.js b/api/lib/domain/usecases/sessions-mass-import/create-sessions.js index 19f3538beb5..e17acb403c3 100644 --- a/api/lib/domain/usecases/sessions-mass-import/create-sessions.js +++ b/api/lib/domain/usecases/sessions-mass-import/create-sessions.js @@ -1,10 +1,10 @@ -const { NotFoundError } = require('../../errors'); -const bluebird = require('bluebird'); -const DomainTransaction = require('../../../infrastructure/DomainTransaction.js'); -const Session = require('../../models/Session'); -const CertificationCandidate = require('../../models/CertificationCandidate'); +import { NotFoundError } from '../../errors.js'; +import bluebird from 'bluebird'; +import { DomainTransaction } from '../../../infrastructure/DomainTransaction.js'; +import { Session } from '../../models/Session.js'; +import { CertificationCandidate } from '../../models/CertificationCandidate.js'; -module.exports = async function createSessions({ +const createSessions = async function ({ userId, cachedValidatedSessionsKey, certificationCandidateRepository, @@ -47,12 +47,14 @@ module.exports = async function createSessions({ }); }); - await temporarySessionsStorageForMassImportService.delete({ + await temporarySessionsStorageForMassImportService.remove({ cachedValidatedSessionsKey, userId, }); }; +export { createSessions }; + function _hasCandidates(certificationCandidates) { return certificationCandidates.length > 0; } diff --git a/api/lib/domain/usecases/sessions-mass-import/validate-sessions.js b/api/lib/domain/usecases/sessions-mass-import/validate-sessions.js index 4a6cb3ef0b4..7dff09ae69a 100644 --- a/api/lib/domain/usecases/sessions-mass-import/validate-sessions.js +++ b/api/lib/domain/usecases/sessions-mass-import/validate-sessions.js @@ -1,9 +1,9 @@ -const Session = require('../../models/Session'); -const SessionMassImportReport = require('../../models/SessionMassImportReport'); -const CertificationCandidate = require('../../models/CertificationCandidate'); -const bluebird = require('bluebird'); +import { Session } from '../../models/Session.js'; +import { SessionMassImportReport } from '../../models/SessionMassImportReport.js'; +import { CertificationCandidate } from '../../models/CertificationCandidate.js'; +import bluebird from 'bluebird'; -module.exports = async function validateSessions({ +const validateSessions = async function ({ sessions, userId, certificationCenterId, @@ -77,6 +77,8 @@ module.exports = async function validateSessions({ return sessionsMassImportReport; }; +export { validateSessions }; + async function _createValidCertificationCandidates({ certificationCandidates, sessionId, diff --git a/api/lib/domain/usecases/share-campaign-result.js b/api/lib/domain/usecases/share-campaign-result.js index 32d1206fd09..a182110bde2 100644 --- a/api/lib/domain/usecases/share-campaign-result.js +++ b/api/lib/domain/usecases/share-campaign-result.js @@ -1,7 +1,7 @@ -const { UserNotAuthorizedToAccessEntityError } = require('../errors.js'); -const CampaignParticipationResultsShared = require('../events/CampaignParticipationResultsShared.js'); +import { UserNotAuthorizedToAccessEntityError } from '../errors.js'; +import { CampaignParticipationResultsShared } from '../events/CampaignParticipationResultsShared.js'; -module.exports = async function shareCampaignResult({ +const shareCampaignResult = async function ({ userId, campaignParticipationId, campaignParticipationRepository, @@ -19,6 +19,8 @@ module.exports = async function shareCampaignResult({ }); }; +export { shareCampaignResult }; + function _checkUserIsOwnerOfCampaignParticipation(campaignParticipation, userId) { if (campaignParticipation.userId !== userId) { throw new UserNotAuthorizedToAccessEntityError('User does not have an access to this campaign participation'); diff --git a/api/lib/domain/usecases/simulate-flash-scoring.js b/api/lib/domain/usecases/simulate-flash-scoring.js index 475b726146e..c684d32f771 100644 --- a/api/lib/domain/usecases/simulate-flash-scoring.js +++ b/api/lib/domain/usecases/simulate-flash-scoring.js @@ -1,6 +1,6 @@ -const ScoringSimulationResult = require('../models/ScoringSimulationResult.js'); +import { ScoringSimulationResult } from '../models/ScoringSimulationResult.js'; -module.exports = async function simulateFlashScoring({ +const simulateFlashScoring = async function ({ challengeRepository, flashAlgorithmService, simulations, @@ -62,3 +62,5 @@ module.exports = async function simulateFlashScoring({ return new ScoringSimulationResult({ id, estimatedLevel: finalEstimatedLevel, pixScore, pixScoreByCompetence }); }); }; + +export { simulateFlashScoring }; diff --git a/api/lib/domain/usecases/simulate-old-scoring.js b/api/lib/domain/usecases/simulate-old-scoring.js index 40557c630d8..79ad3a67e90 100644 --- a/api/lib/domain/usecases/simulate-old-scoring.js +++ b/api/lib/domain/usecases/simulate-old-scoring.js @@ -1,8 +1,10 @@ -const ScoringSimulationResult = require('../models/ScoringSimulationResult.js'); -const fp = require('lodash/fp'); -const { sortBy } = require('lodash'); +import { ScoringSimulationResult } from '../models/ScoringSimulationResult.js'; +import lodash from 'lodash'; -module.exports = async function simulateOldScoring({ challengeRepository, simulations }) { +const { sortBy } = lodash; +import fp from 'lodash/fp.js'; + +const simulateOldScoring = async function ({ challengeRepository, simulations }) { const challenges = await challengeRepository.findOperative(); const challengesById = new Map(challenges.map((challenge) => [challenge.id, challenge])); @@ -68,3 +70,5 @@ module.exports = async function simulateOldScoring({ challengeRepository, simula return simulationResults; }; + +export { simulateOldScoring }; diff --git a/api/lib/domain/usecases/start-campaign-participation.js b/api/lib/domain/usecases/start-campaign-participation.js index 5f145c8f32a..d748b5c3145 100644 --- a/api/lib/domain/usecases/start-campaign-participation.js +++ b/api/lib/domain/usecases/start-campaign-participation.js @@ -1,6 +1,6 @@ -const CampaignParticipationStarted = require('../events/CampaignParticipationStarted.js'); +import { CampaignParticipationStarted } from '../events/CampaignParticipationStarted.js'; -module.exports = async function startCampaignParticipation({ +const startCampaignParticipation = async function ({ campaignParticipation, userId, campaignParticipantRepository, @@ -27,3 +27,5 @@ module.exports = async function startCampaignParticipation({ campaignParticipation: createdCampaignParticipation, }; }; + +export { startCampaignParticipation }; diff --git a/api/lib/domain/usecases/start-or-resume-competence-evaluation.js b/api/lib/domain/usecases/start-or-resume-competence-evaluation.js index b2e823cfee7..f6b3503603e 100644 --- a/api/lib/domain/usecases/start-or-resume-competence-evaluation.js +++ b/api/lib/domain/usecases/start-or-resume-competence-evaluation.js @@ -1,8 +1,8 @@ -const Assessment = require('../models/Assessment.js'); -const CompetenceEvaluation = require('../models/CompetenceEvaluation.js'); -const { NotFoundError } = require('../../domain/errors.js'); +import { Assessment } from '../models/Assessment.js'; +import { CompetenceEvaluation } from '../models/CompetenceEvaluation.js'; +import { NotFoundError } from '../../domain/errors.js'; -module.exports = async function startOrResumeCompetenceEvaluation({ +const startOrResumeCompetenceEvaluation = async function ({ competenceId, userId, competenceEvaluationRepository, @@ -32,6 +32,8 @@ module.exports = async function startOrResumeCompetenceEvaluation({ } }; +export { startOrResumeCompetenceEvaluation }; + function _checkCompetenceExists(competenceId, competenceRepository) { return competenceRepository.get({ id: competenceId }); } diff --git a/api/lib/domain/usecases/start-writing-campaign-assessment-results-to-stream.js b/api/lib/domain/usecases/start-writing-campaign-assessment-results-to-stream.js index 242386e6a1b..253bd7899cb 100644 --- a/api/lib/domain/usecases/start-writing-campaign-assessment-results-to-stream.js +++ b/api/lib/domain/usecases/start-writing-campaign-assessment-results-to-stream.js @@ -1,18 +1,17 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); - -const dayjs = require('dayjs'); -const utc = require('dayjs/plugin/utc'); -const timezone = require('dayjs/plugin/timezone'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import dayjs from 'dayjs'; +import utc from 'dayjs/plugin/utc.js'; +import timezone from 'dayjs/plugin/timezone.js'; dayjs.extend(utc); dayjs.extend(timezone); -const { constants } = require('../../infrastructure/constants.js'); -const { UserNotAuthorizedToGetCampaignResultsError, CampaignTypeError } = require('../errors.js'); -const csvSerializer = require('../../infrastructure/serializers/csv/csv-serializer.js'); -const CampaignLearningContent = require('../models/CampaignLearningContent.js'); +import { CONCURRENCY_HEAVY_OPERATIONS, CHUNK_SIZE_CAMPAIGN_RESULT_PROCESSING } from '../../infrastructure/constants.js'; +import { UserNotAuthorizedToGetCampaignResultsError, CampaignTypeError } from '../errors.js'; +import * as csvSerializer from '../../infrastructure/serializers/csv/csv-serializer.js'; +import { CampaignLearningContent } from '../models/CampaignLearningContent.js'; -module.exports = async function startWritingCampaignAssessmentResultsToStream({ +const startWritingCampaignAssessmentResultsToStream = async function ({ userId, campaignId, writableStream, @@ -66,10 +65,7 @@ module.exports = async function startWritingCampaignAssessmentResultsToStream({ // after this function's returned promise resolves. If we await the map // function, node will keep all the data in memory until the end of the // complete operation. - const campaignParticipationInfoChunks = _.chunk( - campaignParticipationInfos, - constants.CHUNK_SIZE_CAMPAIGN_RESULT_PROCESSING - ); + const campaignParticipationInfoChunks = _.chunk(campaignParticipationInfos, CHUNK_SIZE_CAMPAIGN_RESULT_PROCESSING); bluebird .map( campaignParticipationInfoChunks, @@ -125,7 +121,7 @@ module.exports = async function startWritingCampaignAssessmentResultsToStream({ writableStream.write(csvLines); }, - { concurrency: constants.CONCURRENCY_HEAVY_OPERATIONS } + { concurrency: CONCURRENCY_HEAVY_OPERATIONS } ) .then(() => { writableStream.end(); @@ -143,6 +139,8 @@ module.exports = async function startWritingCampaignAssessmentResultsToStream({ return { fileName }; }; +export { startWritingCampaignAssessmentResultsToStream }; + async function _checkCreatorHasAccessToCampaignOrganization(userId, organizationId, userRepository) { const user = await userRepository.getWithMemberships(userId); diff --git a/api/lib/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream.js b/api/lib/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream.js index 851b99f8c5f..4b58fb30382 100644 --- a/api/lib/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream.js +++ b/api/lib/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream.js @@ -1,11 +1,11 @@ -const dayjs = require('dayjs'); -const utc = require('dayjs/plugin/utc'); -const timezone = require('dayjs/plugin/timezone'); +import dayjs from 'dayjs'; +import utc from 'dayjs/plugin/utc.js'; +import timezone from 'dayjs/plugin/timezone.js'; dayjs.extend(utc); dayjs.extend(timezone); -const { UserNotAuthorizedToGetCampaignResultsError, CampaignTypeError } = require('../errors.js'); -const CampaignProfilesCollectionExport = require('../../infrastructure/serializers/csv/campaign-profiles-collection-export.js'); +import { UserNotAuthorizedToGetCampaignResultsError, CampaignTypeError } from '../errors.js'; +import { CampaignProfilesCollectionExport } from '../../infrastructure/serializers/csv/campaign-profiles-collection-export.js'; async function _checkCreatorHasAccessToCampaignOrganization(userId, organizationId, userRepository) { const user = await userRepository.getWithMemberships(userId); @@ -17,7 +17,7 @@ async function _checkCreatorHasAccessToCampaignOrganization(userId, organization } } -module.exports = async function startWritingCampaignProfilesCollectionResultsToStream({ +const startWritingCampaignProfilesCollectionResultsToStream = async function ({ userId, campaignId, writableStream, @@ -74,3 +74,5 @@ module.exports = async function startWritingCampaignProfilesCollectionResultsToS return { fileName }; }; + +export { startWritingCampaignProfilesCollectionResultsToStream }; diff --git a/api/lib/domain/usecases/supervise-session.js b/api/lib/domain/usecases/supervise-session.js index 8362969ddb2..f83aabd4744 100644 --- a/api/lib/domain/usecases/supervise-session.js +++ b/api/lib/domain/usecases/supervise-session.js @@ -1,5 +1,6 @@ -const { SessionNotAccessible, InvalidSessionSupervisingLoginError } = require('../errors.js'); -module.exports = async function superviseSession({ +import { SessionNotAccessible, InvalidSessionSupervisingLoginError } from '../errors.js'; + +const superviseSession = async function ({ sessionId, supervisorPassword, userId, @@ -15,3 +16,5 @@ module.exports = async function superviseSession({ } await supervisorAccessRepository.create({ sessionId, userId }); }; + +export { superviseSession }; diff --git a/api/lib/domain/usecases/unarchive-campaign.js b/api/lib/domain/usecases/unarchive-campaign.js index ca5a401f108..bc4cf83b98c 100644 --- a/api/lib/domain/usecases/unarchive-campaign.js +++ b/api/lib/domain/usecases/unarchive-campaign.js @@ -1,6 +1,8 @@ -module.exports = async function unarchiveCampaign({ campaignId, campaignForArchivingRepository }) { +const unarchiveCampaign = async function ({ campaignId, campaignForArchivingRepository }) { const campaign = await campaignForArchivingRepository.get(campaignId); campaign.unarchive(); await campaignForArchivingRepository.save(campaign); return campaign; }; + +export { unarchiveCampaign }; diff --git a/api/lib/domain/usecases/unblock-user-account.js b/api/lib/domain/usecases/unblock-user-account.js index ad04030fed8..a10fbeb2a08 100644 --- a/api/lib/domain/usecases/unblock-user-account.js +++ b/api/lib/domain/usecases/unblock-user-account.js @@ -1,6 +1,8 @@ -module.exports = async function unblockUserAccount({ userId, userLoginRepository }) { +const unblockUserAccount = async function ({ userId, userLoginRepository }) { const userLogin = await userLoginRepository.findByUserId(userId); userLogin.resetUserBlocking(); return await userLoginRepository.update(userLogin); }; + +export { unblockUserAccount }; diff --git a/api/lib/domain/usecases/uncancel-certification-course.js b/api/lib/domain/usecases/uncancel-certification-course.js index 42f9997abb3..7b8c9b1a17e 100644 --- a/api/lib/domain/usecases/uncancel-certification-course.js +++ b/api/lib/domain/usecases/uncancel-certification-course.js @@ -1,5 +1,7 @@ -module.exports = async function uncancelCertificationCourse({ certificationCourseId, certificationCourseRepository }) { +const uncancelCertificationCourse = async function ({ certificationCourseId, certificationCourseRepository }) { const certificationCourse = await certificationCourseRepository.get(certificationCourseId); certificationCourse.uncancel(); await certificationCourseRepository.update(certificationCourse); }; + +export { uncancelCertificationCourse }; diff --git a/api/lib/domain/usecases/unpublish-session.js b/api/lib/domain/usecases/unpublish-session.js index 33b27bf843e..30c2a17079a 100644 --- a/api/lib/domain/usecases/unpublish-session.js +++ b/api/lib/domain/usecases/unpublish-session.js @@ -1,4 +1,4 @@ -module.exports = async function unpublishSession({ +const unpublishSession = async function ({ sessionId, certificationRepository, sessionRepository, @@ -17,6 +17,8 @@ module.exports = async function unpublishSession({ return sessionRepository.getWithCertificationCandidates(sessionId); }; +export { unpublishSession }; + async function _updateFinalizedSession(finalizedSessionRepository, sessionId) { const finalizedSession = await finalizedSessionRepository.get({ sessionId }); finalizedSession.unpublish(); diff --git a/api/lib/domain/usecases/update-admin-member.js b/api/lib/domain/usecases/update-admin-member.js index ef0e792db6f..40674301d86 100644 --- a/api/lib/domain/usecases/update-admin-member.js +++ b/api/lib/domain/usecases/update-admin-member.js @@ -1,4 +1,6 @@ -module.exports = async function updateAdminMember({ id, role, adminMemberRepository }) { +const updateAdminMember = async function ({ id, role, adminMemberRepository }) { const attributesToUpdate = { role }; return await adminMemberRepository.update({ id, attributesToUpdate }); }; + +export { updateAdminMember }; diff --git a/api/lib/domain/usecases/update-badge.js b/api/lib/domain/usecases/update-badge.js index 1a79b357f5a..68b38f5125e 100644 --- a/api/lib/domain/usecases/update-badge.js +++ b/api/lib/domain/usecases/update-badge.js @@ -1,4 +1,4 @@ -module.exports = async function updateBadge({ badgeId, badge, badgeRepository }) { +const updateBadge = async function ({ badgeId, badge, badgeRepository }) { const existingBadge = await badgeRepository.get(badgeId); if (badge.message) existingBadge.message = badge.message; @@ -11,3 +11,5 @@ module.exports = async function updateBadge({ badgeId, badge, badgeRepository }) return badgeRepository.update(existingBadge); }; + +export { updateBadge }; diff --git a/api/lib/domain/usecases/update-campaign-details-management.js b/api/lib/domain/usecases/update-campaign-details-management.js index 68039446a5b..474aa7187b3 100644 --- a/api/lib/domain/usecases/update-campaign-details-management.js +++ b/api/lib/domain/usecases/update-campaign-details-management.js @@ -1,6 +1,6 @@ -const { EntityValidationError } = require('../errors.js'); +import { EntityValidationError } from '../errors.js'; -module.exports = async function updateCampaignDetailsManagement({ +const updateCampaignDetailsManagement = async function ({ campaignId, name, title, @@ -42,3 +42,5 @@ module.exports = async function updateCampaignDetailsManagement({ }; return campaignManagementRepository.update({ campaignId, campaignAttributes }); }; + +export { updateCampaignDetailsManagement }; diff --git a/api/lib/domain/usecases/update-campaign.js b/api/lib/domain/usecases/update-campaign.js index 8b7a0facdb5..b6bf3304fd9 100644 --- a/api/lib/domain/usecases/update-campaign.js +++ b/api/lib/domain/usecases/update-campaign.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const { UserNotAuthorizedToUpdateResourceError, EntityValidationError } = require('../errors.js'); -const campaignValidator = require('../validators/campaign-validator.js'); +import _ from 'lodash'; +import { UserNotAuthorizedToUpdateResourceError, EntityValidationError } from '../errors.js'; +import * as campaignValidator from '../validators/campaign-validator.js'; -module.exports = async function updateCampaign({ +const updateCampaign = async function ({ userId, campaignId, name, @@ -52,3 +52,5 @@ module.exports = async function updateCampaign({ return campaign; }; + +export { updateCampaign }; diff --git a/api/lib/domain/usecases/update-certification-center-data-protection-officer-information.js b/api/lib/domain/usecases/update-certification-center-data-protection-officer-information.js index f05d013ca38..53640bff2dd 100644 --- a/api/lib/domain/usecases/update-certification-center-data-protection-officer-information.js +++ b/api/lib/domain/usecases/update-certification-center-data-protection-officer-information.js @@ -1,4 +1,4 @@ -module.exports = async function updateCertificationCenterDataProtectionOfficerInformation({ +const updateCertificationCenterDataProtectionOfficerInformation = async function ({ dataProtectionOfficer, dataProtectionOfficerRepository, }) { @@ -11,3 +11,5 @@ module.exports = async function updateCertificationCenterDataProtectionOfficerIn return dataProtectionOfficerRepository.update(dataProtectionOfficer); }; + +export { updateCertificationCenterDataProtectionOfficerInformation }; diff --git a/api/lib/domain/usecases/update-certification-center-referer.js b/api/lib/domain/usecases/update-certification-center-referer.js index 11997dd47d2..11263aaf85f 100644 --- a/api/lib/domain/usecases/update-certification-center-referer.js +++ b/api/lib/domain/usecases/update-certification-center-referer.js @@ -1,4 +1,4 @@ -module.exports = async function updateCertificationCenterReferer({ +const updateCertificationCenterReferer = async function ({ userId, isReferer, certificationCenterId, @@ -22,3 +22,5 @@ module.exports = async function updateCertificationCenterReferer({ isReferer, }); }; + +export { updateCertificationCenterReferer }; diff --git a/api/lib/domain/usecases/update-certification-center.js b/api/lib/domain/usecases/update-certification-center.js index 78b2c78b514..b2fa341da10 100644 --- a/api/lib/domain/usecases/update-certification-center.js +++ b/api/lib/domain/usecases/update-certification-center.js @@ -1,8 +1,8 @@ -const bluebird = require('bluebird'); -const certificationCenterCreationValidator = require('../validators/certification-center-creation-validator.js'); -const ComplementaryCertificationHabilitation = require('../../domain/models/ComplementaryCertificationHabilitation.js'); -const DataProtectionOfficer = require('../models/DataProtectionOfficer.js'); -const ComplementaryCertification = require('../models/ComplementaryCertification.js'); +import bluebird from 'bluebird'; +import * as certificationCenterCreationValidator from '../validators/certification-center-creation-validator.js'; +import { ComplementaryCertificationHabilitation } from '../../domain/models/ComplementaryCertificationHabilitation.js'; +import { DataProtectionOfficer } from '../models/DataProtectionOfficer.js'; +import { ComplementaryCertification } from '../models/ComplementaryCertification.js'; async function _addOrUpdateDataProtectionOfficer({ certificationCenter, dataProtectionOfficerRepository }) { const dataProtectionOfficer = new DataProtectionOfficer({ @@ -21,7 +21,7 @@ async function _addOrUpdateDataProtectionOfficer({ certificationCenter, dataProt return dataProtectionOfficerRepository.create(dataProtectionOfficer); } -module.exports = async function updateCertificationCenter({ +const updateCertificationCenter = async function ({ certificationCenter, complementaryCertificationIds, certificationCenterForAdminRepository, @@ -67,3 +67,5 @@ module.exports = async function updateCertificationCenter({ return updatedCertificationCenter; }; + +export { updateCertificationCenter }; diff --git a/api/lib/domain/usecases/update-expired-password.js b/api/lib/domain/usecases/update-expired-password.js index 1e400a3610c..32fdfa7eaec 100644 --- a/api/lib/domain/usecases/update-expired-password.js +++ b/api/lib/domain/usecases/update-expired-password.js @@ -1,10 +1,12 @@ -const get = require('lodash/get'); -const AuthenticationMethod = require('../../domain/models/AuthenticationMethod.js'); -const { ForbiddenAccess } = require('../../domain/errors.js'); -const { UserNotFoundError } = require('../../domain/errors.js'); -const logger = require('../../../lib/infrastructure/logger.js'); +import lodash from 'lodash'; -module.exports = async function updateExpiredPassword({ +const { get } = lodash; + +import { AuthenticationMethod } from '../../domain/models/AuthenticationMethod.js'; +import { ForbiddenAccess, UserNotFoundError } from '../../domain/errors.js'; +import { logger } from '../../../lib/infrastructure/logger.js'; + +const updateExpiredPassword = async function ({ passwordResetToken, newPassword, encryptionService, @@ -44,3 +46,5 @@ module.exports = async function updateExpiredPassword({ return foundUser.username ?? foundUser.email; }; + +export { updateExpiredPassword }; diff --git a/api/lib/domain/usecases/update-last-question-state.js b/api/lib/domain/usecases/update-last-question-state.js index bd260ae4467..d8438b22c25 100644 --- a/api/lib/domain/usecases/update-last-question-state.js +++ b/api/lib/domain/usecases/update-last-question-state.js @@ -1,7 +1,7 @@ -const logger = require('../../infrastructure/logger.js'); -const Assessment = require('../models/Assessment.js'); +import { logger } from '../../infrastructure/logger.js'; +import { Assessment } from '../models/Assessment.js'; -module.exports = async function updateLastQuestionState({ +const updateLastQuestionState = async function ({ assessmentId, lastQuestionState, challengeId, @@ -45,3 +45,5 @@ module.exports = async function updateLastQuestionState({ domainTransaction, }); }; + +export { updateLastQuestionState }; diff --git a/api/lib/domain/usecases/update-membership.js b/api/lib/domain/usecases/update-membership.js index 8006dd17fac..77553f69470 100644 --- a/api/lib/domain/usecases/update-membership.js +++ b/api/lib/domain/usecases/update-membership.js @@ -1,6 +1,8 @@ -module.exports = async function updateMembership({ membership, membershipRepository }) { +const updateMembership = async function ({ membership, membershipRepository }) { membership.validateRole(); const existingMembership = await membershipRepository.get(membership.id); return membershipRepository.updateById({ id: existingMembership.id, membership }); }; + +export { updateMembership }; diff --git a/api/lib/domain/usecases/update-organization-data-protection-officer-information.js b/api/lib/domain/usecases/update-organization-data-protection-officer-information.js index daa38319e9f..ef4f703b948 100644 --- a/api/lib/domain/usecases/update-organization-data-protection-officer-information.js +++ b/api/lib/domain/usecases/update-organization-data-protection-officer-information.js @@ -1,4 +1,4 @@ -module.exports = async function updateOrganizationDataProtectionOfficerInformation({ +const updateOrganizationDataProtectionOfficerInformation = async function ({ dataProtectionOfficer, dataProtectionOfficerRepository, }) { @@ -11,3 +11,5 @@ module.exports = async function updateOrganizationDataProtectionOfficerInformati return dataProtectionOfficerRepository.update(dataProtectionOfficer); }; + +export { updateOrganizationDataProtectionOfficerInformation }; diff --git a/api/lib/domain/usecases/update-organization-learner-dependent-user-password.js b/api/lib/domain/usecases/update-organization-learner-dependent-user-password.js index 215cc215024..3cf9b7ff1db 100644 --- a/api/lib/domain/usecases/update-organization-learner-dependent-user-password.js +++ b/api/lib/domain/usecases/update-organization-learner-dependent-user-password.js @@ -1,8 +1,10 @@ -const isEmpty = require('lodash/isEmpty'); +import lodash from 'lodash'; -const { UserNotAuthorizedToUpdatePasswordError } = require('../errors.js'); +const { isEmpty } = lodash; -module.exports = async function updateOrganizationLearnerDependentUserPassword({ +import { UserNotAuthorizedToUpdatePasswordError } from '../errors.js'; + +const updateOrganizationLearnerDependentUserPassword = async function ({ organizationId, organizationLearnerId, userId, @@ -41,3 +43,5 @@ module.exports = async function updateOrganizationLearnerDependentUserPassword({ return generatedPassword; }; + +export { updateOrganizationLearnerDependentUserPassword }; diff --git a/api/lib/domain/usecases/update-participant-external-id.js b/api/lib/domain/usecases/update-participant-external-id.js index 45ae712c0bb..bd48966233a 100644 --- a/api/lib/domain/usecases/update-participant-external-id.js +++ b/api/lib/domain/usecases/update-participant-external-id.js @@ -1,4 +1,4 @@ -module.exports = async function updateParticipantExternalId({ +const updateParticipantExternalId = async function ({ campaignParticipationId, participantExternalId, participationsForCampaignManagementRepository, @@ -8,3 +8,5 @@ module.exports = async function updateParticipantExternalId({ participantExternalId, }); }; + +export { updateParticipantExternalId }; diff --git a/api/lib/domain/usecases/update-session.js b/api/lib/domain/usecases/update-session.js index 2053340d772..12e7597a6de 100644 --- a/api/lib/domain/usecases/update-session.js +++ b/api/lib/domain/usecases/update-session.js @@ -1,7 +1,9 @@ -module.exports = async function updateSession({ session, sessionRepository, sessionValidator }) { +const updateSession = async function ({ session, sessionRepository, sessionValidator }) { sessionValidator.validate(session); const sessionToUpdate = await sessionRepository.get(session.id); Object.assign(sessionToUpdate, session); return sessionRepository.updateSessionInfo(sessionToUpdate); }; + +export { updateSession }; diff --git a/api/lib/domain/usecases/update-student-number.js b/api/lib/domain/usecases/update-student-number.js index 9b8376587f8..38d3fccedf2 100644 --- a/api/lib/domain/usecases/update-student-number.js +++ b/api/lib/domain/usecases/update-student-number.js @@ -1,6 +1,6 @@ -const { AlreadyExistingEntityError } = require('../../domain/errors.js'); +import { AlreadyExistingEntityError } from '../../domain/errors.js'; -module.exports = async function updateStudentNumber({ +const updateStudentNumber = async function ({ organizationLearnerId, studentNumber, organizationId, @@ -17,3 +17,5 @@ module.exports = async function updateStudentNumber({ await supOrganizationLearnerRepository.updateStudentNumber(organizationLearnerId, studentNumber); }; + +export { updateStudentNumber }; diff --git a/api/lib/domain/usecases/update-target-profile.js b/api/lib/domain/usecases/update-target-profile.js index a28ed20ce78..9249220018f 100644 --- a/api/lib/domain/usecases/update-target-profile.js +++ b/api/lib/domain/usecases/update-target-profile.js @@ -1,6 +1,6 @@ -const { validate } = require('../validators/target-profile/base-validation.js'); +import { validate } from '../validators/target-profile/base-validation.js'; -module.exports = async function updateTargetProfile({ +const updateTargetProfile = async function ({ id, name, imageUrl, @@ -19,3 +19,5 @@ module.exports = async function updateTargetProfile({ category, }); }; + +export { updateTargetProfile }; diff --git a/api/lib/domain/usecases/update-training.js b/api/lib/domain/usecases/update-training.js index bbb1c0e1a86..7d8fc062559 100644 --- a/api/lib/domain/usecases/update-training.js +++ b/api/lib/domain/usecases/update-training.js @@ -1,4 +1,4 @@ -module.exports = async function updateTraining({ training, trainingRepository }) { +const updateTraining = async function ({ training, trainingRepository }) { const trainingId = training.id; await trainingRepository.get({ trainingId }); @@ -7,3 +7,5 @@ module.exports = async function updateTraining({ training, trainingRepository }) attributesToUpdate: training, }); }; + +export { updateTraining }; diff --git a/api/lib/domain/usecases/update-user-details-for-administration.js b/api/lib/domain/usecases/update-user-details-for-administration.js index 366c665e8d6..9f3a0f60819 100644 --- a/api/lib/domain/usecases/update-user-details-for-administration.js +++ b/api/lib/domain/usecases/update-user-details-for-administration.js @@ -1,15 +1,14 @@ -const has = require('lodash/has'); -const { +import lodash from 'lodash'; + +const { has } = lodash; + +import { AlreadyRegisteredEmailAndUsernameError, AlreadyRegisteredEmailError, AlreadyRegisteredUsernameError, -} = require('../errors.js'); +} from '../errors.js'; -module.exports = async function updateUserDetailsForAdministration({ - userId, - userDetailsForAdministration, - userRepository, -}) { +const updateUserDetailsForAdministration = async function ({ userId, userDetailsForAdministration, userRepository }) { const { email, username } = userDetailsForAdministration; const foundUsersWithEmailAlreadyUsed = email && (await userRepository.findAnotherUserByEmail(userId, email)); @@ -31,6 +30,8 @@ module.exports = async function updateUserDetailsForAdministration({ return userRepository.getUserDetailsForAdmin(userId); }; +export { updateUserDetailsForAdministration }; + async function _checkEmailAndUsernameAreAvailable({ usersWithEmail, usersWithUsername }) { const isEmailAlreadyUsed = has(usersWithEmail, '[0].email'); const isUsernameAlreadyUsed = has(usersWithUsername, '[0].username'); diff --git a/api/lib/domain/usecases/update-user-email-with-validation.js b/api/lib/domain/usecases/update-user-email-with-validation.js index 764bc321653..8ddf8db4277 100644 --- a/api/lib/domain/usecases/update-user-email-with-validation.js +++ b/api/lib/domain/usecases/update-user-email-with-validation.js @@ -1,10 +1,10 @@ -const { +import { UserNotAuthorizedToUpdateEmailError, InvalidVerificationCodeError, EmailModificationDemandNotFoundOrExpiredError, -} = require('../errors.js'); +} from '../errors.js'; -module.exports = async function updateUserEmailWithValidation({ code, userId, userEmailRepository, userRepository }) { +const updateUserEmailWithValidation = async function ({ code, userId, userEmailRepository, userRepository }) { const user = await userRepository.get(userId); if (!user.email) { throw new UserNotAuthorizedToUpdateEmailError(); @@ -31,3 +31,5 @@ module.exports = async function updateUserEmailWithValidation({ code, userId, us return { email: emailModificationDemand.newEmail }; }; + +export { updateUserEmailWithValidation }; diff --git a/api/lib/domain/usecases/update-user-password.js b/api/lib/domain/usecases/update-user-password.js index cfc74abc4bc..92dc6139062 100644 --- a/api/lib/domain/usecases/update-user-password.js +++ b/api/lib/domain/usecases/update-user-password.js @@ -1,6 +1,6 @@ -const { UserNotAuthorizedToUpdatePasswordError } = require('../errors.js'); +import { UserNotAuthorizedToUpdatePasswordError } from '../errors.js'; -module.exports = async function updateUserPassword({ +const updateUserPassword = async function ({ userId, password, temporaryKey, @@ -26,3 +26,5 @@ module.exports = async function updateUserPassword({ return updatedUser; }; + +export { updateUserPassword }; diff --git a/api/lib/domain/validators/campaign-creation-validator.js b/api/lib/domain/validators/campaign-creation-validator.js index 89fb8036070..a52c15c92de 100644 --- a/api/lib/domain/validators/campaign-creation-validator.js +++ b/api/lib/domain/validators/campaign-creation-validator.js @@ -1,8 +1,9 @@ -const Joi = require('joi'); -const { first } = require('lodash'); -const { EntityValidationError } = require('../errors.js'); -const CampaignTypes = require('../models/CampaignTypes.js'); +import Joi from 'joi'; +import lodash from 'lodash'; +import { EntityValidationError } from '../errors.js'; +import { CampaignTypes } from '../models/CampaignTypes.js'; +const { first } = lodash; const schema = Joi.object({ type: Joi.string() .valid(CampaignTypes.ASSESSMENT, CampaignTypes.PROFILES_COLLECTION) @@ -78,4 +79,4 @@ function validate(campaign) { return true; } -module.exports = validate; +export { validate }; diff --git a/api/lib/domain/validators/campaign-validator.js b/api/lib/domain/validators/campaign-validator.js index 627615fc44b..d86740c8c1d 100644 --- a/api/lib/domain/validators/campaign-validator.js +++ b/api/lib/domain/validators/campaign-validator.js @@ -1,7 +1,10 @@ -const Joi = require('joi'); -const { first } = require('lodash'); -const { EntityValidationError } = require('../errors.js'); -const CampaignTypes = require('../models/CampaignTypes.js'); +import Joi from 'joi'; +import lodash from 'lodash'; + +const { first } = lodash; + +import { EntityValidationError } from '../errors.js'; +import { CampaignTypes } from '../models/CampaignTypes.js'; const validationConfiguration = { abortEarly: false, allowUnknown: true }; @@ -103,12 +106,12 @@ const campaignValidationJoiSchema = Joi.object({ }), }); -module.exports = { - validate(campaign) { - const { error } = campaignValidationJoiSchema.validate(campaign, validationConfiguration); - if (error) { - throw EntityValidationError.fromJoiErrors(error.details); - } - return true; - }, +const validate = function (campaign) { + const { error } = campaignValidationJoiSchema.validate(campaign, validationConfiguration); + if (error) { + throw EntityValidationError.fromJoiErrors(error.details); + } + return true; }; + +export { validate }; diff --git a/api/lib/domain/validators/certification-center-creation-validator.js b/api/lib/domain/validators/certification-center-creation-validator.js index 9110bfc2f09..b59b8465380 100644 --- a/api/lib/domain/validators/certification-center-creation-validator.js +++ b/api/lib/domain/validators/certification-center-creation-validator.js @@ -1,5 +1,5 @@ -const Joi = require('joi'); -const { EntityValidationError } = require('../errors.js'); +import Joi from 'joi'; +import { EntityValidationError } from '../errors.js'; const validationConfiguration = { abortEarly: false, allowUnknown: true }; @@ -21,12 +21,12 @@ const certificationCenterSchema = Joi.object({ }), }); -module.exports = { - validate(certificationCenter) { - const { error } = certificationCenterSchema.validate(certificationCenter, validationConfiguration); - if (error) { - throw EntityValidationError.fromJoiErrors(error.details); - } - return true; - }, +const validate = function (certificationCenter) { + const { error } = certificationCenterSchema.validate(certificationCenter, validationConfiguration); + if (error) { + throw EntityValidationError.fromJoiErrors(error.details); + } + return true; }; + +export { validate }; diff --git a/api/lib/domain/validators/entity-validator.js b/api/lib/domain/validators/entity-validator.js index c6327101a01..5a993bde6e2 100644 --- a/api/lib/domain/validators/entity-validator.js +++ b/api/lib/domain/validators/entity-validator.js @@ -1,10 +1,10 @@ -const { ObjectValidationError } = require('../errors.js'); +import { ObjectValidationError } from '../errors.js'; -module.exports = { - validateEntity(schema, entity) { - const { error } = schema.validate(entity); - if (error) { - throw new ObjectValidationError(error); - } - }, +const validateEntity = function (schema, entity) { + const { error } = schema.validate(entity); + if (error) { + throw new ObjectValidationError(error); + } }; + +export { validateEntity }; diff --git a/api/lib/domain/validators/organization-creation-validator.js b/api/lib/domain/validators/organization-creation-validator.js index b94023cee4d..b299121419c 100644 --- a/api/lib/domain/validators/organization-creation-validator.js +++ b/api/lib/domain/validators/organization-creation-validator.js @@ -1,5 +1,5 @@ -const Joi = require('joi'); -const { EntityValidationError } = require('../errors.js'); +import Joi from 'joi'; +import { EntityValidationError } from '../errors.js'; const validationConfiguration = { abortEarly: false, allowUnknown: true }; @@ -18,12 +18,12 @@ const organizationValidationJoiSchema = Joi.object({ }), }); -module.exports = { - validate(organizationCreationParams) { - const { error } = organizationValidationJoiSchema.validate(organizationCreationParams, validationConfiguration); - if (error) { - throw EntityValidationError.fromJoiErrors(error.details); - } - return true; - }, +const validate = function (organizationCreationParams) { + const { error } = organizationValidationJoiSchema.validate(organizationCreationParams, validationConfiguration); + if (error) { + throw EntityValidationError.fromJoiErrors(error.details); + } + return true; }; + +export { validate }; diff --git a/api/lib/domain/validators/organization-learner-validator.js b/api/lib/domain/validators/organization-learner-validator.js index 7585ee223e5..f973aaf7527 100644 --- a/api/lib/domain/validators/organization-learner-validator.js +++ b/api/lib/domain/validators/organization-learner-validator.js @@ -1,8 +1,8 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { EntityValidationError } = require('../errors.js'); -const OrganizationLearner = require('../models/OrganizationLearner.js'); +import { EntityValidationError } from '../errors.js'; +import { OrganizationLearner } from '../models/OrganizationLearner.js'; const { STUDENT, APPRENTICE } = OrganizationLearner.STATUS; const validationConfiguration = { allowUnknown: true }; @@ -88,7 +88,4 @@ const checkValidation = function (organizationLearner) { } }; -module.exports = { - FRANCE_COUNTRY_CODE, - checkValidation, -}; +export { FRANCE_COUNTRY_CODE, checkValidation }; diff --git a/api/lib/domain/validators/organization-places-lot-validator.js b/api/lib/domain/validators/organization-places-lot-validator.js index b7c68034754..d38eb39153e 100644 --- a/api/lib/domain/validators/organization-places-lot-validator.js +++ b/api/lib/domain/validators/organization-places-lot-validator.js @@ -1,8 +1,8 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { EntityValidationError } = require('../errors.js'); -const categories = require('../constants/organization-places-categories.js'); +import { EntityValidationError } from '../errors.js'; +import * as categories from '../constants/organization-places-categories.js'; const schema = Joi.object({ organizationId: Joi.number().integer().required().messages({ @@ -47,4 +47,4 @@ function validate(organizationPlaces) { return true; } -module.exports = validate; +export { validate }; diff --git a/api/lib/domain/validators/organization-with-tags-and-target-profiles-script.js b/api/lib/domain/validators/organization-with-tags-and-target-profiles-script.js index ee0b312079b..214278777f8 100644 --- a/api/lib/domain/validators/organization-with-tags-and-target-profiles-script.js +++ b/api/lib/domain/validators/organization-with-tags-and-target-profiles-script.js @@ -1,8 +1,8 @@ -const Joi = require('joi'); -const { EntityValidationError } = require('../errors.js'); -const Organization = require('../models/Organization.js'); -const Membership = require('../models/Membership.js'); -const OidcIdentityProviders = require('../../../lib/domain/constants/oidc-identity-providers.js'); +import Joi from 'joi'; +import { EntityValidationError } from '../errors.js'; +import { Organization } from '../models/Organization.js'; +import { Membership } from '../models/Membership.js'; +import * as OidcIdentityProviders from '../../../lib/domain/constants/oidc-identity-providers.js'; const validProviders = Object.values(OidcIdentityProviders).map((provider) => provider.service.code); @@ -58,12 +58,12 @@ const schema = Joi.object({ }), }); -module.exports = { - validate(organization) { - const { error } = schema.validate(organization, { abortEarly: false, allowUnknown: true }); - if (error) { - throw EntityValidationError.fromJoiErrors(error.details); - } - return true; - }, +const validate = function (organization) { + const { error } = schema.validate(organization, { abortEarly: false, allowUnknown: true }); + if (error) { + throw EntityValidationError.fromJoiErrors(error.details); + } + return true; }; + +export { validate }; diff --git a/api/lib/domain/validators/password-validator.js b/api/lib/domain/validators/password-validator.js index b541931dcb8..5b853300feb 100644 --- a/api/lib/domain/validators/password-validator.js +++ b/api/lib/domain/validators/password-validator.js @@ -1,8 +1,11 @@ -const Joi = require('joi'); -const XRegExp = require('xregexp'); +import Joi from 'joi'; +import XRegExp from 'xregexp'; -const { passwordValidationPattern } = require('../../config.js').account; -const { EntityValidationError } = require('../errors.js'); +import { config } from '../../config.js'; + +const { passwordValidationPattern } = config.account; + +import { EntityValidationError } from '../errors.js'; const pattern = XRegExp(passwordValidationPattern); @@ -16,12 +19,12 @@ const passwordValidationJoiSchema = Joi.object({ }), }); -module.exports = { - validate(password) { - const { error } = passwordValidationJoiSchema.validate({ password }); - if (error) { - throw EntityValidationError.fromJoiErrors(error.details); - } - return true; - }, +const validate = function (password) { + const { error } = passwordValidationJoiSchema.validate({ password }); + if (error) { + throw EntityValidationError.fromJoiErrors(error.details); + } + return true; }; + +export { validate }; diff --git a/api/lib/domain/validators/session-validator.js b/api/lib/domain/validators/session-validator.js index 1a5ba54b94b..86f863fbc86 100644 --- a/api/lib/domain/validators/session-validator.js +++ b/api/lib/domain/validators/session-validator.js @@ -1,12 +1,11 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { statuses } = require('../models/Session.js'); -const { types } = require('../models/CertificationCenter.js'); -const { CERTIFICATION_SESSIONS_ERRORS } = require('../constants/sessions-errors'); - -const { EntityValidationError } = require('../errors.js'); -const identifiersType = require('../../domain/types/identifiers-type.js'); +import { statuses } from '../models/Session.js'; +import { types } from '../models/CertificationCenter.js'; +import { CERTIFICATION_SESSIONS_ERRORS } from '../constants/sessions-errors.js'; +import { EntityValidationError } from '../errors.js'; +import { identifiersType } from '../../domain/types/identifiers-type.js'; const validationConfiguration = { abortEarly: false, allowUnknown: true }; @@ -84,28 +83,28 @@ const sessionFiltersValidationSchema = Joi.object({ certificationCenterType: Joi.string().trim().valid(types.SUP, types.SCO, types.PRO).optional(), }); -module.exports = { - validate(session) { - const { error } = sessionValidationJoiSchema.validate(session, validationConfiguration); - if (error) { - throw EntityValidationError.fromJoiErrors(error.details); - } - }, - - validateForMassSessionImport(session) { - const { error } = sessionValidationForMassImportJoiSchema.validate(session, validationConfiguration); - if (error) { - return error.details.map(({ message }) => message); - } - }, - - validateAndNormalizeFilters(filters) { - const { value, error } = sessionFiltersValidationSchema.validate(filters, { abortEarly: true }); - - if (error) { - throw EntityValidationError.fromJoiErrors(error.details); - } - - return value; - }, +const validate = function (session) { + const { error } = sessionValidationJoiSchema.validate(session, validationConfiguration); + if (error) { + throw EntityValidationError.fromJoiErrors(error.details); + } +}; + +const validateForMassSessionImport = function (session) { + const { error } = sessionValidationForMassImportJoiSchema.validate(session, validationConfiguration); + if (error) { + return error.details.map(({ message }) => message); + } +}; + +const validateAndNormalizeFilters = function (filters) { + const { value, error } = sessionFiltersValidationSchema.validate(filters, { abortEarly: true }); + + if (error) { + throw EntityValidationError.fromJoiErrors(error.details); + } + + return value; }; + +export { validate, validateForMassSessionImport, validateAndNormalizeFilters }; diff --git a/api/lib/domain/validators/stage-validator.js b/api/lib/domain/validators/stage-validator.js index 31dc9376a04..9eca7398bfa 100644 --- a/api/lib/domain/validators/stage-validator.js +++ b/api/lib/domain/validators/stage-validator.js @@ -1,5 +1,5 @@ -const Joi = require('joi'); -const { EntityValidationError } = require('../errors.js'); +import Joi from 'joi'; +import { EntityValidationError } from '../errors.js'; const validationConfiguration = { abortEarly: false, allowUnknown: true }; @@ -18,12 +18,12 @@ const stageValidationJoiSchema = Joi.object({ }), }); -module.exports = { - validate({ stage }) { - const { error } = stageValidationJoiSchema.validate(stage, { ...validationConfiguration }); - if (error) { - throw EntityValidationError.fromJoiErrors(error.details); - } - return true; - }, +const validate = function ({ stage }) { + const { error } = stageValidationJoiSchema.validate(stage, { ...validationConfiguration }); + if (error) { + throw EntityValidationError.fromJoiErrors(error.details); + } + return true; }; + +export { validate }; diff --git a/api/lib/domain/validators/sup-organization-learner-set-validator.js b/api/lib/domain/validators/sup-organization-learner-set-validator.js index ad8d38114d3..9003a47c4ab 100644 --- a/api/lib/domain/validators/sup-organization-learner-set-validator.js +++ b/api/lib/domain/validators/sup-organization-learner-set-validator.js @@ -1,21 +1,21 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { EntityValidationError } = require('../errors.js'); +import { EntityValidationError } from '../errors.js'; const validationConfiguration = { allowUnknown: true }; const validationSchema = Joi.array().unique('studentNumber'); -module.exports = { - checkValidation(organizationLearnerSet) { - const { error } = validationSchema.validate(organizationLearnerSet.learners, validationConfiguration); +const checkValidation = function (organizationLearnerSet) { + const { error } = validationSchema.validate(organizationLearnerSet.learners, validationConfiguration); - if (error) { - const err = EntityValidationError.fromJoiErrors(error.details); - err.key = 'studentNumber'; - err.why = 'uniqueness'; - throw err; - } - }, + if (error) { + const err = EntityValidationError.fromJoiErrors(error.details); + err.key = 'studentNumber'; + err.why = 'uniqueness'; + throw err; + } }; + +export { checkValidation }; diff --git a/api/lib/domain/validators/sup-organization-learner-validator.js b/api/lib/domain/validators/sup-organization-learner-validator.js index 918feb8b3d5..2adf5747066 100644 --- a/api/lib/domain/validators/sup-organization-learner-validator.js +++ b/api/lib/domain/validators/sup-organization-learner-validator.js @@ -1,7 +1,7 @@ -const BaseJoi = require('joi'); -const JoiDate = require('@joi/date'); +import BaseJoi from 'joi'; +import JoiDate from '@joi/date'; const Joi = BaseJoi.extend(JoiDate); -const { EntityValidationError } = require('../errors.js'); +import { EntityValidationError } from '../errors.js'; const validationConfiguration = { allowUnknown: true }; const MAX_LENGTH = 255; @@ -26,39 +26,39 @@ const validationSchema = Joi.object({ organizationId: Joi.number().integer().required(), }); -module.exports = { - checkValidation(supOrganizationLearner) { - const { error } = validationSchema.validate(supOrganizationLearner, validationConfiguration); - if (error) { - const err = EntityValidationError.fromJoiErrors(error.details); - err.key = error.details[0].context.key; - const { type, context } = error.details[0]; - if (type === 'any.required') { - err.why = 'required'; - } - if (type === 'string.max') { - err.why = 'max_length'; - err.limit = context.limit; - } - if (type === 'date.format') { - err.why = 'date_format'; - } - if (type === 'string.email') { - err.why = 'email_format'; - } - if (type === 'string.base') { - err.why = 'not_a_string'; - } - if (type === 'number.base' || type === 'number.integer') { - err.why = 'not_an_integer'; - } - if (type === 'boolean.base') { - err.why = 'not_a_boolean'; - } - if (err.key === 'studentNumber' && type === 'string.pattern.base') { - err.why = 'student_number_format'; - } - throw err; +const checkValidation = function (supOrganizationLearner) { + const { error } = validationSchema.validate(supOrganizationLearner, validationConfiguration); + if (error) { + const err = EntityValidationError.fromJoiErrors(error.details); + err.key = error.details[0].context.key; + const { type, context } = error.details[0]; + if (type === 'any.required') { + err.why = 'required'; } - }, + if (type === 'string.max') { + err.why = 'max_length'; + err.limit = context.limit; + } + if (type === 'date.format') { + err.why = 'date_format'; + } + if (type === 'string.email') { + err.why = 'email_format'; + } + if (type === 'string.base') { + err.why = 'not_a_string'; + } + if (type === 'number.base' || type === 'number.integer') { + err.why = 'not_an_integer'; + } + if (type === 'boolean.base') { + err.why = 'not_a_boolean'; + } + if (err.key === 'studentNumber' && type === 'string.pattern.base') { + err.why = 'student_number_format'; + } + throw err; + } }; + +export { checkValidation }; diff --git a/api/lib/domain/validators/target-profile/base-validation.js b/api/lib/domain/validators/target-profile/base-validation.js index e79e66bcc89..de37d106003 100644 --- a/api/lib/domain/validators/target-profile/base-validation.js +++ b/api/lib/domain/validators/target-profile/base-validation.js @@ -1,7 +1,10 @@ -const Joi = require('joi'); -const { first } = require('lodash'); -const { EntityValidationError } = require('../../errors.js'); -const TargetProfile = require('../../models/TargetProfile.js'); +import Joi from 'joi'; +import lodash from 'lodash'; + +const { first } = lodash; + +import { EntityValidationError } from '../../errors.js'; +import { TargetProfile } from '../../models/TargetProfile.js'; const categories = TargetProfile.categories; @@ -43,7 +46,4 @@ function validate(targetProfile) { return true; } -module.exports = { - validate, - schema, -}; +export { validate, schema }; diff --git a/api/lib/domain/validators/target-profile/creation-command-validation.js b/api/lib/domain/validators/target-profile/creation-command-validation.js index 4d923e33410..d805868bd40 100644 --- a/api/lib/domain/validators/target-profile/creation-command-validation.js +++ b/api/lib/domain/validators/target-profile/creation-command-validation.js @@ -1,6 +1,6 @@ -const Joi = require('joi'); -const { schema: base } = require('./base-validation.js'); -const { EntityValidationError } = require('../../errors.js'); +import Joi from 'joi'; +import { schema as base } from './base-validation.js'; +import { EntityValidationError } from '../../errors.js'; const schema = base.keys({ description: Joi.string().allow(null), @@ -25,6 +25,4 @@ function validate(creationCommand) { return true; } -module.exports = { - validate, -}; +export { validate }; diff --git a/api/lib/domain/validators/user-validator.js b/api/lib/domain/validators/user-validator.js index 49587dd0b96..de5ef8bb2de 100644 --- a/api/lib/domain/validators/user-validator.js +++ b/api/lib/domain/validators/user-validator.js @@ -1,6 +1,6 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const { EntityValidationError } = require('../errors.js'); +import { EntityValidationError } from '../errors.js'; const validationConfiguration = { abortEarly: false, allowUnknown: true }; const userValidationJoiSchema = Joi.object({ @@ -47,12 +47,12 @@ const userValidationJoiSchema = Joi.object({ 'object.missing': 'FILL_USERNAME_OR_EMAIL', }); -module.exports = { - validate({ user, cguRequired = true }) { - const { error } = userValidationJoiSchema.validate(user, { ...validationConfiguration, context: { cguRequired } }); - if (error) { - throw EntityValidationError.fromJoiErrors(error.details); - } - return true; - }, +const validate = function ({ user, cguRequired = true }) { + const { error } = userValidationJoiSchema.validate(user, { ...validationConfiguration, context: { cguRequired } }); + if (error) { + throw EntityValidationError.fromJoiErrors(error.details); + } + return true; }; + +export { validate }; diff --git a/api/lib/infrastructure/DomainTransaction.js b/api/lib/infrastructure/DomainTransaction.js index b1ecdf924b8..89282052a7d 100644 --- a/api/lib/infrastructure/DomainTransaction.js +++ b/api/lib/infrastructure/DomainTransaction.js @@ -1,4 +1,4 @@ -const { knex } = require('../../db/knex-database-connection.js'); +import { knex } from '../../db/knex-database-connection.js'; class DomainTransaction { constructor(knexTransaction) { @@ -15,4 +15,4 @@ class DomainTransaction { return new DomainTransaction(null); } } -module.exports = DomainTransaction; +export { DomainTransaction }; diff --git a/api/lib/infrastructure/adapters/answer-status-database-adapter.js b/api/lib/infrastructure/adapters/answer-status-database-adapter.js index 5443b475e01..0da9974d02d 100644 --- a/api/lib/infrastructure/adapters/answer-status-database-adapter.js +++ b/api/lib/infrastructure/adapters/answer-status-database-adapter.js @@ -1,4 +1,4 @@ -const AnswerStatus = require('../../domain/models/AnswerStatus.js'); +import { AnswerStatus } from '../../domain/models/AnswerStatus.js'; const UNIMPLEMENTED = 'unimplemented'; const TIMEDOUT = 'timedout'; @@ -8,47 +8,44 @@ const FOCUSEDOUT = 'focusedOut'; const OK = 'ok'; const KO = 'ko'; -module.exports = { - /** - * @deprecated use toSQLString instead - */ - adapt(answerStatus) { - return this.toSQLString(answerStatus); - }, +const adapt = function (answerStatus) { + return this.toSQLString(answerStatus); +}; - toSQLString(answerStatus) { - if (answerStatus.isOK()) { - return OK; - } else if (answerStatus.isKO()) { - return KO; - } else if (answerStatus.isSKIPPED()) { - return SKIPPED; - } else if (answerStatus.isPARTIALLY()) { - return PARTIALLY; - } else if (answerStatus.isTIMEDOUT()) { - return TIMEDOUT; - } else if (answerStatus.isFOCUSEDOUT()) { - return FOCUSEDOUT; - } else { - return UNIMPLEMENTED; - } - }, +const toSQLString = function (answerStatus) { + if (answerStatus.isOK()) { + return OK; + } else if (answerStatus.isKO()) { + return KO; + } else if (answerStatus.isSKIPPED()) { + return SKIPPED; + } else if (answerStatus.isPARTIALLY()) { + return PARTIALLY; + } else if (answerStatus.isTIMEDOUT()) { + return TIMEDOUT; + } else if (answerStatus.isFOCUSEDOUT()) { + return FOCUSEDOUT; + } else { + return UNIMPLEMENTED; + } +}; - fromSQLString(answerStatusString) { - if (answerStatusString === OK) { - return AnswerStatus.OK; - } else if (answerStatusString === KO) { - return AnswerStatus.KO; - } else if (answerStatusString === PARTIALLY) { - return AnswerStatus.PARTIALLY; - } else if (answerStatusString === TIMEDOUT) { - return AnswerStatus.TIMEDOUT; - } else if (answerStatusString === SKIPPED) { - return AnswerStatus.SKIPPED; - } else if (answerStatusString === FOCUSEDOUT) { - return AnswerStatus.FOCUSEDOUT; - } else if (answerStatusString === UNIMPLEMENTED) { - return AnswerStatus.UNIMPLEMENTED; - } - }, +const fromSQLString = function (answerStatusString) { + if (answerStatusString === OK) { + return AnswerStatus.OK; + } else if (answerStatusString === KO) { + return AnswerStatus.KO; + } else if (answerStatusString === PARTIALLY) { + return AnswerStatus.PARTIALLY; + } else if (answerStatusString === TIMEDOUT) { + return AnswerStatus.TIMEDOUT; + } else if (answerStatusString === SKIPPED) { + return AnswerStatus.SKIPPED; + } else if (answerStatusString === FOCUSEDOUT) { + return AnswerStatus.FOCUSEDOUT; + } else if (answerStatusString === UNIMPLEMENTED) { + return AnswerStatus.UNIMPLEMENTED; + } }; + +export { adapt, toSQLString, fromSQLString }; diff --git a/api/lib/infrastructure/adapters/answer-status-json-api-adapter.js b/api/lib/infrastructure/adapters/answer-status-json-api-adapter.js index d3d39856ce2..345dc098248 100644 --- a/api/lib/infrastructure/adapters/answer-status-json-api-adapter.js +++ b/api/lib/infrastructure/adapters/answer-status-json-api-adapter.js @@ -26,4 +26,4 @@ const AnswerStatusJsonApiAdapter = { }, }; -module.exports = AnswerStatusJsonApiAdapter; +export { AnswerStatusJsonApiAdapter }; diff --git a/api/lib/infrastructure/adapters/skill-adapter.js b/api/lib/infrastructure/adapters/skill-adapter.js index 79f5c8d7e5e..77297b8bbb5 100644 --- a/api/lib/infrastructure/adapters/skill-adapter.js +++ b/api/lib/infrastructure/adapters/skill-adapter.js @@ -1,16 +1,16 @@ -const Skill = require('../../domain/models/Skill.js'); +import { Skill } from '../../domain/models/Skill.js'; -module.exports = { - fromDatasourceObject(datasourceObject) { - return new Skill({ - id: datasourceObject.id, - name: datasourceObject.name, - pixValue: datasourceObject.pixValue, - competenceId: datasourceObject.competenceId, - tutorialIds: datasourceObject.tutorialIds, - tubeId: datasourceObject.tubeId, - version: datasourceObject.version, - difficulty: datasourceObject.level, - }); - }, +const fromDatasourceObject = function (datasourceObject) { + return new Skill({ + id: datasourceObject.id, + name: datasourceObject.name, + pixValue: datasourceObject.pixValue, + competenceId: datasourceObject.competenceId, + tutorialIds: datasourceObject.tutorialIds, + tubeId: datasourceObject.tubeId, + version: datasourceObject.version, + difficulty: datasourceObject.level, + }); }; + +export { fromDatasourceObject }; diff --git a/api/lib/infrastructure/adapters/solution-adapter.js b/api/lib/infrastructure/adapters/solution-adapter.js index e8f3843b672..e38eadf1cdd 100644 --- a/api/lib/infrastructure/adapters/solution-adapter.js +++ b/api/lib/infrastructure/adapters/solution-adapter.js @@ -1,5 +1,5 @@ -const Solution = require('../../domain/models/Solution.js'); -const _ = require('../../../lib/infrastructure/utils/lodash-utils.js'); +import { Solution } from '../../domain/models/Solution.js'; +import { _ } from '../../../lib/infrastructure/utils/lodash-utils.js'; function statusToBoolean(value) { if (typeof value === 'boolean') { @@ -33,19 +33,19 @@ function _extractTypeOfQroc(datasourceObject) { return qrocBlocksTypes; } -module.exports = { - fromDatasourceObject(datasourceObject) { - const scoring = _.ensureString(datasourceObject.scoring).replace(/@/g, ''); // XXX YAML ne supporte pas @ - const qrocBlocksTypes = _extractTypeOfQroc(datasourceObject); - return new Solution({ - id: datasourceObject.id, - isT1Enabled: statusToBoolean(datasourceObject.t1Status), - isT2Enabled: statusToBoolean(datasourceObject.t2Status), - isT3Enabled: statusToBoolean(datasourceObject.t3Status), - type: datasourceObject.type, - value: datasourceObject.solution, - scoring, - qrocBlocksTypes, - }); - }, +const fromDatasourceObject = function (datasourceObject) { + const scoring = _.ensureString(datasourceObject.scoring).replace(/@/g, ''); // XXX YAML ne supporte pas @ + const qrocBlocksTypes = _extractTypeOfQroc(datasourceObject); + return new Solution({ + id: datasourceObject.id, + isT1Enabled: statusToBoolean(datasourceObject.t1Status), + isT2Enabled: statusToBoolean(datasourceObject.t2Status), + isT3Enabled: statusToBoolean(datasourceObject.t3Status), + type: datasourceObject.type, + value: datasourceObject.solution, + scoring, + qrocBlocksTypes, + }); }; + +export { fromDatasourceObject }; diff --git a/api/lib/infrastructure/adapters/target-profile-adapter.js b/api/lib/infrastructure/adapters/target-profile-adapter.js index 4e664b247a7..3a04f5741ce 100644 --- a/api/lib/infrastructure/adapters/target-profile-adapter.js +++ b/api/lib/infrastructure/adapters/target-profile-adapter.js @@ -1,24 +1,24 @@ -const TargetProfile = require('../../domain/models/TargetProfile.js'); -const Badge = require('../../domain/models/Badge.js'); -const skillAdapter = require('./skill-adapter.js'); +import { TargetProfile } from '../../domain/models/TargetProfile.js'; +import { Badge } from '../../domain/models/Badge.js'; +import * as skillAdapter from './skill-adapter.js'; -module.exports = { - fromDatasourceObjects({ bookshelfTargetProfile, associatedSkillDatasourceObjects = [] }) { - const skills = associatedSkillDatasourceObjects.map(skillAdapter.fromDatasourceObject); - const targetProfileBadges = bookshelfTargetProfile.related('badges'); - const badges = targetProfileBadges?.models?.map((badge) => new Badge(badge.attributes)) ?? []; +const fromDatasourceObjects = function ({ bookshelfTargetProfile, associatedSkillDatasourceObjects = [] }) { + const skills = associatedSkillDatasourceObjects.map(skillAdapter.fromDatasourceObject); + const targetProfileBadges = bookshelfTargetProfile.related('badges'); + const badges = targetProfileBadges?.models?.map((badge) => new Badge(badge.attributes)) ?? []; - return new TargetProfile({ - id: bookshelfTargetProfile.get('id'), - name: bookshelfTargetProfile.get('name'), - imageUrl: bookshelfTargetProfile.get('imageUrl'), - isPublic: Boolean(bookshelfTargetProfile.get('isPublic')), - isSimplifiedAccess: Boolean(bookshelfTargetProfile.get('isSimplifiedAccess')), - ownerOrganizationId: bookshelfTargetProfile.get('ownerOrganizationId'), - outdated: bookshelfTargetProfile.get('outdated'), - skills, - stages: [], - badges, - }); - }, + return new TargetProfile({ + id: bookshelfTargetProfile.get('id'), + name: bookshelfTargetProfile.get('name'), + imageUrl: bookshelfTargetProfile.get('imageUrl'), + isPublic: Boolean(bookshelfTargetProfile.get('isPublic')), + isSimplifiedAccess: Boolean(bookshelfTargetProfile.get('isSimplifiedAccess')), + ownerOrganizationId: bookshelfTargetProfile.get('ownerOrganizationId'), + outdated: bookshelfTargetProfile.get('outdated'), + skills, + stages: [], + badges, + }); }; + +export { fromDatasourceObjects }; diff --git a/api/lib/infrastructure/authentication.js b/api/lib/infrastructure/authentication.js index 361b01bd443..216738d2c75 100644 --- a/api/lib/infrastructure/authentication.js +++ b/api/lib/infrastructure/authentication.js @@ -1,8 +1,11 @@ -const { find } = require('lodash'); -const boom = require('@hapi/boom'); +import lodash from 'lodash'; -const tokenService = require('../domain/services/token-service.js'); -const config = require('../../lib/config.js'); +const { find } = lodash; + +import boom from '@hapi/boom'; + +import { tokenService } from '../domain/services/token-service.js'; +import { config } from '../../lib/config.js'; async function _checkIsAuthenticated(request, h, { key, validate }) { if (!request.headers.authorization) { @@ -49,7 +52,7 @@ function validateClientApplication(decoded) { return { isValid: true, credentials: { client_id: decoded.clientId, scope: decoded.scope, source: decoded.source } }; } -const autentication = { +const authentication = { schemeName: 'jwt-scheme', scheme(_, { key, validate }) { @@ -83,4 +86,4 @@ const autentication = { defaultStrategy: 'jwt-user', }; -module.exports = autentication; +export { authentication }; diff --git a/api/lib/infrastructure/bookshelf.js b/api/lib/infrastructure/bookshelf.js index e499105181b..ba803f79937 100644 --- a/api/lib/infrastructure/bookshelf.js +++ b/api/lib/infrastructure/bookshelf.js @@ -1,8 +1,8 @@ -const validator = require('validator'); -const _ = require('lodash'); +import validator from 'validator'; +import _ from 'lodash'; -const { knex } = require('../../db/knex-database-connection.js'); -const bookshelf = require('bookshelf'); +import { knex } from '../../db/knex-database-connection.js'; +import bookshelf from 'bookshelf'; const bookshelfWithKnex = bookshelf(knex); validator.isRequired = function (value) { @@ -18,4 +18,4 @@ bookshelfWithKnex.plugin('bookshelf-validate', { validator: validator, }); -module.exports = bookshelfWithKnex; +export { bookshelfWithKnex as Bookshelf, knex }; diff --git a/api/lib/infrastructure/caches/Cache.js b/api/lib/infrastructure/caches/Cache.js index 7ef7fbde004..8b733cac24c 100644 --- a/api/lib/infrastructure/caches/Cache.js +++ b/api/lib/infrastructure/caches/Cache.js @@ -12,4 +12,4 @@ class Cache { } } -module.exports = Cache; +export { Cache }; diff --git a/api/lib/infrastructure/caches/DistributedCache.js b/api/lib/infrastructure/caches/DistributedCache.js index dbe275f2622..98402758b72 100644 --- a/api/lib/infrastructure/caches/DistributedCache.js +++ b/api/lib/infrastructure/caches/DistributedCache.js @@ -1,5 +1,5 @@ -const Cache = require('./Cache.js'); -const RedisClient = require('../utils/RedisClient.js'); +import { Cache } from './Cache.js'; +import { RedisClient } from '../utils/RedisClient.js'; class DistributedCache extends Cache { constructor(underlyingCache, redisUrl, channel) { @@ -40,4 +40,4 @@ class DistributedCache extends Cache { } } -module.exports = DistributedCache; +export { DistributedCache }; diff --git a/api/lib/infrastructure/caches/InMemoryCache.js b/api/lib/infrastructure/caches/InMemoryCache.js index 6b5af805838..5d99f54e5ba 100644 --- a/api/lib/infrastructure/caches/InMemoryCache.js +++ b/api/lib/infrastructure/caches/InMemoryCache.js @@ -1,5 +1,5 @@ -const NodeCache = require('node-cache'); -const Cache = require('./Cache.js'); +import NodeCache from 'node-cache'; +import { Cache } from './Cache.js'; class InMemoryCache extends Cache { constructor() { @@ -54,4 +54,4 @@ class InMemoryCache extends Cache { } } -module.exports = InMemoryCache; +export { InMemoryCache }; diff --git a/api/lib/infrastructure/caches/LayeredCache.js b/api/lib/infrastructure/caches/LayeredCache.js index d76efbde4ad..441acb11d83 100644 --- a/api/lib/infrastructure/caches/LayeredCache.js +++ b/api/lib/infrastructure/caches/LayeredCache.js @@ -1,4 +1,4 @@ -const Cache = require('./Cache.js'); +import { Cache } from './Cache.js'; class LayeredCache extends Cache { constructor(firstLevelCache, secondLevelCache) { @@ -29,4 +29,4 @@ class LayeredCache extends Cache { } } -module.exports = LayeredCache; +export { LayeredCache }; diff --git a/api/lib/infrastructure/caches/RedisCache.js b/api/lib/infrastructure/caches/RedisCache.js index 0fe5c8816c2..f2056c3e36e 100644 --- a/api/lib/infrastructure/caches/RedisCache.js +++ b/api/lib/infrastructure/caches/RedisCache.js @@ -1,9 +1,12 @@ -const { using } = require('bluebird'); -const Redlock = require('redlock'); -const Cache = require('./Cache.js'); -const RedisClient = require('../utils/RedisClient.js'); -const logger = require('../logger.js'); -const settings = require('../../config.js'); +import bluebird from 'bluebird'; + +const { using } = bluebird; + +import Redlock from 'redlock'; +import { Cache } from './Cache.js'; +import { RedisClient } from '../utils/RedisClient.js'; +import { logger } from '../logger.js'; +import { config } from '../../config.js'; const REDIS_LOCK_PREFIX = 'locks:'; @@ -35,13 +38,13 @@ class RedisCache extends Cache { const unlockErrorHandler = (err) => logger.error({ key }, 'Error while trying to unlock Redis key', err); try { - const locker = this._client.lockDisposer(keyToLock, settings.caching.redisCacheKeyLockTTL, unlockErrorHandler); + const locker = this._client.lockDisposer(keyToLock, config.caching.redisCacheKeyLockTTL, unlockErrorHandler); const value = await using(locker, retrieveAndSetValue); return value; } catch (err) { if (err instanceof Redlock.LockError) { logger.trace({ keyToLock }, 'Could not lock Redis key, waiting'); - await new Promise((resolve) => setTimeout(resolve, settings.caching.redisCacheLockedWaitBeforeRetry)); + await new Promise((resolve) => setTimeout(resolve, config.caching.redisCacheLockedWaitBeforeRetry)); return this.get(key, generator); } logger.error({ err }, 'Error while trying to update value in Redis cache'); @@ -70,4 +73,4 @@ class RedisCache extends Cache { } } -module.exports = RedisCache; +export { RedisCache }; diff --git a/api/lib/infrastructure/caches/learning-content-cache.js b/api/lib/infrastructure/caches/learning-content-cache.js index 4d391fe6e73..9a9b1469341 100644 --- a/api/lib/infrastructure/caches/learning-content-cache.js +++ b/api/lib/infrastructure/caches/learning-content-cache.js @@ -1,9 +1,9 @@ -const Cache = require('./Cache.js'); -const DistributedCache = require('./DistributedCache.js'); -const InMemoryCache = require('./InMemoryCache.js'); -const LayeredCache = require('./LayeredCache.js'); -const RedisCache = require('./RedisCache.js'); -const settings = require('../../config.js'); +import { Cache } from './Cache.js'; +import { DistributedCache } from './DistributedCache.js'; +import { InMemoryCache } from './InMemoryCache.js'; +import { LayeredCache } from './LayeredCache.js'; +import { RedisCache } from './RedisCache.js'; +import { config } from '../../config.js'; const LEARNING_CONTENT_CHANNEL = 'Learning content'; const LEARNING_CONTENT_CACHE_KEY = 'LearningContent'; @@ -11,13 +11,13 @@ const LEARNING_CONTENT_CACHE_KEY = 'LearningContent'; class LearningContentCache extends Cache { constructor() { super(); - if (settings.caching.redisUrl) { + if (config.caching.redisUrl) { this.distributedCache = new DistributedCache( new InMemoryCache(), - settings.caching.redisUrl, + config.caching.redisUrl, LEARNING_CONTENT_CHANNEL ); - this.redisCache = new RedisCache(settings.caching.redisUrl); + this.redisCache = new RedisCache(config.caching.redisUrl); this._underlyingCache = new LayeredCache(this.distributedCache, this.redisCache); } else { @@ -44,4 +44,4 @@ class LearningContentCache extends Cache { const learningContentCache = new LearningContentCache(); -module.exports = { learningContentCache }; +export { learningContentCache }; diff --git a/api/lib/infrastructure/constants.js b/api/lib/infrastructure/constants.js index f921ad6cbcb..238fc3e4ecd 100644 --- a/api/lib/infrastructure/constants.js +++ b/api/lib/infrastructure/constants.js @@ -1,8 +1,8 @@ -const settings = require('../config.js'); +import { config } from '../config.js'; -const CONCURRENCY_HEAVY_OPERATIONS = settings.infra.concurrencyForHeavyOperations; -const CHUNK_SIZE_CAMPAIGN_RESULT_PROCESSING = settings.infra.chunkSizeForCampaignResultProcessing; -const ORGANIZATION_LEARNER_CHUNK_SIZE = settings.infra.chunkSizeForOrganizationLearnerDataProcessing; +const CONCURRENCY_HEAVY_OPERATIONS = config.infra.concurrencyForHeavyOperations; +const CHUNK_SIZE_CAMPAIGN_RESULT_PROCESSING = config.infra.chunkSizeForCampaignResultProcessing; +const ORGANIZATION_LEARNER_CHUNK_SIZE = config.infra.chunkSizeForOrganizationLearnerDataProcessing; const constants = { CONCURRENCY_HEAVY_OPERATIONS, @@ -10,7 +10,7 @@ const constants = { ORGANIZATION_LEARNER_CHUNK_SIZE, }; -module.exports = { +export { constants, CONCURRENCY_HEAVY_OPERATIONS, CHUNK_SIZE_CAMPAIGN_RESULT_PROCESSING, diff --git a/api/lib/infrastructure/datasources/learning-content/LearningContentResourceNotFound.js b/api/lib/infrastructure/datasources/learning-content/LearningContentResourceNotFound.js index 6908bf1a924..eb3a2236a78 100644 --- a/api/lib/infrastructure/datasources/learning-content/LearningContentResourceNotFound.js +++ b/api/lib/infrastructure/datasources/learning-content/LearningContentResourceNotFound.js @@ -4,4 +4,4 @@ class LearningContentResourceNotFound extends Error { } } -module.exports = LearningContentResourceNotFound; +export { LearningContentResourceNotFound }; diff --git a/api/lib/infrastructure/datasources/learning-content/area-datasource.js b/api/lib/infrastructure/datasources/learning-content/area-datasource.js index 9b07eb1e362..8ed27e85384 100644 --- a/api/lib/infrastructure/datasources/learning-content/area-datasource.js +++ b/api/lib/infrastructure/datasources/learning-content/area-datasource.js @@ -1,4 +1,4 @@ -const datasource = require('./datasource.js'); +import * as datasource from './datasource.js'; const areaDatasource = datasource.extend({ modelName: 'areas', @@ -13,4 +13,4 @@ const areaDatasource = datasource.extend({ }, }); -module.exports = { areaDatasource }; +export { areaDatasource }; diff --git a/api/lib/infrastructure/datasources/learning-content/challenge-datasource.js b/api/lib/infrastructure/datasources/learning-content/challenge-datasource.js index ae34c087dd9..01c5d977922 100644 --- a/api/lib/infrastructure/datasources/learning-content/challenge-datasource.js +++ b/api/lib/infrastructure/datasources/learning-content/challenge-datasource.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const datasource = require('./datasource.js'); +import _ from 'lodash'; +import * as datasource from './datasource.js'; const VALIDATED_CHALLENGE = 'validé'; const OPERATIVE_CHALLENGES = [VALIDATED_CHALLENGE, 'archivé']; @@ -65,4 +65,4 @@ const challengeDatasource = datasource.extend({ }, }); -module.exports = { challengeDatasource }; +export { challengeDatasource }; diff --git a/api/lib/infrastructure/datasources/learning-content/competence-datasource.js b/api/lib/infrastructure/datasources/learning-content/competence-datasource.js index fe551efe8fe..3966dfc8172 100644 --- a/api/lib/infrastructure/datasources/learning-content/competence-datasource.js +++ b/api/lib/infrastructure/datasources/learning-content/competence-datasource.js @@ -1,4 +1,4 @@ -const datasource = require('./datasource.js'); +import * as datasource from './datasource.js'; const competenceDatasource = datasource.extend({ modelName: 'competences', @@ -9,4 +9,4 @@ const competenceDatasource = datasource.extend({ }, }); -module.exports = { competenceDatasource }; +export { competenceDatasource }; diff --git a/api/lib/infrastructure/datasources/learning-content/course-datasource.js b/api/lib/infrastructure/datasources/learning-content/course-datasource.js index 877cd84912e..38ec69dcdc8 100644 --- a/api/lib/infrastructure/datasources/learning-content/course-datasource.js +++ b/api/lib/infrastructure/datasources/learning-content/course-datasource.js @@ -1,7 +1,7 @@ -const datasource = require('./datasource.js'); +import * as datasource from './datasource.js'; const courseDatasource = datasource.extend({ modelName: 'courses', }); -module.exports = { courseDatasource }; +export { courseDatasource }; diff --git a/api/lib/infrastructure/datasources/learning-content/datasource.js b/api/lib/infrastructure/datasources/learning-content/datasource.js index 68c26533485..af2ed6ec49e 100644 --- a/api/lib/infrastructure/datasources/learning-content/datasource.js +++ b/api/lib/infrastructure/datasources/learning-content/datasource.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); -const lcms = require('../../lcms.js'); -const LearningContentResourceNotFound = require('./LearningContentResourceNotFound.js'); -const { learningContentCache } = require('../../caches/learning-content-cache.js'); +import _ from 'lodash'; +import { lcms } from '../../lcms.js'; +import { LearningContentResourceNotFound } from './LearningContentResourceNotFound.js'; +import { learningContentCache } from '../../caches/learning-content-cache.js'; const _DatasourcePrototype = { async get(id) { @@ -51,16 +51,16 @@ const _DatasourcePrototype = { }, }; -module.exports = { - extend(props) { - const result = Object.assign({}, _DatasourcePrototype, props); - _.bindAll(result, _.functions(result)); - return result; - }, +const extend = function (props) { + const result = Object.assign({}, _DatasourcePrototype, props); + _.bindAll(result, _.functions(result)); + return result; +}; - async refreshLearningContentCacheRecords() { - const learningContent = await lcms.getLatestRelease(); - await learningContentCache.set(learningContent); - return learningContent; - }, +const refreshLearningContentCacheRecords = async function () { + const learningContent = await lcms.getLatestRelease(); + await learningContentCache.set(learningContent); + return learningContent; }; + +export { extend, refreshLearningContentCacheRecords }; diff --git a/api/lib/infrastructure/datasources/learning-content/framework-datasource.js b/api/lib/infrastructure/datasources/learning-content/framework-datasource.js index 9d8fd785cb5..51417f11d7d 100644 --- a/api/lib/infrastructure/datasources/learning-content/framework-datasource.js +++ b/api/lib/infrastructure/datasources/learning-content/framework-datasource.js @@ -1,4 +1,4 @@ -const datasource = require('./datasource.js'); +import * as datasource from './datasource.js'; const frameworkDatasource = datasource.extend({ modelName: 'frameworks', @@ -14,4 +14,4 @@ const frameworkDatasource = datasource.extend({ }, }); -module.exports = { frameworkDatasource }; +export { frameworkDatasource }; diff --git a/api/lib/infrastructure/datasources/learning-content/index.js b/api/lib/infrastructure/datasources/learning-content/index.js index 30c550e603c..d2936b0b2cc 100644 --- a/api/lib/infrastructure/datasources/learning-content/index.js +++ b/api/lib/infrastructure/datasources/learning-content/index.js @@ -1,12 +1,12 @@ -const { areaDatasource } = require('./area-datasource.js'); -const { challengeDatasource } = require('./challenge-datasource.js'); -const { competenceDatasource } = require('./competence-datasource.js'); -const { courseDatasource } = require('./course-datasource.js'); -const { skillDatasource } = require('./skill-datasource.js'); -const { tubeDatasource } = require('./tube-datasource.js'); -const { tutorialDatasource } = require('./tutorial-datasource.js'); +import { areaDatasource } from './area-datasource.js'; +import { challengeDatasource } from './challenge-datasource.js'; +import { competenceDatasource } from './competence-datasource.js'; +import { courseDatasource } from './course-datasource.js'; +import { skillDatasource } from './skill-datasource.js'; +import { tubeDatasource } from './tube-datasource.js'; +import { tutorialDatasource } from './tutorial-datasource.js'; -module.exports = { +export { areaDatasource, challengeDatasource, competenceDatasource, diff --git a/api/lib/infrastructure/datasources/learning-content/skill-datasource.js b/api/lib/infrastructure/datasources/learning-content/skill-datasource.js index 83abb2dd1b1..412bddcd032 100644 --- a/api/lib/infrastructure/datasources/learning-content/skill-datasource.js +++ b/api/lib/infrastructure/datasources/learning-content/skill-datasource.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const datasource = require('./datasource.js'); +import _ from 'lodash'; +import * as datasource from './datasource.js'; const ACTIVE_STATUS = 'actif'; const OPERATIVE_STATUSES = ['actif', 'archivé']; @@ -61,4 +61,4 @@ const skillDatasource = datasource.extend({ }, }); -module.exports = { skillDatasource }; +export { skillDatasource }; diff --git a/api/lib/infrastructure/datasources/learning-content/thematic-datasource.js b/api/lib/infrastructure/datasources/learning-content/thematic-datasource.js index 55e4e14bccf..d86f066ffd3 100644 --- a/api/lib/infrastructure/datasources/learning-content/thematic-datasource.js +++ b/api/lib/infrastructure/datasources/learning-content/thematic-datasource.js @@ -1,4 +1,4 @@ -const datasource = require('./datasource.js'); +import * as datasource from './datasource.js'; const thematicDatasource = datasource.extend({ modelName: 'thematics', @@ -14,4 +14,4 @@ const thematicDatasource = datasource.extend({ }, }); -module.exports = { thematicDatasource }; +export { thematicDatasource }; diff --git a/api/lib/infrastructure/datasources/learning-content/tube-datasource.js b/api/lib/infrastructure/datasources/learning-content/tube-datasource.js index 098dd13357d..39c2b0da8cc 100644 --- a/api/lib/infrastructure/datasources/learning-content/tube-datasource.js +++ b/api/lib/infrastructure/datasources/learning-content/tube-datasource.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const datasource = require('./datasource.js'); +import _ from 'lodash'; +import * as datasource from './datasource.js'; const tubeDatasource = datasource.extend({ modelName: 'tubes', @@ -15,4 +15,4 @@ const tubeDatasource = datasource.extend({ }, }); -module.exports = { tubeDatasource }; +export { tubeDatasource }; diff --git a/api/lib/infrastructure/datasources/learning-content/tutorial-datasource.js b/api/lib/infrastructure/datasources/learning-content/tutorial-datasource.js index 800b8dc5b1a..bcb7fb02659 100644 --- a/api/lib/infrastructure/datasources/learning-content/tutorial-datasource.js +++ b/api/lib/infrastructure/datasources/learning-content/tutorial-datasource.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const datasource = require('./datasource.js'); +import _ from 'lodash'; +import * as datasource from './datasource.js'; const tutorialDatasource = datasource.extend({ modelName: 'tutorials', @@ -9,4 +9,4 @@ const tutorialDatasource = datasource.extend({ return tutorials.filter((tutorialData) => _.includes(tutorialRecordIds, tutorialData.id)); }, }); -module.exports = { tutorialDatasource }; +export { tutorialDatasource }; diff --git a/api/lib/infrastructure/events/EventBus.js b/api/lib/infrastructure/events/EventBus.js index e9fbb31b588..641735ae3fd 100644 --- a/api/lib/infrastructure/events/EventBus.js +++ b/api/lib/infrastructure/events/EventBus.js @@ -1,4 +1,4 @@ -const bluebird = require('bluebird'); +import bluebird from 'bluebird'; class SubscriberList { constructor() { @@ -47,4 +47,4 @@ class EventBus { } } -module.exports = EventBus; +export { EventBus }; diff --git a/api/lib/infrastructure/events/EventBusBuilder.js b/api/lib/infrastructure/events/EventBusBuilder.js index 328feeadf71..b96a5cd8f95 100644 --- a/api/lib/infrastructure/events/EventBusBuilder.js +++ b/api/lib/infrastructure/events/EventBusBuilder.js @@ -1,8 +1,8 @@ -const EventBus = require('./EventBus.js'); -const dependenciesBuilder = require('./EventHandlerDependenciesBuilder.js'); -const LogEvent = require('./subscribers/LogEvent.js'); -const ScheduleParticipationResultCalculationJob = require('./subscribers/ScheduleParticipationResultCalculationJob.js'); -const ScheduleSendSharedParticipationResultsToPoleEmploiJob = require('./subscribers/ScheduleSendSharedParticipationResultsToPoleEmploiJob.js'); +import { EventBus } from './EventBus.js'; +import * as dependenciesBuilder from './EventHandlerDependenciesBuilder.js'; +import { LogEvent } from './subscribers/LogEvent.js'; +import { ScheduleParticipationResultCalculationJob } from './subscribers/ScheduleParticipationResultCalculationJob.js'; +import { ScheduleSendSharedParticipationResultsToPoleEmploiJob } from './subscribers/ScheduleSendSharedParticipationResultsToPoleEmploiJob.js'; const subscribers = [ LogEvent, @@ -20,6 +20,4 @@ function build() { return eventBus; } -module.exports = { - build, -}; +export { build }; diff --git a/api/lib/infrastructure/events/EventDispatcher.js b/api/lib/infrastructure/events/EventDispatcher.js index 93ca9ac8d2e..1ff498ebde9 100644 --- a/api/lib/infrastructure/events/EventDispatcher.js +++ b/api/lib/infrastructure/events/EventDispatcher.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; class EventDispatcher { constructor(logger) { @@ -72,4 +72,4 @@ class EventQueue { } } -module.exports = EventDispatcher; +export { EventDispatcher }; diff --git a/api/lib/infrastructure/events/EventDispatcherLogger.js b/api/lib/infrastructure/events/EventDispatcherLogger.js index baa747c7901..181c642ad7f 100644 --- a/api/lib/infrastructure/events/EventDispatcherLogger.js +++ b/api/lib/infrastructure/events/EventDispatcherLogger.js @@ -52,4 +52,4 @@ function buildLogBody({ event, eventHandlerName, error, duration }) { }; } -module.exports = EventDispatcherLogger; +export { EventDispatcherLogger }; diff --git a/api/lib/infrastructure/events/EventHandlerDependenciesBuilder.js b/api/lib/infrastructure/events/EventHandlerDependenciesBuilder.js index d635e705913..80f883819ad 100644 --- a/api/lib/infrastructure/events/EventHandlerDependenciesBuilder.js +++ b/api/lib/infrastructure/events/EventHandlerDependenciesBuilder.js @@ -1,6 +1,6 @@ -const monitoringTools = require('../../infrastructure/monitoring-tools.js'); -const ParticipationResultCalculationJob = require('../jobs/campaign-result/ParticipationResultCalculationJob.js'); -const SendSharedParticipationResultsToPoleEmploiJob = require('../jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob.js'); +import { monitoringTools } from '../../infrastructure/monitoring-tools.js'; +import { ParticipationResultCalculationJob } from '../jobs/campaign-result/ParticipationResultCalculationJob.js'; +import { SendSharedParticipationResultsToPoleEmploiJob } from '../jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob.js'; function build(classToInstanciate, domainTransaction) { const dependencies = _buildDependencies(domainTransaction); @@ -19,9 +19,7 @@ function _buildDependencies(domainTransaction) { }; } -module.exports = { - build, -}; +export { build }; class EventErrorHandler { constructor(handler, logger) { diff --git a/api/lib/infrastructure/events/subscribers/LogEvent.js b/api/lib/infrastructure/events/subscribers/LogEvent.js index be45d0e9f79..b8e92bd3cbe 100644 --- a/api/lib/infrastructure/events/subscribers/LogEvent.js +++ b/api/lib/infrastructure/events/subscribers/LogEvent.js @@ -1,4 +1,4 @@ -const Event = require('../../../domain/events/CampaignParticipationResultsShared.js'); +import { CampaignParticipationResultsShared } from '../../../domain/events/CampaignParticipationResultsShared.js'; class LogEvent { constructor({ monitoringTools }) { @@ -15,6 +15,6 @@ class LogEvent { } } -LogEvent.event = Event; +LogEvent.event = CampaignParticipationResultsShared; -module.exports = LogEvent; +export { LogEvent }; diff --git a/api/lib/infrastructure/events/subscribers/ScheduleParticipationResultCalculationJob.js b/api/lib/infrastructure/events/subscribers/ScheduleParticipationResultCalculationJob.js index 3dc22b227c5..634d06a6fb5 100644 --- a/api/lib/infrastructure/events/subscribers/ScheduleParticipationResultCalculationJob.js +++ b/api/lib/infrastructure/events/subscribers/ScheduleParticipationResultCalculationJob.js @@ -1,4 +1,4 @@ -const Event = require('../../../domain/events/CampaignParticipationResultsShared.js'); +import { CampaignParticipationResultsShared } from '../../../domain/events/CampaignParticipationResultsShared.js'; class ScheduleParticipationResultCalculationJob { constructor({ participationResultCalculationJob }) { @@ -14,6 +14,6 @@ class ScheduleParticipationResultCalculationJob { } } -ScheduleParticipationResultCalculationJob.event = Event; +ScheduleParticipationResultCalculationJob.event = CampaignParticipationResultsShared; -module.exports = ScheduleParticipationResultCalculationJob; +export { ScheduleParticipationResultCalculationJob }; diff --git a/api/lib/infrastructure/events/subscribers/ScheduleSendSharedParticipationResultsToPoleEmploiJob.js b/api/lib/infrastructure/events/subscribers/ScheduleSendSharedParticipationResultsToPoleEmploiJob.js index 2c4b3820d37..2aa8c6662b6 100644 --- a/api/lib/infrastructure/events/subscribers/ScheduleSendSharedParticipationResultsToPoleEmploiJob.js +++ b/api/lib/infrastructure/events/subscribers/ScheduleSendSharedParticipationResultsToPoleEmploiJob.js @@ -1,4 +1,4 @@ -const Event = require('../../../domain/events/CampaignParticipationResultsShared.js'); +import { CampaignParticipationResultsShared } from '../../../domain/events/CampaignParticipationResultsShared.js'; class ScheduleParticipationResultCalculationJob { constructor({ sendSharedParticipationResultsToPoleEmploiJob }) { @@ -14,6 +14,6 @@ class ScheduleParticipationResultCalculationJob { } } -ScheduleParticipationResultCalculationJob.event = Event; +ScheduleParticipationResultCalculationJob.event = CampaignParticipationResultsShared; -module.exports = ScheduleParticipationResultCalculationJob; +export { ScheduleParticipationResultCalculationJob as ScheduleSendSharedParticipationResultsToPoleEmploiJob }; diff --git a/api/lib/infrastructure/exports/campaigns/campaign-profiles-collection-result-line.js b/api/lib/infrastructure/exports/campaigns/campaign-profiles-collection-result-line.js index 9e229dae0de..f35e39acf4b 100644 --- a/api/lib/infrastructure/exports/campaigns/campaign-profiles-collection-result-line.js +++ b/api/lib/infrastructure/exports/campaigns/campaign-profiles-collection-result-line.js @@ -1,5 +1,5 @@ -const csvSerializer = require('../../serializers/csv/csv-serializer.js'); -const moment = require('moment'); +import * as csvSerializer from '../../serializers/csv/csv-serializer.js'; +import moment from 'moment'; const EMPTY_ARRAY = []; @@ -112,4 +112,4 @@ class CampaignProfilesCollectionResultLine { } } -module.exports = CampaignProfilesCollectionResultLine; +export { CampaignProfilesCollectionResultLine }; diff --git a/api/lib/infrastructure/external-storage/cpf-external-storage.js b/api/lib/infrastructure/external-storage/cpf-external-storage.js index 7ab467f13be..284393a3aef 100644 --- a/api/lib/infrastructure/external-storage/cpf-external-storage.js +++ b/api/lib/infrastructure/external-storage/cpf-external-storage.js @@ -1,52 +1,53 @@ -const s3Utils = require('./s3-utils.js'); -const { cpf } = require('../../config.js'); -const logger = require('../logger.js'); - -module.exports = { - upload: async function ({ filename, readableStream, dependencies = { s3Utils, logger } }) { - dependencies.logger.trace('cpfExternalStorage: start upload'); - - const { accessKeyId, secretAccessKey, endpoint, region, bucket } = cpf.storage; - const s3Client = dependencies.s3Utils.getS3Client({ - accessKeyId, - secretAccessKey, - endpoint, - region, - }); - - const upload = dependencies.s3Utils.startUpload({ - client: s3Client, - filename, - bucket, - readableStream, - }); - - upload.on('httpUploadProgress', (progress) => dependencies.logger.trace(progress)); - - await upload.done(); - dependencies.logger.trace(`cpfExternalStorage: ${filename} upload done`); - }, - - getPreSignUrlsOfFilesModifiedAfter: async function ({ date, dependencies = { s3Utils } }) { - const { accessKeyId, secretAccessKey, endpoint, region, bucket, preSignedExpiresIn: expiresIn } = cpf.storage; - const s3Client = dependencies.s3Utils.getS3Client({ - accessKeyId, - secretAccessKey, - endpoint, - region, - }); - - const filesInBucket = await dependencies.s3Utils.listFiles({ client: s3Client, bucket }); - - const keysOfFilesModifiedAfter = filesInBucket?.Contents.filter(({ LastModified }) => LastModified >= date).map( - ({ Key }) => Key - ); - - return await dependencies.s3Utils.preSignFiles({ - client: s3Client, - bucket, - keys: keysOfFilesModifiedAfter, - expiresIn, - }); - }, +import * as s3Utils from './s3-utils.js'; +import { config } from '../../config.js'; +import { logger } from '../logger.js'; +const { cpf } = config; + +const upload = async function ({ filename, readableStream, dependencies = { s3Utils, logger } }) { + dependencies.logger.trace('cpfExternalStorage: start upload'); + + const { accessKeyId, secretAccessKey, endpoint, region, bucket } = cpf.storage; + const s3Client = dependencies.s3Utils.getS3Client({ + accessKeyId, + secretAccessKey, + endpoint, + region, + }); + + const upload = dependencies.s3Utils.startUpload({ + client: s3Client, + filename, + bucket, + readableStream, + }); + + upload.on('httpUploadProgress', (progress) => dependencies.logger.trace(progress)); + + await upload.done(); + dependencies.logger.trace(`cpfExternalStorage: ${filename} upload done`); }; + +const getPreSignUrlsOfFilesModifiedAfter = async function ({ date, dependencies = { s3Utils } }) { + const { accessKeyId, secretAccessKey, endpoint, region, bucket, preSignedExpiresIn: expiresIn } = cpf.storage; + const s3Client = dependencies.s3Utils.getS3Client({ + accessKeyId, + secretAccessKey, + endpoint, + region, + }); + + const filesInBucket = await dependencies.s3Utils.listFiles({ client: s3Client, bucket }); + + const keysOfFilesModifiedAfter = filesInBucket?.Contents.filter(({ LastModified }) => LastModified >= date).map( + ({ Key }) => Key + ); + + return await dependencies.s3Utils.preSignFiles({ + client: s3Client, + bucket, + keys: keysOfFilesModifiedAfter, + expiresIn, + }); +}; + +export { upload, getPreSignUrlsOfFilesModifiedAfter }; diff --git a/api/lib/infrastructure/external-storage/s3-utils.js b/api/lib/infrastructure/external-storage/s3-utils.js index b670927ac1a..b1d63d23008 100644 --- a/api/lib/infrastructure/external-storage/s3-utils.js +++ b/api/lib/infrastructure/external-storage/s3-utils.js @@ -1,35 +1,39 @@ -const { S3Client, ListObjectsV2Command, GetObjectCommand } = require('@aws-sdk/client-s3'); -const { Upload } = require('@aws-sdk/lib-storage'); -const { getSignedUrl } = require('@aws-sdk/s3-request-presigner'); -const bluebird = require('bluebird'); +import { S3Client, ListObjectsV2Command, GetObjectCommand } from '@aws-sdk/client-s3'; +import { Upload } from '@aws-sdk/lib-storage'; +import { getSignedUrl } from '@aws-sdk/s3-request-presigner'; -module.exports = { - getS3Client({ accessKeyId, secretAccessKey, endpoint, region }) { - return new S3Client({ - credentials: { accessKeyId, secretAccessKey }, - endpoint, - region, - }); - }, - startUpload({ client, filename, bucket, readableStream }) { - return new Upload({ - client, - params: { - Key: filename, - Bucket: bucket, - ContentType: 'gzip', - Body: readableStream, - partSize: 1024 * 1024 * 5, - }, - }); - }, - async listFiles({ client, bucket }) { - return client.send(new ListObjectsV2Command({ Bucket: bucket })); - }, - async preSignFiles({ client, bucket, keys, expiresIn }) { - return bluebird.mapSeries(keys, async (key) => { - const getObjectCommand = new GetObjectCommand({ Bucket: bucket, Key: key }); - return await getSignedUrl(client, getObjectCommand, { expiresIn }); - }); - }, +import bluebird from 'bluebird'; + +const getS3Client = function ({ accessKeyId, secretAccessKey, endpoint, region }) { + return new S3Client({ + credentials: { accessKeyId, secretAccessKey }, + endpoint, + region, + }); +}; + +const startUpload = function ({ client, filename, bucket, readableStream }) { + return new Upload({ + client, + params: { + Key: filename, + Bucket: bucket, + ContentType: 'gzip', + Body: readableStream, + partSize: 1024 * 1024 * 5, + }, + }); +}; + +const listFiles = async function ({ client, bucket }) { + return client.send(new ListObjectsV2Command({ Bucket: bucket })); +}; + +const preSignFiles = async function ({ client, bucket, keys, expiresIn }) { + return bluebird.mapSeries(keys, async (key) => { + const getObjectCommand = new GetObjectCommand({ Bucket: bucket, Key: key }); + return await getSignedUrl(client, getObjectCommand, { expiresIn }); + }); }; + +export { getS3Client, startUpload, listFiles, preSignFiles }; diff --git a/api/lib/infrastructure/externals/pole-emploi/PoleEmploiPayload.js b/api/lib/infrastructure/externals/pole-emploi/PoleEmploiPayload.js index bdaa79fb952..9d38fc65b9f 100644 --- a/api/lib/infrastructure/externals/pole-emploi/PoleEmploiPayload.js +++ b/api/lib/infrastructure/externals/pole-emploi/PoleEmploiPayload.js @@ -1,5 +1,5 @@ -const _ = require('lodash'); -const config = require('../../../config.js'); +import _ from 'lodash'; +import { config } from '../../../config.js'; const CAMPAIGN_TYPE = 'EVALUATION'; const STRUCTURE_NAME = 'Pix'; @@ -159,4 +159,4 @@ function _getTypeTest(targetProfileName) { return PROFILE_TYPES.CP; } -module.exports = PoleEmploiPayload; +export { PoleEmploiPayload }; diff --git a/api/lib/infrastructure/externals/pole-emploi/disabled-pole-emploi-notifier.js b/api/lib/infrastructure/externals/pole-emploi/disabled-pole-emploi-notifier.js index e4a397492b5..dbd830ff804 100644 --- a/api/lib/infrastructure/externals/pole-emploi/disabled-pole-emploi-notifier.js +++ b/api/lib/infrastructure/externals/pole-emploi/disabled-pole-emploi-notifier.js @@ -1,8 +1,8 @@ -module.exports = { - async notify() { - return { - isSuccessful: false, - code: 'SENDING-DISABLED', - }; - }, +const notify = async function () { + return { + isSuccessful: false, + code: 'SENDING-DISABLED', + }; }; + +export { notify }; diff --git a/api/lib/infrastructure/externals/pole-emploi/pole-emploi-notifier.js b/api/lib/infrastructure/externals/pole-emploi/pole-emploi-notifier.js index 1a2e55f7607..5c79ae4a5ae 100644 --- a/api/lib/infrastructure/externals/pole-emploi/pole-emploi-notifier.js +++ b/api/lib/infrastructure/externals/pole-emploi/pole-emploi-notifier.js @@ -1,115 +1,118 @@ -const get = require('lodash/get'); -const moment = require('moment'); -const querystring = require('querystring'); -const monitoringTools = require('../../monitoring-tools.js'); -const authenticationMethodRepository = require('../../repositories/authentication-method-repository.js'); -const AuthenticationMethod = require('../../../domain/models/AuthenticationMethod.js'); -const OidcIdentityProviders = require('../../../domain/constants/oidc-identity-providers.js'); -const httpAgent = require('../../http/http-agent.js'); -const settings = require('../../../config.js'); -const { UnexpectedUserAccountError } = require('../../../domain/errors.js'); -const httpErrorsHelper = require('../../../infrastructure/http/errors-helper.js'); +import lodash from 'lodash'; -module.exports = { - async notify(userId, payload) { +const { get } = lodash; + +import moment from 'moment'; +import querystring from 'querystring'; +import { monitoringTools } from '../../monitoring-tools.js'; +import * as authenticationMethodRepository from '../../repositories/authentication-method-repository.js'; +import { AuthenticationMethod } from '../../../domain/models/AuthenticationMethod.js'; +import * as OidcIdentityProviders from '../../../domain/constants/oidc-identity-providers.js'; +import { httpAgent } from '../../http/http-agent.js'; +import { config } from '../../../config.js'; +import { UnexpectedUserAccountError } from '../../../domain/errors.js'; +import * as httpErrorsHelper from '../../../infrastructure/http/errors-helper.js'; + +const notify = async function (userId, payload) { + monitoringTools.logInfoWithCorrelationIds({ + event: 'participation-send-pole-emploi', + 'pole-emploi-action': 'send-results', + 'participation-state': participationState(payload), + }); + const authenticationMethod = await authenticationMethodRepository.findOneByUserIdAndIdentityProvider({ + userId, + identityProvider: OidcIdentityProviders.POLE_EMPLOI.service.code, + }); + let accessToken = get(authenticationMethod, 'authenticationComplement.accessToken'); + if (!accessToken) { + throw new UnexpectedUserAccountError({ + message: "Le compte utilisateur n'est pas rattaché à l'organisation Pôle Emploi", + }); + } + + const expiredDate = get(authenticationMethod, 'authenticationComplement.expiredDate'); + const refreshToken = get(authenticationMethod, 'authenticationComplement.refreshToken'); + if (!refreshToken || new Date(expiredDate) <= new Date()) { monitoringTools.logInfoWithCorrelationIds({ event: 'participation-send-pole-emploi', - 'pole-emploi-action': 'send-results', + 'pole-emploi-action': 'refresh-token', 'participation-state': participationState(payload), + 'expired-date': expiredDate, }); - const authenticationMethod = await authenticationMethodRepository.findOneByUserIdAndIdentityProvider({ - userId, - identityProvider: OidcIdentityProviders.POLE_EMPLOI.service.code, + const data = { + grant_type: 'refresh_token', + refresh_token: refreshToken, + client_secret: config.poleEmploi.clientSecret, + client_id: config.poleEmploi.clientId, + }; + + const tokenResponse = await httpAgent.post({ + url: config.poleEmploi.tokenUrl, + payload: querystring.stringify(data), + headers: { 'content-type': 'application/x-www-form-urlencoded' }, + timeout: config.partner.fetchTimeOut, }); - let accessToken = get(authenticationMethod, 'authenticationComplement.accessToken'); - if (!accessToken) { - throw new UnexpectedUserAccountError({ - message: "Le compte utilisateur n'est pas rattaché à l'organisation Pôle Emploi", - }); - } - const expiredDate = get(authenticationMethod, 'authenticationComplement.expiredDate'); - const refreshToken = get(authenticationMethod, 'authenticationComplement.refreshToken'); - if (!refreshToken || new Date(expiredDate) <= new Date()) { - monitoringTools.logInfoWithCorrelationIds({ + if (!tokenResponse.isSuccessful) { + const serializedError = httpErrorsHelper.serializeHttpErrorResponse(tokenResponse); + monitoringTools.logErrorWithCorrelationIds({ event: 'participation-send-pole-emploi', 'pole-emploi-action': 'refresh-token', 'participation-state': participationState(payload), - 'expired-date': expiredDate, + message: serializedError, }); - const data = { - grant_type: 'refresh_token', - refresh_token: refreshToken, - client_secret: settings.poleEmploi.clientSecret, - client_id: settings.poleEmploi.clientId, + return { + isSuccessful: tokenResponse.isSuccessful, + code: tokenResponse.code || '500', }; + } - const tokenResponse = await httpAgent.post({ - url: settings.poleEmploi.tokenUrl, - payload: querystring.stringify(data), - headers: { 'content-type': 'application/x-www-form-urlencoded' }, - timeout: settings.partner.fetchTimeOut, - }); - - if (!tokenResponse.isSuccessful) { - const serializedError = httpErrorsHelper.serializeHttpErrorResponse(tokenResponse); - monitoringTools.logErrorWithCorrelationIds({ - event: 'participation-send-pole-emploi', - 'pole-emploi-action': 'refresh-token', - 'participation-state': participationState(payload), - message: serializedError, - }); - return { - isSuccessful: tokenResponse.isSuccessful, - code: tokenResponse.code || '500', - }; - } + accessToken = tokenResponse.data['access_token']; + const authenticationComplement = new AuthenticationMethod.OidcAuthenticationComplement({ + accessToken, + refreshToken: tokenResponse.data['refresh_token'], + expiredDate: moment().add(tokenResponse.data['expires_in'], 's').toDate(), + }); + await authenticationMethodRepository.updateAuthenticationComplementByUserIdAndIdentityProvider({ + authenticationComplement, + userId, + identityProvider: OidcIdentityProviders.POLE_EMPLOI.service.code, + }); + } - accessToken = tokenResponse.data['access_token']; - const authenticationComplement = new AuthenticationMethod.OidcAuthenticationComplement({ - accessToken, - refreshToken: tokenResponse.data['refresh_token'], - expiredDate: moment().add(tokenResponse.data['expires_in'], 's').toDate(), - }); - await authenticationMethodRepository.updateAuthenticationComplementByUserIdAndIdentityProvider({ - authenticationComplement, - userId, - identityProvider: OidcIdentityProviders.POLE_EMPLOI.service.code, - }); - } + const url = config.poleEmploi.sendingUrl; + const headers = { + Authorization: `Bearer ${accessToken}`, + 'Content-type': 'application/json', + Accept: 'application/json', + 'Service-source': 'Pix', + }; - const url = settings.poleEmploi.sendingUrl; - const headers = { - Authorization: `Bearer ${accessToken}`, - 'Content-type': 'application/json', - Accept: 'application/json', - 'Service-source': 'Pix', - }; + const httpResponse = await httpAgent.post({ + url, + payload, + headers, + timeout: config.partner.fetchTimeOut, + }); - const httpResponse = await httpAgent.post({ - url, - payload, - headers, - timeout: settings.partner.fetchTimeOut, + if (!httpResponse.isSuccessful) { + const serializedError = httpErrorsHelper.serializeHttpErrorResponse(httpResponse); + monitoringTools.logErrorWithCorrelationIds({ + event: 'participation-send-pole-emploi', + 'pole-emploi-action': 'send-results', + 'participation-state': participationState(payload), + message: serializedError, }); + } - if (!httpResponse.isSuccessful) { - const serializedError = httpErrorsHelper.serializeHttpErrorResponse(httpResponse); - monitoringTools.logErrorWithCorrelationIds({ - event: 'participation-send-pole-emploi', - 'pole-emploi-action': 'send-results', - 'participation-state': participationState(payload), - message: serializedError, - }); - } - - return { - isSuccessful: httpResponse.isSuccessful, - code: httpResponse.code || '500', - }; - }, + return { + isSuccessful: httpResponse.isSuccessful, + code: httpResponse.code || '500', + }; }; +export { notify }; + function participationState({ test }) { if (test.dateValidation) { return 'PARTICIPATION_SHARED'; diff --git a/api/lib/infrastructure/files/attendance-sheet/attendance-sheet-placeholders.js b/api/lib/infrastructure/files/attendance-sheet/attendance-sheet-placeholders.js index 322787a708e..526a1712b9b 100644 --- a/api/lib/infrastructure/files/attendance-sheet/attendance-sheet-placeholders.js +++ b/api/lib/infrastructure/files/attendance-sheet/attendance-sheet-placeholders.js @@ -89,7 +89,7 @@ const SCO_ATTENDANCE_SHEET_CANDIDATE_TEMPLATE_VALUES = [ const EXTRA_EMPTY_CANDIDATE_ROWS = 20; -module.exports = { +export { ATTENDANCE_SHEET_SESSION_TEMPLATE_VALUES, NON_SCO_ATTENDANCE_SHEET_CANDIDATE_TEMPLATE_VALUES, SCO_ATTENDANCE_SHEET_CANDIDATE_TEMPLATE_VALUES, diff --git a/api/lib/infrastructure/files/candidates-import/CandidateData.js b/api/lib/infrastructure/files/candidates-import/CandidateData.js index 0789ae367bf..7fb01a0484a 100644 --- a/api/lib/infrastructure/files/candidates-import/CandidateData.js +++ b/api/lib/infrastructure/files/candidates-import/CandidateData.js @@ -1,15 +1,15 @@ -const moment = require('moment'); -const _ = require('lodash'); +import moment from 'moment'; +import _ from 'lodash'; const FRANCE_COUNTRY_CODE = '99100'; -const CertificationCandidate = require('../../../domain/models/CertificationCandidate.js'); -const { +import { CertificationCandidate } from '../../../domain/models/CertificationCandidate.js'; +import { PIX_PLUS_DROIT, CLEA, PIX_PLUS_EDU_1ER_DEGRE, PIX_PLUS_EDU_2ND_DEGRE, -} = require('../../../domain/models/ComplementaryCertification.js'); +} from '../../../domain/models/ComplementaryCertification.js'; -module.exports = class CandidateData { +class CandidateData { constructor({ id = null, firstName = null, @@ -113,4 +113,6 @@ module.exports = class CandidateData { static empty({ number, i18n }) { return new CandidateData({ number, i18n }); } -}; +} + +export { CandidateData }; diff --git a/api/lib/infrastructure/files/candidates-import/SessionData.js b/api/lib/infrastructure/files/candidates-import/SessionData.js index 575dad3f25f..268d4bde97b 100644 --- a/api/lib/infrastructure/files/candidates-import/SessionData.js +++ b/api/lib/infrastructure/files/candidates-import/SessionData.js @@ -1,6 +1,6 @@ -const moment = require('moment'); +import moment from 'moment'; -module.exports = class SessionData { +class SessionData { constructor({ id, accessCode, @@ -41,4 +41,6 @@ module.exports = class SessionData { static fromSession(session) { return new SessionData(session); } -}; +} + +export { SessionData }; diff --git a/api/lib/infrastructure/files/candidates-import/candidates-import-placeholders.js b/api/lib/infrastructure/files/candidates-import/candidates-import-placeholders.js index 1a4afa3e453..49774ecfd28 100644 --- a/api/lib/infrastructure/files/candidates-import/candidates-import-placeholders.js +++ b/api/lib/infrastructure/files/candidates-import/candidates-import-placeholders.js @@ -1,9 +1,9 @@ -const { +import { PIX_PLUS_DROIT, CLEA, PIX_PLUS_EDU_1ER_DEGRE, PIX_PLUS_EDU_2ND_DEGRE, -} = require('../../../domain/models/ComplementaryCertification.js'); +} from '../../../domain/models/ComplementaryCertification.js'; const IMPORT_CANDIDATES_SESSION_TEMPLATE_HEADERS = [ 'headers.birthcity', @@ -161,7 +161,7 @@ const IMPORT_CANDIDATES_TEMPLATE_VALUES = [ const EXTRA_EMPTY_CANDIDATE_ROWS = 20; -module.exports = { +export { IMPORT_CANDIDATES_SESSION_TEMPLATE_HEADERS, IMPORT_CANDIDATES_SESSION_TEMPLATE_VALUES, IMPORT_CANDIDATES_TEMPLATE_VALUES, diff --git a/api/lib/infrastructure/files/candidates-import/candidates-import-transformation-structures.js b/api/lib/infrastructure/files/candidates-import/candidates-import-transformation-structures.js index 25953c97173..f724f9b3842 100644 --- a/api/lib/infrastructure/files/candidates-import/candidates-import-transformation-structures.js +++ b/api/lib/infrastructure/files/candidates-import/candidates-import-transformation-structures.js @@ -1,11 +1,11 @@ -const _ = require('lodash'); -const { convertDateValue } = require('../../utils/date-utils.js'); -const { +import _ from 'lodash'; +import { convertDateValue } from '../../utils/date-utils.js'; +import { CLEA, PIX_PLUS_DROIT, PIX_PLUS_EDU_1ER_DEGRE, PIX_PLUS_EDU_2ND_DEGRE, -} = require('../../../domain/models/ComplementaryCertification.js'); +} from '../../../domain/models/ComplementaryCertification.js'; // These are transformation structures. They provide all the necessary info // on how to transform cell values in an attendance sheet into a target JS object. @@ -178,6 +178,4 @@ function _toBooleanIfValueEqualsOuiOrNull({ val, translate }) { return val?.toUpperCase() === yesTranslation.toUpperCase() ? true : null; } -module.exports = { - getTransformationStructsForPixCertifCandidatesImport, -}; +export { getTransformationStructsForPixCertifCandidatesImport }; diff --git a/api/lib/infrastructure/files/candidates-import/fill-candidates-import-sheet.js b/api/lib/infrastructure/files/candidates-import/fill-candidates-import-sheet.js index 721b1197152..902e9c5575b 100644 --- a/api/lib/infrastructure/files/candidates-import/fill-candidates-import-sheet.js +++ b/api/lib/infrastructure/files/candidates-import/fill-candidates-import-sheet.js @@ -1,23 +1,28 @@ -const writeOdsUtils = require('../../utils/ods/write-ods-utils.js'); -const readOdsUtils = require('../../utils/ods/read-ods-utils.js'); -const { +import * as writeOdsUtils from '../../utils/ods/write-ods-utils.js'; +import * as readOdsUtils from '../../utils/ods/read-ods-utils.js'; + +import { EXTRA_EMPTY_CANDIDATE_ROWS, IMPORT_CANDIDATES_TEMPLATE_VALUES, IMPORT_CANDIDATES_SESSION_TEMPLATE_VALUES, IMPORT_CANDIDATES_SESSION_TEMPLATE_HEADERS, -} = require('./candidates-import-placeholders.js'); -const CertificationCandidate = require('../../../domain/models/CertificationCandidate.js'); +} from './candidates-import-placeholders.js'; + +import { CertificationCandidate } from '../../../domain/models/CertificationCandidate.js'; -const _ = require('lodash'); -const CandidateData = require('./CandidateData.js'); -const SessionData = require('./SessionData.js'); +import _ from 'lodash'; +import { CandidateData } from './CandidateData.js'; +import { SessionData } from './SessionData.js'; + +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); const INFORMATIVE_HEADER_ROW = 8; const HEADER_ROW_SPAN = 3; const CANDIDATE_TABLE_HEADER_ROW = 11; const CANDIDATE_TABLE_FIRST_ROW = 12; -module.exports = async function fillCandidatesImportSheet({ +const fillCandidatesImportSheet = async function ({ session, certificationCenterHabilitations, isScoCertificationCenter, @@ -43,6 +48,8 @@ module.exports = async function fillCandidatesImportSheet({ return odsBuilder.build({ templateFilePath: _getCandidatesImportTemplatePath() }); }; +export { fillCandidatesImportSheet }; + async function _getCandidatesImportTemplate() { const templatePath = _getCandidatesImportTemplatePath(); return readOdsUtils.getContentXml({ odsFilePath: templatePath }); diff --git a/api/lib/infrastructure/files/sessions-import.js b/api/lib/infrastructure/files/sessions-import.js index e9ee24d6363..4644396face 100644 --- a/api/lib/infrastructure/files/sessions-import.js +++ b/api/lib/infrastructure/files/sessions-import.js @@ -1,6 +1,9 @@ -const { Parser } = require('json2csv'); -const { headers, COMPLEMENTARY_CERTIFICATION_SUFFIX } = require('../utils/csv/sessions-import.js'); -const omit = require('lodash/omit'); +import { Parser } from 'json2csv'; + +const { omit } = lodash; + +import { headers, COMPLEMENTARY_CERTIFICATION_SUFFIX } from '../utils/csv/sessions-import.js'; +import lodash from 'lodash'; function getHeaders({ habilitationLabels, shouldDisplayBillingModeColumns = true }) { const complementaryCertificationsHeaders = _getComplementaryCertificationsHeaders(habilitationLabels); @@ -27,4 +30,4 @@ function _getHeadersAsArray(complementaryCertificationsHeaders = [], shouldDispl return [...csvHeaders, ...complementaryCertificationsHeaders]; } -module.exports = { getHeaders }; +export { getHeaders }; diff --git a/api/lib/infrastructure/helpers/csv.js b/api/lib/infrastructure/helpers/csv.js index 4d7d3fecf81..6137384ee28 100644 --- a/api/lib/infrastructure/helpers/csv.js +++ b/api/lib/infrastructure/helpers/csv.js @@ -1,8 +1,13 @@ -const fs = require('fs'); -const { readFile, access } = require('fs').promises; -const { isEmpty, difference } = require('lodash'); -const { FileValidationError, NotFoundError } = require('../../domain/errors.js'); -const papa = require('papaparse'); +import fs, { promises } from 'fs'; + +const { readFile, access } = promises; + +import lodash from 'lodash'; + +const { isEmpty, difference } = lodash; + +import { FileValidationError, NotFoundError } from '../../domain/errors.js'; +import papa from 'papaparse'; const ERRORS = { MISSING_REQUIRED_FIELD_NAMES: 'MISSING_REQUIRED_FIELD_NAMES', @@ -81,7 +86,4 @@ async function _parseCsvData(cleanedData, options) { return data; } -module.exports = { - checkCsvHeader, - parseCsvWithHeader, -}; +export { checkCsvHeader, parseCsvWithHeader }; diff --git a/api/lib/infrastructure/http/errors-helper.js b/api/lib/infrastructure/http/errors-helper.js index 0cfc44fdc9d..f7e0c54ea0e 100644 --- a/api/lib/infrastructure/http/errors-helper.js +++ b/api/lib/infrastructure/http/errors-helper.js @@ -21,6 +21,4 @@ function serializeHttpErrorResponse(response, customMessage) { return dataToLog; } -module.exports = { - serializeHttpErrorResponse, -}; +export { serializeHttpErrorResponse }; diff --git a/api/lib/infrastructure/http/http-agent.js b/api/lib/infrastructure/http/http-agent.js index 20731619295..5241985a977 100644 --- a/api/lib/infrastructure/http/http-agent.js +++ b/api/lib/infrastructure/http/http-agent.js @@ -1,8 +1,9 @@ -// eslint-disable-next-line no-restricted-modules -const axios = require('axios'); -const { performance } = require('perf_hooks'); +import axios from 'axios'; +import perf_hooks from 'perf_hooks'; -const monitoringTools = require('../monitoring-tools.js'); +const { performance } = perf_hooks; + +import { monitoringTools } from '../monitoring-tools.js'; class HttpResponse { constructor({ code, data, isSuccessful }) { @@ -12,7 +13,7 @@ class HttpResponse { } } -const HttpAgent = { +const httpAgent = { async post({ url, payload, headers, timeout }) { const startTime = performance.now(); let responseTime = null; @@ -114,4 +115,4 @@ const HttpAgent = { }, }; -module.exports = HttpAgent; +export { httpAgent }; diff --git a/api/lib/infrastructure/jobs/JobPgBoss.js b/api/lib/infrastructure/jobs/JobPgBoss.js index 59d7af0a9ea..4304b4c5e27 100644 --- a/api/lib/infrastructure/jobs/JobPgBoss.js +++ b/api/lib/infrastructure/jobs/JobPgBoss.js @@ -20,4 +20,4 @@ class JobPgBoss { } } -module.exports = JobPgBoss; +export { JobPgBoss }; diff --git a/api/lib/infrastructure/jobs/JobQueue.js b/api/lib/infrastructure/jobs/JobQueue.js index fcfc6916a16..47f7620b6d1 100644 --- a/api/lib/infrastructure/jobs/JobQueue.js +++ b/api/lib/infrastructure/jobs/JobQueue.js @@ -1,6 +1,9 @@ -const MonitoredJobHandler = require('./monitoring/MonitoredJobHandler.js'); -const logger = require('../logger.js'); -const { teamSize, teamConcurrency } = require('../../config.js').pgBoss; +import { MonitoredJobHandler } from './monitoring/MonitoredJobHandler.js'; +import { logger } from '../logger.js'; +import { config } from '../../config.js'; + +const { teamSize, teamConcurrency } = config.pgBoss; + class JobQueue { constructor(pgBoss) { this.pgBoss = pgBoss; @@ -22,4 +25,4 @@ class JobQueue { } } -module.exports = JobQueue; +export { JobQueue }; diff --git a/api/lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJob.js b/api/lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJob.js index c1e6868de01..2e951aa3cfc 100644 --- a/api/lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJob.js +++ b/api/lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJob.js @@ -1,11 +1,9 @@ -const Job = require('../JobPgBoss.js'); +import { JobPgBoss } from '../JobPgBoss.js'; -class ParticipationResultCalculationJob extends Job { +class ParticipationResultCalculationJob extends JobPgBoss { constructor(queryBuilder) { super({ name: 'ParticipationResultCalculationJob', retryLimit: 3 }, queryBuilder); } } -ParticipationResultCalculationJob.name = 'ParticipationResultCalculationJob'; - -module.exports = ParticipationResultCalculationJob; +export { ParticipationResultCalculationJob }; diff --git a/api/lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJobHandler.js b/api/lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJobHandler.js index 83c2f7afeda..758aa73f418 100644 --- a/api/lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJobHandler.js +++ b/api/lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJobHandler.js @@ -1,5 +1,5 @@ -const Job = require('./ParticipationResultCalculationJob.js'); -const usecases = require('../../../domain/usecases/index.js'); +import { ParticipationResultCalculationJob } from './ParticipationResultCalculationJob.js'; +import { usecases } from '../../../domain/usecases/index.js'; class ParticipationResultCalculationJobHandler { async handle(event) { @@ -9,8 +9,8 @@ class ParticipationResultCalculationJobHandler { } get name() { - return Job.name; + return ParticipationResultCalculationJob.name; } } -module.exports = ParticipationResultCalculationJobHandler; +export { ParticipationResultCalculationJobHandler }; diff --git a/api/lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiHandler.js b/api/lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiHandler.js index e67ff359b84..72d5eec1b73 100644 --- a/api/lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiHandler.js +++ b/api/lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiHandler.js @@ -1,5 +1,5 @@ -const Job = require('./SendSharedParticipationResultsToPoleEmploiJob.js'); -const usecases = require('../../../domain/usecases/index.js'); +import { SendSharedParticipationResultsToPoleEmploiJob } from './SendSharedParticipationResultsToPoleEmploiJob.js'; +import { usecases } from '../../../domain/usecases/index.js'; class SendSharedParticipationResultsToPoleEmploiHandler { async handle(event) { @@ -9,8 +9,8 @@ class SendSharedParticipationResultsToPoleEmploiHandler { } get name() { - return Job.name; + return SendSharedParticipationResultsToPoleEmploiJob.name; } } -module.exports = SendSharedParticipationResultsToPoleEmploiHandler; +export { SendSharedParticipationResultsToPoleEmploiHandler }; diff --git a/api/lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob.js b/api/lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob.js index fddb49fe52a..6f3bb21a67f 100644 --- a/api/lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob.js +++ b/api/lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob.js @@ -1,11 +1,9 @@ -const Job = require('../JobPgBoss.js'); +import { JobPgBoss } from '../JobPgBoss.js'; -class SendSharedParticipationResultsToPoleEmploi extends Job { +class SendSharedParticipationResultsToPoleEmploiJob extends JobPgBoss { constructor(queryBuilder) { super({ name: 'SendSharedParticipationResultsToPoleEmploi', retryLimit: 0 }, queryBuilder); } } -SendSharedParticipationResultsToPoleEmploi.name = 'SendSharedParticipationResultsToPoleEmploi'; - -module.exports = SendSharedParticipationResultsToPoleEmploi; +export { SendSharedParticipationResultsToPoleEmploiJob as SendSharedParticipationResultsToPoleEmploiJob }; diff --git a/api/lib/infrastructure/jobs/cpf-export/handlers/create-and-upload.js b/api/lib/infrastructure/jobs/cpf-export/handlers/create-and-upload.js index 50987ec809f..70fd90fd390 100644 --- a/api/lib/infrastructure/jobs/cpf-export/handlers/create-and-upload.js +++ b/api/lib/infrastructure/jobs/cpf-export/handlers/create-and-upload.js @@ -1,16 +1,21 @@ -const { createGzip } = require('node:zlib'); -const dayjs = require('dayjs'); -const utc = require('dayjs/plugin/utc'); -const timezone = require('dayjs/plugin/timezone'); +import { createGzip } from 'node:zlib'; + +import dayjs from 'dayjs'; +import utc from 'dayjs/plugin/utc.js'; +import timezone from 'dayjs/plugin/timezone.js'; + dayjs.extend(utc); dayjs.extend(timezone); -module.exports = async function createAndUpload({ +import * as uuid from 'uuid'; + +const createAndUpload = async function ({ data, logger, cpfCertificationResultRepository, cpfCertificationXmlExportService, cpfExternalStorage, + uuidService = uuid, }) { const { batchId } = data; const start = new Date(); @@ -28,6 +33,7 @@ module.exports = async function createAndUpload({ cpfCertificationXmlExportService.buildXmlExport({ cpfCertificationResults, writableStream: gzipStream, + uuidService, }); const now = dayjs().tz('Europe/Paris').format('YYYYMMDD-HHmmss'); @@ -45,6 +51,8 @@ module.exports = async function createAndUpload({ logger.info(`${filename} generated in ${_getTimeInSec(start)}s.`); }; +export { createAndUpload }; + function _getTimeInSec(start) { return Math.floor((new Date().getTime() - start) / 1024); } diff --git a/api/lib/infrastructure/jobs/cpf-export/handlers/planner.js b/api/lib/infrastructure/jobs/cpf-export/handlers/planner.js index f05f783d2f6..35ecd27bad0 100644 --- a/api/lib/infrastructure/jobs/cpf-export/handlers/planner.js +++ b/api/lib/infrastructure/jobs/cpf-export/handlers/planner.js @@ -1,7 +1,9 @@ -const dayjs = require('dayjs'); -const { plannerJob } = require('../../../../config.js').cpf; +import dayjs from 'dayjs'; +import { config } from '../../../../config.js'; -module.exports = async function planner({ job, pgBoss, cpfCertificationResultRepository, logger }) { +const { plannerJob } = config.cpf; + +const planner = async function ({ job, pgBoss, cpfCertificationResultRepository, logger }) { const startDate = dayjs() .utc() .subtract(plannerJob.minimumReliabilityPeriod + (plannerJob.monthsToProcess - 1), 'months') @@ -33,3 +35,5 @@ module.exports = async function planner({ job, pgBoss, cpfCertificationResultRep await pgBoss.insert(newJobs.map((batchId) => ({ name: 'CpfExportBuilderJob', data: { batchId } }))); }; + +export { planner }; diff --git a/api/lib/infrastructure/jobs/cpf-export/handlers/send-email.js b/api/lib/infrastructure/jobs/cpf-export/handlers/send-email.js index 1985f854bcb..809a7b3e54c 100644 --- a/api/lib/infrastructure/jobs/cpf-export/handlers/send-email.js +++ b/api/lib/infrastructure/jobs/cpf-export/handlers/send-email.js @@ -1,7 +1,8 @@ -const { cpf } = require('../../../../config.js'); -const cronParser = require('cron-parser'); +import { config } from '../../../../config.js'; +import cronParser from 'cron-parser'; -module.exports = async function sendEmail({ cpfExternalStorage, mailService }) { +const { cpf } = config; +const sendEmail = async function ({ cpfExternalStorage, mailService }) { const parsedCron = cronParser.parseExpression(cpf.plannerJob.cron, { tz: 'Europe/Paris' }); const date = parsedCron.prev().toDate(); @@ -9,3 +10,5 @@ module.exports = async function sendEmail({ cpfExternalStorage, mailService }) { await mailService.sendCpfEmail({ email: cpf.sendEmailJob.recipient, generatedFiles }); }; + +export { sendEmail }; diff --git a/api/lib/infrastructure/jobs/cpf-export/index.js b/api/lib/infrastructure/jobs/cpf-export/index.js index a2f7f182409..f06f7871b5f 100644 --- a/api/lib/infrastructure/jobs/cpf-export/index.js +++ b/api/lib/infrastructure/jobs/cpf-export/index.js @@ -1,9 +1,13 @@ -const { injectDependencies } = require('../../utils/dependency-injection.js'); +import { injectDependencies } from '../../utils/dependency-injection.js'; -const cpfCertificationResultRepository = require('../../repositories/cpf-certification-result-repository.js'); -const cpfCertificationXmlExportService = require('../../../domain/services/cpf-certification-xml-export-service.js'); -const cpfExternalStorage = require('../../external-storage/cpf-external-storage.js'); -const mailService = require('../../../domain/services/mail-service.js'); +import * as cpfCertificationResultRepository from '../../repositories/cpf-certification-result-repository.js'; +import * as cpfCertificationXmlExportService from '../../../domain/services/cpf-certification-xml-export-service.js'; +import * as cpfExternalStorage from '../../external-storage/cpf-external-storage.js'; +import * as mailService from '../../../domain/services/mail-service.js'; + +import * as planner from './handlers/planner.js'; +import * as createAndUpload from './handlers/create-and-upload.js'; +import * as sendEmail from './handlers/send-email.js'; const dependencies = { cpfCertificationResultRepository, @@ -14,11 +18,11 @@ const dependencies = { const cpfExport = injectDependencies( { - planner: require('./handlers/planner.js'), - createAndUpload: require('./handlers/create-and-upload.js'), - sendEmail: require('./handlers/send-email.js'), + planner, + createAndUpload, + sendEmail, }, dependencies ); -module.exports = cpfExport; +export { cpfExport }; diff --git a/api/lib/infrastructure/jobs/cpf-export/schedule-cpf-jobs.js b/api/lib/infrastructure/jobs/cpf-export/schedule-cpf-jobs.js index 6c968208375..7bf746c3cca 100644 --- a/api/lib/infrastructure/jobs/cpf-export/schedule-cpf-jobs.js +++ b/api/lib/infrastructure/jobs/cpf-export/schedule-cpf-jobs.js @@ -1,25 +1,29 @@ -const handlers = require('./index.js'); -const logger = require('../../logger.js'); -const config = require('../../../config.js'); +import { cpfExport } from './index.js'; +import { logger } from '../../logger.js'; +import { config } from '../../../config.js'; const { plannerJob, sendEmailJob } = config.cpf; -module.exports = async function scheduleCpfJobs(pgBoss) { +const { planner, createAndUpload, sendEmail } = cpfExport; + +const scheduleCpfJobs = async function (pgBoss) { await pgBoss.schedule('CpfExportPlannerJob', plannerJob.cron, null, { tz: 'Europe/Paris' }); await pgBoss.work('CpfExportPlannerJob', async (job) => { - await _processJob(job, handlers.planner, { pgBoss }); + await _processJob(job, planner, { pgBoss }); }); await pgBoss.work('CpfExportBuilderJob', { batchSize: 1 }, async ([job]) => { - await _processJob(job, handlers.createAndUpload, { data: job.data }); + await _processJob(job, createAndUpload, { data: job.data }); }); await pgBoss.schedule('CpfExportSenderJob', sendEmailJob.cron, null, { tz: 'Europe/Paris' }); await pgBoss.work('CpfExportSenderJob', async (job) => { - await _processJob(job, handlers.sendEmail, {}); + await _processJob(job, sendEmail, {}); }); }; +export { scheduleCpfJobs }; + async function _processJob(job, handler, params) { try { await handler({ ...params, job, logger: buildLogger(job) }); diff --git a/api/lib/infrastructure/jobs/monitoring/MonitoredJobHandler.js b/api/lib/infrastructure/jobs/monitoring/MonitoredJobHandler.js index 76b75ee22c7..d78694f162a 100644 --- a/api/lib/infrastructure/jobs/monitoring/MonitoredJobHandler.js +++ b/api/lib/infrastructure/jobs/monitoring/MonitoredJobHandler.js @@ -36,4 +36,4 @@ class MonitoredJobHandler { } } -module.exports = MonitoredJobHandler; +export { MonitoredJobHandler }; diff --git a/api/lib/infrastructure/jobs/monitoring/MonitoredJobQueue.js b/api/lib/infrastructure/jobs/monitoring/MonitoredJobQueue.js index 07cc968d909..2c0a16747c1 100644 --- a/api/lib/infrastructure/jobs/monitoring/MonitoredJobQueue.js +++ b/api/lib/infrastructure/jobs/monitoring/MonitoredJobQueue.js @@ -1,6 +1,8 @@ -const MonitoringJobHandler = require('./MonitoringJobExecutionTimeHandler.js'); -const logger = require('../../logger.js'); -const { teamSize, teamConcurrency } = require('../../../config.js').pgBoss; +import { MonitoringJobExecutionTimeHandler } from './MonitoringJobExecutionTimeHandler.js'; +import { logger } from '../../logger.js'; +import { config } from '../../../config.js'; + +const { teamSize, teamConcurrency } = config.pgBoss; class MonitoredJobQueue { constructor(jobQueue) { @@ -10,7 +12,7 @@ class MonitoredJobQueue { performJob(name, handlerClass) { this.jobQueue.performJob(name, handlerClass); - const monitoringJobHandler = new MonitoringJobHandler({ logger }); + const monitoringJobHandler = new MonitoringJobExecutionTimeHandler({ logger }); this.jobQueue.pgBoss.onComplete(name, { teamSize, teamConcurrency }, (job) => { monitoringJobHandler.handle(job); }); @@ -21,4 +23,4 @@ class MonitoredJobQueue { } } -module.exports = MonitoredJobQueue; +export { MonitoredJobQueue }; diff --git a/api/lib/infrastructure/jobs/monitoring/MonitoringJobExecutionTimeHandler.js b/api/lib/infrastructure/jobs/monitoring/MonitoringJobExecutionTimeHandler.js index e5e5bad3f6c..755d3373563 100644 --- a/api/lib/infrastructure/jobs/monitoring/MonitoringJobExecutionTimeHandler.js +++ b/api/lib/infrastructure/jobs/monitoring/MonitoringJobExecutionTimeHandler.js @@ -1,4 +1,4 @@ -const dayjs = require('dayjs'); +import dayjs from 'dayjs'; class MonitoringJobExecutionTimeHandler { constructor({ logger }) { @@ -22,4 +22,4 @@ class MonitoringJobExecutionTimeHandler { } } -module.exports = MonitoringJobExecutionTimeHandler; +export { MonitoringJobExecutionTimeHandler }; diff --git a/api/lib/infrastructure/lcms.js b/api/lib/infrastructure/lcms.js index 6f611b90d13..0b0f6ddf244 100644 --- a/api/lib/infrastructure/lcms.js +++ b/api/lib/infrastructure/lcms.js @@ -1,26 +1,28 @@ -const httpAgent = require('./http/http-agent.js'); +import { httpAgent } from './http/http-agent.js'; +import { config } from '../config.js'; -const { lcms } = require('../config.js'); +const { lcms: lcmsConfig } = config; +const getLatestRelease = async function () { + const response = await httpAgent.get({ + url: lcmsConfig.url + '/releases/latest', + headers: { Authorization: `Bearer ${lcmsConfig.apiKey}` }, + }); -module.exports = { - async getLatestRelease() { - const response = await httpAgent.get({ - url: lcms.url + '/releases/latest', - headers: { Authorization: `Bearer ${lcms.apiKey}` }, - }); + if (!response.isSuccessful) { + throw new Error(`An error occurred while fetching ${lcmsConfig.url}`); + } - if (!response.isSuccessful) { - throw new Error(`An error occurred while fetching ${lcms.url}`); - } - - return response.data.content; - }, + return response.data.content; +}; - async createRelease() { - const response = await httpAgent.post({ - url: lcms.url + '/releases', - headers: { Authorization: `Bearer ${lcms.apiKey}` }, - }); - return response.data.content; - }, +const createRelease = async function () { + const response = await httpAgent.post({ + url: lcmsConfig.url + '/releases', + headers: { Authorization: `Bearer ${lcmsConfig.apiKey}` }, + }); + return response.data.content; }; + +const lcms = { getLatestRelease, createRelease }; + +export { lcms }; diff --git a/api/lib/infrastructure/logger.js b/api/lib/infrastructure/logger.js index 28c353da714..ce76f5b1eaa 100644 --- a/api/lib/infrastructure/logger.js +++ b/api/lib/infrastructure/logger.js @@ -1,9 +1,11 @@ -const pino = require('pino'); -const pretty = require('pino-pretty'); -const { logging: logSettings } = require('../config.js'); +import pino from 'pino'; +import pretty from 'pino-pretty'; +import { config } from '../config.js'; + +const { logging } = config; let prettyPrint; -if (logSettings.logForHumans) { +if (logging.logForHumans) { const omitDay = 'HH:MM:ss'; prettyPrint = pretty({ sync: true, @@ -15,11 +17,11 @@ if (logSettings.logForHumans) { const logger = pino( { - level: logSettings.logLevel, + level: logging.logLevel, redact: ['req.headers.authorization'], - enabled: logSettings.enabled, + enabled: logging.enabled, }, prettyPrint ); -module.exports = logger; +export { logger }; diff --git a/api/lib/infrastructure/mail-check.js b/api/lib/infrastructure/mail-check.js index db2eb4cbcfd..66203b67b3f 100644 --- a/api/lib/infrastructure/mail-check.js +++ b/api/lib/infrastructure/mail-check.js @@ -1,10 +1,12 @@ -const { Resolver } = require('node:dns').promises; +import { promises } from 'node:dns'; + +const { Resolver } = promises; const resolver = new Resolver(); -module.exports = { - checkDomainIsValid(emailAddress) { - const domain = emailAddress.replace(/.*@/g, ''); - return resolver.resolveMx(domain).then(() => true); - }, +const checkDomainIsValid = function (emailAddress) { + const domain = emailAddress.replace(/.*@/g, ''); + return resolver.resolveMx(domain).then(() => true); }; + +export { checkDomainIsValid }; diff --git a/api/lib/infrastructure/mailers/MailingProvider.js b/api/lib/infrastructure/mailers/MailingProvider.js index 12493c0e793..3a5b1108c56 100644 --- a/api/lib/infrastructure/mailers/MailingProvider.js +++ b/api/lib/infrastructure/mailers/MailingProvider.js @@ -4,4 +4,4 @@ class MailingProvider { } } -module.exports = MailingProvider; +export { MailingProvider }; diff --git a/api/lib/infrastructure/mailers/MailingProviderInvalidEmailError.js b/api/lib/infrastructure/mailers/MailingProviderInvalidEmailError.js index a028d922bdd..6d84c96fe05 100644 --- a/api/lib/infrastructure/mailers/MailingProviderInvalidEmailError.js +++ b/api/lib/infrastructure/mailers/MailingProviderInvalidEmailError.js @@ -1,3 +1,3 @@ class MailingProviderInvalidEmailError extends Error {} -module.exports = { MailingProviderInvalidEmailError }; +export { MailingProviderInvalidEmailError }; diff --git a/api/lib/infrastructure/mailers/SendinblueProvider.js b/api/lib/infrastructure/mailers/SendinblueProvider.js index 2413abe353f..1802607f816 100644 --- a/api/lib/infrastructure/mailers/SendinblueProvider.js +++ b/api/lib/infrastructure/mailers/SendinblueProvider.js @@ -1,10 +1,11 @@ -const _ = require('lodash'); -const SibApiV3Sdk = require('sib-api-v3-sdk'); +import _ from 'lodash'; +import SibApiV3Sdk from 'sib-api-v3-sdk'; -const MailingProvider = require('./MailingProvider.js'); -const { mailing } = require('../../config.js'); -const { MailingProviderInvalidEmailError } = require('./MailingProviderInvalidEmailError'); +import { MailingProvider } from './MailingProvider.js'; +import { config } from '../../config.js'; +import { MailingProviderInvalidEmailError } from './MailingProviderInvalidEmailError.js'; +const { mailing } = config; function _formatPayload({ to, fromName, from, subject, template, variables, tags }) { const payload = { to: [ @@ -64,4 +65,4 @@ class SendinblueProvider extends MailingProvider { } } -module.exports = SendinblueProvider; +export { SendinblueProvider }; diff --git a/api/lib/infrastructure/mailers/mailer.js b/api/lib/infrastructure/mailers/mailer.js index 4a1512a6e48..d8648fdc4bd 100644 --- a/api/lib/infrastructure/mailers/mailer.js +++ b/api/lib/infrastructure/mailers/mailer.js @@ -1,11 +1,12 @@ -const Debug = require('debug'); -const SendinblueProvider = require('./SendinblueProvider.js'); -const { mailing } = require('../../config.js'); -const logger = require('../logger.js'); -const mailCheck = require('../mail-check.js'); -const EmailingAttempt = require('../../domain/models/EmailingAttempt.js'); -const { MailingProviderInvalidEmailError } = require('./MailingProviderInvalidEmailError'); - +import Debug from 'debug'; +import { SendinblueProvider } from './SendinblueProvider.js'; +import { config } from '../../config.js'; +import { logger } from '../logger.js'; +import * as mailCheck from '../mail-check.js'; +import { EmailingAttempt } from '../../domain/models/EmailingAttempt.js'; +import { MailingProviderInvalidEmailError } from './MailingProviderInvalidEmailError.js'; + +const { mailing } = config; const debugEmail = Debug('pix:mailer:email'); class Mailer { @@ -97,4 +98,4 @@ class Mailer { const mailer = new Mailer(); -module.exports = { mailer, Mailer }; +export { mailer, Mailer }; diff --git a/api/lib/infrastructure/monitoring-tools.js b/api/lib/infrastructure/monitoring-tools.js index 9b17565a74f..f9a65d9b2f9 100644 --- a/api/lib/infrastructure/monitoring-tools.js +++ b/api/lib/infrastructure/monitoring-tools.js @@ -1,14 +1,20 @@ -const Request = require('@hapi/hapi/lib/request'); -const settings = require('../config.js'); -const { get, set, update, omit } = require('lodash'); -const logger = require('../infrastructure/logger.js'); -const requestUtils = require('../infrastructure/utils/request-response-utils.js'); +import Request from '@hapi/hapi/lib/request.js'; + +import { config } from '../config.js'; +import lodash from 'lodash'; + +const { get, set, update, omit } = lodash; +import { logger } from '../infrastructure/logger.js'; +import * as requestResponseUtils from '../infrastructure/utils/request-response-utils.js'; + +import async_hooks from 'async_hooks'; + +const { AsyncLocalStorage } = async_hooks; -const { AsyncLocalStorage } = require('async_hooks'); const asyncLocalStorage = new AsyncLocalStorage(); function getCorrelationContext() { - if (!settings.hapi.enableRequestMonitoring) { + if (!config.hapi.enableRequestMonitoring) { return {}; } const context = asyncLocalStorage.getStore(); @@ -43,7 +49,7 @@ function logErrorWithCorrelationIds(data) { function extractUserIdFromRequest(request) { let userId = get(request, 'auth.credentials.userId'); - if (!userId && get(request, 'headers.authorization')) userId = requestUtils.extractUserIdFromRequest(request); + if (!userId && get(request, 'headers.authorization')) userId = requestResponseUtils.extractUserIdFromRequest(request); return userId || '-'; } @@ -82,7 +88,7 @@ function pushInContext(path, value) { } function installHapiHook() { - if (!settings.hapi.enableRequestMonitoring) return; + if (!config.hapi.enableRequestMonitoring) return; const originalMethod = Request.prototype._execute; @@ -97,7 +103,21 @@ function installHapiHook() { }; } -module.exports = { +const monitoringTools = { + extractUserIdFromRequest, + getContext, + getInContext, + incrementInContext, + installHapiHook, + logErrorWithCorrelationIds, + logInfoWithCorrelationIds, + pushInContext, + setInContext, + asyncLocalStorage, +}; + +export { + monitoringTools, extractUserIdFromRequest, getContext, getInContext, @@ -107,5 +127,5 @@ module.exports = { logInfoWithCorrelationIds, pushInContext, setInContext, - asyncLocalStorageForTests: asyncLocalStorage, + asyncLocalStorage, }; diff --git a/api/lib/infrastructure/open-api-doc/authentication/response-authentication-doc.js b/api/lib/infrastructure/open-api-doc/authentication/response-authentication-doc.js index fb89cb4ea57..ca8b610de30 100644 --- a/api/lib/infrastructure/open-api-doc/authentication/response-authentication-doc.js +++ b/api/lib/infrastructure/open-api-doc/authentication/response-authentication-doc.js @@ -1,7 +1,9 @@ -const Joi = require('joi'); +import Joi from 'joi'; -module.exports = Joi.object({ +const joiObject = Joi.object({ token_type: 'bearer', access_token: Joi.string().required().description('The bearer token.'), client_id: Joi.string().required().description('The client id.'), }).label('BearerToken'); + +export { joiObject as responseAuthenticationDoc }; diff --git a/api/lib/infrastructure/open-api-doc/livret-scolaire/area-doc.js b/api/lib/infrastructure/open-api-doc/livret-scolaire/area-doc.js index 2fd2bd350b4..fb58c35e72c 100644 --- a/api/lib/infrastructure/open-api-doc/livret-scolaire/area-doc.js +++ b/api/lib/infrastructure/open-api-doc/livret-scolaire/area-doc.js @@ -1,6 +1,8 @@ -const Joi = require('joi'); +import Joi from 'joi'; -module.exports = Joi.object({ +const joiObject = Joi.object({ id: Joi.number().example('1').required().description('ID unique de la compétence (ex : “1”, “4”)'), name: Joi.string().example('1. Information et données').required().description('Titre du domaine'), }); + +export { joiObject as areaDoc }; diff --git a/api/lib/infrastructure/open-api-doc/livret-scolaire/certification-doc.js b/api/lib/infrastructure/open-api-doc/livret-scolaire/certification-doc.js index 5b742aa1f17..c7322a39fe5 100644 --- a/api/lib/infrastructure/open-api-doc/livret-scolaire/certification-doc.js +++ b/api/lib/infrastructure/open-api-doc/livret-scolaire/certification-doc.js @@ -1,8 +1,8 @@ -const Joi = require('joi'); -const certificationStatus = require('../../../../lib/domain/read-models/livret-scolaire/CertificateStatus.js'); -const competenceResultDoc = require('./competence-result-doc.js'); +import Joi from 'joi'; +import { status } from '../../../../lib/domain/read-models/livret-scolaire/CertificateStatus.js'; +import { competenceResultDoc } from './competence-result-doc.js'; -module.exports = Joi.object({ +const joiObject = Joi.object({ id: Joi.number().required().description('ID de la certification pour l’élève'), firstName: Joi.string().example('Anne').required().description('Prénom de l’élève'), middleName: Joi.string().example('Sophie').required().description('Deuxième nom de l’élève'), @@ -12,7 +12,7 @@ module.exports = Joi.object({ nationalStudentId: Joi.string().example('029991043XX').required().description('INE de l’élève'), status: Joi.string() .example('validated') - .valid(certificationStatus) + .valid(status) .required() .description( "validated: le candidat a obtenu sa certification. rejected: le candidat a eu sa certification rejetée. pending: le candidat a passé sa certification mais elle n'est pas encore publiée" @@ -27,3 +27,5 @@ module.exports = Joi.object({ .description('Nom du centre de certification'), competenceResult: competenceResultDoc, }); + +export { joiObject as certificationDoc }; diff --git a/api/lib/infrastructure/open-api-doc/livret-scolaire/certifications-results-doc.js b/api/lib/infrastructure/open-api-doc/livret-scolaire/certifications-results-doc.js index 8103c0288fc..6c545b5acae 100644 --- a/api/lib/infrastructure/open-api-doc/livret-scolaire/certifications-results-doc.js +++ b/api/lib/infrastructure/open-api-doc/livret-scolaire/certifications-results-doc.js @@ -1,9 +1,11 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const certificationDoc = require('./certification-doc.js'); -const competenceDoc = require('./competence-doc.js'); +import { certificationDoc } from './certification-doc.js'; +import { competenceDoc } from './competence-doc.js'; -module.exports = Joi.object({ +const joiObject = Joi.object({ certifications: certificationDoc, competences: competenceDoc, }).label('CertificationsResults'); + +export { joiObject as certificationsResultsDoc }; diff --git a/api/lib/infrastructure/open-api-doc/livret-scolaire/competence-doc.js b/api/lib/infrastructure/open-api-doc/livret-scolaire/competence-doc.js index 1f24f641968..6016fd0020d 100644 --- a/api/lib/infrastructure/open-api-doc/livret-scolaire/competence-doc.js +++ b/api/lib/infrastructure/open-api-doc/livret-scolaire/competence-doc.js @@ -1,8 +1,8 @@ -const Joi = require('joi'); +import Joi from 'joi'; -const areaDoc = require('./area-doc.js'); +import { areaDoc } from './area-doc.js'; -module.exports = Joi.object({ +const joiObject = Joi.object({ id: Joi.number().example('1.1').required().description('ID unique de la compétence (ex : “1.1”, “4.3”)'), name: Joi.string() .example('Mener une recherche et une veille d’information') @@ -10,3 +10,5 @@ module.exports = Joi.object({ .description('Nom de la compétence'), area: areaDoc, }); + +export { joiObject as competenceDoc }; diff --git a/api/lib/infrastructure/open-api-doc/livret-scolaire/competence-result-doc.js b/api/lib/infrastructure/open-api-doc/livret-scolaire/competence-result-doc.js index ea5c8f4e76d..dcb49c0b9b9 100644 --- a/api/lib/infrastructure/open-api-doc/livret-scolaire/competence-result-doc.js +++ b/api/lib/infrastructure/open-api-doc/livret-scolaire/competence-result-doc.js @@ -1,6 +1,6 @@ -const Joi = require('joi'); +import Joi from 'joi'; -module.exports = Joi.object({ +const joiObject = Joi.object({ level: Joi.number().example('4').required().description('Niveau obtenu pour la compétence'), competenceId: Joi.string() .example('1.1') @@ -9,3 +9,5 @@ module.exports = Joi.object({ 'ID unique de la compétence : il fait directement référence à l’attribut id du Resource Object Competence' ), }).description('Tableau des niveaux validés par compétence'); + +export { joiObject as competenceResultDoc }; diff --git a/api/lib/infrastructure/open-api-doc/livret-scolaire/response-object-error-doc.js b/api/lib/infrastructure/open-api-doc/livret-scolaire/response-object-error-doc.js index 81aa9c08578..b03ecaccb93 100644 --- a/api/lib/infrastructure/open-api-doc/livret-scolaire/response-object-error-doc.js +++ b/api/lib/infrastructure/open-api-doc/livret-scolaire/response-object-error-doc.js @@ -1,8 +1,10 @@ -const Joi = require('joi'); +import Joi from 'joi'; -module.exports = Joi.object({ +const joiObject = Joi.object({ code: Joi.string().required().description('An application-specific error code.'), title: Joi.string().required().description('A short, human-readable summary of the problem'), status: Joi.string().required().description('the HTTP status code applicable of the problem'), detail: Joi.string().required().description('a human-readable explanation specific of the problem'), }).label('Response-Error-Object'); + +export { joiObject as responseObjectErrorDoc }; diff --git a/api/lib/infrastructure/open-api-doc/pole-emploi/envois-doc.js b/api/lib/infrastructure/open-api-doc/pole-emploi/envois-doc.js index 7d402b18a4c..99894293081 100644 --- a/api/lib/infrastructure/open-api-doc/pole-emploi/envois-doc.js +++ b/api/lib/infrastructure/open-api-doc/pole-emploi/envois-doc.js @@ -1,4 +1,4 @@ -const Joi = require('joi'); +import Joi from 'joi'; const CAMPAIGN_TYPES = ['EVALUATION', 'COLLECTE_PROFILS']; const TEST_STATUS = [2, 3, 4]; @@ -149,4 +149,4 @@ const poleEmploiEnvoisDoc = Joi.array() ) .label('Envois'); -module.exports = { poleEmploiEnvoisDoc }; +export { poleEmploiEnvoisDoc }; diff --git a/api/lib/infrastructure/open-api-doc/pole-emploi/erreur-doc.js b/api/lib/infrastructure/open-api-doc/pole-emploi/erreur-doc.js index d9ab80ab85b..d307207dfe8 100644 --- a/api/lib/infrastructure/open-api-doc/pole-emploi/erreur-doc.js +++ b/api/lib/infrastructure/open-api-doc/pole-emploi/erreur-doc.js @@ -1,8 +1,10 @@ -const Joi = require('joi'); +import Joi from 'joi'; -module.exports = Joi.object({ +const joiObject = Joi.object({ code: Joi.string().required().description("Code erreur spécifique à l'application."), titre: Joi.string().required().description("Un résumé court et lisible de l'erreur"), statut: Joi.string().required().description("le code d'état HTTP lié à l'erreur"), detail: Joi.string().required().description("Une explication détaillé et lisible de l'erreur"), }).label('Erreur'); + +export { joiObject as erreurDoc }; diff --git a/api/lib/infrastructure/orm-models/Answer.js b/api/lib/infrastructure/orm-models/Answer.js index ad7bd7e1c51..ac11ec6c535 100644 --- a/api/lib/infrastructure/orm-models/Answer.js +++ b/api/lib/infrastructure/orm-models/Answer.js @@ -1,10 +1,10 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Assessment.js'); +import './Assessment.js'; const modelName = 'Answer'; -module.exports = Bookshelf.model( +const BookshelfAnswer = Bookshelf.model( modelName, { tableName: 'answers', @@ -18,3 +18,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfAnswer }; diff --git a/api/lib/infrastructure/orm-models/Assessment.js b/api/lib/infrastructure/orm-models/Assessment.js index 8bd786cde56..bb712f5fd12 100644 --- a/api/lib/infrastructure/orm-models/Assessment.js +++ b/api/lib/infrastructure/orm-models/Assessment.js @@ -1,13 +1,13 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Answer.js'); -require('./User.js'); -require('./KnowledgeElement.js'); -require('./CampaignParticipation.js'); +import './Answer.js'; +import './User.js'; +import './KnowledgeElement.js'; +import './CampaignParticipation.js'; const modelName = 'Assessment'; -module.exports = Bookshelf.model( +const BookshelfAssessment = Bookshelf.model( modelName, { tableName: 'assessments', @@ -29,3 +29,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfAssessment }; diff --git a/api/lib/infrastructure/orm-models/AuthenticationMethod.js b/api/lib/infrastructure/orm-models/AuthenticationMethod.js index e1b8b10c9d3..80193011ddf 100644 --- a/api/lib/infrastructure/orm-models/AuthenticationMethod.js +++ b/api/lib/infrastructure/orm-models/AuthenticationMethod.js @@ -1,12 +1,10 @@ -const Bookshelf = require('../bookshelf.js'); -// eslint-disable-next-line no-unused-vars -const jsonColumns = require('bookshelf-json-columns'); +import { Bookshelf } from '../bookshelf.js'; -require('./User.js'); +import './User.js'; const modelName = 'AuthenticationMethod'; -module.exports = Bookshelf.model( +const BookshelfAuthenticationMethod = Bookshelf.model( modelName, { tableName: 'authentication-methods', @@ -21,3 +19,5 @@ module.exports = Bookshelf.model( jsonColumns: ['authenticationComplement'], } ); + +export { BookshelfAuthenticationMethod }; diff --git a/api/lib/infrastructure/orm-models/Badge.js b/api/lib/infrastructure/orm-models/Badge.js index 52726f51726..67abcfd144c 100644 --- a/api/lib/infrastructure/orm-models/Badge.js +++ b/api/lib/infrastructure/orm-models/Badge.js @@ -1,12 +1,12 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./BadgeCriterion.js'); -require('./SkillSet.js'); -require('./TargetProfile.js'); +import './BadgeCriterion.js'; +import './SkillSet.js'; +import './TargetProfile.js'; const modelName = 'Badge'; -module.exports = Bookshelf.model( +const BookshelfBadge = Bookshelf.model( modelName, { tableName: 'badges', @@ -27,3 +27,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfBadge }; diff --git a/api/lib/infrastructure/orm-models/BadgeAcquisition.js b/api/lib/infrastructure/orm-models/BadgeAcquisition.js index da04af286cd..c0707f654bc 100644 --- a/api/lib/infrastructure/orm-models/BadgeAcquisition.js +++ b/api/lib/infrastructure/orm-models/BadgeAcquisition.js @@ -1,11 +1,11 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Badge.js'); -require('./User.js'); +import './Badge.js'; +import './User.js'; const modelName = 'BadgeAcquisition'; -module.exports = Bookshelf.model( +const BookshelfBadgeAcquisition = Bookshelf.model( modelName, { tableName: 'badge-acquisitions', @@ -22,3 +22,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfBadgeAcquisition }; diff --git a/api/lib/infrastructure/orm-models/BadgeCriterion.js b/api/lib/infrastructure/orm-models/BadgeCriterion.js index b4e8dc04e55..bb4dc052abb 100644 --- a/api/lib/infrastructure/orm-models/BadgeCriterion.js +++ b/api/lib/infrastructure/orm-models/BadgeCriterion.js @@ -1,10 +1,10 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Badge.js'); +import './Badge.js'; const modelName = 'BadgeCriterion'; -module.exports = Bookshelf.model( +const BookshelfBadgeCriteri = Bookshelf.model( modelName, { tableName: 'badge-criteria', @@ -17,3 +17,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfBadgeCriteri }; diff --git a/api/lib/infrastructure/orm-models/Campaign.js b/api/lib/infrastructure/orm-models/Campaign.js index d490397c98d..47e6a5423c8 100644 --- a/api/lib/infrastructure/orm-models/Campaign.js +++ b/api/lib/infrastructure/orm-models/Campaign.js @@ -1,14 +1,14 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Assessment.js'); -require('./CampaignParticipation.js'); -require('./Organization.js'); -require('./TargetProfile.js'); -require('./User.js'); +import './Assessment.js'; +import './CampaignParticipation.js'; +import './Organization.js'; +import './TargetProfile.js'; +import './User.js'; const modelName = 'Campaign'; -module.exports = Bookshelf.model( +const BookshelfCampaign = Bookshelf.model( modelName, { tableName: 'campaigns', @@ -34,3 +34,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfCampaign }; diff --git a/api/lib/infrastructure/orm-models/CampaignParticipation.js b/api/lib/infrastructure/orm-models/CampaignParticipation.js index ff2c9f70a6d..71e95b18296 100644 --- a/api/lib/infrastructure/orm-models/CampaignParticipation.js +++ b/api/lib/infrastructure/orm-models/CampaignParticipation.js @@ -1,12 +1,12 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Assessment.js'); -require('./Campaign.js'); -require('./User.js'); +import './Assessment.js'; +import './Campaign.js'; +import './User.js'; const modelName = 'CampaignParticipation'; -module.exports = Bookshelf.model( +const BookshelfCampaignParticipation = Bookshelf.model( modelName, { tableName: 'campaign-participations', @@ -36,3 +36,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfCampaignParticipation }; diff --git a/api/lib/infrastructure/orm-models/CertificationCandidate.js b/api/lib/infrastructure/orm-models/CertificationCandidate.js index 56a3e820f58..fb33c6a718b 100644 --- a/api/lib/infrastructure/orm-models/CertificationCandidate.js +++ b/api/lib/infrastructure/orm-models/CertificationCandidate.js @@ -1,11 +1,11 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Session.js'); -require('./User.js'); +import './Session.js'; +import './User.js'; const modelName = 'CertificationCandidate'; -module.exports = Bookshelf.model( +const BookshelfCertificationCandidate = Bookshelf.model( modelName, { tableName: 'certification-candidates', @@ -23,3 +23,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfCertificationCandidate }; diff --git a/api/lib/infrastructure/orm-models/CertificationCenter.js b/api/lib/infrastructure/orm-models/CertificationCenter.js index 77a892f251d..9b7f3f21cb9 100644 --- a/api/lib/infrastructure/orm-models/CertificationCenter.js +++ b/api/lib/infrastructure/orm-models/CertificationCenter.js @@ -1,10 +1,10 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./ComplementaryCertification.js'); +import './ComplementaryCertification.js'; const modelName = 'CertificationCenter'; -module.exports = Bookshelf.model( +const BookshelfCertificationCenter = Bookshelf.model( modelName, { tableName: 'certification-centers', @@ -27,3 +27,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfCertificationCenter }; diff --git a/api/lib/infrastructure/orm-models/CertificationCenterMembership.js b/api/lib/infrastructure/orm-models/CertificationCenterMembership.js index 41cdb61eaf3..aa9dd359825 100644 --- a/api/lib/infrastructure/orm-models/CertificationCenterMembership.js +++ b/api/lib/infrastructure/orm-models/CertificationCenterMembership.js @@ -1,11 +1,11 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./CertificationCenter.js'); -require('./User.js'); +import './CertificationCenter.js'; +import './User.js'; const modelName = 'CertificationCenterMembership'; -module.exports = Bookshelf.model( +const BookshelfCertificationCenterMembership = Bookshelf.model( modelName, { tableName: 'certification-center-memberships', @@ -23,3 +23,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfCertificationCenterMembership }; diff --git a/api/lib/infrastructure/orm-models/CertificationChallenge.js b/api/lib/infrastructure/orm-models/CertificationChallenge.js index f5c4b513428..ae9a8ecc73b 100644 --- a/api/lib/infrastructure/orm-models/CertificationChallenge.js +++ b/api/lib/infrastructure/orm-models/CertificationChallenge.js @@ -1,8 +1,8 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; const modelName = 'CertificationChallenge'; -module.exports = Bookshelf.model( +const BookshelfCertificationChallenge = Bookshelf.model( modelName, { tableName: 'certification-challenges', @@ -12,3 +12,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfCertificationChallenge }; diff --git a/api/lib/infrastructure/orm-models/CertificationCourse.js b/api/lib/infrastructure/orm-models/CertificationCourse.js index 78239924c2f..62216a41d85 100644 --- a/api/lib/infrastructure/orm-models/CertificationCourse.js +++ b/api/lib/infrastructure/orm-models/CertificationCourse.js @@ -1,14 +1,14 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Assessment.js'); -require('./CertificationChallenge.js'); -require('./CertificationIssueReport.js'); -require('./ComplementaryCertificationCourse.js'); -require('./Session.js'); +import './Assessment.js'; +import './CertificationChallenge.js'; +import './CertificationIssueReport.js'; +import './ComplementaryCertificationCourse.js'; +import './Session.js'; const modelName = 'CertificationCourse'; -module.exports = Bookshelf.model( +const BookshelfCertificationCourse = Bookshelf.model( modelName, { tableName: 'certification-courses', @@ -46,3 +46,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfCertificationCourse }; diff --git a/api/lib/infrastructure/orm-models/CertificationIssueReport.js b/api/lib/infrastructure/orm-models/CertificationIssueReport.js index f4dc946787e..88b8502a4d2 100644 --- a/api/lib/infrastructure/orm-models/CertificationIssueReport.js +++ b/api/lib/infrastructure/orm-models/CertificationIssueReport.js @@ -1,8 +1,8 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; const modelName = 'CertificationIssueReport'; -module.exports = Bookshelf.model( +const BookshelfCertificationIssueReport = Bookshelf.model( modelName, { tableName: 'certification-issue-reports', @@ -12,3 +12,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfCertificationIssueReport }; diff --git a/api/lib/infrastructure/orm-models/CompetenceEvaluation.js b/api/lib/infrastructure/orm-models/CompetenceEvaluation.js index 02d80e52f96..f80ab504f12 100644 --- a/api/lib/infrastructure/orm-models/CompetenceEvaluation.js +++ b/api/lib/infrastructure/orm-models/CompetenceEvaluation.js @@ -1,11 +1,11 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Assessment.js'); -require('./User.js'); +import './Assessment.js'; +import './User.js'; const modelName = 'CompetenceEvaluation'; -module.exports = Bookshelf.model( +const BookshelfCompetenceEvaluation = Bookshelf.model( modelName, { tableName: 'competence-evaluations', @@ -23,3 +23,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfCompetenceEvaluation }; diff --git a/api/lib/infrastructure/orm-models/CompetenceMark.js b/api/lib/infrastructure/orm-models/CompetenceMark.js index c2f464b67e0..c4375293ecc 100644 --- a/api/lib/infrastructure/orm-models/CompetenceMark.js +++ b/api/lib/infrastructure/orm-models/CompetenceMark.js @@ -1,9 +1,9 @@ -const Bookshelf = require('../bookshelf.js'); -const CompetenceMark = require('../../domain/models/CompetenceMark.js'); +import { Bookshelf } from '../bookshelf.js'; +import { CompetenceMark } from '../../domain/models/CompetenceMark.js'; const modelName = 'CompetenceMark'; -module.exports = Bookshelf.model( +const BookshelfCompetenceMark = Bookshelf.model( modelName, { tableName: 'competence-marks', @@ -22,3 +22,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfCompetenceMark }; diff --git a/api/lib/infrastructure/orm-models/ComplementaryCertification.js b/api/lib/infrastructure/orm-models/ComplementaryCertification.js index 7fdfe0b65c7..5018955c6ff 100644 --- a/api/lib/infrastructure/orm-models/ComplementaryCertification.js +++ b/api/lib/infrastructure/orm-models/ComplementaryCertification.js @@ -1,8 +1,8 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; const modelName = 'ComplementaryCertification'; -module.exports = Bookshelf.model( +const BookshelfComplementaryCertification = Bookshelf.model( modelName, { tableName: 'complementary-certifications', @@ -12,3 +12,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfComplementaryCertification }; diff --git a/api/lib/infrastructure/orm-models/ComplementaryCertificationCourse.js b/api/lib/infrastructure/orm-models/ComplementaryCertificationCourse.js index 5fdea0410aa..dfa0c45894a 100644 --- a/api/lib/infrastructure/orm-models/ComplementaryCertificationCourse.js +++ b/api/lib/infrastructure/orm-models/ComplementaryCertificationCourse.js @@ -1,8 +1,8 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; const modelName = 'ComplementaryCertificationCourse'; -module.exports = Bookshelf.model( +const BookshelfComplementaryCertificationCourse = Bookshelf.model( modelName, { tableName: 'complementary-certification-courses', @@ -12,3 +12,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfComplementaryCertificationCourse }; diff --git a/api/lib/infrastructure/orm-models/ComplementaryCertificationCourseResult.js b/api/lib/infrastructure/orm-models/ComplementaryCertificationCourseResult.js index 3151ada2616..880d30f4cd4 100644 --- a/api/lib/infrastructure/orm-models/ComplementaryCertificationCourseResult.js +++ b/api/lib/infrastructure/orm-models/ComplementaryCertificationCourseResult.js @@ -1,8 +1,8 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; const modelName = 'ComplementaryCertificationCourseResult'; -module.exports = Bookshelf.model( +const BookshelfComplementaryCertificationCourseResult = Bookshelf.model( 'ComplementaryCertificationCourseResults', { tableName: 'complementary-certification-course-results', @@ -15,3 +15,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfComplementaryCertificationCourseResult }; diff --git a/api/lib/infrastructure/orm-models/Feedback.js b/api/lib/infrastructure/orm-models/Feedback.js index b165babc44b..f2b5a2d36db 100644 --- a/api/lib/infrastructure/orm-models/Feedback.js +++ b/api/lib/infrastructure/orm-models/Feedback.js @@ -1,10 +1,10 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Assessment.js'); +import './Assessment.js'; const modelName = 'Feedback'; -module.exports = Bookshelf.model( +const BookshelfFeedback = Bookshelf.model( modelName, { tableName: 'feedbacks', @@ -18,3 +18,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfFeedback as Feedback }; diff --git a/api/lib/infrastructure/orm-models/FinalizedSession.js b/api/lib/infrastructure/orm-models/FinalizedSession.js index 78195e3b443..265fb71f36a 100644 --- a/api/lib/infrastructure/orm-models/FinalizedSession.js +++ b/api/lib/infrastructure/orm-models/FinalizedSession.js @@ -1,8 +1,8 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; const modelName = 'FinalizedSession'; -module.exports = Bookshelf.model( +const BookshelfFinalizedSession = Bookshelf.model( modelName, { tableName: 'finalized-sessions', @@ -18,3 +18,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfFinalizedSession }; diff --git a/api/lib/infrastructure/orm-models/KnowledgeElement.js b/api/lib/infrastructure/orm-models/KnowledgeElement.js index 631e0797a48..e359dcc143b 100644 --- a/api/lib/infrastructure/orm-models/KnowledgeElement.js +++ b/api/lib/infrastructure/orm-models/KnowledgeElement.js @@ -1,11 +1,11 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Assessment.js'); -require('./User.js'); +import './Assessment.js'; +import './User.js'; const modelName = 'KnowledgeElement'; -module.exports = Bookshelf.model( +const BookshelfKnowledgeElement = Bookshelf.model( modelName, { tableName: 'knowledge-elements', @@ -23,3 +23,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfKnowledgeElement }; diff --git a/api/lib/infrastructure/orm-models/KnowledgeElementSnapshot.js b/api/lib/infrastructure/orm-models/KnowledgeElementSnapshot.js index 142f8c829b2..dbcc6ab83b4 100644 --- a/api/lib/infrastructure/orm-models/KnowledgeElementSnapshot.js +++ b/api/lib/infrastructure/orm-models/KnowledgeElementSnapshot.js @@ -1,8 +1,8 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; const modelName = 'KnowledgeElementSnapshot'; -module.exports = Bookshelf.model( +const BookshelfKnowledgeElementSnapshot = Bookshelf.model( modelName, { tableName: 'knowledge-element-snapshots', @@ -11,3 +11,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfKnowledgeElementSnapshot }; diff --git a/api/lib/infrastructure/orm-models/Membership.js b/api/lib/infrastructure/orm-models/Membership.js index 46993ece29b..038339b69a6 100644 --- a/api/lib/infrastructure/orm-models/Membership.js +++ b/api/lib/infrastructure/orm-models/Membership.js @@ -1,11 +1,11 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Organization.js'); -require('./User.js'); +import './Organization.js'; +import './User.js'; const modelName = 'Membership'; -module.exports = Bookshelf.model( +const BookshelfMembership = Bookshelf.model( modelName, { tableName: 'memberships', @@ -23,3 +23,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfMembership }; diff --git a/api/lib/infrastructure/orm-models/Organization.js b/api/lib/infrastructure/orm-models/Organization.js index b1d71e0bb4f..8975265fde9 100644 --- a/api/lib/infrastructure/orm-models/Organization.js +++ b/api/lib/infrastructure/orm-models/Organization.js @@ -1,10 +1,10 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Tag.js'); +import './Tag.js'; const modelName = 'Organization'; -module.exports = Bookshelf.model( +const BookshelfOrganization = Bookshelf.model( modelName, { tableName: 'organizations', @@ -18,3 +18,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfOrganization }; diff --git a/api/lib/infrastructure/orm-models/OrganizationInvitation.js b/api/lib/infrastructure/orm-models/OrganizationInvitation.js index 9af7b82deb2..4a5f9082a88 100644 --- a/api/lib/infrastructure/orm-models/OrganizationInvitation.js +++ b/api/lib/infrastructure/orm-models/OrganizationInvitation.js @@ -1,10 +1,10 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Organization.js'); +import './Organization.js'; const modelName = 'OrganizationInvitation'; -module.exports = Bookshelf.model( +const BookshelfOrganizationInvitation = Bookshelf.model( modelName, { tableName: 'organization-invitations', @@ -18,3 +18,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfOrganizationInvitation }; diff --git a/api/lib/infrastructure/orm-models/OrganizationLearner.js b/api/lib/infrastructure/orm-models/OrganizationLearner.js index d7e19c1005f..c08d6248b96 100644 --- a/api/lib/infrastructure/orm-models/OrganizationLearner.js +++ b/api/lib/infrastructure/orm-models/OrganizationLearner.js @@ -1,11 +1,11 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./User.js'); -require('./Organization.js'); +import './User.js'; +import './Organization.js'; const modelName = 'OrganizationLearner'; -module.exports = Bookshelf.model( +const BookshelfOrganizationLearner = Bookshelf.model( modelName, { tableName: 'organization-learners', @@ -23,3 +23,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfOrganizationLearner }; diff --git a/api/lib/infrastructure/orm-models/OrganizationTag.js b/api/lib/infrastructure/orm-models/OrganizationTag.js index a456fd7fff6..69076a845ce 100644 --- a/api/lib/infrastructure/orm-models/OrganizationTag.js +++ b/api/lib/infrastructure/orm-models/OrganizationTag.js @@ -1,11 +1,11 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Organization.js'); -require('./Tag.js'); +import './Organization.js'; +import './Tag.js'; const modelName = 'OrganizationTag'; -module.exports = Bookshelf.model( +const BookshelfOrganizationTag = Bookshelf.model( modelName, { tableName: 'organization-tags', @@ -23,3 +23,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfOrganizationTag }; diff --git a/api/lib/infrastructure/orm-models/PoleEmploiSending.js b/api/lib/infrastructure/orm-models/PoleEmploiSending.js index d5d994c6d6d..12c92bdd228 100644 --- a/api/lib/infrastructure/orm-models/PoleEmploiSending.js +++ b/api/lib/infrastructure/orm-models/PoleEmploiSending.js @@ -1,10 +1,10 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./CampaignParticipation.js'); +import './CampaignParticipation.js'; const modelName = 'PoleEmploiSending'; -module.exports = Bookshelf.model( +const BookshelfPoleEmploiSending = Bookshelf.model( modelName, { tableName: 'pole-emploi-sendings', @@ -18,3 +18,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfPoleEmploiSending }; diff --git a/api/lib/infrastructure/orm-models/ResetPasswordDemand.js b/api/lib/infrastructure/orm-models/ResetPasswordDemand.js index 0a246c5d480..29c5bb09283 100644 --- a/api/lib/infrastructure/orm-models/ResetPasswordDemand.js +++ b/api/lib/infrastructure/orm-models/ResetPasswordDemand.js @@ -1,10 +1,10 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./User.js'); +import './User.js'; const modelName = 'ResetPasswordDemand'; -module.exports = Bookshelf.model( +const BookshelfResetPasswordDemand = Bookshelf.model( modelName, { tableName: 'reset-password-demands', @@ -18,3 +18,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfResetPasswordDemand as ResetPasswordDemand }; diff --git a/api/lib/infrastructure/orm-models/Session.js b/api/lib/infrastructure/orm-models/Session.js index bde28f82612..442e062e3c5 100644 --- a/api/lib/infrastructure/orm-models/Session.js +++ b/api/lib/infrastructure/orm-models/Session.js @@ -1,9 +1,9 @@ -const Bookshelf = require('../bookshelf.js'); -require('./CertificationCandidate.js'); +import { Bookshelf } from '../bookshelf.js'; +import './CertificationCandidate.js'; const modelName = 'Session'; -module.exports = Bookshelf.model( +const BookshelfSession = Bookshelf.model( modelName, { tableName: 'sessions', @@ -17,3 +17,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfSession }; diff --git a/api/lib/infrastructure/orm-models/SkillSet.js b/api/lib/infrastructure/orm-models/SkillSet.js index 4e24a45ef7d..7efe3268056 100644 --- a/api/lib/infrastructure/orm-models/SkillSet.js +++ b/api/lib/infrastructure/orm-models/SkillSet.js @@ -1,10 +1,10 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Badge.js'); +import './Badge.js'; const modelName = 'SkillSet'; -module.exports = Bookshelf.model( +const BookshelfSkillSet = Bookshelf.model( modelName, { tableName: 'skill-sets', @@ -17,3 +17,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfSkillSet }; diff --git a/api/lib/infrastructure/orm-models/Stage.js b/api/lib/infrastructure/orm-models/Stage.js index fe12d56f952..2fef7ba569f 100644 --- a/api/lib/infrastructure/orm-models/Stage.js +++ b/api/lib/infrastructure/orm-models/Stage.js @@ -1,9 +1,9 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; const modelName = 'Stage'; -require('./TargetProfile.js'); +import './TargetProfile.js'; -module.exports = Bookshelf.model( +const BookshelfStage = Bookshelf.model( modelName, { tableName: 'stages', @@ -17,3 +17,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfStage }; diff --git a/api/lib/infrastructure/orm-models/Tag.js b/api/lib/infrastructure/orm-models/Tag.js index 29d75a7aa83..8706f40f7c2 100644 --- a/api/lib/infrastructure/orm-models/Tag.js +++ b/api/lib/infrastructure/orm-models/Tag.js @@ -1,8 +1,8 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; const modelName = 'Tag'; -module.exports = Bookshelf.model( +const BookshelfTag = Bookshelf.model( modelName, { tableName: 'tags', @@ -12,3 +12,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfTag }; diff --git a/api/lib/infrastructure/orm-models/TargetProfile.js b/api/lib/infrastructure/orm-models/TargetProfile.js index f2a85136c18..6fda989a798 100644 --- a/api/lib/infrastructure/orm-models/TargetProfile.js +++ b/api/lib/infrastructure/orm-models/TargetProfile.js @@ -1,12 +1,12 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Badge.js'); -require('./Stage.js'); -require('./Organization.js'); +import './Badge.js'; +import './Stage.js'; +import './Organization.js'; const modelName = 'TargetProfile'; -module.exports = Bookshelf.model( +const BookshelfTargetProfile = Bookshelf.model( modelName, { tableName: 'target-profiles', @@ -28,3 +28,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfTargetProfile }; diff --git a/api/lib/infrastructure/orm-models/TargetProfileShare.js b/api/lib/infrastructure/orm-models/TargetProfileShare.js index 95baf582b43..a1abb1bb317 100644 --- a/api/lib/infrastructure/orm-models/TargetProfileShare.js +++ b/api/lib/infrastructure/orm-models/TargetProfileShare.js @@ -1,10 +1,10 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./TargetProfile.js'); +import './TargetProfile.js'; const modelName = 'TargetProfileShare'; -module.exports = Bookshelf.model( +const BookshelfTargetProfileShare = Bookshelf.model( modelName, { tableName: 'target-profile-shares', @@ -22,3 +22,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfTargetProfileShare }; diff --git a/api/lib/infrastructure/orm-models/User.js b/api/lib/infrastructure/orm-models/User.js index 0297c1e2eb6..11c6fe04a39 100644 --- a/api/lib/infrastructure/orm-models/User.js +++ b/api/lib/infrastructure/orm-models/User.js @@ -1,16 +1,16 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./Assessment.js'); -require('./KnowledgeElement.js'); -require('./Membership.js'); -require('./CertificationCenterMembership.js'); -require('./UserOrgaSettings.js'); -require('./OrganizationLearner.js'); -require('./AuthenticationMethod.js'); +import './Assessment.js'; +import './KnowledgeElement.js'; +import './Membership.js'; +import './CertificationCenterMembership.js'; +import './UserOrgaSettings.js'; +import './OrganizationLearner.js'; +import './AuthenticationMethod.js'; const modelName = 'User'; -module.exports = Bookshelf.model( +const BookshelfUser = Bookshelf.model( modelName, { tableName: 'users', @@ -48,3 +48,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfUser }; diff --git a/api/lib/infrastructure/orm-models/UserOrgaSettings.js b/api/lib/infrastructure/orm-models/UserOrgaSettings.js index 949a464a09d..a6436784864 100644 --- a/api/lib/infrastructure/orm-models/UserOrgaSettings.js +++ b/api/lib/infrastructure/orm-models/UserOrgaSettings.js @@ -1,11 +1,11 @@ -const Bookshelf = require('../bookshelf.js'); +import { Bookshelf } from '../bookshelf.js'; -require('./User.js'); -require('./Organization.js'); +import './User.js'; +import './Organization.js'; const modelName = 'UserOrgaSettings'; -module.exports = Bookshelf.model( +const BookshelfUserOrgaSetting = Bookshelf.model( modelName, { tableName: 'user-orga-settings', @@ -23,3 +23,5 @@ module.exports = Bookshelf.model( modelName, } ); + +export { BookshelfUserOrgaSetting as BookshelfUserOrgaSettings }; diff --git a/api/lib/infrastructure/plugins/i18n.js b/api/lib/infrastructure/plugins/i18n.js index e216100740f..dc3700db770 100644 --- a/api/lib/infrastructure/plugins/i18n.js +++ b/api/lib/infrastructure/plugins/i18n.js @@ -1,4 +1,6 @@ -const hapiI18n = require('hapi-i18n'); +import hapiI18n from 'hapi-i18n'; +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); const plugin = hapiI18n; const options = { locales: ['en', 'fr'], @@ -10,7 +12,4 @@ const options = { updateFiles: false, }; -module.exports = { - plugin, - options, -}; +export { plugin, options }; diff --git a/api/lib/infrastructure/plugins/index.js b/api/lib/infrastructure/plugins/index.js index 15e0e86088e..7d3fe3c6f7f 100644 --- a/api/lib/infrastructure/plugins/index.js +++ b/api/lib/infrastructure/plugins/index.js @@ -1,10 +1,10 @@ -const Inert = require('@hapi/inert'); -const Vision = require('@hapi/vision'); -const config = require('../../config.js'); -const i18n = require('./i18n.js'); -const pino = require('./pino.js'); -const sentry = require('./sentry.js'); +import Inert from '@hapi/inert'; +import Vision from '@hapi/vision'; +import { config } from '../../config.js'; +import * as i18n from './i18n.js'; +import * as pino from './pino.js'; +import * as sentry from './sentry.js'; const plugins = [Inert, Vision, i18n, pino, ...(config.sentry.enabled ? [sentry] : [])]; -module.exports = plugins; +export { plugins }; diff --git a/api/lib/infrastructure/plugins/pino.js b/api/lib/infrastructure/plugins/pino.js index 318798ca232..2040d9b49cf 100644 --- a/api/lib/infrastructure/plugins/pino.js +++ b/api/lib/infrastructure/plugins/pino.js @@ -1,8 +1,8 @@ -const config = require('../../config.js'); -const monitoringTools = require('../monitoring-tools.js'); -const hapiPino = require('hapi-pino'); -const logger = require('../logger.js'); -const crypto = require('crypto'); +import { config } from '../../config.js'; +import { monitoringTools } from '../monitoring-tools.js'; +import hapiPino from 'hapi-pino'; +import { logger } from '../logger.js'; +import crypto from 'crypto'; function logObjectSerializer(req) { const enhancedReq = { @@ -37,7 +37,4 @@ const options = { logQueryParams: true, }; -module.exports = { - plugin, - options, -}; +export { plugin, options }; diff --git a/api/lib/infrastructure/plugins/sentry.js b/api/lib/infrastructure/plugins/sentry.js index 599eff2a5af..4476ea6e19b 100644 --- a/api/lib/infrastructure/plugins/sentry.js +++ b/api/lib/infrastructure/plugins/sentry.js @@ -1,6 +1,7 @@ -const hapiSentry = require('hapi-sentry'); -const packageJSON = require('../../../package.json'); -const config = require('../../config.js'); +import hapiSentry from 'hapi-sentry'; +import packageJSON from '../../../package.json' assert { type: 'json' }; + +import { config } from '../../config.js'; const plugin = hapiSentry; const options = { @@ -17,7 +18,4 @@ const options = { }, }; -module.exports = { - plugin, - options, -}; +export { plugin, options }; diff --git a/api/lib/infrastructure/repositories/account-recovery-demand-repository.js b/api/lib/infrastructure/repositories/account-recovery-demand-repository.js index d8c0257f96b..2fb0392d0f7 100644 --- a/api/lib/infrastructure/repositories/account-recovery-demand-repository.js +++ b/api/lib/infrastructure/repositories/account-recovery-demand-repository.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const AccountRecoveryDemand = require('../../domain/models/AccountRecoveryDemand.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const DomainTransaction = require('../DomainTransaction.js'); +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; +import { AccountRecoveryDemand } from '../../domain/models/AccountRecoveryDemand.js'; +import { NotFoundError } from '../../domain/errors.js'; +import { DomainTransaction } from '../DomainTransaction.js'; const _toDomain = (accountRecoveryDemandDTO) => { return new AccountRecoveryDemand(accountRecoveryDemandDTO); @@ -12,41 +12,41 @@ const _toDomainArray = (accountRecoveryDemandsDTOs) => { return _.map(accountRecoveryDemandsDTOs, _toDomain); }; -module.exports = { - async findByTemporaryKey(temporaryKey) { - const accountRecoveryDemandDTO = await knex - .where({ temporaryKey }) - .select('id', 'organizationLearnerId', 'userId', 'oldEmail', 'newEmail', 'temporaryKey', 'used', 'createdAt') - .from('account-recovery-demands') - .first(); - - if (!accountRecoveryDemandDTO) { - throw new NotFoundError('No account recovery demand found'); - } - - return _toDomain(accountRecoveryDemandDTO); - }, - - async findByUserId(userId) { - const accountRecoveryDemandsDTOs = await knex - .select('id', 'organizationLearnerId', 'userId', 'oldEmail', 'newEmail', 'temporaryKey', 'used', 'createdAt') - .from('account-recovery-demands') - .where({ userId }); - - return _toDomainArray(accountRecoveryDemandsDTOs); - }, - - async save(accountRecoveryDemand) { - const result = await knex('account-recovery-demands').insert(accountRecoveryDemand).returning('*'); - - return _toDomain(result[0]); - }, - - async markAsBeingUsed(temporaryKey, { knexTransaction } = DomainTransaction.emptyTransaction()) { - const query = knex('account-recovery-demands') - .where({ temporaryKey }) - .update({ used: true, updatedAt: knex.fn.now() }); - if (knexTransaction) query.transacting(knexTransaction); - return query; - }, +const findByTemporaryKey = async function (temporaryKey) { + const accountRecoveryDemandDTO = await knex + .where({ temporaryKey }) + .select('id', 'organizationLearnerId', 'userId', 'oldEmail', 'newEmail', 'temporaryKey', 'used', 'createdAt') + .from('account-recovery-demands') + .first(); + + if (!accountRecoveryDemandDTO) { + throw new NotFoundError('No account recovery demand found'); + } + + return _toDomain(accountRecoveryDemandDTO); +}; + +const findByUserId = async function (userId) { + const accountRecoveryDemandsDTOs = await knex + .select('id', 'organizationLearnerId', 'userId', 'oldEmail', 'newEmail', 'temporaryKey', 'used', 'createdAt') + .from('account-recovery-demands') + .where({ userId }); + + return _toDomainArray(accountRecoveryDemandsDTOs); }; + +const save = async function (accountRecoveryDemand) { + const result = await knex('account-recovery-demands').insert(accountRecoveryDemand).returning('*'); + + return _toDomain(result[0]); +}; + +const markAsBeingUsed = async function (temporaryKey, { knexTransaction } = DomainTransaction.emptyTransaction()) { + const query = knex('account-recovery-demands') + .where({ temporaryKey }) + .update({ used: true, updatedAt: knex.fn.now() }); + if (knexTransaction) query.transacting(knexTransaction); + return query; +}; + +export { findByTemporaryKey, findByUserId, save, markAsBeingUsed }; diff --git a/api/lib/infrastructure/repositories/admin-member-repository.js b/api/lib/infrastructure/repositories/admin-member-repository.js index c3a523e302e..417e7badd87 100644 --- a/api/lib/infrastructure/repositories/admin-member-repository.js +++ b/api/lib/infrastructure/repositories/admin-member-repository.js @@ -1,80 +1,80 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const AdminMember = require('../../domain/models/AdminMember.js'); -const { AdminMemberError } = require('../../domain/errors.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { AdminMember } from '../../domain/models/AdminMember.js'; +import { AdminMemberError } from '../../domain/errors.js'; const TABLE_NAME = 'pix-admin-roles'; -module.exports = { - findAll: async function () { - const members = await knex - .select(`${TABLE_NAME}.id`, 'users.id as userId', 'firstName', 'lastName', 'email', 'role') - .from(TABLE_NAME) - .where({ disabledAt: null }) - .join('users', 'users.id', `${TABLE_NAME}.userId`) - .orderBy(['firstName', 'lastName']); +const findAll = async function () { + const members = await knex + .select(`${TABLE_NAME}.id`, 'users.id as userId', 'firstName', 'lastName', 'email', 'role') + .from(TABLE_NAME) + .where({ disabledAt: null }) + .join('users', 'users.id', `${TABLE_NAME}.userId`) + .orderBy(['firstName', 'lastName']); - return members.map((member) => new AdminMember(member)); - }, + return members.map((member) => new AdminMember(member)); +}; - getById: async function (id) { - const adminMember = await knex - .select(`${TABLE_NAME}.id`, 'users.id as userId', 'firstName', 'lastName', 'email', 'role', 'disabledAt') - .from(TABLE_NAME) - .where({ 'pix-admin-roles.id': id }) - .join('users', 'users.id', `${TABLE_NAME}.userId`) - .first(); +const getById = async function (id) { + const adminMember = await knex + .select(`${TABLE_NAME}.id`, 'users.id as userId', 'firstName', 'lastName', 'email', 'role', 'disabledAt') + .from(TABLE_NAME) + .where({ 'pix-admin-roles.id': id }) + .join('users', 'users.id', `${TABLE_NAME}.userId`) + .first(); - return adminMember ? new AdminMember(adminMember) : undefined; - }, + return adminMember ? new AdminMember(adminMember) : undefined; +}; - get: async function ({ userId }) { - const adminMember = await knex - .select(`${TABLE_NAME}.id`, 'users.id as userId', 'firstName', 'lastName', 'email', 'role', 'disabledAt') - .from(TABLE_NAME) - .where({ userId }) - .join('users', 'users.id', `${TABLE_NAME}.userId`) - .first(); +const get = async function ({ userId }) { + const adminMember = await knex + .select(`${TABLE_NAME}.id`, 'users.id as userId', 'firstName', 'lastName', 'email', 'role', 'disabledAt') + .from(TABLE_NAME) + .where({ userId }) + .join('users', 'users.id', `${TABLE_NAME}.userId`) + .first(); - return adminMember ? new AdminMember(adminMember) : undefined; - }, + return adminMember ? new AdminMember(adminMember) : undefined; +}; - async update({ id, attributesToUpdate }) { - const now = new Date(); - const [updatedAdminMember] = await knex - .from(TABLE_NAME) - .where({ id }) - .update({ ...attributesToUpdate, updatedAt: now }) - .returning('*'); +const update = async function ({ id, attributesToUpdate }) { + const now = new Date(); + const [updatedAdminMember] = await knex + .from(TABLE_NAME) + .where({ id }) + .update({ ...attributesToUpdate, updatedAt: now }) + .returning('*'); - if (!updatedAdminMember) { - throw new AdminMemberError( - 'A problem occurred while trying to update an admin member role', - 'UPDATE_ADMIN_MEMBER_ERROR' - ); - } + if (!updatedAdminMember) { + throw new AdminMemberError( + 'A problem occurred while trying to update an admin member role', + 'UPDATE_ADMIN_MEMBER_ERROR' + ); + } - return new AdminMember(updatedAdminMember); - }, + return new AdminMember(updatedAdminMember); +}; - async save(pixAdminRole) { - const [savedAdminMember] = await knex(TABLE_NAME).insert(pixAdminRole).returning('*'); - return new AdminMember(savedAdminMember); - }, +const save = async function (pixAdminRole) { + const [savedAdminMember] = await knex(TABLE_NAME).insert(pixAdminRole).returning('*'); + return new AdminMember(savedAdminMember); +}; - async deactivate({ id }) { - const now = new Date(); - const [deactivateddAdminMember] = await knex - .from('pix-admin-roles') - .where({ id }) - .whereRaw('"disabledAt" IS NULL') - .update({ disabledAt: now, updatedAt: now }) - .returning('*'); +const deactivate = async function ({ id }) { + const now = new Date(); + const [deactivateddAdminMember] = await knex + .from('pix-admin-roles') + .where({ id }) + .whereRaw('"disabledAt" IS NULL') + .update({ disabledAt: now, updatedAt: now }) + .returning('*'); - if (!deactivateddAdminMember) { - throw new AdminMemberError( - 'A problem occurred while trying to deactivate an admin member', - 'DEACTIVATE_ADMIN_MEMBER_ERROR' - ); - } - }, + if (!deactivateddAdminMember) { + throw new AdminMemberError( + 'A problem occurred while trying to deactivate an admin member', + 'DEACTIVATE_ADMIN_MEMBER_ERROR' + ); + } }; + +export { findAll, getById, get, update, save, deactivate }; diff --git a/api/lib/infrastructure/repositories/answer-repository.js b/api/lib/infrastructure/repositories/answer-repository.js index cf94a1ad424..2ffdbe8fda9 100644 --- a/api/lib/infrastructure/repositories/answer-repository.js +++ b/api/lib/infrastructure/repositories/answer-repository.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const jsYaml = require('js-yaml'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { ChallengeAlreadyAnsweredError, NotFoundError } = require('../../domain/errors.js'); -const Answer = require('../../domain/models/Answer.js'); -const answerStatusDatabaseAdapter = require('../adapters/answer-status-database-adapter.js'); +import _ from 'lodash'; +import jsYaml from 'js-yaml'; +import { knex } from '../../../db/knex-database-connection.js'; +import { ChallengeAlreadyAnsweredError, NotFoundError } from '../../domain/errors.js'; +import { Answer } from '../../domain/models/Answer.js'; +import * as answerStatusDatabaseAdapter from '../adapters/answer-status-database-adapter.js'; function _adaptAnswerToDb(answer) { return { @@ -48,83 +48,91 @@ const COLUMNS = Object.freeze([ 'timeSpent', ]); -module.exports = { - async get(id) { - const answerDTO = await knex.select(COLUMNS).from('answers').where({ id }).first(); +const get = async function (id) { + const answerDTO = await knex.select(COLUMNS).from('answers').where({ id }).first(); - if (!answerDTO) { - throw new NotFoundError(`Not found answer for ID ${id}`); - } + if (!answerDTO) { + throw new NotFoundError(`Not found answer for ID ${id}`); + } - return _toDomain(answerDTO); - }, + return _toDomain(answerDTO); +}; - async findByIds(ids) { - const answerDTOs = await knex.select(COLUMNS).from('answers').whereInArray('id', ids).orderBy('id'); +const findByIds = async function (ids) { + const answerDTOs = await knex.select(COLUMNS).from('answers').whereInArray('id', ids).orderBy('id'); - return _toDomainArray(answerDTOs); - }, + return _toDomainArray(answerDTOs); +}; - async findByChallengeAndAssessment({ challengeId, assessmentId }) { - const answerDTO = await knex - .select(COLUMNS) - .from('answers') - .where({ challengeId, assessmentId }) - .orderBy('createdAt', 'desc') - .first(); +const findByChallengeAndAssessment = async function ({ challengeId, assessmentId }) { + const answerDTO = await knex + .select(COLUMNS) + .from('answers') + .where({ challengeId, assessmentId }) + .orderBy('createdAt', 'desc') + .first(); - if (!answerDTO) { - return null; - } + if (!answerDTO) { + return null; + } - return _toDomain(answerDTO); - }, + return _toDomain(answerDTO); +}; - async findByAssessment(assessmentId) { - const answerDTOs = await knex.select(COLUMNS).from('answers').where({ assessmentId }).orderBy('createdAt'); - const answerDTOsWithoutDuplicate = _.uniqBy(answerDTOs, 'challengeId'); +const findByAssessment = async function (assessmentId) { + const answerDTOs = await knex.select(COLUMNS).from('answers').where({ assessmentId }).orderBy('createdAt'); + const answerDTOsWithoutDuplicate = _.uniqBy(answerDTOs, 'challengeId'); - return _toDomainArray(answerDTOsWithoutDuplicate); - }, + return _toDomainArray(answerDTOsWithoutDuplicate); +}; - async findLastByAssessment(assessmentId) { - const answerDTO = await knex - .select(COLUMNS) - .from('answers') - .where({ assessmentId }) - .orderBy('createdAt', 'desc') - .first(); +const findLastByAssessment = async function (assessmentId) { + const answerDTO = await knex + .select(COLUMNS) + .from('answers') + .where({ assessmentId }) + .orderBy('createdAt', 'desc') + .first(); - if (!answerDTO) { - return null; - } + if (!answerDTO) { + return null; + } - return _toDomain(answerDTO); - }, - - async findChallengeIdsFromAnswerIds(ids) { - return knex.distinct().pluck('challengeId').from('answers').whereInArray('id', ids); - }, - - async saveWithKnowledgeElements(answer, knowledgeElements) { - const answerForDB = _adaptAnswerToDb(answer); - return knex.transaction(async (trx) => { - const alreadySavedAnswer = await trx('answers') - .select('id') - .where({ challengeId: answer.challengeId, assessmentId: answer.assessmentId }); - if (alreadySavedAnswer.length !== 0) { - throw new ChallengeAlreadyAnsweredError(); - } - const [savedAnswerDTO] = await trx('answers').insert(answerForDB).returning(COLUMNS); - const savedAnswer = _toDomain(savedAnswerDTO); - if (!_.isEmpty(knowledgeElements)) { - for (const knowledgeElement of knowledgeElements) { - knowledgeElement.answerId = savedAnswer.id; - } - const knowledgeElementsForDB = knowledgeElements.map(_adaptKnowledgeElementToDb); - await trx('knowledge-elements').insert(knowledgeElementsForDB); + return _toDomain(answerDTO); +}; + +const findChallengeIdsFromAnswerIds = async function (ids) { + return knex.distinct().pluck('challengeId').from('answers').whereInArray('id', ids); +}; + +const saveWithKnowledgeElements = async function (answer, knowledgeElements) { + const answerForDB = _adaptAnswerToDb(answer); + return knex.transaction(async (trx) => { + const alreadySavedAnswer = await trx('answers') + .select('id') + .where({ challengeId: answer.challengeId, assessmentId: answer.assessmentId }); + if (alreadySavedAnswer.length !== 0) { + throw new ChallengeAlreadyAnsweredError(); + } + const [savedAnswerDTO] = await trx('answers').insert(answerForDB).returning(COLUMNS); + const savedAnswer = _toDomain(savedAnswerDTO); + if (!_.isEmpty(knowledgeElements)) { + for (const knowledgeElement of knowledgeElements) { + knowledgeElement.answerId = savedAnswer.id; } - return savedAnswer; - }); - }, + const knowledgeElementsForDB = knowledgeElements.map(_adaptKnowledgeElementToDb); + await trx('knowledge-elements').insert(knowledgeElementsForDB); + } + return savedAnswer; + }); +}; + +export { + get, + findByIds, + findByChallengeAndAssessment, + findByAssessment, + findLastByAssessment, + findChallengeIdsFromAnswerIds, + saveWithKnowledgeElements, }; diff --git a/api/lib/infrastructure/repositories/area-repository.js b/api/lib/infrastructure/repositories/area-repository.js index a4244e6c4ba..f9c7e06ffe8 100644 --- a/api/lib/infrastructure/repositories/area-repository.js +++ b/api/lib/infrastructure/repositories/area-repository.js @@ -1,9 +1,9 @@ -const Area = require('../../domain/models/Area.js'); -const { areaDatasource } = require('../datasources/learning-content/area-datasource.js'); -const competenceRepository = require('./competence-repository.js'); -const { getTranslatedKey } = require('../../domain/services/get-translated-text.js'); -const _ = require('lodash'); -const { NotFoundError } = require('../../domain/errors.js'); +import { Area } from '../../domain/models/Area.js'; +import { areaDatasource } from '../datasources/learning-content/area-datasource.js'; +import * as competenceRepository from './competence-repository.js'; +import { getTranslatedKey } from '../../domain/services/get-translated-text.js'; +import _ from 'lodash'; +import { NotFoundError } from '../../domain/errors.js'; function _toDomain({ areaData, locale }) { const translatedTitle = getTranslatedKey(areaData.title_i18n, locale); @@ -62,11 +62,4 @@ async function get({ id, locale }) { return _toDomain({ areaData, locale }); } -module.exports = { - list, - listWithPixCompetencesOnly, - findByFrameworkIdWithCompetences, - findByFrameworkId, - findByRecordIds, - get, -}; +export { list, listWithPixCompetencesOnly, findByFrameworkIdWithCompetences, findByFrameworkId, findByRecordIds, get }; diff --git a/api/lib/infrastructure/repositories/assessment-repository.js b/api/lib/infrastructure/repositories/assessment-repository.js index c597ccf3010..5a23856cc71 100644 --- a/api/lib/infrastructure/repositories/assessment-repository.js +++ b/api/lib/infrastructure/repositories/assessment-repository.js @@ -1,171 +1,190 @@ -const BookshelfAssessment = require('../orm-models/Assessment.js'); -const DomainTransaction = require('../DomainTransaction.js'); -const Assessment = require('../../domain/models/Assessment.js'); -const bookshelfToDomainConverter = require('../utils/bookshelf-to-domain-converter.js'); -const { groupBy, map, head, uniqBy, omit } = require('lodash'); -const { NotFoundError } = require('../../domain/errors.js'); -const { knex } = require('../../../db/knex-database-connection.js'); - -module.exports = { - async getWithAnswers(id) { - const [assessment] = await knex('assessments').where('assessments.id', id); - if (!assessment) { - throw new NotFoundError(`Assessment not found for ID ${id}`); - } +import { BookshelfAssessment } from '../orm-models/Assessment.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { Assessment } from '../../domain/models/Assessment.js'; +import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js'; +import lodash from 'lodash'; + +const { groupBy, map, head, uniqBy, omit } = lodash; + +import { NotFoundError } from '../../domain/errors.js'; +import { knex } from '../../../db/knex-database-connection.js'; + +const getWithAnswers = async function (id) { + const [assessment] = await knex('assessments').where('assessments.id', id); + if (!assessment) { + throw new NotFoundError(`Assessment not found for ID ${id}`); + } + + const answers = await knex('answers') + .select('id', 'challengeId', 'value') + .where('assessmentId', id) + .orderBy('createdAt'); + assessment.answers = uniqBy(answers, 'challengeId'); + return new Assessment(assessment); +}; - const answers = await knex('answers') - .select('id', 'challengeId', 'value') - .where('assessmentId', id) - .orderBy('createdAt'); - assessment.answers = uniqBy(answers, 'challengeId'); - return new Assessment(assessment); - }, +const get = async function (id, domainTransaction = DomainTransaction.emptyTransaction()) { + const knexConn = domainTransaction.knexTransaction || knex; + const assessment = await knexConn('assessments').where({ id }).first(); - async get(id, domainTransaction = DomainTransaction.emptyTransaction()) { - const knexConn = domainTransaction.knexTransaction || knex; - const assessment = await knexConn('assessments').where({ id }).first(); + if (!assessment) { + throw new NotFoundError("L'assessment n'existe pas ou son accès est restreint"); + } + return new Assessment(assessment); +}; - if (!assessment) { - throw new NotFoundError("L'assessment n'existe pas ou son accès est restreint"); - } - return new Assessment(assessment); - }, - - findLastCompletedAssessmentsForEachCompetenceByUser(userId, limitDate) { - return BookshelfAssessment.collection() - .query((qb) => { - qb.join('assessment-results', 'assessment-results.assessmentId', 'assessments.id'); - qb.where({ userId }) - .where(function () { - this.where({ type: 'PLACEMENT' }); - }) - .where('assessments.createdAt', '<', limitDate) - .where('assessment-results.createdAt', '<', limitDate) - .where('assessments.state', '=', 'completed') - .orderBy('assessments.createdAt', 'desc'); - }) - .fetch({ require: false }) - .then((bookshelfAssessmentCollection) => bookshelfAssessmentCollection.models) - .then(_selectLastAssessmentForEachCompetence) - .then((assessments) => bookshelfToDomainConverter.buildDomainObjects(BookshelfAssessment, assessments)); - }, - - getByAssessmentIdAndUserId(assessmentId, userId) { - return BookshelfAssessment.query({ where: { id: assessmentId }, andWhere: { userId } }) - .fetch() - .then((assessment) => bookshelfToDomainConverter.buildDomainObject(BookshelfAssessment, assessment)) - .catch((error) => { - if (error instanceof BookshelfAssessment.NotFoundError) { - throw new NotFoundError(); - } - - throw error; - }); - }, - - async save({ assessment, domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConn = domainTransaction.knexTransaction || knex; - assessment.validate(); - const [assessmentCreated] = await knexConn('assessments').insert(_adaptModelToDb(assessment)).returning('*'); - return new Assessment(assessmentCreated); - }, - - findNotAbortedCampaignAssessmentsByUserId(userId) { - return BookshelfAssessment.where({ userId, type: 'CAMPAIGN' }) - .where('state', '!=', 'aborted') - .fetchAll() - .then((assessments) => bookshelfToDomainConverter.buildDomainObjects(BookshelfAssessment, assessments)); - }, - - abortByAssessmentId(assessmentId) { - return this._updateStateById({ id: assessmentId, state: Assessment.states.ABORTED }); - }, - - completeByAssessmentId(assessmentId, domainTransaction = DomainTransaction.emptyTransaction()) { - return this._updateStateById( - { id: assessmentId, state: Assessment.states.COMPLETED }, - domainTransaction.knexTransaction - ); - }, - - endBySupervisorByAssessmentId(assessmentId) { - return this._updateStateById({ id: assessmentId, state: Assessment.states.ENDED_BY_SUPERVISOR }); - }, - - async getByCertificationCandidateId(certificationCandidateId) { - const assessment = await knex('assessments') - .select('assessments.*') - .innerJoin('certification-courses', 'certification-courses.id', 'assessments.certificationCourseId') - .innerJoin('certification-candidates', function () { - this.on('certification-candidates.userId', 'certification-courses.userId').andOn( - 'certification-candidates.sessionId', - 'certification-courses.sessionId' - ); - }) - .where({ 'certification-candidates.id': certificationCandidateId }) - .first(); - return new Assessment({ ...assessment }); - }, - - async ownedByUser({ id, userId = null }) { - const assessment = await knex('assessments').select('userId').where({ id }).first(); - - if (!assessment) { - return false; - } +const findLastCompletedAssessmentsForEachCompetenceByUser = function (userId, limitDate) { + return BookshelfAssessment.collection() + .query((qb) => { + qb.join('assessment-results', 'assessment-results.assessmentId', 'assessments.id'); + qb.where({ userId }) + .where(function () { + this.where({ type: 'PLACEMENT' }); + }) + .where('assessments.createdAt', '<', limitDate) + .where('assessment-results.createdAt', '<', limitDate) + .where('assessments.state', '=', 'completed') + .orderBy('assessments.createdAt', 'desc'); + }) + .fetch({ require: false }) + .then((bookshelfAssessmentCollection) => bookshelfAssessmentCollection.models) + .then(_selectLastAssessmentForEachCompetence) + .then((assessments) => bookshelfToDomainConverter.buildDomainObjects(BookshelfAssessment, assessments)); +}; - return assessment.userId === userId; - }, +const getByAssessmentIdAndUserId = function (assessmentId, userId) { + return BookshelfAssessment.query({ where: { id: assessmentId }, andWhere: { userId } }) + .fetch() + .then((assessment) => bookshelfToDomainConverter.buildDomainObject(BookshelfAssessment, assessment)) + .catch((error) => { + if (error instanceof BookshelfAssessment.NotFoundError) { + throw new NotFoundError(); + } - async _updateStateById({ id, state }, knexTransaction) { - const assessment = await BookshelfAssessment.where({ id }).save( - { state }, - { require: true, patch: true, transacting: knexTransaction } - ); - return bookshelfToDomainConverter.buildDomainObject(BookshelfAssessment, assessment); - }, - - async updateLastQuestionDate({ id, lastQuestionDate }) { - try { - await BookshelfAssessment.where({ id }).save( - { lastQuestionDate }, - { require: true, patch: true, method: 'update' } + throw error; + }); +}; + +const save = async function ({ assessment, domainTransaction = DomainTransaction.emptyTransaction() }) { + const knexConn = domainTransaction.knexTransaction || knex; + assessment.validate(); + const [assessmentCreated] = await knexConn('assessments').insert(_adaptModelToDb(assessment)).returning('*'); + return new Assessment(assessmentCreated); +}; + +const findNotAbortedCampaignAssessmentsByUserId = function (userId) { + return BookshelfAssessment.where({ userId, type: 'CAMPAIGN' }) + .where('state', '!=', 'aborted') + .fetchAll() + .then((assessments) => bookshelfToDomainConverter.buildDomainObjects(BookshelfAssessment, assessments)); +}; + +const abortByAssessmentId = function (assessmentId) { + return this._updateStateById({ id: assessmentId, state: Assessment.states.ABORTED }); +}; + +const completeByAssessmentId = function (assessmentId, domainTransaction = DomainTransaction.emptyTransaction()) { + return this._updateStateById( + { id: assessmentId, state: Assessment.states.COMPLETED }, + domainTransaction.knexTransaction + ); +}; + +const endBySupervisorByAssessmentId = function (assessmentId) { + return this._updateStateById({ id: assessmentId, state: Assessment.states.ENDED_BY_SUPERVISOR }); +}; + +const getByCertificationCandidateId = async function (certificationCandidateId) { + const assessment = await knex('assessments') + .select('assessments.*') + .innerJoin('certification-courses', 'certification-courses.id', 'assessments.certificationCourseId') + .innerJoin('certification-candidates', function () { + this.on('certification-candidates.userId', 'certification-courses.userId').andOn( + 'certification-candidates.sessionId', + 'certification-courses.sessionId' ); - } catch (err) { - if (err instanceof BookshelfAssessment.NoRowsUpdatedError) { - return null; - } - throw err; + }) + .where({ 'certification-candidates.id': certificationCandidateId }) + .first(); + return new Assessment({ ...assessment }); +}; + +const ownedByUser = async function ({ id, userId = null }) { + const assessment = await knex('assessments').select('userId').where({ id }).first(); + + if (!assessment) { + return false; + } + + return assessment.userId === userId; +}; + +const _updateStateById = async function ({ id, state }, knexTransaction) { + const assessment = await BookshelfAssessment.where({ id }).save( + { state }, + { require: true, patch: true, transacting: knexTransaction } + ); + return bookshelfToDomainConverter.buildDomainObject(BookshelfAssessment, assessment); +}; + +const updateLastQuestionDate = async function ({ id, lastQuestionDate }) { + try { + await BookshelfAssessment.where({ id }).save( + { lastQuestionDate }, + { require: true, patch: true, method: 'update' } + ); + } catch (err) { + if (err instanceof BookshelfAssessment.NoRowsUpdatedError) { + return null; } - }, + throw err; + } +}; - async updateWhenNewChallengeIsAsked({ id, lastChallengeId }) { - try { - await BookshelfAssessment.where({ id }).save( - { lastChallengeId, lastQuestionState: Assessment.statesOfLastQuestion.ASKED }, - { require: true, patch: true, method: 'update' } - ); - } catch (err) { - if (err instanceof BookshelfAssessment.NoRowsUpdatedError) { - return null; - } - throw err; +const updateWhenNewChallengeIsAsked = async function ({ id, lastChallengeId }) { + try { + await BookshelfAssessment.where({ id }).save( + { lastChallengeId, lastQuestionState: Assessment.statesOfLastQuestion.ASKED }, + { require: true, patch: true, method: 'update' } + ); + } catch (err) { + if (err instanceof BookshelfAssessment.NoRowsUpdatedError) { + return null; } - }, + throw err; + } +}; - async updateLastQuestionState({ id, lastQuestionState, domainTransaction }) { - try { - await BookshelfAssessment.where({ id }).save( - { lastQuestionState }, - { require: true, patch: true, method: 'update', transacting: domainTransaction.knexTransaction } - ); - } catch (err) { - if (err instanceof BookshelfAssessment.NoRowsUpdatedError) { - return null; - } - throw err; +const updateLastQuestionState = async function ({ id, lastQuestionState, domainTransaction }) { + try { + await BookshelfAssessment.where({ id }).save( + { lastQuestionState }, + { require: true, patch: true, method: 'update', transacting: domainTransaction.knexTransaction } + ); + } catch (err) { + if (err instanceof BookshelfAssessment.NoRowsUpdatedError) { + return null; } - }, + throw err; + } +}; + +export { + getWithAnswers, + get, + findLastCompletedAssessmentsForEachCompetenceByUser, + getByAssessmentIdAndUserId, + save, + findNotAbortedCampaignAssessmentsByUserId, + abortByAssessmentId, + completeByAssessmentId, + endBySupervisorByAssessmentId, + getByCertificationCandidateId, + ownedByUser, + _updateStateById, + updateLastQuestionDate, + updateWhenNewChallengeIsAsked, + updateLastQuestionState, }; function _selectLastAssessmentForEachCompetence(bookshelfAssessments) { diff --git a/api/lib/infrastructure/repositories/assessment-result-repository.js b/api/lib/infrastructure/repositories/assessment-result-repository.js index 182a089e41f..dffd3df17c8 100644 --- a/api/lib/infrastructure/repositories/assessment-result-repository.js +++ b/api/lib/infrastructure/repositories/assessment-result-repository.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { MissingAssessmentId, AssessmentResultNotCreatedError } = require('../../domain/errors.js'); -const DomainTransaction = require('../DomainTransaction.js'); -const AssessmentResult = require('../../domain/models/AssessmentResult.js'); -const CompetenceMark = require('../../domain/models/CompetenceMark.js'); +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; +import { MissingAssessmentId, AssessmentResultNotCreatedError } from '../../domain/errors.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { AssessmentResult } from '../../domain/models/AssessmentResult.js'; +import { CompetenceMark } from '../../domain/models/CompetenceMark.js'; function _toDomain({ assessmentResultDTO, competencesMarksDTO }) { const competenceMarks = competencesMarksDTO.map((competenceMark) => new CompetenceMark(competenceMark)); @@ -25,102 +25,106 @@ function _toDomain({ assessmentResultDTO, competencesMarksDTO }) { }); } -module.exports = { - async save({ certificationCourseId, assessmentResult, domainTransaction = DomainTransaction.emptyTransaction() }) { - const { - pixScore, - reproducibilityRate, - status, - emitter, - commentForJury, - commentForCandidate, - commentForOrganization, - id, - juryId, - assessmentId, - } = assessmentResult; +const save = async function ({ + certificationCourseId, + assessmentResult, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const { + pixScore, + reproducibilityRate, + status, + emitter, + commentForJury, + commentForCandidate, + commentForOrganization, + id, + juryId, + assessmentId, + } = assessmentResult; - const knexConn = domainTransaction.knexTransaction || knex; - if (_.isNil(assessmentId)) { - throw new MissingAssessmentId(); - } - try { - const [savedAssessmentResultData] = await knexConn('assessment-results') - .insert({ - pixScore, - reproducibilityRate, - status, - emitter, - commentForJury, - commentForCandidate, - commentForOrganization, - id, - juryId, - assessmentId, - }) - .returning('*'); - - await knex('certification-courses-last-assessment-results') - .insert({ certificationCourseId, lastAssessmentResultId: savedAssessmentResultData.id }) - .onConflict('certificationCourseId') - .merge(['lastAssessmentResultId']); + const knexConn = domainTransaction.knexTransaction || knex; + if (_.isNil(assessmentId)) { + throw new MissingAssessmentId(); + } + try { + const [savedAssessmentResultData] = await knexConn('assessment-results') + .insert({ + pixScore, + reproducibilityRate, + status, + emitter, + commentForJury, + commentForCandidate, + commentForOrganization, + id, + juryId, + assessmentId, + }) + .returning('*'); - const savedAssessmentResult = new AssessmentResult({ - ...savedAssessmentResultData, - reproducibilityRate: _.toNumber(savedAssessmentResultData.reproducibilityRate) ?? null, - }); - return savedAssessmentResult; - } catch (error) { - throw new AssessmentResultNotCreatedError(); - } - }, + await knex('certification-courses-last-assessment-results') + .insert({ certificationCourseId, lastAssessmentResultId: savedAssessmentResultData.id }) + .onConflict('certificationCourseId') + .merge(['lastAssessmentResultId']); - async findLatestLevelAndPixScoreByAssessmentId({ assessmentId, limitDate }) { - const result = await knex('assessment-results') - .select('level', 'pixScore') - .where((qb) => { - qb.where({ assessmentId }); - if (limitDate) { - qb.where('createdAt', '<', limitDate); - } - }) - .orderBy('createdAt', 'desc') - .first(); + const savedAssessmentResult = new AssessmentResult({ + ...savedAssessmentResultData, + reproducibilityRate: _.toNumber(savedAssessmentResultData.reproducibilityRate) ?? null, + }); + return savedAssessmentResult; + } catch (error) { + throw new AssessmentResultNotCreatedError(); + } +}; - return { - level: _.get(result, 'level', 0), - pixScore: _.get(result, 'pixScore', 0), - }; - }, +const findLatestLevelAndPixScoreByAssessmentId = async function ({ assessmentId, limitDate }) { + const result = await knex('assessment-results') + .select('level', 'pixScore') + .where((qb) => { + qb.where({ assessmentId }); + if (limitDate) { + qb.where('createdAt', '<', limitDate); + } + }) + .orderBy('createdAt', 'desc') + .first(); - async getByCertificationCourseId({ certificationCourseId }) { - const assessment = await knex('assessments') - .select('id') - .where({ certificationCourseId }) - .orderBy('createdAt', 'desc') - .first(); + return { + level: _.get(result, 'level', 0), + pixScore: _.get(result, 'pixScore', 0), + }; +}; - if (assessment) { - const assessmentId = assessment.id; +const getByCertificationCourseId = async function ({ certificationCourseId }) { + const assessment = await knex('assessments') + .select('id') + .where({ certificationCourseId }) + .orderBy('createdAt', 'desc') + .first(); - const latestAssessmentResult = await knex('assessment-results') - .where({ assessmentId }) - .orderBy('createdAt', 'desc') - .first(); + if (assessment) { + const assessmentId = assessment.id; - if (latestAssessmentResult) { - const competencesMarksDTO = await knex('competence-marks').where({ - assessmentResultId: latestAssessmentResult.id, - }); + const latestAssessmentResult = await knex('assessment-results') + .where({ assessmentId }) + .orderBy('createdAt', 'desc') + .first(); - return _toDomain({ - assessmentResultDTO: latestAssessmentResult, - competencesMarksDTO, - }); - } + if (latestAssessmentResult) { + const competencesMarksDTO = await knex('competence-marks').where({ + assessmentResultId: latestAssessmentResult.id, + }); - return AssessmentResult.buildStartedAssessmentResult({ assessmentId }); + return _toDomain({ + assessmentResultDTO: latestAssessmentResult, + competencesMarksDTO, + }); } - return AssessmentResult.buildStartedAssessmentResult({ assessmentId: null }); - }, + + return AssessmentResult.buildStartedAssessmentResult({ assessmentId }); + } + return AssessmentResult.buildStartedAssessmentResult({ assessmentId: null }); }; + +export { save, findLatestLevelAndPixScoreByAssessmentId, getByCertificationCourseId }; diff --git a/api/lib/infrastructure/repositories/authentication-method-repository.js b/api/lib/infrastructure/repositories/authentication-method-repository.js index b157a70a41c..9bd5f818985 100644 --- a/api/lib/infrastructure/repositories/authentication-method-repository.js +++ b/api/lib/infrastructure/repositories/authentication-method-repository.js @@ -1,10 +1,10 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const bookshelfUtils = require('../utils/knex-utils.js'); -const DomainTransaction = require('../DomainTransaction.js'); -const { AlreadyExistingEntityError, AuthenticationMethodNotFoundError } = require('../../domain/errors.js'); -const AuthenticationMethod = require('../../domain/models/AuthenticationMethod.js'); -const OidcIdentityProviders = require('../../domain/constants/oidc-identity-providers.js'); +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; +import * as knexUtils from '../utils/knex-utils.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { AlreadyExistingEntityError, AuthenticationMethodNotFoundError } from '../../domain/errors.js'; +import { AuthenticationMethod } from '../../domain/models/AuthenticationMethod.js'; +import * as OidcIdentityProviders from '../../domain/constants/oidc-identity-providers.js'; function _toDomain(authenticationMethodDTO) { if (authenticationMethodDTO.identityProvider === AuthenticationMethod.identityProviders.PIX) { @@ -53,229 +53,256 @@ const COLUMNS = Object.freeze([ 'updatedAt', ]); -module.exports = { - async create({ authenticationMethod, domainTransaction = DomainTransaction.emptyTransaction() }) { - try { - const knexConn = domainTransaction.knexTransaction ?? knex; - const authenticationMethodForDB = _.pick(authenticationMethod, [ - 'identityProvider', - 'authenticationComplement', - 'externalIdentifier', - 'userId', - ]); - const [authenticationMethodDTO] = await knexConn(AUTHENTICATION_METHODS_TABLE) - .insert(authenticationMethodForDB) - .returning(COLUMNS); - return _toDomain(authenticationMethodDTO); - } catch (err) { - if (bookshelfUtils.isUniqConstraintViolated(err)) { - throw new AlreadyExistingEntityError( - `An authentication method already exists for the user ID ${authenticationMethod.userId} and the externalIdentifier ${authenticationMethod.externalIdentifier}.` - ); - } - - throw err; - } - }, - - async createPasswordThatShouldBeChanged({ - userId, - hashedPassword, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - try { - const authenticationComplement = new AuthenticationMethod.PixAuthenticationComplement({ - password: hashedPassword, - shouldChangePassword: true, - }); - const authenticationMethod = new AuthenticationMethod({ - authenticationComplement, - identityProvider: AuthenticationMethod.identityProviders.PIX, - userId, - }); - const authenticationMethodForDB = _.pick(authenticationMethod, [ - 'identityProvider', - 'authenticationComplement', - 'externalIdentifier', - 'userId', - ]); - const knexConn = domainTransaction.knexTransaction ?? knex; - const [authenticationMethodDTO] = await knexConn(AUTHENTICATION_METHODS_TABLE) - .insert(authenticationMethodForDB) - .returning(COLUMNS); - return _toDomain(authenticationMethodDTO); - } catch (err) { - if (bookshelfUtils.isUniqConstraintViolated(err)) { - throw new AlreadyExistingEntityError(`Authentication method PIX already exists for the user ID ${userId}.`); - } - } - }, - - async findOneByUserIdAndIdentityProvider({ userId, identityProvider }) { - const authenticationMethodDTO = await knex - .select(COLUMNS) - .from(AUTHENTICATION_METHODS_TABLE) - .where({ userId, identityProvider }) - .first(); - - return authenticationMethodDTO ? _toDomain(authenticationMethodDTO) : null; - }, - - async findOneByExternalIdentifierAndIdentityProvider({ externalIdentifier, identityProvider }) { - const authenticationMethodDTO = await knex - .select(COLUMNS) - .from(AUTHENTICATION_METHODS_TABLE) - .where({ externalIdentifier, identityProvider }) - .first(); - - return authenticationMethodDTO ? _toDomain(authenticationMethodDTO) : null; - }, - - async findByUserId({ userId }) { - const authenticationMethodDTOs = await knex - .select(COLUMNS) - .from(AUTHENTICATION_METHODS_TABLE) - .where({ userId }) - .orderBy('id', 'ASC'); - - return authenticationMethodDTOs.map(_toDomain); - }, - - async getByIdAndUserId({ id, userId }) { - const authenticationMethod = await knex.from(AUTHENTICATION_METHODS_TABLE).where({ id, userId }).first(); - if (!authenticationMethod) { - throw new AuthenticationMethodNotFoundError(`Authentication method of id ${id} and user id ${userId} not found.`); - } - return _toDomain(authenticationMethod); - }, - - async hasIdentityProviderPIX({ userId }) { - const authenticationMethodDTO = await knex - .select(COLUMNS) - .from(AUTHENTICATION_METHODS_TABLE) - .where({ - userId, - identityProvider: AuthenticationMethod.identityProviders.PIX, - }) - .first(); - - return Boolean(authenticationMethodDTO); - }, - - async removeByUserIdAndIdentityProvider({ userId, identityProvider }) { - return knex(AUTHENTICATION_METHODS_TABLE).where({ userId, identityProvider }).del(); - }, - - async removeAllAuthenticationMethodsByUserId({ userId, domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConn = domainTransaction.knexTransaction ?? knex; - return knexConn(AUTHENTICATION_METHODS_TABLE).where({ userId }).del(); - }, - - async updateChangedPassword({ userId, hashedPassword }, domainTransaction = DomainTransaction.emptyTransaction()) { - const authenticationComplement = new AuthenticationMethod.PixAuthenticationComplement({ - password: hashedPassword, - shouldChangePassword: false, - }); - +const create = async function ({ authenticationMethod, domainTransaction = DomainTransaction.emptyTransaction() }) { + try { const knexConn = domainTransaction.knexTransaction ?? knex; + const authenticationMethodForDB = _.pick(authenticationMethod, [ + 'identityProvider', + 'authenticationComplement', + 'externalIdentifier', + 'userId', + ]); const [authenticationMethodDTO] = await knexConn(AUTHENTICATION_METHODS_TABLE) - .where({ - userId, - identityProvider: AuthenticationMethod.identityProviders.PIX, - }) - .update({ authenticationComplement, updatedAt: new Date() }) + .insert(authenticationMethodForDB) .returning(COLUMNS); - - if (!authenticationMethodDTO) { - throw new AuthenticationMethodNotFoundError(`Authentication method PIX for User ID ${userId} not found.`); - } return _toDomain(authenticationMethodDTO); - }, + } catch (err) { + if (knexUtils.isUniqConstraintViolated(err)) { + throw new AlreadyExistingEntityError( + `An authentication method already exists for the user ID ${authenticationMethod.userId} and the externalIdentifier ${authenticationMethod.externalIdentifier}.` + ); + } - async updatePasswordThatShouldBeChanged({ - userId, - hashedPassword, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { + throw err; + } +}; + +const createPasswordThatShouldBeChanged = async function ({ + userId, + hashedPassword, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + try { const authenticationComplement = new AuthenticationMethod.PixAuthenticationComplement({ password: hashedPassword, shouldChangePassword: true, }); - + const authenticationMethod = new AuthenticationMethod({ + authenticationComplement, + identityProvider: AuthenticationMethod.identityProviders.PIX, + userId, + }); + const authenticationMethodForDB = _.pick(authenticationMethod, [ + 'identityProvider', + 'authenticationComplement', + 'externalIdentifier', + 'userId', + ]); const knexConn = domainTransaction.knexTransaction ?? knex; const [authenticationMethodDTO] = await knexConn(AUTHENTICATION_METHODS_TABLE) - .where({ - userId, - identityProvider: AuthenticationMethod.identityProviders.PIX, - }) - .update({ authenticationComplement, updatedAt: new Date() }) + .insert(authenticationMethodForDB) .returning(COLUMNS); - - if (!authenticationMethodDTO) { - throw new AuthenticationMethodNotFoundError(`Authentication method PIX for User ID ${userId} not found.`); - } return _toDomain(authenticationMethodDTO); - }, + } catch (err) { + if (knexUtils.isUniqConstraintViolated(err)) { + throw new AlreadyExistingEntityError(`Authentication method PIX already exists for the user ID ${userId}.`); + } + } +}; - async updateExpiredPassword({ userId, hashedPassword }) { - const authenticationComplement = new AuthenticationMethod.PixAuthenticationComplement({ - password: hashedPassword, - shouldChangePassword: false, - }); +const findOneByUserIdAndIdentityProvider = async function ({ userId, identityProvider }) { + const authenticationMethodDTO = await knex + .select(COLUMNS) + .from(AUTHENTICATION_METHODS_TABLE) + .where({ userId, identityProvider }) + .first(); - const [authenticationMethodDTO] = await knex(AUTHENTICATION_METHODS_TABLE) - .where({ - userId, - identityProvider: AuthenticationMethod.identityProviders.PIX, - }) - .update({ authenticationComplement, updatedAt: new Date() }) - .returning(COLUMNS); + return authenticationMethodDTO ? _toDomain(authenticationMethodDTO) : null; +}; - if (!authenticationMethodDTO) { - throw new AuthenticationMethodNotFoundError(`Authentication method PIX for User ID ${userId} not found.`); - } - return _toDomain(authenticationMethodDTO); - }, +const findOneByExternalIdentifierAndIdentityProvider = async function ({ externalIdentifier, identityProvider }) { + const authenticationMethodDTO = await knex + .select(COLUMNS) + .from(AUTHENTICATION_METHODS_TABLE) + .where({ externalIdentifier, identityProvider }) + .first(); - async updateExternalIdentifierByUserIdAndIdentityProvider({ externalIdentifier, userId, identityProvider }) { - const [authenticationMethodDTO] = await knex(AUTHENTICATION_METHODS_TABLE) - .where({ userId, identityProvider }) - .update({ externalIdentifier, updatedAt: new Date() }) - .returning(COLUMNS); + return authenticationMethodDTO ? _toDomain(authenticationMethodDTO) : null; +}; - if (!authenticationMethodDTO) { - throw new AuthenticationMethodNotFoundError( - `No rows updated for authentication method of type ${identityProvider} for user ${userId}.` - ); - } - return _toDomain(authenticationMethodDTO); - }, +const findByUserId = async function ({ userId }) { + const authenticationMethodDTOs = await knex + .select(COLUMNS) + .from(AUTHENTICATION_METHODS_TABLE) + .where({ userId }) + .orderBy('id', 'ASC'); - async updateAuthenticationComplementByUserIdAndIdentityProvider({ - authenticationComplement, - userId, - identityProvider, - }) { - const [authenticationMethodDTO] = await knex(AUTHENTICATION_METHODS_TABLE) - .where({ userId, identityProvider }) - .update({ authenticationComplement, updatedAt: new Date() }) - .returning(COLUMNS); + return authenticationMethodDTOs.map(_toDomain); +}; - if (!authenticationMethodDTO) { - throw new AuthenticationMethodNotFoundError( - `No rows updated for authentication method of type ${identityProvider} for user ${userId}.` - ); - } - return _toDomain(authenticationMethodDTO); - }, +const getByIdAndUserId = async function ({ id, userId }) { + const authenticationMethod = await knex.from(AUTHENTICATION_METHODS_TABLE).where({ id, userId }).first(); + if (!authenticationMethod) { + throw new AuthenticationMethodNotFoundError(`Authentication method of id ${id} and user id ${userId} not found.`); + } + return _toDomain(authenticationMethod); +}; + +const hasIdentityProviderPIX = async function ({ userId }) { + const authenticationMethodDTO = await knex + .select(COLUMNS) + .from(AUTHENTICATION_METHODS_TABLE) + .where({ + userId, + identityProvider: AuthenticationMethod.identityProviders.PIX, + }) + .first(); + + return Boolean(authenticationMethodDTO); +}; + +const removeByUserIdAndIdentityProvider = async function ({ userId, identityProvider }) { + return knex(AUTHENTICATION_METHODS_TABLE).where({ userId, identityProvider }).del(); +}; + +const removeAllAuthenticationMethodsByUserId = async function ({ + userId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction.knexTransaction ?? knex; + return knexConn(AUTHENTICATION_METHODS_TABLE).where({ userId }).del(); +}; + +const updateChangedPassword = async function ( + { userId, hashedPassword }, + domainTransaction = DomainTransaction.emptyTransaction() +) { + const authenticationComplement = new AuthenticationMethod.PixAuthenticationComplement({ + password: hashedPassword, + shouldChangePassword: false, + }); + + const knexConn = domainTransaction.knexTransaction ?? knex; + const [authenticationMethodDTO] = await knexConn(AUTHENTICATION_METHODS_TABLE) + .where({ + userId, + identityProvider: AuthenticationMethod.identityProviders.PIX, + }) + .update({ authenticationComplement, updatedAt: new Date() }) + .returning(COLUMNS); + + if (!authenticationMethodDTO) { + throw new AuthenticationMethodNotFoundError(`Authentication method PIX for User ID ${userId} not found.`); + } + return _toDomain(authenticationMethodDTO); +}; + +const updatePasswordThatShouldBeChanged = async function ({ + userId, + hashedPassword, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const authenticationComplement = new AuthenticationMethod.PixAuthenticationComplement({ + password: hashedPassword, + shouldChangePassword: true, + }); - async updateAuthenticationMethodUserId({ originUserId, identityProvider, targetUserId }) { - await knex(AUTHENTICATION_METHODS_TABLE) - .where({ userId: originUserId, identityProvider }) - .update({ userId: targetUserId, updatedAt: new Date() }); - }, + const knexConn = domainTransaction.knexTransaction ?? knex; + const [authenticationMethodDTO] = await knexConn(AUTHENTICATION_METHODS_TABLE) + .where({ + userId, + identityProvider: AuthenticationMethod.identityProviders.PIX, + }) + .update({ authenticationComplement, updatedAt: new Date() }) + .returning(COLUMNS); + + if (!authenticationMethodDTO) { + throw new AuthenticationMethodNotFoundError(`Authentication method PIX for User ID ${userId} not found.`); + } + return _toDomain(authenticationMethodDTO); +}; + +const updateExpiredPassword = async function ({ userId, hashedPassword }) { + const authenticationComplement = new AuthenticationMethod.PixAuthenticationComplement({ + password: hashedPassword, + shouldChangePassword: false, + }); + + const [authenticationMethodDTO] = await knex(AUTHENTICATION_METHODS_TABLE) + .where({ + userId, + identityProvider: AuthenticationMethod.identityProviders.PIX, + }) + .update({ authenticationComplement, updatedAt: new Date() }) + .returning(COLUMNS); + + if (!authenticationMethodDTO) { + throw new AuthenticationMethodNotFoundError(`Authentication method PIX for User ID ${userId} not found.`); + } + return _toDomain(authenticationMethodDTO); +}; + +const updateExternalIdentifierByUserIdAndIdentityProvider = async function ({ + externalIdentifier, + userId, + identityProvider, +}) { + const [authenticationMethodDTO] = await knex(AUTHENTICATION_METHODS_TABLE) + .where({ userId, identityProvider }) + .update({ externalIdentifier, updatedAt: new Date() }) + .returning(COLUMNS); + + if (!authenticationMethodDTO) { + throw new AuthenticationMethodNotFoundError( + `No rows updated for authentication method of type ${identityProvider} for user ${userId}.` + ); + } + return _toDomain(authenticationMethodDTO); +}; + +const updateAuthenticationComplementByUserIdAndIdentityProvider = async function ({ + authenticationComplement, + userId, + identityProvider, +}) { + const [authenticationMethodDTO] = await knex(AUTHENTICATION_METHODS_TABLE) + .where({ userId, identityProvider }) + .update({ authenticationComplement, updatedAt: new Date() }) + .returning(COLUMNS); + + if (!authenticationMethodDTO) { + throw new AuthenticationMethodNotFoundError( + `No rows updated for authentication method of type ${identityProvider} for user ${userId}.` + ); + } + return _toDomain(authenticationMethodDTO); +}; + +const updateAuthenticationMethodUserId = async function ({ originUserId, identityProvider, targetUserId }) { + await knex(AUTHENTICATION_METHODS_TABLE) + .where({ userId: originUserId, identityProvider }) + .update({ userId: targetUserId, updatedAt: new Date() }); +}; + +const update = async function ({ id, authenticationComplement }) { + await knex(AUTHENTICATION_METHODS_TABLE).where({ id }).update({ authenticationComplement, updatedAt: new Date() }); +}; - async update({ id, authenticationComplement }) { - await knex(AUTHENTICATION_METHODS_TABLE).where({ id }).update({ authenticationComplement, updatedAt: new Date() }); - }, +export { + create, + createPasswordThatShouldBeChanged, + findOneByUserIdAndIdentityProvider, + findOneByExternalIdentifierAndIdentityProvider, + findByUserId, + getByIdAndUserId, + hasIdentityProviderPIX, + removeByUserIdAndIdentityProvider, + removeAllAuthenticationMethodsByUserId, + updateChangedPassword, + updatePasswordThatShouldBeChanged, + updateExpiredPassword, + updateExternalIdentifierByUserIdAndIdentityProvider, + updateAuthenticationComplementByUserIdAndIdentityProvider, + updateAuthenticationMethodUserId, + update, }; diff --git a/api/lib/infrastructure/repositories/badge-acquisition-repository.js b/api/lib/infrastructure/repositories/badge-acquisition-repository.js index ac0fddc9ca2..5bef6ed06eb 100644 --- a/api/lib/infrastructure/repositories/badge-acquisition-repository.js +++ b/api/lib/infrastructure/repositories/badge-acquisition-repository.js @@ -1,52 +1,59 @@ -const bluebird = require('bluebird'); -const { knex } = require('../../../db/knex-database-connection.js'); -const DomainTransaction = require('../DomainTransaction.js'); +import bluebird from 'bluebird'; +import { knex } from '../../../db/knex-database-connection.js'; +import { DomainTransaction } from '../DomainTransaction.js'; const BADGE_ACQUISITIONS_TABLE = 'badge-acquisitions'; -module.exports = { - async createOrUpdate({ badgeAcquisitionsToCreate = [], domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConn = domainTransaction.knexTransaction || knex; - return bluebird.mapSeries(badgeAcquisitionsToCreate, async ({ badgeId, userId, campaignParticipationId }) => { - const alreadyCreatedBadgeAcquisition = await knexConn(BADGE_ACQUISITIONS_TABLE) - .select('id') - .where({ badgeId, userId, campaignParticipationId }); - if (alreadyCreatedBadgeAcquisition.length === 0) { - return knexConn(BADGE_ACQUISITIONS_TABLE).insert(badgeAcquisitionsToCreate); - } else { - return knexConn(BADGE_ACQUISITIONS_TABLE) - .update({ updatedAt: knex.raw('CURRENT_TIMESTAMP') }) - .where({ userId, badgeId, campaignParticipationId }); - } - }); - }, +const createOrUpdate = async function ({ + badgeAcquisitionsToCreate = [], + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction.knexTransaction || knex; + return bluebird.mapSeries(badgeAcquisitionsToCreate, async ({ badgeId, userId, campaignParticipationId }) => { + const alreadyCreatedBadgeAcquisition = await knexConn(BADGE_ACQUISITIONS_TABLE) + .select('id') + .where({ badgeId, userId, campaignParticipationId }); + if (alreadyCreatedBadgeAcquisition.length === 0) { + return knexConn(BADGE_ACQUISITIONS_TABLE).insert(badgeAcquisitionsToCreate); + } else { + return knexConn(BADGE_ACQUISITIONS_TABLE) + .update({ updatedAt: knex.raw('CURRENT_TIMESTAMP') }) + .where({ userId, badgeId, campaignParticipationId }); + } + }); +}; - async getAcquiredBadgeIds({ badgeIds, userId, domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConn = domainTransaction.knexTransaction || knex; - return knexConn(BADGE_ACQUISITIONS_TABLE).pluck('badgeId').where({ userId }).whereIn('badgeId', badgeIds); - }, +const getAcquiredBadgeIds = async function ({ + badgeIds, + userId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction.knexTransaction || knex; + return knexConn(BADGE_ACQUISITIONS_TABLE).pluck('badgeId').where({ userId }).whereIn('badgeId', badgeIds); +}; - async getAcquiredBadgesByCampaignParticipations({ - campaignParticipationsIds, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - const knexConn = domainTransaction.knexTransaction || knex; - const badges = await knexConn('badges') - .distinct('badges.id') - .select('badge-acquisitions.campaignParticipationId AS campaignParticipationId', 'badges.*') - .from('badges') - .join(BADGE_ACQUISITIONS_TABLE, 'badges.id', 'badge-acquisitions.badgeId') - .where('badge-acquisitions.campaignParticipationId', 'IN', campaignParticipationsIds) - .orderBy('badges.id'); +const getAcquiredBadgesByCampaignParticipations = async function ({ + campaignParticipationsIds, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction.knexTransaction || knex; + const badges = await knexConn('badges') + .distinct('badges.id') + .select('badge-acquisitions.campaignParticipationId AS campaignParticipationId', 'badges.*') + .from('badges') + .join(BADGE_ACQUISITIONS_TABLE, 'badges.id', 'badge-acquisitions.badgeId') + .where('badge-acquisitions.campaignParticipationId', 'IN', campaignParticipationsIds) + .orderBy('badges.id'); - const acquiredBadgesByCampaignParticipations = {}; - for (const badge of badges) { - if (acquiredBadgesByCampaignParticipations[badge.campaignParticipationId]) { - acquiredBadgesByCampaignParticipations[badge.campaignParticipationId].push(badge); - } else { - acquiredBadgesByCampaignParticipations[badge.campaignParticipationId] = [badge]; - } + const acquiredBadgesByCampaignParticipations = {}; + for (const badge of badges) { + if (acquiredBadgesByCampaignParticipations[badge.campaignParticipationId]) { + acquiredBadgesByCampaignParticipations[badge.campaignParticipationId].push(badge); + } else { + acquiredBadgesByCampaignParticipations[badge.campaignParticipationId] = [badge]; } - return acquiredBadgesByCampaignParticipations; - }, + } + return acquiredBadgesByCampaignParticipations; }; + +export { createOrUpdate, getAcquiredBadgeIds, getAcquiredBadgesByCampaignParticipations }; diff --git a/api/lib/infrastructure/repositories/badge-criteria-repository.js b/api/lib/infrastructure/repositories/badge-criteria-repository.js index 4d1cd2d2044..640ccd2d2ce 100644 --- a/api/lib/infrastructure/repositories/badge-criteria-repository.js +++ b/api/lib/infrastructure/repositories/badge-criteria-repository.js @@ -1,17 +1,17 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const BadgeCriterion = require('../../../lib/domain/models/BadgeCriterion.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { BadgeCriterion } from '../../../lib/domain/models/BadgeCriterion.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; const TABLE_NAME = 'badge-criteria'; -module.exports = { - async save({ badgeCriterion }, { knexTransaction } = DomainTransaction.emptyTransaction()) { - const data = { - ...badgeCriterion, - // WORKAROUND: jsonb array needs to be stringified see https://knexjs.org/guide/schema-builder.html#json - cappedTubes: badgeCriterion.cappedTubes ? JSON.stringify(badgeCriterion.cappedTubes) : null, - }; - const savedBadgeCriterion = await (knexTransaction ?? knex)(TABLE_NAME).insert(data).returning('*'); - return new BadgeCriterion(savedBadgeCriterion[0]); - }, +const save = async function ({ badgeCriterion }, { knexTransaction } = DomainTransaction.emptyTransaction()) { + const data = { + ...badgeCriterion, + // WORKAROUND: jsonb array needs to be stringified see https://knexjs.org/guide/schema-builder.html#json + cappedTubes: badgeCriterion.cappedTubes ? JSON.stringify(badgeCriterion.cappedTubes) : null, + }; + const savedBadgeCriterion = await (knexTransaction ?? knex)(TABLE_NAME).insert(data).returning('*'); + return new BadgeCriterion(savedBadgeCriterion[0]); }; + +export { save }; diff --git a/api/lib/infrastructure/repositories/badge-for-calculation-repository.js b/api/lib/infrastructure/repositories/badge-for-calculation-repository.js index e532788d0db..75eb82d5bbf 100644 --- a/api/lib/infrastructure/repositories/badge-for-calculation-repository.js +++ b/api/lib/infrastructure/repositories/badge-for-calculation-repository.js @@ -1,121 +1,121 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { BadgeForCalculation, BadgeCriterion } = require('../../domain/models/BadgeForCalculation.js'); -const { SCOPES } = require('../../domain/models/BadgeCriterion.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); -const campaignRepository = require('./campaign-repository.js'); +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; +import { BadgeForCalculation, BadgeCriterion } from '../../domain/models/BadgeForCalculation.js'; +import { SCOPES } from '../../domain/models/BadgeCriterion.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; +import * as campaignRepository from './campaign-repository.js'; -module.exports = { - async findByCampaignParticipationId({ - campaignParticipationId, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - const knexConn = domainTransaction?.knexTransaction || knex; - const badgesDTO = await knexConn('badges') - .select('badges.id') - .join('target-profiles', 'target-profiles.id', 'badges.targetProfileId') - .join('campaigns', 'campaigns.targetProfileId', 'target-profiles.id') - .join('campaign-participations', 'campaign-participations.campaignId', 'campaigns.id') - .where('campaign-participations.id', campaignParticipationId) - .orderBy('badges.id'); +const findByCampaignParticipationId = async function ({ + campaignParticipationId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction?.knexTransaction || knex; + const badgesDTO = await knexConn('badges') + .select('badges.id') + .join('target-profiles', 'target-profiles.id', 'badges.targetProfileId') + .join('campaigns', 'campaigns.targetProfileId', 'target-profiles.id') + .join('campaign-participations', 'campaign-participations.campaignId', 'campaigns.id') + .where('campaign-participations.id', campaignParticipationId) + .orderBy('badges.id'); - const badgeIds = badgesDTO.map(({ id }) => id); - const badgeCriteriaDTO = await knexConn('badge-criteria') - .select(['id', 'threshold', 'badgeId', 'scope', 'cappedTubes', 'skillSetIds']) - .whereIn('badgeId', badgeIds) - .orderBy('badge-criteria.id'); - const badgeCriteriaDTOByBadge = _.groupBy(badgeCriteriaDTO, 'badgeId'); + const badgeIds = badgesDTO.map(({ id }) => id); + const badgeCriteriaDTO = await knexConn('badge-criteria') + .select(['id', 'threshold', 'badgeId', 'scope', 'cappedTubes', 'skillSetIds']) + .whereIn('badgeId', badgeIds) + .orderBy('badge-criteria.id'); + const badgeCriteriaDTOByBadge = _.groupBy(badgeCriteriaDTO, 'badgeId'); - const campaignSkills = await campaignRepository.findSkillsByCampaignParticipationId({ - campaignParticipationId, - domainTransaction, - }); - const campaignSkillIds = campaignSkills.map(({ id }) => id); - const campaignSkillsByTube = _.groupBy(campaignSkills, 'tubeId'); + const campaignSkills = await campaignRepository.findSkillsByCampaignParticipationId({ + campaignParticipationId, + domainTransaction, + }); + const campaignSkillIds = campaignSkills.map(({ id }) => id); + const campaignSkillsByTube = _.groupBy(campaignSkills, 'tubeId'); - const badges = []; - for (const badgeDTO of badgesDTO) { - const badge = await _buildBadge( - knexConn, - campaignSkillsByTube, - campaignSkillIds, - badgeCriteriaDTOByBadge[badgeDTO.id], - badgeDTO - ); - badges.push(badge); - } - return _.compact(badges); - }, + const badges = []; + for (const badgeDTO of badgesDTO) { + const badge = await _buildBadge( + knexConn, + campaignSkillsByTube, + campaignSkillIds, + badgeCriteriaDTOByBadge[badgeDTO.id], + badgeDTO + ); + badges.push(badge); + } + return _.compact(badges); +}; - async findByCampaignId({ campaignId, domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConn = domainTransaction?.knexTransaction || knex; - const badgesDTO = await knexConn('badges') - .select('badges.id') - .join('target-profiles', 'target-profiles.id', 'badges.targetProfileId') - .join('campaigns', 'campaigns.targetProfileId', 'target-profiles.id') - .where('campaigns.id', campaignId) - .orderBy('badges.id'); +const findByCampaignId = async function ({ campaignId, domainTransaction = DomainTransaction.emptyTransaction() }) { + const knexConn = domainTransaction?.knexTransaction || knex; + const badgesDTO = await knexConn('badges') + .select('badges.id') + .join('target-profiles', 'target-profiles.id', 'badges.targetProfileId') + .join('campaigns', 'campaigns.targetProfileId', 'target-profiles.id') + .where('campaigns.id', campaignId) + .orderBy('badges.id'); - const badgeIds = badgesDTO.map(({ id }) => id); - const badgeCriteriaDTO = await knexConn('badge-criteria') - .select(['id', 'threshold', 'badgeId', 'scope', 'cappedTubes', 'skillSetIds']) - .whereIn('badgeId', badgeIds) - .orderBy('badge-criteria.id'); - const badgeCriteriaDTOByBadge = _.groupBy(badgeCriteriaDTO, 'badgeId'); + const badgeIds = badgesDTO.map(({ id }) => id); + const badgeCriteriaDTO = await knexConn('badge-criteria') + .select(['id', 'threshold', 'badgeId', 'scope', 'cappedTubes', 'skillSetIds']) + .whereIn('badgeId', badgeIds) + .orderBy('badge-criteria.id'); + const badgeCriteriaDTOByBadge = _.groupBy(badgeCriteriaDTO, 'badgeId'); - const campaignSkills = await campaignRepository.findSkills({ - campaignId, - domainTransaction, - }); - const campaignSkillIds = campaignSkills.map(({ id }) => id); - const campaignSkillsByTube = _.groupBy(campaignSkills, 'tubeId'); + const campaignSkills = await campaignRepository.findSkills({ + campaignId, + domainTransaction, + }); + const campaignSkillIds = campaignSkills.map(({ id }) => id); + const campaignSkillsByTube = _.groupBy(campaignSkills, 'tubeId'); - const badges = []; - for (const badgeDTO of badgesDTO) { - const badge = await _buildBadge( - knexConn, - campaignSkillsByTube, - campaignSkillIds, - badgeCriteriaDTOByBadge[badgeDTO.id], - badgeDTO - ); - badges.push(badge); - } - return _.compact(badges); - }, + const badges = []; + for (const badgeDTO of badgesDTO) { + const badge = await _buildBadge( + knexConn, + campaignSkillsByTube, + campaignSkillIds, + badgeCriteriaDTOByBadge[badgeDTO.id], + badgeDTO + ); + badges.push(badge); + } + return _.compact(badges); +}; - async getByCertifiableBadgeAcquisition({ - certifiableBadgeAcquisition, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - const badgeId = certifiableBadgeAcquisition.badgeId; - const campaignId = certifiableBadgeAcquisition.campaignId; - const knexConn = domainTransaction?.knexTransaction || knex; - const badgeDTO = await knexConn('badges') - .select('badges.id') - .join('target-profiles', 'target-profiles.id', 'badges.targetProfileId') - .join('campaigns', 'campaigns.targetProfileId', 'target-profiles.id') - .where('campaigns.id', campaignId) - .where('badges.id', badgeId) - .first(); - if (!badgeDTO) return null; +const getByCertifiableBadgeAcquisition = async function ({ + certifiableBadgeAcquisition, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const badgeId = certifiableBadgeAcquisition.badgeId; + const campaignId = certifiableBadgeAcquisition.campaignId; + const knexConn = domainTransaction?.knexTransaction || knex; + const badgeDTO = await knexConn('badges') + .select('badges.id') + .join('target-profiles', 'target-profiles.id', 'badges.targetProfileId') + .join('campaigns', 'campaigns.targetProfileId', 'target-profiles.id') + .where('campaigns.id', campaignId) + .where('badges.id', badgeId) + .first(); + if (!badgeDTO) return null; - const badgeCriteriaDTO = await knexConn('badge-criteria') - .select(['id', 'threshold', 'badgeId', 'scope', 'cappedTubes', 'skillSetIds']) - .where('badgeId', badgeDTO.id) - .orderBy('badge-criteria.id'); + const badgeCriteriaDTO = await knexConn('badge-criteria') + .select(['id', 'threshold', 'badgeId', 'scope', 'cappedTubes', 'skillSetIds']) + .where('badgeId', badgeDTO.id) + .orderBy('badge-criteria.id'); - const campaignSkills = await campaignRepository.findSkills({ - campaignId, - domainTransaction, - }); - const campaignSkillIds = campaignSkills.map(({ id }) => id); - const campaignSkillsByTube = _.groupBy(campaignSkills, 'tubeId'); + const campaignSkills = await campaignRepository.findSkills({ + campaignId, + domainTransaction, + }); + const campaignSkillIds = campaignSkills.map(({ id }) => id); + const campaignSkillsByTube = _.groupBy(campaignSkills, 'tubeId'); - return _buildBadge(knexConn, campaignSkillsByTube, campaignSkillIds, badgeCriteriaDTO, badgeDTO); - }, + return _buildBadge(knexConn, campaignSkillsByTube, campaignSkillIds, badgeCriteriaDTO, badgeDTO); }; +export { findByCampaignParticipationId, findByCampaignId, getByCertifiableBadgeAcquisition }; + async function _buildBadge(knex, campaignSkillsByTube, campaignSkillIds, badgeCriteriaDTO, badgeDTO) { const badgeCriteria = []; for (const badgeCriterionDTO of badgeCriteriaDTO) { diff --git a/api/lib/infrastructure/repositories/badge-repository.js b/api/lib/infrastructure/repositories/badge-repository.js index 97730ee2dbc..08480a4d774 100644 --- a/api/lib/infrastructure/repositories/badge-repository.js +++ b/api/lib/infrastructure/repositories/badge-repository.js @@ -1,87 +1,100 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const Badge = require('../../domain/models/Badge.js'); -const SkillSet = require('../../domain/models/SkillSet.js'); -const BadgeCriterion = require('../../domain/models/BadgeCriterion.js'); -const omit = require('lodash/omit'); -const knexUtils = require('../utils/knex-utils.js'); -const { AlreadyExistingEntityError } = require('../../domain/errors.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { Badge } from '../../domain/models/Badge.js'; +import { SkillSet } from '../../domain/models/SkillSet.js'; +import { BadgeCriterion } from '../../domain/models/BadgeCriterion.js'; +import lodash from 'lodash'; + +const { omit } = lodash; + +import * as knexUtils from '../utils/knex-utils.js'; +import { AlreadyExistingEntityError } from '../../domain/errors.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; const TABLE_NAME = 'badges'; -module.exports = { - async findByCampaignId(campaignId) { - const badges = await knex(TABLE_NAME) - .select(`${TABLE_NAME}.*`) - .join('target-profiles', 'target-profiles.id', `${TABLE_NAME}.targetProfileId`) - .join('campaigns', 'campaigns.targetProfileId', 'target-profiles.id') - .where('campaigns.id', campaignId); - - return Promise.all( - badges.map(async (badge) => { - const { badgeCriteria, skillSets } = await _addCriteriaInformation(badge); - return new Badge({ ...badge, badgeCriteria, skillSets }); - }) - ); - }, - - async isAssociated(badgeId, { knexTransaction } = DomainTransaction.emptyTransaction()) { - const associatedBadge = await (knexTransaction ?? knex)('badge-acquisitions').where({ badgeId }).first(); - return !!associatedBadge; - }, - - async isRelatedToCertification(badgeId, { knexTransaction } = DomainTransaction.emptyTransaction()) { - const complementaryCertificationBadge = await (knexTransaction ?? knex)('complementary-certification-badges') - .where({ badgeId }) - .first(); - return !!complementaryCertificationBadge; - }, - - async get(id) { - const badge = await knex(TABLE_NAME).select('*').where({ id }).first(); - const { badgeCriteria, skillSets } = await _addCriteriaInformation(badge); - return new Badge({ ...badge, badgeCriteria, skillSets }); - }, - - async getByKey(key) { - const badge = await knex(TABLE_NAME).select('*').where({ key }).first(); - const { badgeCriteria, skillSets } = await _addCriteriaInformation(badge); - return new Badge({ ...badge, badgeCriteria, skillSets }); - }, - - async save(badge, { knexTransaction } = DomainTransaction.emptyTransaction()) { - try { - const [savedBadge] = await (knexTransaction ?? knex)(TABLE_NAME).insert(_adaptModelToDb(badge)).returning('*'); - return new Badge(savedBadge); - } catch (err) { - if (knexUtils.isUniqConstraintViolated(err)) { - throw new AlreadyExistingEntityError(`The badge key ${badge.key} already exists`); - } - throw err; - } - }, +const findByCampaignId = async function (campaignId) { + const badges = await knex(TABLE_NAME) + .select(`${TABLE_NAME}.*`) + .join('target-profiles', 'target-profiles.id', `${TABLE_NAME}.targetProfileId`) + .join('campaigns', 'campaigns.targetProfileId', 'target-profiles.id') + .where('campaigns.id', campaignId); + + return Promise.all( + badges.map(async (badge) => { + const { badgeCriteria, skillSets } = await _addCriteriaInformation(badge); + return new Badge({ ...badge, badgeCriteria, skillSets }); + }) + ); +}; - async update(badge) { - const [updatedBadge] = await knex(TABLE_NAME).update(_adaptModelToDb(badge)).where({ id: badge.id }).returning('*'); - return new Badge({ ...badge, ...updatedBadge }); - }, +const isAssociated = async function (badgeId, { knexTransaction } = DomainTransaction.emptyTransaction()) { + const associatedBadge = await (knexTransaction ?? knex)('badge-acquisitions').where({ badgeId }).first(); + return !!associatedBadge; +}; + +const isRelatedToCertification = async function (badgeId, { knexTransaction } = DomainTransaction.emptyTransaction()) { + const complementaryCertificationBadge = await (knexTransaction ?? knex)('complementary-certification-badges') + .where({ badgeId }) + .first(); + return !!complementaryCertificationBadge; +}; + +const get = async function (id) { + const badge = await knex(TABLE_NAME).select('*').where({ id }).first(); + const { badgeCriteria, skillSets } = await _addCriteriaInformation(badge); + return new Badge({ ...badge, badgeCriteria, skillSets }); +}; - async isKeyAvailable(key, { knexTransaction } = DomainTransaction.emptyTransaction()) { - const result = await (knexTransaction ?? knex)(TABLE_NAME).select('key').where('key', key); - if (result.length) { - throw new AlreadyExistingEntityError(`The badge key ${key} already exists`); +const getByKey = async function (key) { + const badge = await knex(TABLE_NAME).select('*').where({ key }).first(); + const { badgeCriteria, skillSets } = await _addCriteriaInformation(badge); + return new Badge({ ...badge, badgeCriteria, skillSets }); +}; + +const save = async function (badge, { knexTransaction } = DomainTransaction.emptyTransaction()) { + try { + const [savedBadge] = await (knexTransaction ?? knex)(TABLE_NAME).insert(_adaptModelToDb(badge)).returning('*'); + return new Badge(savedBadge); + } catch (err) { + if (knexUtils.isUniqConstraintViolated(err)) { + throw new AlreadyExistingEntityError(`The badge key ${badge.key} already exists`); } - return true; - }, + throw err; + } +}; + +const update = async function (badge) { + const [updatedBadge] = await knex(TABLE_NAME).update(_adaptModelToDb(badge)).where({ id: badge.id }).returning('*'); + return new Badge({ ...badge, ...updatedBadge }); +}; - async delete(badgeId, { knexTransaction } = DomainTransaction.emptyTransaction()) { - const knexConn = knexTransaction ?? knex; - await knexConn('badge-criteria').where({ badgeId }).del(); - await knexConn('skill-sets').where({ badgeId }).del(); - await knexConn('badges').where({ id: badgeId }).del(); +const isKeyAvailable = async function (key, { knexTransaction } = DomainTransaction.emptyTransaction()) { + const result = await (knexTransaction ?? knex)(TABLE_NAME).select('key').where('key', key); + if (result.length) { + throw new AlreadyExistingEntityError(`The badge key ${key} already exists`); + } + return true; +}; + +const remove = async function (badgeId, { knexTransaction } = DomainTransaction.emptyTransaction()) { + const knexConn = knexTransaction ?? knex; + await knexConn('badge-criteria').where({ badgeId }).del(); + await knexConn('skill-sets').where({ badgeId }).del(); + await knexConn('badges').where({ id: badgeId }).del(); + + return true; +}; - return true; - }, +export { + findByCampaignId, + isAssociated, + isRelatedToCertification, + get, + getByKey, + save, + update, + isKeyAvailable, + remove, }; async function _addCriteriaInformation(badge) { diff --git a/api/lib/infrastructure/repositories/campaign-analysis-repository.js b/api/lib/infrastructure/repositories/campaign-analysis-repository.js index f922d1e3319..1e5b31fc9ca 100644 --- a/api/lib/infrastructure/repositories/campaign-analysis-repository.js +++ b/api/lib/infrastructure/repositories/campaign-analysis-repository.js @@ -1,56 +1,61 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); -const { knex } = require('../../../db/knex-database-connection.js'); -const knowledgeElementRepository = require('./knowledge-element-repository.js'); -const CampaignAnalysis = require('../../domain/read-models/CampaignAnalysis.js'); -const CampaignParticipationStatuses = require('../../domain/models/CampaignParticipationStatuses.js'); -const { constants } = require('../constants.js'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import { knex } from '../../../db/knex-database-connection.js'; +import * as knowledgeElementRepository from './knowledge-element-repository.js'; +import { CampaignAnalysis } from '../../domain/read-models/CampaignAnalysis.js'; +import { CampaignParticipationStatuses } from '../../domain/models/CampaignParticipationStatuses.js'; +import { constants } from '../constants.js'; const { SHARED } = CampaignParticipationStatuses; -module.exports = { - async getCampaignAnalysis(campaignId, campaignLearningContent, tutorials) { - const userIdsAndSharedDates = await _getSharedParticipationsWithUserIdsAndDates(campaignId); - const userIdsAndSharedDatesChunks = _.chunk(userIdsAndSharedDates, constants.CHUNK_SIZE_CAMPAIGN_RESULT_PROCESSING); - const participantCount = userIdsAndSharedDates.length; +const getCampaignAnalysis = async function (campaignId, campaignLearningContent, tutorials) { + const userIdsAndSharedDates = await _getSharedParticipationsWithUserIdsAndDates(campaignId); + const userIdsAndSharedDatesChunks = _.chunk(userIdsAndSharedDates, constants.CHUNK_SIZE_CAMPAIGN_RESULT_PROCESSING); + const participantCount = userIdsAndSharedDates.length; - const campaignAnalysis = new CampaignAnalysis({ - campaignId, - campaignLearningContent, - tutorials, - participantCount, - }); - - await bluebird.mapSeries(userIdsAndSharedDatesChunks, async (userIdsAndSharedDates) => { - const knowledgeElementsByTube = await knowledgeElementRepository.findValidatedGroupedByTubesWithinCampaign( - Object.fromEntries(userIdsAndSharedDates), - campaignLearningContent - ); - campaignAnalysis.addToTubeRecommendations({ knowledgeElementsByTube }); - }); - campaignAnalysis.finalize(); - return campaignAnalysis; - }, - - async getCampaignParticipationAnalysis(campaignId, campaignParticipation, campaignLearningContent, tutorials) { - const campaignAnalysis = new CampaignAnalysis({ - campaignId, - campaignLearningContent, - tutorials, - participantCount: 1, - }); + const campaignAnalysis = new CampaignAnalysis({ + campaignId, + campaignLearningContent, + tutorials, + participantCount, + }); + await bluebird.mapSeries(userIdsAndSharedDatesChunks, async (userIdsAndSharedDates) => { const knowledgeElementsByTube = await knowledgeElementRepository.findValidatedGroupedByTubesWithinCampaign( - { [campaignParticipation.userId]: campaignParticipation.sharedAt }, + Object.fromEntries(userIdsAndSharedDates), campaignLearningContent ); campaignAnalysis.addToTubeRecommendations({ knowledgeElementsByTube }); + }); + campaignAnalysis.finalize(); + return campaignAnalysis; +}; - campaignAnalysis.finalize(1); - return campaignAnalysis; - }, +const getCampaignParticipationAnalysis = async function ( + campaignId, + campaignParticipation, + campaignLearningContent, + tutorials +) { + const campaignAnalysis = new CampaignAnalysis({ + campaignId, + campaignLearningContent, + tutorials, + participantCount: 1, + }); + + const knowledgeElementsByTube = await knowledgeElementRepository.findValidatedGroupedByTubesWithinCampaign( + { [campaignParticipation.userId]: campaignParticipation.sharedAt }, + campaignLearningContent + ); + campaignAnalysis.addToTubeRecommendations({ knowledgeElementsByTube }); + + campaignAnalysis.finalize(1); + return campaignAnalysis; }; +export { getCampaignAnalysis, getCampaignParticipationAnalysis }; + async function _getSharedParticipationsWithUserIdsAndDates(campaignId) { const results = await knex('campaign-participations') .select('userId', 'sharedAt') diff --git a/api/lib/infrastructure/repositories/campaign-assessment-participation-repository.js b/api/lib/infrastructure/repositories/campaign-assessment-participation-repository.js index 94202bd0974..a19e12c77a1 100644 --- a/api/lib/infrastructure/repositories/campaign-assessment-participation-repository.js +++ b/api/lib/infrastructure/repositories/campaign-assessment-participation-repository.js @@ -1,23 +1,20 @@ -const _ = require('lodash'); -const { NotFoundError } = require('../../../lib/domain/errors.js'); -const CampaignAssessmentParticipation = require('../../../lib/domain/read-models/CampaignAssessmentParticipation.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const knowledgeElementRepository = require('./knowledge-element-repository.js'); -const campaignRepository = require('./campaign-repository.js'); - -const Assessment = require('../../../lib/domain/models/Assessment.js'); - -module.exports = { - async getByCampaignIdAndCampaignParticipationId({ campaignId, campaignParticipationId }) { - const result = await _fetchCampaignAssessmentAttributesFromCampaignParticipation( - campaignId, - campaignParticipationId - ); - - return _buildCampaignAssessmentParticipation(result); - }, +import _ from 'lodash'; +import { NotFoundError } from '../../../lib/domain/errors.js'; +import { CampaignAssessmentParticipation } from '../../../lib/domain/read-models/CampaignAssessmentParticipation.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import * as knowledgeElementRepository from './knowledge-element-repository.js'; +import * as campaignRepository from './campaign-repository.js'; + +import { Assessment } from '../../../lib/domain/models/Assessment.js'; + +const getByCampaignIdAndCampaignParticipationId = async function ({ campaignId, campaignParticipationId }) { + const result = await _fetchCampaignAssessmentAttributesFromCampaignParticipation(campaignId, campaignParticipationId); + + return _buildCampaignAssessmentParticipation(result); }; +export { getByCampaignIdAndCampaignParticipationId }; + async function _fetchCampaignAssessmentAttributesFromCampaignParticipation(campaignId, campaignParticipationId) { const [campaignAssessmentParticipation] = await knex .with('campaignAssessmentParticipation', (qb) => { diff --git a/api/lib/infrastructure/repositories/campaign-assessment-participation-result-list-repository.js b/api/lib/infrastructure/repositories/campaign-assessment-participation-result-list-repository.js index ba7a94eb652..b95be5c4d12 100644 --- a/api/lib/infrastructure/repositories/campaign-assessment-participation-result-list-repository.js +++ b/api/lib/infrastructure/repositories/campaign-assessment-participation-result-list-repository.js @@ -1,9 +1,9 @@ -const bluebird = require('bluebird'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { fetchPage } = require('../utils/knex-utils.js'); -const stageCollectionRepository = require('./user-campaign-results/stage-collection-repository'); -const CampaignAssessmentParticipationResultMinimal = require('../../domain/read-models/campaign-results/CampaignAssessmentParticipationResultMinimal.js'); -const CampaignParticipationStatuses = require('../../domain/models/CampaignParticipationStatuses.js'); +import bluebird from 'bluebird'; +import { knex } from '../../../db/knex-database-connection.js'; +import { fetchPage } from '../utils/knex-utils.js'; +import * as stageCollectionRepository from './user-campaign-results/stage-collection-repository.js'; +import { CampaignAssessmentParticipationResultMinimal } from '../../domain/read-models/campaign-results/CampaignAssessmentParticipationResultMinimal.js'; +import { CampaignParticipationStatuses } from '../../domain/models/CampaignParticipationStatuses.js'; const { SHARED } = CampaignParticipationStatuses; @@ -157,6 +157,4 @@ async function getAcquiredBadges(campaignParticipationId) { .where({ campaignParticipationId: campaignParticipationId }); } -module.exports = { - findPaginatedByCampaignId, -}; +export { findPaginatedByCampaignId }; diff --git a/api/lib/infrastructure/repositories/campaign-assessment-participation-result-repository.js b/api/lib/infrastructure/repositories/campaign-assessment-participation-result-repository.js index f43f46c9e50..0915c454053 100644 --- a/api/lib/infrastructure/repositories/campaign-assessment-participation-result-repository.js +++ b/api/lib/infrastructure/repositories/campaign-assessment-participation-result-repository.js @@ -1,23 +1,23 @@ -const CampaignAssessmentParticipationResult = require('../../../lib/domain/read-models/CampaignAssessmentParticipationResult.js'); -const { NotFoundError } = require('../../../lib/domain/errors.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const knowledgeElementRepository = require('./knowledge-element-repository.js'); -const learningContentRepository = require('./learning-content-repository.js'); -const CampaignLearningContent = require('../../domain/models/CampaignLearningContent.js'); +import { CampaignAssessmentParticipationResult } from '../../../lib/domain/read-models/CampaignAssessmentParticipationResult.js'; +import { NotFoundError } from '../../../lib/domain/errors.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import * as knowledgeElementRepository from './knowledge-element-repository.js'; +import * as learningContentRepository from './learning-content-repository.js'; +import { CampaignLearningContent } from '../../domain/models/CampaignLearningContent.js'; -module.exports = { - async getByCampaignIdAndCampaignParticipationId({ campaignId, campaignParticipationId, locale }) { - const learningContent = await learningContentRepository.findByCampaignId(campaignId, locale); - const campaignLearningContent = new CampaignLearningContent(learningContent); - const result = await _fetchCampaignAssessmentParticipationResultAttributesFromCampaignParticipation( - campaignId, - campaignParticipationId - ); +const getByCampaignIdAndCampaignParticipationId = async function ({ campaignId, campaignParticipationId, locale }) { + const learningContent = await learningContentRepository.findByCampaignId(campaignId, locale); + const campaignLearningContent = new CampaignLearningContent(learningContent); + const result = await _fetchCampaignAssessmentParticipationResultAttributesFromCampaignParticipation( + campaignId, + campaignParticipationId + ); - return _buildCampaignAssessmentParticipationResults(result, campaignLearningContent); - }, + return _buildCampaignAssessmentParticipationResults(result, campaignLearningContent); }; +export { getByCampaignIdAndCampaignParticipationId }; + async function _fetchCampaignAssessmentParticipationResultAttributesFromCampaignParticipation( campaignId, campaignParticipationId diff --git a/api/lib/infrastructure/repositories/campaign-collective-result-repository.js b/api/lib/infrastructure/repositories/campaign-collective-result-repository.js index 262e801b2e2..a70360c612e 100644 --- a/api/lib/infrastructure/repositories/campaign-collective-result-repository.js +++ b/api/lib/infrastructure/repositories/campaign-collective-result-repository.js @@ -1,40 +1,38 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); -const { knex } = require('../../../db/knex-database-connection.js'); -const CampaignCollectiveResult = require('../../domain/read-models/CampaignCollectiveResult.js'); -const CampaignParticipationStatuses = require('../../domain/models/CampaignParticipationStatuses.js'); -const knowledgeElementRepository = require('./knowledge-element-repository.js'); -const { constants } = require('../constants.js'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import { knex } from '../../../db/knex-database-connection.js'; +import { CampaignCollectiveResult } from '../../domain/read-models/CampaignCollectiveResult.js'; +import { CampaignParticipationStatuses } from '../../domain/models/CampaignParticipationStatuses.js'; +import * as knowledgeElementRepository from './knowledge-element-repository.js'; +import { constants } from '../constants.js'; const { SHARED } = CampaignParticipationStatuses; -module.exports = { - async getCampaignCollectiveResult(campaignId, campaignLearningContent) { - const campaignCollectiveResult = new CampaignCollectiveResult({ - id: campaignId, - campaignLearningContent, - }); - - const userIdsAndSharedDatesChunks = await _getChunksSharedParticipationsWithUserIdsAndDates(campaignId); - - let participantCount = 0; - await bluebird.mapSeries(userIdsAndSharedDatesChunks, async (userIdsAndSharedDates) => { - participantCount += userIdsAndSharedDates.length; - const validatedTargetedKnowledgeElementsCountByCompetenceId = - await knowledgeElementRepository.countValidatedByCompetencesForUsersWithinCampaign( - Object.fromEntries(userIdsAndSharedDates), - campaignLearningContent - ); - campaignCollectiveResult.addValidatedSkillCountToCompetences( - validatedTargetedKnowledgeElementsCountByCompetenceId +const getCampaignCollectiveResult = async function (campaignId, campaignLearningContent) { + const campaignCollectiveResult = new CampaignCollectiveResult({ + id: campaignId, + campaignLearningContent, + }); + + const userIdsAndSharedDatesChunks = await _getChunksSharedParticipationsWithUserIdsAndDates(campaignId); + + let participantCount = 0; + await bluebird.mapSeries(userIdsAndSharedDatesChunks, async (userIdsAndSharedDates) => { + participantCount += userIdsAndSharedDates.length; + const validatedTargetedKnowledgeElementsCountByCompetenceId = + await knowledgeElementRepository.countValidatedByCompetencesForUsersWithinCampaign( + Object.fromEntries(userIdsAndSharedDates), + campaignLearningContent ); - }); + campaignCollectiveResult.addValidatedSkillCountToCompetences(validatedTargetedKnowledgeElementsCountByCompetenceId); + }); - campaignCollectiveResult.finalize(participantCount); - return campaignCollectiveResult; - }, + campaignCollectiveResult.finalize(participantCount); + return campaignCollectiveResult; }; +export { getCampaignCollectiveResult }; + async function _getChunksSharedParticipationsWithUserIdsAndDates(campaignId) { const results = await knex('campaign-participations') .select('userId', 'sharedAt') diff --git a/api/lib/infrastructure/repositories/campaign-creator-repository.js b/api/lib/infrastructure/repositories/campaign-creator-repository.js index 2d43ff60855..c73a2d772ce 100644 --- a/api/lib/infrastructure/repositories/campaign-creator-repository.js +++ b/api/lib/infrastructure/repositories/campaign-creator-repository.js @@ -1,6 +1,6 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const CampaignCreator = require('../../../lib/domain/models/CampaignCreator.js'); -const { UserNotAuthorizedToCreateCampaignError } = require('../../domain/errors.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { CampaignCreator } from '../../../lib/domain/models/CampaignCreator.js'; +import { UserNotAuthorizedToCreateCampaignError } from '../../domain/errors.js'; async function get({ userId, organizationId, ownerId }) { await _checkUserIsAMemberOfOrganization({ organizationId, userId }); @@ -19,9 +19,7 @@ async function get({ userId, organizationId, ownerId }) { return new CampaignCreator(availableTargetProfiles); } -module.exports = { - get, -}; +export { get }; async function _checkUserIsAMemberOfOrganization({ organizationId, userId }) { const membership = await knex('memberships').where({ organizationId, userId }).first(); diff --git a/api/lib/infrastructure/repositories/campaign-management-repository.js b/api/lib/infrastructure/repositories/campaign-management-repository.js index c471d2edf35..e58b0705f87 100644 --- a/api/lib/infrastructure/repositories/campaign-management-repository.js +++ b/api/lib/infrastructure/repositories/campaign-management-repository.js @@ -1,96 +1,95 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const CampaignManagement = require('../../domain/read-models/CampaignManagement.js'); -const { fetchPage } = require('../utils/knex-utils.js'); -const CampaignParticipationStatuses = require('../../../lib/domain/models/CampaignParticipationStatuses.js'); - -const CampaignTypes = require('../../domain/models/CampaignTypes.js'); +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; +import { CampaignManagement } from '../../domain/read-models/CampaignManagement.js'; +import { fetchPage } from '../utils/knex-utils.js'; +import { CampaignParticipationStatuses } from '../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { CampaignTypes } from '../../domain/models/CampaignTypes.js'; const { SHARED, TO_SHARE, STARTED } = CampaignParticipationStatuses; -module.exports = { - async get(campaignId) { - let campaign = await knex('campaigns') - .select({ - id: 'campaigns.id', - code: 'campaigns.code', - name: 'campaigns.name', - idPixLabel: 'campaigns.idPixLabel', - createdAt: 'campaigns.createdAt', - archivedAt: 'campaigns.archivedAt', - type: 'campaigns.type', - creatorLastName: 'users.lastName', - creatorFirstName: 'users.firstName', - creatorId: 'users.id', - organizationId: 'campaigns.organizationId', - organizationName: 'organizations.name', - targetProfileId: 'campaigns.targetProfileId', - targetProfileName: 'target-profiles.name', - title: 'campaigns.title', - ownerId: 'ownerUser.id', - ownerLastName: 'ownerUser.lastName', - ownerFirstName: 'ownerUser.firstName', - customLandingPageText: 'campaigns.customLandingPageText', - customResultPageText: 'campaigns.customResultPageText', - customResultPageButtonText: 'campaigns.customResultPageButtonText', - customResultPageButtonUrl: 'campaigns.customResultPageButtonUrl', - multipleSendings: 'campaigns.multipleSendings', - }) - .join('users', 'users.id', 'campaigns.creatorId') - .join('users AS ownerUser', 'ownerUser.id', 'campaigns.ownerId') - .join('organizations', 'organizations.id', 'campaigns.organizationId') - .leftJoin('target-profiles', 'target-profiles.id', 'campaigns.targetProfileId') - .where('campaigns.id', campaignId) - .first(); +const get = async function (campaignId) { + let campaign = await knex('campaigns') + .select({ + id: 'campaigns.id', + code: 'campaigns.code', + name: 'campaigns.name', + idPixLabel: 'campaigns.idPixLabel', + createdAt: 'campaigns.createdAt', + archivedAt: 'campaigns.archivedAt', + type: 'campaigns.type', + creatorLastName: 'users.lastName', + creatorFirstName: 'users.firstName', + creatorId: 'users.id', + organizationId: 'campaigns.organizationId', + organizationName: 'organizations.name', + targetProfileId: 'campaigns.targetProfileId', + targetProfileName: 'target-profiles.name', + title: 'campaigns.title', + ownerId: 'ownerUser.id', + ownerLastName: 'ownerUser.lastName', + ownerFirstName: 'ownerUser.firstName', + customLandingPageText: 'campaigns.customLandingPageText', + customResultPageText: 'campaigns.customResultPageText', + customResultPageButtonText: 'campaigns.customResultPageButtonText', + customResultPageButtonUrl: 'campaigns.customResultPageButtonUrl', + multipleSendings: 'campaigns.multipleSendings', + }) + .join('users', 'users.id', 'campaigns.creatorId') + .join('users AS ownerUser', 'ownerUser.id', 'campaigns.ownerId') + .join('organizations', 'organizations.id', 'campaigns.organizationId') + .leftJoin('target-profiles', 'target-profiles.id', 'campaigns.targetProfileId') + .where('campaigns.id', campaignId) + .first(); - const participationCountByStatus = await _countParticipationsByStatus(campaignId, campaign.type); - campaign = { ...campaign, ...participationCountByStatus }; - const campaignManagement = new CampaignManagement(campaign); - return campaignManagement; - }, + const participationCountByStatus = await _countParticipationsByStatus(campaignId, campaign.type); + campaign = { ...campaign, ...participationCountByStatus }; + const campaignManagement = new CampaignManagement(campaign); + return campaignManagement; +}; - async findPaginatedCampaignManagements({ organizationId, page }) { - const query = knex('campaigns') - .select({ - id: 'campaigns.id', - code: 'campaigns.code', - name: 'campaigns.name', - idPixLabel: 'campaigns.idPixLabel', - createdAt: 'campaigns.createdAt', - archivedAt: 'campaigns.archivedAt', - type: 'campaigns.type', - creatorLastName: 'creatorUser.lastName', - creatorFirstName: 'creatorUser.firstName', - creatorId: 'creatorUser.id', - ownerId: 'ownerUser.id', - ownerLastName: 'ownerUser.lastName', - ownerFirstName: 'ownerUser.firstName', - }) - .join('users AS creatorUser', 'creatorUser.id', 'campaigns.creatorId') - .join('users AS ownerUser', 'ownerUser.id', 'campaigns.ownerId') - .where('organizationId', organizationId) - .orderBy('campaigns.createdAt', 'DESC'); +const findPaginatedCampaignManagements = async function ({ organizationId, page }) { + const query = knex('campaigns') + .select({ + id: 'campaigns.id', + code: 'campaigns.code', + name: 'campaigns.name', + idPixLabel: 'campaigns.idPixLabel', + createdAt: 'campaigns.createdAt', + archivedAt: 'campaigns.archivedAt', + type: 'campaigns.type', + creatorLastName: 'creatorUser.lastName', + creatorFirstName: 'creatorUser.firstName', + creatorId: 'creatorUser.id', + ownerId: 'ownerUser.id', + ownerLastName: 'ownerUser.lastName', + ownerFirstName: 'ownerUser.firstName', + }) + .join('users AS creatorUser', 'creatorUser.id', 'campaigns.creatorId') + .join('users AS ownerUser', 'ownerUser.id', 'campaigns.ownerId') + .where('organizationId', organizationId) + .orderBy('campaigns.createdAt', 'DESC'); - const { results, pagination } = await fetchPage(query, page); + const { results, pagination } = await fetchPage(query, page); - const campaignManagement = results.map((attributes) => new CampaignManagement(attributes)); - return { models: campaignManagement, meta: { ...pagination } }; - }, + const campaignManagement = results.map((attributes) => new CampaignManagement(attributes)); + return { models: campaignManagement, meta: { ...pagination } }; +}; - update({ campaignId, campaignAttributes }) { - const editableAttributes = _.pick(campaignAttributes, [ - 'name', - 'title', - 'customLandingPageText', - 'customResultPageText', - 'customResultPageButtonText', - 'customResultPageButtonUrl', - 'multipleSendings', - ]); - return knex('campaigns').where({ id: campaignId }).update(editableAttributes); - }, +const update = function ({ campaignId, campaignAttributes }) { + const editableAttributes = _.pick(campaignAttributes, [ + 'name', + 'title', + 'customLandingPageText', + 'customResultPageText', + 'customResultPageButtonText', + 'customResultPageButtonUrl', + 'multipleSendings', + ]); + return knex('campaigns').where({ id: campaignId }).update(editableAttributes); }; +export { get, findPaginatedCampaignManagements, update }; + async function _countParticipationsByStatus(campaignId, campaignType) { const row = await knex('campaign-participations') .select([ diff --git a/api/lib/infrastructure/repositories/campaign-participant-activity-repository.js b/api/lib/infrastructure/repositories/campaign-participant-activity-repository.js index 4c498b5c92f..ec72c7ffc56 100644 --- a/api/lib/infrastructure/repositories/campaign-participant-activity-repository.js +++ b/api/lib/infrastructure/repositories/campaign-participant-activity-repository.js @@ -1,7 +1,7 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const CampaignParticipantActivity = require('../../domain/read-models/CampaignParticipantActivity.js'); -const { fetchPage } = require('../utils/knex-utils.js'); -const { filterByFullName } = require('../utils/filter-utils.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { CampaignParticipantActivity } from '../../domain/read-models/CampaignParticipantActivity.js'; +import { fetchPage } from '../utils/knex-utils.js'; +import { filterByFullName } from '../utils/filter-utils.js'; const campaignParticipantActivityRepository = { async findPaginatedByCampaignId({ page = { size: 25 }, campaignId, filters = {} }) { @@ -91,4 +91,4 @@ function _filterByGroup(queryBuilder, filters) { } } -module.exports = campaignParticipantActivityRepository; +export { campaignParticipantActivityRepository }; diff --git a/api/lib/infrastructure/repositories/campaign-participant-repository.js b/api/lib/infrastructure/repositories/campaign-participant-repository.js index 76a80db9f0e..c47be0872c1 100644 --- a/api/lib/infrastructure/repositories/campaign-participant-repository.js +++ b/api/lib/infrastructure/repositories/campaign-participant-repository.js @@ -1,9 +1,12 @@ -const pick = require('lodash/pick'); -const CampaignParticipant = require('../../domain/models/CampaignParticipant.js'); -const CampaignToStartParticipation = require('../../domain/models/CampaignToStartParticipation.js'); -const { AlreadyExistingCampaignParticipationError, NotFoundError } = require('../../domain/errors.js'); -const campaignRepository = require('../repositories/campaign-repository.js'); -const { knex } = require('../../../db/knex-database-connection.js'); +import lodash from 'lodash'; + +const { pick } = lodash; + +import { CampaignParticipant } from '../../domain/models/CampaignParticipant.js'; +import { CampaignToStartParticipation } from '../../domain/models/CampaignToStartParticipation.js'; +import { AlreadyExistingCampaignParticipationError, NotFoundError } from '../../domain/errors.js'; +import * as campaignRepository from '../repositories/campaign-repository.js'; +import { knex } from '../../../db/knex-database-connection.js'; async function save(campaignParticipant, domainTransaction) { const newlyCreatedOrganizationLearnerId = await _createNewOrganizationLearner( @@ -182,7 +185,4 @@ async function _findpreviousCampaignParticipationForUser(campaignId, userId, dom }; } -module.exports = { - get, - save, -}; +export { get, save }; diff --git a/api/lib/infrastructure/repositories/campaign-participation-info-repository.js b/api/lib/infrastructure/repositories/campaign-participation-info-repository.js index 5fcb541163d..ab21b398402 100644 --- a/api/lib/infrastructure/repositories/campaign-participation-info-repository.js +++ b/api/lib/infrastructure/repositories/campaign-participation-info-repository.js @@ -1,37 +1,37 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const Assessment = require('../../domain/models/Assessment.js'); -const CampaignParticipationInfo = require('../../domain/read-models/CampaignParticipationInfo.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { Assessment } from '../../domain/models/Assessment.js'; +import { CampaignParticipationInfo } from '../../domain/read-models/CampaignParticipationInfo.js'; -module.exports = { - async findByCampaignId(campaignId) { - const results = await knex - .with('campaignParticipationWithUserAndRankedAssessment', (qb) => { - qb.select([ - 'campaign-participations.*', - 'assessments.state', - _assessmentRankByCreationDate(), - 'view-active-organization-learners.firstName', - 'view-active-organization-learners.lastName', - 'view-active-organization-learners.studentNumber', - 'view-active-organization-learners.division', - 'view-active-organization-learners.group', - ]) - .from('campaign-participations') - .join('assessments', 'campaign-participations.id', 'assessments.campaignParticipationId') - .join( - 'view-active-organization-learners', - 'view-active-organization-learners.id', - 'campaign-participations.organizationLearnerId' - ) - .where({ campaignId, isImproved: false, 'campaign-participations.deletedAt': null }); - }) - .from('campaignParticipationWithUserAndRankedAssessment') - .where({ rank: 1 }); +const findByCampaignId = async function (campaignId) { + const results = await knex + .with('campaignParticipationWithUserAndRankedAssessment', (qb) => { + qb.select([ + 'campaign-participations.*', + 'assessments.state', + _assessmentRankByCreationDate(), + 'view-active-organization-learners.firstName', + 'view-active-organization-learners.lastName', + 'view-active-organization-learners.studentNumber', + 'view-active-organization-learners.division', + 'view-active-organization-learners.group', + ]) + .from('campaign-participations') + .join('assessments', 'campaign-participations.id', 'assessments.campaignParticipationId') + .join( + 'view-active-organization-learners', + 'view-active-organization-learners.id', + 'campaign-participations.organizationLearnerId' + ) + .where({ campaignId, isImproved: false, 'campaign-participations.deletedAt': null }); + }) + .from('campaignParticipationWithUserAndRankedAssessment') + .where({ rank: 1 }); - return results.map(_rowToCampaignParticipationInfo); - }, + return results.map(_rowToCampaignParticipationInfo); }; +export { findByCampaignId }; + function _assessmentRankByCreationDate() { return knex.raw('ROW_NUMBER() OVER (PARTITION BY ?? ORDER BY ?? DESC) AS rank', [ 'assessments.campaignParticipationId', diff --git a/api/lib/infrastructure/repositories/campaign-participation-overview-repository.js b/api/lib/infrastructure/repositories/campaign-participation-overview-repository.js index 38b2d35166b..e8c7bce6e66 100644 --- a/api/lib/infrastructure/repositories/campaign-participation-overview-repository.js +++ b/api/lib/infrastructure/repositories/campaign-participation-overview-repository.js @@ -1,30 +1,30 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const CampaignTypes = require('../../domain/models/CampaignTypes.js'); -const CampaignParticipationOverview = require('../../domain/read-models/CampaignParticipationOverview.js'); -const { fetchPage } = require('../utils/knex-utils.js'); -const bluebird = require('bluebird'); -const CampaignParticipationStatuses = require('../../domain/models/CampaignParticipationStatuses.js'); -const stageCollectionRepository = require('./user-campaign-results/stage-collection-repository'); +import { knex } from '../../../db/knex-database-connection.js'; +import { CampaignTypes } from '../../domain/models/CampaignTypes.js'; +import { CampaignParticipationOverview } from '../../domain/read-models/CampaignParticipationOverview.js'; +import { fetchPage } from '../utils/knex-utils.js'; +import bluebird from 'bluebird'; +import { CampaignParticipationStatuses } from '../../domain/models/CampaignParticipationStatuses.js'; +import * as stageCollectionRepository from './user-campaign-results/stage-collection-repository.js'; -module.exports = { - async findByUserIdWithFilters({ userId, states, page }) { - const queryBuilder = _findByUserId({ userId }); +const findByUserIdWithFilters = async function ({ userId, states, page }) { + const queryBuilder = _findByUserId({ userId }); - if (states && states.length > 0) { - _filterByStates(queryBuilder, states); - } + if (states && states.length > 0) { + _filterByStates(queryBuilder, states); + } - const { results, pagination } = await fetchPage(queryBuilder, page); + const { results, pagination } = await fetchPage(queryBuilder, page); - const campaignParticipationOverviews = await _toReadModel(results); + const campaignParticipationOverviews = await _toReadModel(results); - return { - campaignParticipationOverviews, - pagination, - }; - }, + return { + campaignParticipationOverviews, + pagination, + }; }; +export { findByUserIdWithFilters }; + function _findByUserId({ userId }) { return knex .with('campaign-participation-overviews', (qb) => { diff --git a/api/lib/infrastructure/repositories/campaign-participation-repository.js b/api/lib/infrastructure/repositories/campaign-participation-repository.js index 60f1b046ebc..031ca1716c8 100644 --- a/api/lib/infrastructure/repositories/campaign-participation-repository.js +++ b/api/lib/infrastructure/repositories/campaign-participation-repository.js @@ -1,209 +1,228 @@ -const CampaignParticipationStatuses = require('../../domain/models/CampaignParticipationStatuses.js'); -const CampaignTypes = require('../../domain/models/CampaignTypes.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const knowledgeElementRepository = require('./knowledge-element-repository.js'); -const knowledgeElementSnapshotRepository = require('./knowledge-element-snapshot-repository.js'); -const CampaignParticipation = require('../../domain/models/CampaignParticipation.js'); -const Assessment = require('../../domain/models/Assessment.js'); -const Campaign = require('../../domain/models/Campaign.js'); -const DomainTransaction = require('../DomainTransaction.js'); -const { NotFoundError } = require('../../domain/errors.js'); +import { CampaignParticipationStatuses } from '../../domain/models/CampaignParticipationStatuses.js'; +import { CampaignTypes } from '../../domain/models/CampaignTypes.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import * as knowledgeElementRepository from './knowledge-element-repository.js'; +import * as knowledgeElementSnapshotRepository from './knowledge-element-snapshot-repository.js'; +import { CampaignParticipation } from '../../domain/models/CampaignParticipation.js'; +import { Assessment } from '../../domain/models/Assessment.js'; +import { Campaign } from '../../domain/models/Campaign.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { NotFoundError } from '../../domain/errors.js'; const { SHARED, TO_SHARE, STARTED } = CampaignParticipationStatuses; -module.exports = { - async hasAssessmentParticipations(userId) { - const { count } = await knex('campaign-participations') - .count('campaign-participations.id') - .join('campaigns', 'campaigns.id', 'campaignId') - .where('campaigns.type', '=', CampaignTypes.ASSESSMENT) - .andWhere({ userId }) - .first(); - return count > 0; - }, - async getCodeOfLastParticipationToProfilesCollectionCampaignForUser(userId) { - const result = await knex('campaign-participations') - .select('campaigns.code') - .join('campaigns', 'campaigns.id', 'campaignId') - .where({ userId }) - .whereNull('deletedAt') - .whereNull('archivedAt') - .andWhere({ status: TO_SHARE }) - .andWhere({ 'campaigns.type': CampaignTypes.PROFILES_COLLECTION }) - .orderBy('campaign-participations.createdAt', 'desc') - .first(); - return result?.code || null; - }, - async get(id, domainTransaction = DomainTransaction.emptyTransaction()) { - const knexConn = domainTransaction.knexTransaction || knex; - const campaignParticipation = await knexConn('campaign-participations').where({ id }).first(); - const campaign = await knexConn('campaigns').where({ id: campaignParticipation.campaignId }).first(); - const assessments = await knexConn('assessments').where({ campaignParticipationId: id }); +const hasAssessmentParticipations = async function (userId) { + const { count } = await knex('campaign-participations') + .count('campaign-participations.id') + .join('campaigns', 'campaigns.id', 'campaignId') + .where('campaigns.type', '=', CampaignTypes.ASSESSMENT) + .andWhere({ userId }) + .first(); + return count > 0; +}; + +const getCodeOfLastParticipationToProfilesCollectionCampaignForUser = async function (userId) { + const result = await knex('campaign-participations') + .select('campaigns.code') + .join('campaigns', 'campaigns.id', 'campaignId') + .where({ userId }) + .whereNull('deletedAt') + .whereNull('archivedAt') + .andWhere({ status: TO_SHARE }) + .andWhere({ 'campaigns.type': CampaignTypes.PROFILES_COLLECTION }) + .orderBy('campaign-participations.createdAt', 'desc') + .first(); + return result?.code || null; +}; + +const get = async function (id, domainTransaction = DomainTransaction.emptyTransaction()) { + const knexConn = domainTransaction.knexTransaction || knex; + const campaignParticipation = await knexConn('campaign-participations').where({ id }).first(); + const campaign = await knexConn('campaigns').where({ id: campaignParticipation.campaignId }).first(); + const assessments = await knexConn('assessments').where({ campaignParticipationId: id }); + return new CampaignParticipation({ + ...campaignParticipation, + campaign: new Campaign(campaign), + assessments: assessments.map((assessment) => new Assessment(assessment)), + }); +}; + +const update = async function (campaignParticipation, domainTransaction = DomainTransaction.emptyTransaction()) { + const knexConn = domainTransaction.knexTransaction || knex; + const attributes = _getAttributes(campaignParticipation); + + await knexConn.from('campaign-participations').where({ id: campaignParticipation.id }).update(attributes); +}; + +const findProfilesCollectionResultDataByCampaignId = async function (campaignId) { + const results = await knex('campaign-participations') + .select([ + 'campaign-participations.*', + 'view-active-organization-learners.studentNumber', + 'view-active-organization-learners.division', + 'view-active-organization-learners.group', + 'view-active-organization-learners.firstName', + 'view-active-organization-learners.lastName', + ]) + .join( + 'view-active-organization-learners', + 'view-active-organization-learners.id', + 'campaign-participations.organizationLearnerId' + ) + .where({ campaignId, isImproved: false, 'campaign-participations.deletedAt': null }); + + return results.map(_rowToResult); +}; + +const findLatestOngoingByUserId = async function (userId) { + const campaignParticipations = await knex('campaign-participations') + .join('campaigns', 'campaigns.id', 'campaign-participations.campaignId') + .whereNull('campaigns.archivedAt') + .where({ userId }) + .orderBy('campaign-participations.createdAt', 'DESC') + .select('campaign-participations.*'); + const campaigns = await knex('campaigns').whereIn( + 'id', + campaignParticipations.map((campaignParticipation) => campaignParticipation.campaignId) + ); + const assessments = await knex('assessments') + .whereIn( + 'campaignParticipationId', + campaignParticipations.map((campaignParticipation) => campaignParticipation.id) + ) + .orderBy('createdAt'); + return campaignParticipations.map((campaignParticipation) => { + const campaign = campaigns.find((campaign) => campaign.id === campaignParticipation.campaignId); return new CampaignParticipation({ ...campaignParticipation, campaign: new Campaign(campaign), - assessments: assessments.map((assessment) => new Assessment(assessment)), + assessments: assessments + .filter((assessment) => assessment.campaignParticipationId === campaignParticipation.id) + .map((assessment) => new Assessment(assessment)), }); - }, - - async update(campaignParticipation, domainTransaction = DomainTransaction.emptyTransaction()) { - const knexConn = domainTransaction.knexTransaction || knex; - const attributes = _getAttributes(campaignParticipation); - - await knexConn.from('campaign-participations').where({ id: campaignParticipation.id }).update(attributes); - }, - - async findProfilesCollectionResultDataByCampaignId(campaignId) { - const results = await knex('campaign-participations') - .select([ - 'campaign-participations.*', - 'view-active-organization-learners.studentNumber', - 'view-active-organization-learners.division', - 'view-active-organization-learners.group', - 'view-active-organization-learners.firstName', - 'view-active-organization-learners.lastName', - ]) - .join( - 'view-active-organization-learners', - 'view-active-organization-learners.id', - 'campaign-participations.organizationLearnerId' - ) - .where({ campaignId, isImproved: false, 'campaign-participations.deletedAt': null }); - - return results.map(_rowToResult); - }, - - async findLatestOngoingByUserId(userId) { - const campaignParticipations = await knex('campaign-participations') - .join('campaigns', 'campaigns.id', 'campaign-participations.campaignId') - .whereNull('campaigns.archivedAt') - .where({ userId }) - .orderBy('campaign-participations.createdAt', 'DESC') - .select('campaign-participations.*'); - const campaigns = await knex('campaigns').whereIn( - 'id', - campaignParticipations.map((campaignParticipation) => campaignParticipation.campaignId) - ); - const assessments = await knex('assessments') - .whereIn( - 'campaignParticipationId', - campaignParticipations.map((campaignParticipation) => campaignParticipation.id) - ) - .orderBy('createdAt'); - return campaignParticipations.map((campaignParticipation) => { - const campaign = campaigns.find((campaign) => campaign.id === campaignParticipation.campaignId); - return new CampaignParticipation({ - ...campaignParticipation, - campaign: new Campaign(campaign), - assessments: assessments - .filter((assessment) => assessment.campaignParticipationId === campaignParticipation.id) - .map((assessment) => new Assessment(assessment)), - }); - }); - }, - - async findOneByCampaignIdAndUserId({ campaignId, userId }) { - const campaignParticipation = await knex('campaign-participations') - .where({ userId, isImproved: false, campaignId }) - .first(); - if (!campaignParticipation) return null; - const assessments = await knex('assessments').where({ campaignParticipationId: campaignParticipation.id }); - return new CampaignParticipation({ - ...campaignParticipation, - assessments: assessments.map((assessment) => new Assessment(assessment)), - }); - }, + }); +}; - async updateWithSnapshot(campaignParticipation, domainTransaction = DomainTransaction.emptyTransaction()) { - await this.update(campaignParticipation, domainTransaction); +const findOneByCampaignIdAndUserId = async function ({ campaignId, userId }) { + const campaignParticipation = await knex('campaign-participations') + .where({ userId, isImproved: false, campaignId }) + .first(); + if (!campaignParticipation) return null; + const assessments = await knex('assessments').where({ campaignParticipationId: campaignParticipation.id }); + return new CampaignParticipation({ + ...campaignParticipation, + assessments: assessments.map((assessment) => new Assessment(assessment)), + }); +}; - const knowledgeElements = await knowledgeElementRepository.findUniqByUserId({ - userId: campaignParticipation.userId, - limitDate: campaignParticipation.sharedAt, - domainTransaction, - }); - await knowledgeElementSnapshotRepository.save({ - userId: campaignParticipation.userId, - snappedAt: campaignParticipation.sharedAt, - knowledgeElements, - domainTransaction, - }); - }, - - async isRetrying({ campaignParticipationId }) { - const { id: campaignId, userId } = await knex('campaigns') - .select('campaigns.id', 'userId') - .join('campaign-participations', 'campaigns.id', 'campaignId') - .where({ 'campaign-participations.id': campaignParticipationId }) - .first(); - - const campaignParticipations = await knex('campaign-participations') - .select('sharedAt', 'isImproved') - .where({ campaignId, userId }); - - return ( - campaignParticipations.length > 1 && - campaignParticipations.some((participation) => !participation.isImproved && !participation.sharedAt) +const updateWithSnapshot = async function ( + campaignParticipation, + domainTransaction = DomainTransaction.emptyTransaction() +) { + await this.update(campaignParticipation, domainTransaction); + + const knowledgeElements = await knowledgeElementRepository.findUniqByUserId({ + userId: campaignParticipation.userId, + limitDate: campaignParticipation.sharedAt, + domainTransaction, + }); + await knowledgeElementSnapshotRepository.save({ + userId: campaignParticipation.userId, + snappedAt: campaignParticipation.sharedAt, + knowledgeElements, + domainTransaction, + }); +}; + +const isRetrying = async function ({ campaignParticipationId }) { + const { id: campaignId, userId } = await knex('campaigns') + .select('campaigns.id', 'userId') + .join('campaign-participations', 'campaigns.id', 'campaignId') + .where({ 'campaign-participations.id': campaignParticipationId }) + .first(); + + const campaignParticipations = await knex('campaign-participations') + .select('sharedAt', 'isImproved') + .where({ campaignId, userId }); + + return ( + campaignParticipations.length > 1 && + campaignParticipations.some((participation) => !participation.isImproved && !participation.sharedAt) + ); +}; + +const getAllParticipationsByCampaignId = async function (campaignId) { + const result = await knex + .select('masteryRate', 'validatedSkillsCount') + .from('campaign-participations') + .where('campaign-participations.campaignId', '=', campaignId) + .where('campaign-participations.isImproved', '=', false) + .where('campaign-participations.deletedAt', 'is', null) + .where('campaign-participations.status', 'SHARED'); + + return result; +}; + +const countParticipationsByStatus = async function (campaignId, campaignType) { + const row = await knex('campaign-participations') + .select([ + knex.raw(`sum(case when status = ? then 1 else 0 end) as shared`, SHARED), + knex.raw(`sum(case when status = ? then 1 else 0 end) as completed`, TO_SHARE), + knex.raw(`sum(case when status = ? then 1 else 0 end) as started`, STARTED), + ]) + .where({ campaignId, isImproved: false, deletedAt: null }) + .groupBy('campaignId') + .first(); + + return mapToParticipationByStatus(row, campaignType); +}; + +const getAllCampaignParticipationsInCampaignForASameLearner = async function ({ + campaignId, + campaignParticipationId, + domainTransaction, +}) { + const knexConn = domainTransaction.knexTransaction; + const result = await knexConn('campaign-participations') + .select('organizationLearnerId') + .where({ id: campaignParticipationId, campaignId }) + .first(); + + if (!result) { + throw new NotFoundError( + `There is no campaign participation with the id "${campaignParticipationId}" for the campaign wih the id "${campaignId}"` ); - }, - - async getAllParticipationsByCampaignId(campaignId) { - const result = await knex - .select('masteryRate', 'validatedSkillsCount') - .from('campaign-participations') - .where('campaign-participations.campaignId', '=', campaignId) - .where('campaign-participations.isImproved', '=', false) - .where('campaign-participations.deletedAt', 'is', null) - .where('campaign-participations.status', 'SHARED'); - - return result; - }, - - async countParticipationsByStatus(campaignId, campaignType) { - const row = await knex('campaign-participations') - .select([ - knex.raw(`sum(case when status = ? then 1 else 0 end) as shared`, SHARED), - knex.raw(`sum(case when status = ? then 1 else 0 end) as completed`, TO_SHARE), - knex.raw(`sum(case when status = ? then 1 else 0 end) as started`, STARTED), - ]) - .where({ campaignId, isImproved: false, deletedAt: null }) - .groupBy('campaignId') - .first(); - - return mapToParticipationByStatus(row, campaignType); - }, - - async getAllCampaignParticipationsInCampaignForASameLearner({ + } + + const campaignParticipations = await knexConn('campaign-participations').where({ campaignId, - campaignParticipationId, - domainTransaction, - }) { - const knexConn = domainTransaction.knexTransaction; - const result = await knexConn('campaign-participations') - .select('organizationLearnerId') - .where({ id: campaignParticipationId, campaignId }) - .first(); - - if (!result) { - throw new NotFoundError( - `There is no campaign participation with the id "${campaignParticipationId}" for the campaign wih the id "${campaignId}"` - ); - } - - const campaignParticipations = await knexConn('campaign-participations').where({ - campaignId, - organizationLearnerId: result.organizationLearnerId, - deletedAt: null, - deletedBy: null, - }); + organizationLearnerId: result.organizationLearnerId, + deletedAt: null, + deletedBy: null, + }); - return campaignParticipations.map((campaignParticipation) => new CampaignParticipation(campaignParticipation)); - }, + return campaignParticipations.map((campaignParticipation) => new CampaignParticipation(campaignParticipation)); +}; + +const remove = async function ({ id, deletedAt, deletedBy, domainTransaction }) { + const knexConn = domainTransaction.knexTransaction; + return await knexConn('campaign-participations').where({ id }).update({ deletedAt, deletedBy }); +}; - async delete({ id, deletedAt, deletedBy, domainTransaction }) { - const knexConn = domainTransaction.knexTransaction; - return await knexConn('campaign-participations').where({ id }).update({ deletedAt, deletedBy }); - }, +export { + hasAssessmentParticipations, + getCodeOfLastParticipationToProfilesCollectionCampaignForUser, + get, + update, + findProfilesCollectionResultDataByCampaignId, + findLatestOngoingByUserId, + findOneByCampaignIdAndUserId, + updateWithSnapshot, + isRetrying, + getAllParticipationsByCampaignId, + countParticipationsByStatus, + getAllCampaignParticipationsInCampaignForASameLearner, + remove, }; function _rowToResult(row) { diff --git a/api/lib/infrastructure/repositories/campaign-participation-result-repository.js b/api/lib/infrastructure/repositories/campaign-participation-result-repository.js index 9ed6b6595f6..99adfd2f787 100644 --- a/api/lib/infrastructure/repositories/campaign-participation-result-repository.js +++ b/api/lib/infrastructure/repositories/campaign-participation-result-repository.js @@ -1,10 +1,10 @@ -const CampaignParticipationResult = require('../../domain/models/CampaignParticipationResult.js'); -const campaignParticipationRepository = require('./campaign-participation-repository.js'); -const campaignRepository = require('./campaign-repository.js'); -const competenceRepository = require('./competence-repository.js'); -const areaRepository = require('./area-repository.js'); -const assessmentRepository = require('./assessment-repository.js'); -const knowledgeElementRepository = require('./knowledge-element-repository.js'); +import { CampaignParticipationResult } from '../../domain/models/CampaignParticipationResult.js'; +import * as campaignParticipationRepository from './campaign-participation-repository.js'; +import * as campaignRepository from './campaign-repository.js'; +import * as competenceRepository from './competence-repository.js'; +import * as areaRepository from './area-repository.js'; +import * as assessmentRepository from './assessment-repository.js'; +import * as knowledgeElementRepository from './knowledge-element-repository.js'; const campaignParticipationResultRepository = { async getByParticipationId(campaignParticipationId) { @@ -31,4 +31,4 @@ const campaignParticipationResultRepository = { }, }; -module.exports = campaignParticipationResultRepository; +export { campaignParticipationResultRepository }; diff --git a/api/lib/infrastructure/repositories/campaign-participations-stats-repository.js b/api/lib/infrastructure/repositories/campaign-participations-stats-repository.js index d36a3f1a8f7..45a809879c8 100644 --- a/api/lib/infrastructure/repositories/campaign-participations-stats-repository.js +++ b/api/lib/infrastructure/repositories/campaign-participations-stats-repository.js @@ -1,5 +1,5 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const CampaignParticipationStatuses = require('../../domain/models/CampaignParticipationStatuses.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { CampaignParticipationStatuses } from '../../domain/models/CampaignParticipationStatuses.js'; const { SHARED } = CampaignParticipationStatuses; @@ -36,4 +36,4 @@ async function _getCumulativeParticipationCountsByDay(campaignId, column) { return data.map(({ day, count }) => ({ day, count: Number(count) })); } -module.exports = CampaignParticipationsStatsRepository; +export { CampaignParticipationsStatsRepository }; diff --git a/api/lib/infrastructure/repositories/campaign-profile-repository.js b/api/lib/infrastructure/repositories/campaign-profile-repository.js index 6166435518a..d3980b4ee35 100644 --- a/api/lib/infrastructure/repositories/campaign-profile-repository.js +++ b/api/lib/infrastructure/repositories/campaign-profile-repository.js @@ -1,28 +1,28 @@ -const CampaignProfile = require('../../../lib/domain/read-models/CampaignProfile.js'); -const placementProfileService = require('../../domain/services/placement-profile-service.js'); -const { NotFoundError } = require('../../../lib/domain/errors.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const competenceRepository = require('./competence-repository.js'); -const areaRepository = require('./area-repository.js'); +import { CampaignProfile } from '../../../lib/domain/read-models/CampaignProfile.js'; +import * as placementProfileService from '../../domain/services/placement-profile-service.js'; +import { NotFoundError } from '../../../lib/domain/errors.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import * as competenceRepository from './competence-repository.js'; +import * as areaRepository from './area-repository.js'; -module.exports = { - async findProfile({ campaignId, campaignParticipationId, locale }) { - const profile = await _fetchCampaignProfileAttributesFromCampaignParticipation(campaignId, campaignParticipationId); - const competences = await competenceRepository.listPixCompetencesOnly({ locale }); - const allAreas = await areaRepository.list({ locale }); +const findProfile = async function ({ campaignId, campaignParticipationId, locale }) { + const profile = await _fetchCampaignProfileAttributesFromCampaignParticipation(campaignId, campaignParticipationId); + const competences = await competenceRepository.listPixCompetencesOnly({ locale }); + const allAreas = await areaRepository.list({ locale }); - const { sharedAt, userId } = profile; - const placementProfile = await placementProfileService.getPlacementProfileWithSnapshotting({ - userId, - limitDate: sharedAt, - allowExcessPixAndLevels: false, - competences, - }); + const { sharedAt, userId } = profile; + const placementProfile = await placementProfileService.getPlacementProfileWithSnapshotting({ + userId, + limitDate: sharedAt, + allowExcessPixAndLevels: false, + competences, + }); - return new CampaignProfile({ ...profile, placementProfile, allAreas }); - }, + return new CampaignProfile({ ...profile, placementProfile, allAreas }); }; +export { findProfile }; + async function _fetchCampaignProfileAttributesFromCampaignParticipation(campaignId, campaignParticipationId) { const [profile] = await knex .with('campaignProfile', (qb) => { diff --git a/api/lib/infrastructure/repositories/campaign-profiles-collection-participation-summary-repository.js b/api/lib/infrastructure/repositories/campaign-profiles-collection-participation-summary-repository.js index 5107877371e..92b4e2e633d 100644 --- a/api/lib/infrastructure/repositories/campaign-profiles-collection-participation-summary-repository.js +++ b/api/lib/infrastructure/repositories/campaign-profiles-collection-participation-summary-repository.js @@ -1,60 +1,61 @@ -const chunk = require('lodash/chunk'); -const bluebird = require('bluebird'); -const { knex } = require('../../../db/knex-database-connection.js'); -const placementProfileService = require('../../domain/services/placement-profile-service.js'); -const CampaignProfilesCollectionParticipationSummary = require('../../domain/read-models/CampaignProfilesCollectionParticipationSummary.js'); -const competenceRepository = require('../../infrastructure/repositories/competence-repository.js'); -const { constants } = require('../constants.js'); -const { fetchPage } = require('../utils/knex-utils.js'); -const { filterByFullName } = require('../utils/filter-utils.js'); - -const CampaignProfilesCollectionParticipationSummaryRepository = { - async findPaginatedByCampaignId(campaignId, page, filters = {}) { - const query = knex - .select( - 'campaign-participations.id AS campaignParticipationId', - 'campaign-participations.userId AS userId', - knex.raw('LOWER("view-active-organization-learners"."firstName") AS "lowerFirstName"'), - knex.raw('LOWER("view-active-organization-learners"."lastName") AS "lowerLastName"'), - 'view-active-organization-learners.firstName AS firstName', - 'view-active-organization-learners.lastName AS lastName', - 'campaign-participations.participantExternalId', - 'campaign-participations.sharedAt', - 'campaign-participations.pixScore AS pixScore' - ) - .from('campaign-participations') - .join( - 'view-active-organization-learners', - 'view-active-organization-learners.id', - 'campaign-participations.organizationLearnerId' - ) - .where('campaign-participations.campaignId', '=', campaignId) - .where('campaign-participations.isImproved', '=', false) - .where('campaign-participations.deletedAt', 'IS', null) - .whereRaw('"campaign-participations"."sharedAt" IS NOT NULL') - .orderByRaw('?? ASC, ?? ASC', ['lowerLastName', 'lowerFirstName']) - .modify(_filterQuery, filters); - - const { results, pagination } = await fetchPage(query, page); - - const getPlacementProfileForUser = await _makeMemoizedGetPlacementProfileForUser(results); - - const data = results.map((result) => { - if (!result.sharedAt) { - return new CampaignProfilesCollectionParticipationSummary(result); - } - - const placementProfile = getPlacementProfileForUser(result.userId); - - return new CampaignProfilesCollectionParticipationSummary({ - ...result, - certifiable: placementProfile.isCertifiable(), - certifiableCompetencesCount: placementProfile.getCertifiableCompetencesCount(), - }); +import lodash from 'lodash'; + +const { chunk } = lodash; + +import bluebird from 'bluebird'; +import { knex } from '../../../db/knex-database-connection.js'; +import * as placementProfileService from '../../domain/services/placement-profile-service.js'; +import { CampaignProfilesCollectionParticipationSummary } from '../../domain/read-models/CampaignProfilesCollectionParticipationSummary.js'; +import * as competenceRepository from '../../infrastructure/repositories/competence-repository.js'; +import { constants } from '../constants.js'; +import { fetchPage } from '../utils/knex-utils.js'; +import { filterByFullName } from '../utils/filter-utils.js'; + +const findPaginatedByCampaignId = async function (campaignId, page, filters = {}) { + const query = knex + .select( + 'campaign-participations.id AS campaignParticipationId', + 'campaign-participations.userId AS userId', + knex.raw('LOWER("view-active-organization-learners"."firstName") AS "lowerFirstName"'), + knex.raw('LOWER("view-active-organization-learners"."lastName") AS "lowerLastName"'), + 'view-active-organization-learners.firstName AS firstName', + 'view-active-organization-learners.lastName AS lastName', + 'campaign-participations.participantExternalId', + 'campaign-participations.sharedAt', + 'campaign-participations.pixScore AS pixScore' + ) + .from('campaign-participations') + .join( + 'view-active-organization-learners', + 'view-active-organization-learners.id', + 'campaign-participations.organizationLearnerId' + ) + .where('campaign-participations.campaignId', '=', campaignId) + .where('campaign-participations.isImproved', '=', false) + .where('campaign-participations.deletedAt', 'IS', null) + .whereRaw('"campaign-participations"."sharedAt" IS NOT NULL') + .orderByRaw('?? ASC, ?? ASC', ['lowerLastName', 'lowerFirstName']) + .modify(_filterQuery, filters); + + const { results, pagination } = await fetchPage(query, page); + + const getPlacementProfileForUser = await _makeMemoizedGetPlacementProfileForUser(results); + + const data = results.map((result) => { + if (!result.sharedAt) { + return new CampaignProfilesCollectionParticipationSummary(result); + } + + const placementProfile = getPlacementProfileForUser(result.userId); + + return new CampaignProfilesCollectionParticipationSummary({ + ...result, + certifiable: placementProfile.isCertifiable(), + certifiableCompetencesCount: placementProfile.getCertifiableCompetencesCount(), }); + }); - return { data, pagination }; - }, + return { data, pagination }; }; async function _makeMemoizedGetPlacementProfileForUser(results) { @@ -102,4 +103,4 @@ function _filterQuery(queryBuilder, filters) { } } -module.exports = CampaignProfilesCollectionParticipationSummaryRepository; +export { findPaginatedByCampaignId }; diff --git a/api/lib/infrastructure/repositories/campaign-report-repository.js b/api/lib/infrastructure/repositories/campaign-report-repository.js index e6cd83ce06c..12e3ba47f2b 100644 --- a/api/lib/infrastructure/repositories/campaign-report-repository.js +++ b/api/lib/infrastructure/repositories/campaign-report-repository.js @@ -1,13 +1,12 @@ -const { knex } = require('../../../db/knex-database-connection.js'); - -const CampaignReport = require('../../domain/read-models/CampaignReport.js'); -const TargetProfileForSpecifier = require('../../domain/read-models/campaign/TargetProfileForSpecifier.js'); -const CampaignParticipationStatuses = require('../../domain/models/CampaignParticipationStatuses.js'); -const { fetchPage } = require('../utils/knex-utils.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const _ = require('lodash'); -const { filterByFullName } = require('../utils/filter-utils.js'); -const campaignRepository = require('./campaign-repository.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { CampaignReport } from '../../domain/read-models/CampaignReport.js'; +import { TargetProfileForSpecifier } from '../../domain/read-models/campaign/TargetProfileForSpecifier.js'; +import { CampaignParticipationStatuses } from '../../domain/models/CampaignParticipationStatuses.js'; +import { fetchPage } from '../utils/knex-utils.js'; +import { NotFoundError } from '../../domain/errors.js'; +import _ from 'lodash'; +import { filterByFullName } from '../utils/filter-utils.js'; +import * as campaignRepository from './campaign-repository.js'; const { SHARED } = CampaignParticipationStatuses; @@ -28,116 +27,116 @@ function _setSearchFiltersForQueryBuilder(qb, { name, ongoing = true, ownerName, } } -module.exports = { - async get(id) { - const result = await knex('campaigns') - .select({ - id: 'campaigns.id', - name: 'campaigns.name', - code: 'campaigns.code', - title: 'campaigns.title', - idPixLabel: 'campaigns.idPixLabel', - createdAt: 'campaigns.createdAt', - customLandingPageText: 'campaigns.customLandingPageText', - archivedAt: 'campaigns.archivedAt', - type: 'campaigns.type', - ownerId: 'users.id', - ownerLastName: 'users.lastName', - ownerFirstName: 'users.firstName', - targetProfileId: 'target-profiles.id', - targetProfileDescription: 'target-profiles.description', - targetProfileName: 'target-profiles.name', - multipleSendings: 'campaigns.multipleSendings', - }) - .select( - knex.raw('ARRAY_AGG("badges"."id") AS "badgeIds"'), - knex.raw('ARRAY_AGG("stages"."id") AS "stageIds"'), - knex.raw( - '(SELECT COUNT(*) from "campaign-participations" WHERE "campaign-participations"."campaignId" = "campaigns"."id" AND "campaign-participations"."isImproved" IS FALSE AND "campaign-participations"."deletedAt" IS NULL) AS "participationsCount"' - ), - knex.raw( - '(SELECT COUNT(*) from "campaign-participations" WHERE "campaign-participations"."campaignId" = "campaigns"."id" AND "campaign-participations"."status" = \'SHARED\' AND "campaign-participations"."isImproved" IS FALSE AND "campaign-participations"."deletedAt" IS NULL) AS "sharedParticipationsCount"' - ) +const get = async function (id) { + const result = await knex('campaigns') + .select({ + id: 'campaigns.id', + name: 'campaigns.name', + code: 'campaigns.code', + title: 'campaigns.title', + idPixLabel: 'campaigns.idPixLabel', + createdAt: 'campaigns.createdAt', + customLandingPageText: 'campaigns.customLandingPageText', + archivedAt: 'campaigns.archivedAt', + type: 'campaigns.type', + ownerId: 'users.id', + ownerLastName: 'users.lastName', + ownerFirstName: 'users.firstName', + targetProfileId: 'target-profiles.id', + targetProfileDescription: 'target-profiles.description', + targetProfileName: 'target-profiles.name', + multipleSendings: 'campaigns.multipleSendings', + }) + .select( + knex.raw('ARRAY_AGG("badges"."id") AS "badgeIds"'), + knex.raw('ARRAY_AGG("stages"."id") AS "stageIds"'), + knex.raw( + '(SELECT COUNT(*) from "campaign-participations" WHERE "campaign-participations"."campaignId" = "campaigns"."id" AND "campaign-participations"."isImproved" IS FALSE AND "campaign-participations"."deletedAt" IS NULL) AS "participationsCount"' + ), + knex.raw( + '(SELECT COUNT(*) from "campaign-participations" WHERE "campaign-participations"."campaignId" = "campaigns"."id" AND "campaign-participations"."status" = \'SHARED\' AND "campaign-participations"."isImproved" IS FALSE AND "campaign-participations"."deletedAt" IS NULL) AS "sharedParticipationsCount"' ) - .join('users', 'users.id', 'campaigns.ownerId') - .leftJoin('target-profiles', 'target-profiles.id', 'campaigns.targetProfileId') - .leftJoin('badges', 'badges.targetProfileId', 'target-profiles.id') - .leftJoin('stages', 'stages.targetProfileId', 'target-profiles.id') - .where('campaigns.id', id) - .groupBy('campaigns.id', 'users.id', 'target-profiles.id') - .first(); - - if (!result) { - throw new NotFoundError(`La campagne d'id ${id} n'existe pas ou son accès est restreint`); - } - - const campaignReport = new CampaignReport({ ...result, id }); - - if (campaignReport.isAssessment) { - const skills = await campaignRepository.findSkills({ campaignId: id, filterByStatus: 'all' }); - - const targetProfile = new TargetProfileForSpecifier({ - id: result.targetProfileId, - name: result.targetProfileName, - tubeCount: _.uniqBy(skills, 'tubeId').length, - thematicResultCount: _.uniq(result.badgeIds).filter((id) => id).length, - hasStage: result.stageIds.some((stage) => stage), - description: result.targetProfileDescription, - }); - - campaignReport.setTargetProfileInformation(targetProfile); - } - - return campaignReport; - }, - - async findMasteryRatesAndValidatedSkillsCount(campaignId) { - const results = await knex('campaign-participations') - .select('masteryRate', 'validatedSkillsCount') - .where('isImproved', false) - .andWhere('status', SHARED) - .andWhere('deletedAt', null) - .andWhere({ campaignId }); - - const aggregatedResults = { - masteryRates: [], - validatedSkillsCounts: [], - }; - - results.forEach((result) => { - aggregatedResults.masteryRates.push(Number(result.masteryRate)); - aggregatedResults.validatedSkillsCounts.push(Number(result.validatedSkillsCount)); + ) + .join('users', 'users.id', 'campaigns.ownerId') + .leftJoin('target-profiles', 'target-profiles.id', 'campaigns.targetProfileId') + .leftJoin('badges', 'badges.targetProfileId', 'target-profiles.id') + .leftJoin('stages', 'stages.targetProfileId', 'target-profiles.id') + .where('campaigns.id', id) + .groupBy('campaigns.id', 'users.id', 'target-profiles.id') + .first(); + + if (!result) { + throw new NotFoundError(`La campagne d'id ${id} n'existe pas ou son accès est restreint`); + } + + const campaignReport = new CampaignReport({ ...result, id }); + + if (campaignReport.isAssessment) { + const skills = await campaignRepository.findSkills({ campaignId: id, filterByStatus: 'all' }); + + const targetProfile = new TargetProfileForSpecifier({ + id: result.targetProfileId, + name: result.targetProfileName, + tubeCount: _.uniqBy(skills, 'tubeId').length, + thematicResultCount: _.uniq(result.badgeIds).filter((id) => id).length, + hasStage: result.stageIds.some((stage) => stage), + description: result.targetProfileDescription, }); - return aggregatedResults; - }, - - async findPaginatedFilteredByOrganizationId({ organizationId, filter, page, userId }) { - const query = knex('campaigns') - .distinct('campaigns.id') - .select( - 'campaigns.*', - 'users.id AS "ownerId"', - 'users.firstName AS ownerFirstName', - 'users.lastName AS ownerLastName', - knex.raw( - 'COUNT(*) FILTER (WHERE "campaign-participations"."id" IS NOT NULL AND "campaign-participations"."isImproved" IS FALSE AND "campaign-participations"."deletedAt" IS NULL) OVER (partition by "campaigns"."id") AS "participationsCount"' - ), - knex.raw( - 'COUNT(*) FILTER (WHERE "campaign-participations"."id" IS NOT NULL AND "campaign-participations"."status" = \'SHARED\' AND "campaign-participations"."isImproved" IS FALSE AND "campaign-participations"."deletedAt" IS NULL) OVER (partition by "campaigns"."id") AS "sharedParticipationsCount"' - ) + campaignReport.setTargetProfileInformation(targetProfile); + } + + return campaignReport; +}; + +const findMasteryRatesAndValidatedSkillsCount = async function (campaignId) { + const results = await knex('campaign-participations') + .select('masteryRate', 'validatedSkillsCount') + .where('isImproved', false) + .andWhere('status', SHARED) + .andWhere('deletedAt', null) + .andWhere({ campaignId }); + + const aggregatedResults = { + masteryRates: [], + validatedSkillsCounts: [], + }; + + results.forEach((result) => { + aggregatedResults.masteryRates.push(Number(result.masteryRate)); + aggregatedResults.validatedSkillsCounts.push(Number(result.validatedSkillsCount)); + }); + + return aggregatedResults; +}; + +const findPaginatedFilteredByOrganizationId = async function ({ organizationId, filter, page, userId }) { + const query = knex('campaigns') + .distinct('campaigns.id') + .select( + 'campaigns.*', + 'users.id AS "ownerId"', + 'users.firstName AS ownerFirstName', + 'users.lastName AS ownerLastName', + knex.raw( + 'COUNT(*) FILTER (WHERE "campaign-participations"."id" IS NOT NULL AND "campaign-participations"."isImproved" IS FALSE AND "campaign-participations"."deletedAt" IS NULL) OVER (partition by "campaigns"."id") AS "participationsCount"' + ), + knex.raw( + 'COUNT(*) FILTER (WHERE "campaign-participations"."id" IS NOT NULL AND "campaign-participations"."status" = \'SHARED\' AND "campaign-participations"."isImproved" IS FALSE AND "campaign-participations"."deletedAt" IS NULL) OVER (partition by "campaigns"."id") AS "sharedParticipationsCount"' ) - .join('users', 'users.id', 'campaigns.ownerId') - .leftJoin('campaign-participations', 'campaign-participations.campaignId', 'campaigns.id') - .where('campaigns.organizationId', organizationId) - .modify(_setSearchFiltersForQueryBuilder, filter, userId) - .orderBy('campaigns.createdAt', 'DESC'); - - const { results, pagination } = await fetchPage(query, page); - const atLeastOneCampaign = await knex('campaigns').select('id').where({ organizationId }).first(1); - const hasCampaigns = Boolean(atLeastOneCampaign); - - const campaignReports = results.map((result) => new CampaignReport(result)); - return { models: campaignReports, meta: { ...pagination, hasCampaigns } }; - }, + ) + .join('users', 'users.id', 'campaigns.ownerId') + .leftJoin('campaign-participations', 'campaign-participations.campaignId', 'campaigns.id') + .where('campaigns.organizationId', organizationId) + .modify(_setSearchFiltersForQueryBuilder, filter, userId) + .orderBy('campaigns.createdAt', 'DESC'); + + const { results, pagination } = await fetchPage(query, page); + const atLeastOneCampaign = await knex('campaigns').select('id').where({ organizationId }).first(1); + const hasCampaigns = Boolean(atLeastOneCampaign); + + const campaignReports = results.map((result) => new CampaignReport(result)); + return { models: campaignReports, meta: { ...pagination, hasCampaigns } }; }; + +export { get, findMasteryRatesAndValidatedSkillsCount, findPaginatedFilteredByOrganizationId }; diff --git a/api/lib/infrastructure/repositories/campaign-repository.js b/api/lib/infrastructure/repositories/campaign-repository.js index 1ae99f9b878..bd38a065705 100644 --- a/api/lib/infrastructure/repositories/campaign-repository.js +++ b/api/lib/infrastructure/repositories/campaign-repository.js @@ -1,159 +1,174 @@ -const _ = require('lodash'); -const { NotFoundError } = require('../../domain/errors.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const Campaign = require('../../domain/models/Campaign.js'); -const skillRepository = require('./skill-repository.js'); +import _ from 'lodash'; +import { NotFoundError } from '../../domain/errors.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { Campaign } from '../../domain/models/Campaign.js'; +import * as skillRepository from './skill-repository.js'; const CAMPAIGNS_TABLE = 'campaigns'; -module.exports = { - async isCodeAvailable(code) { - return !(await knex('campaigns').first('id').where({ code })); - }, - - async getByCode(code) { - const campaign = await knex('campaigns').first().where({ code }); - if (!campaign) return null; - return new Campaign({ ...campaign, organization: { id: campaign.organizationId } }); - }, - - async get(id) { - const campaign = await knex('campaigns').where({ id }).first(); - if (!campaign) { - throw new NotFoundError(`Not found campaign for ID ${id}`); - } - return new Campaign({ - ...campaign, - organization: { id: campaign.organizationId }, - targetProfile: { id: campaign.targetProfileId }, - creator: { id: campaign.creatorId }, - }); - }, - - async save(campaign) { - const trx = await knex.transaction(); - const campaignAttributes = _.pick(campaign, [ - 'name', - 'code', - 'title', - 'type', - 'idPixLabel', - 'customLandingPageText', - 'creatorId', - 'ownerId', - 'organizationId', - 'targetProfileId', - 'multipleSendings', - ]); - try { - const [createdCampaignDTO] = await trx(CAMPAIGNS_TABLE).insert(campaignAttributes).returning('*'); - const createdCampaign = new Campaign(createdCampaignDTO); - if (createdCampaign.isAssessment()) { - const cappedTubes = await trx('target-profile_tubes') - .select('tubeId', 'level') - .where('targetProfileId', campaignAttributes.targetProfileId); - const skillData = []; - for (const cappedTube of cappedTubes) { - const allLevelSkills = await skillRepository.findActiveByTubeId(cappedTube.tubeId); - const rightLevelSkills = allLevelSkills.filter((skill) => skill.difficulty <= cappedTube.level); - skillData.push(...rightLevelSkills.map((skill) => ({ skillId: skill.id, campaignId: createdCampaign.id }))); - } - await trx.batchInsert('campaign_skills', skillData); +const isCodeAvailable = async function (code) { + return !(await knex('campaigns').first('id').where({ code })); +}; + +const getByCode = async function (code) { + const campaign = await knex('campaigns').first().where({ code }); + if (!campaign) return null; + return new Campaign({ ...campaign, organization: { id: campaign.organizationId } }); +}; + +const get = async function (id) { + const campaign = await knex('campaigns').where({ id }).first(); + if (!campaign) { + throw new NotFoundError(`Not found campaign for ID ${id}`); + } + return new Campaign({ + ...campaign, + organization: { id: campaign.organizationId }, + targetProfile: { id: campaign.targetProfileId }, + creator: { id: campaign.creatorId }, + }); +}; + +const save = async function (campaign, dependencies = { skillRepository }) { + const trx = await knex.transaction(); + const campaignAttributes = _.pick(campaign, [ + 'name', + 'code', + 'title', + 'type', + 'idPixLabel', + 'customLandingPageText', + 'creatorId', + 'ownerId', + 'organizationId', + 'targetProfileId', + 'multipleSendings', + ]); + try { + const [createdCampaignDTO] = await trx(CAMPAIGNS_TABLE).insert(campaignAttributes).returning('*'); + const createdCampaign = new Campaign(createdCampaignDTO); + if (createdCampaign.isAssessment()) { + const cappedTubes = await trx('target-profile_tubes') + .select('tubeId', 'level') + .where('targetProfileId', campaignAttributes.targetProfileId); + const skillData = []; + for (const cappedTube of cappedTubes) { + const allLevelSkills = await dependencies.skillRepository.findActiveByTubeId(cappedTube.tubeId); + const rightLevelSkills = allLevelSkills.filter((skill) => skill.difficulty <= cappedTube.level); + skillData.push(...rightLevelSkills.map((skill) => ({ skillId: skill.id, campaignId: createdCampaign.id }))); } - await trx.commit(); - return createdCampaign; - } catch (err) { - await trx.rollback(); - throw err; + await trx.batchInsert('campaign_skills', skillData); } - }, - - async update(campaign) { - const editedAttributes = _.pick(campaign, [ - 'name', - 'title', - 'customLandingPageText', - 'archivedAt', - 'archivedBy', - 'ownerId', - ]); - - const [editedCampaign] = await knex('campaigns').update(editedAttributes).where({ id: campaign.id }).returning('*'); - - return new Campaign(editedCampaign); - }, - - async checkIfUserOrganizationHasAccessToCampaign(campaignId, userId) { - const campaign = await knex('campaigns') - .innerJoin('memberships', 'memberships.organizationId', 'campaigns.organizationId') - .innerJoin('organizations', 'organizations.id', 'campaigns.organizationId') - .where({ 'campaigns.id': campaignId, 'memberships.userId': userId, 'memberships.disabledAt': null }) - .first('campaigns.id'); - return Boolean(campaign); - }, - - async checkIfCampaignIsArchived(campaignId) { - const { archivedAt } = await knex('campaigns').where({ id: campaignId }).first('archivedAt'); - return Boolean(archivedAt); - }, - - async getCampaignTitleByCampaignParticipationId(campaignParticipationId) { - const campaign = await knex('campaigns') - .select('title') - .join('campaign-participations', 'campaign-participations.campaignId', 'campaigns.id') - .where({ 'campaign-participations.id': campaignParticipationId }) - .first(); - - if (!campaign) return null; - return campaign.title; - }, - - async getCampaignCodeByCampaignParticipationId(campaignParticipationId) { - const campaign = await knex('campaigns') - .select('code') - .join('campaign-participations', 'campaign-participations.campaignId', 'campaigns.id') - .where({ 'campaign-participations.id': campaignParticipationId }) - .first(); - - if (!campaign) return null; - return campaign.code; - }, - - async getCampaignIdByCampaignParticipationId(campaignParticipationId) { - const campaign = await knex('campaigns') - .select('campaigns.id') - .join('campaign-participations', 'campaign-participations.campaignId', 'campaigns.id') - .where({ 'campaign-participations.id': campaignParticipationId }) - .first(); - - if (!campaign) return null; - return campaign.id; - }, - - async findSkillIds({ campaignId, domainTransaction, filterByStatus = 'operative' }) { - if (filterByStatus === 'all') { - return _findSkillIds({ campaignId, domainTransaction }); - } - const skills = await this.findSkills({ campaignId, domainTransaction, filterByStatus }); - return skills.map(({ id }) => id); - }, - - findSkills({ campaignId, domainTransaction, filterByStatus }) { - return _findSkills({ campaignId, domainTransaction, filterByStatus }); - }, - - async findSkillsByCampaignParticipationId({ campaignParticipationId, domainTransaction }) { - const knexConn = domainTransaction?.knexTransaction ?? knex; - const [campaignId] = await knexConn('campaign-participations') - .where({ id: campaignParticipationId }) - .pluck('campaignId'); - return this.findSkills({ campaignId }); - }, - - async findSkillIdsByCampaignParticipationId({ campaignParticipationId, domainTransaction }) { - const skills = await this.findSkillsByCampaignParticipationId({ campaignParticipationId, domainTransaction }); - return skills.map(({ id }) => id); - }, + await trx.commit(); + return createdCampaign; + } catch (err) { + await trx.rollback(); + throw err; + } +}; + +const update = async function (campaign) { + const editedAttributes = _.pick(campaign, [ + 'name', + 'title', + 'customLandingPageText', + 'archivedAt', + 'archivedBy', + 'ownerId', + ]); + + const [editedCampaign] = await knex('campaigns').update(editedAttributes).where({ id: campaign.id }).returning('*'); + + return new Campaign(editedCampaign); +}; + +const checkIfUserOrganizationHasAccessToCampaign = async function (campaignId, userId) { + const campaign = await knex('campaigns') + .innerJoin('memberships', 'memberships.organizationId', 'campaigns.organizationId') + .innerJoin('organizations', 'organizations.id', 'campaigns.organizationId') + .where({ 'campaigns.id': campaignId, 'memberships.userId': userId, 'memberships.disabledAt': null }) + .first('campaigns.id'); + return Boolean(campaign); +}; + +const checkIfCampaignIsArchived = async function (campaignId) { + const { archivedAt } = await knex('campaigns').where({ id: campaignId }).first('archivedAt'); + return Boolean(archivedAt); +}; + +const getCampaignTitleByCampaignParticipationId = async function (campaignParticipationId) { + const campaign = await knex('campaigns') + .select('title') + .join('campaign-participations', 'campaign-participations.campaignId', 'campaigns.id') + .where({ 'campaign-participations.id': campaignParticipationId }) + .first(); + + if (!campaign) return null; + return campaign.title; +}; + +const getCampaignCodeByCampaignParticipationId = async function (campaignParticipationId) { + const campaign = await knex('campaigns') + .select('code') + .join('campaign-participations', 'campaign-participations.campaignId', 'campaigns.id') + .where({ 'campaign-participations.id': campaignParticipationId }) + .first(); + + if (!campaign) return null; + return campaign.code; +}; + +const getCampaignIdByCampaignParticipationId = async function (campaignParticipationId) { + const campaign = await knex('campaigns') + .select('campaigns.id') + .join('campaign-participations', 'campaign-participations.campaignId', 'campaigns.id') + .where({ 'campaign-participations.id': campaignParticipationId }) + .first(); + + if (!campaign) return null; + return campaign.id; +}; + +const findSkillIds = async function ({ campaignId, domainTransaction, filterByStatus = 'operative' }) { + if (filterByStatus === 'all') { + return _findSkillIds({ campaignId, domainTransaction }); + } + const skills = await this.findSkills({ campaignId, domainTransaction, filterByStatus }); + return skills.map(({ id }) => id); +}; + +const findSkills = function ({ campaignId, domainTransaction, filterByStatus }) { + return _findSkills({ campaignId, domainTransaction, filterByStatus }); +}; + +const findSkillsByCampaignParticipationId = async function ({ campaignParticipationId, domainTransaction }) { + const knexConn = domainTransaction?.knexTransaction ?? knex; + const [campaignId] = await knexConn('campaign-participations') + .where({ id: campaignParticipationId }) + .pluck('campaignId'); + return this.findSkills({ campaignId }); +}; + +const findSkillIdsByCampaignParticipationId = async function ({ campaignParticipationId, domainTransaction }) { + const skills = await this.findSkillsByCampaignParticipationId({ campaignParticipationId, domainTransaction }); + return skills.map(({ id }) => id); +}; + +export { + isCodeAvailable, + getByCode, + get, + save, + update, + checkIfUserOrganizationHasAccessToCampaign, + checkIfCampaignIsArchived, + getCampaignTitleByCampaignParticipationId, + getCampaignCodeByCampaignParticipationId, + getCampaignIdByCampaignParticipationId, + findSkillIds, + findSkills, + findSkillsByCampaignParticipationId, + findSkillIdsByCampaignParticipationId, }; async function _findSkills({ campaignId, domainTransaction, filterByStatus = 'operative' }) { diff --git a/api/lib/infrastructure/repositories/campaign-to-join-repository.js b/api/lib/infrastructure/repositories/campaign-to-join-repository.js index 2b9d7596471..28143fd980b 100644 --- a/api/lib/infrastructure/repositories/campaign-to-join-repository.js +++ b/api/lib/infrastructure/repositories/campaign-to-join-repository.js @@ -1,61 +1,61 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const CampaignToJoin = require('../../domain/read-models/CampaignToJoin.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const DomainTransaction = require('../DomainTransaction.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { CampaignToJoin } from '../../domain/read-models/CampaignToJoin.js'; +import { NotFoundError } from '../../domain/errors.js'; +import { DomainTransaction } from '../DomainTransaction.js'; -module.exports = { - async get(id, domainTransaction = DomainTransaction.emptyTransaction()) { - const knexConn = domainTransaction.knexTransaction || knex; - const result = await knexConn('campaigns') - .select('campaigns.*') - .select({ - organizationId: 'organizations.id', - organizationName: 'organizations.name', - organizationType: 'organizations.type', - organizationLogoUrl: 'organizations.logoUrl', - organizationIsManagingStudents: 'organizations.isManagingStudents', - organizationShowNPS: 'organizations.showNPS', - organizationFormNPSUrl: 'organizations.formNPSUrl', - targetProfileName: 'target-profiles.name', - targetProfileImageUrl: 'target-profiles.imageUrl', - }) - .join('organizations', 'organizations.id', 'campaigns.organizationId') - .leftJoin('target-profiles', 'target-profiles.id', 'campaigns.targetProfileId') - .where('campaigns.id', id) - .first(); +const get = async function (id, domainTransaction = DomainTransaction.emptyTransaction()) { + const knexConn = domainTransaction.knexTransaction || knex; + const result = await knexConn('campaigns') + .select('campaigns.*') + .select({ + organizationId: 'organizations.id', + organizationName: 'organizations.name', + organizationType: 'organizations.type', + organizationLogoUrl: 'organizations.logoUrl', + organizationIsManagingStudents: 'organizations.isManagingStudents', + organizationShowNPS: 'organizations.showNPS', + organizationFormNPSUrl: 'organizations.formNPSUrl', + targetProfileName: 'target-profiles.name', + targetProfileImageUrl: 'target-profiles.imageUrl', + }) + .join('organizations', 'organizations.id', 'campaigns.organizationId') + .leftJoin('target-profiles', 'target-profiles.id', 'campaigns.targetProfileId') + .where('campaigns.id', id) + .first(); - if (!result) { - throw new NotFoundError(`La campagne d'id ${id} n'existe pas ou son accès est restreint`); - } + if (!result) { + throw new NotFoundError(`La campagne d'id ${id} n'existe pas ou son accès est restreint`); + } - return new CampaignToJoin(result); - }, + return new CampaignToJoin(result); +}; - async getByCode(code) { - const result = await knex('campaigns') - .select('campaigns.*') - .select({ - organizationId: 'organizations.id', - organizationName: 'organizations.name', - organizationType: 'organizations.type', - organizationLogoUrl: 'organizations.logoUrl', - organizationIsManagingStudents: 'organizations.isManagingStudents', - organizationShowNPS: 'organizations.showNPS', - organizationFormNPSUrl: 'organizations.formNPSUrl', - targetProfileName: 'target-profiles.name', - targetProfileImageUrl: 'target-profiles.imageUrl', - targetProfileIsSimplifiedAccess: 'target-profiles.isSimplifiedAccess', - identityProvider: 'organizations.identityProviderForCampaigns', - }) - .join('organizations', 'organizations.id', 'campaigns.organizationId') - .leftJoin('target-profiles', 'target-profiles.id', 'campaigns.targetProfileId') - .where('campaigns.code', code) - .first(); +const getByCode = async function (code) { + const result = await knex('campaigns') + .select('campaigns.*') + .select({ + organizationId: 'organizations.id', + organizationName: 'organizations.name', + organizationType: 'organizations.type', + organizationLogoUrl: 'organizations.logoUrl', + organizationIsManagingStudents: 'organizations.isManagingStudents', + organizationShowNPS: 'organizations.showNPS', + organizationFormNPSUrl: 'organizations.formNPSUrl', + targetProfileName: 'target-profiles.name', + targetProfileImageUrl: 'target-profiles.imageUrl', + targetProfileIsSimplifiedAccess: 'target-profiles.isSimplifiedAccess', + identityProvider: 'organizations.identityProviderForCampaigns', + }) + .join('organizations', 'organizations.id', 'campaigns.organizationId') + .leftJoin('target-profiles', 'target-profiles.id', 'campaigns.targetProfileId') + .where('campaigns.code', code) + .first(); - if (!result) { - throw new NotFoundError(`La campagne au code ${code} n'existe pas ou son accès est restreint`); - } + if (!result) { + throw new NotFoundError(`La campagne au code ${code} n'existe pas ou son accès est restreint`); + } - return new CampaignToJoin(result); - }, + return new CampaignToJoin(result); }; + +export { get, getByCode }; diff --git a/api/lib/infrastructure/repositories/campaign/campaign-for-archiving-repository.js b/api/lib/infrastructure/repositories/campaign/campaign-for-archiving-repository.js index 5865076ecf0..bf53ebe0b21 100644 --- a/api/lib/infrastructure/repositories/campaign/campaign-for-archiving-repository.js +++ b/api/lib/infrastructure/repositories/campaign/campaign-for-archiving-repository.js @@ -1,8 +1,7 @@ -const { knex } = require('../../../../db/knex-database-connection.js'); -const Campaign = require('../../../domain/models/CampaignForArchiving.js'); -const knexUtils = require('../../utils/knex-utils.js'); - -const { NotFoundError, UserNotFoundError } = require('../../../domain/errors.js'); +import { knex } from '../../../../db/knex-database-connection.js'; +import { CampaignForArchiving } from '../../../domain/models/CampaignForArchiving.js'; +import * as knexUtils from '../../utils/knex-utils.js'; +import { NotFoundError, UserNotFoundError } from '../../../domain/errors.js'; async function save(campaign) { try { @@ -19,7 +18,7 @@ async function getByCode(code) { if (!row) { throw new NotFoundError('Campaign Not Found'); } - return new Campaign(row); + return new CampaignForArchiving(row); } async function get(id) { @@ -27,11 +26,7 @@ async function get(id) { if (!row) { throw new NotFoundError(); } - return new Campaign(row); + return new CampaignForArchiving(row); } -module.exports = { - save, - getByCode, - get, -}; +export { save, getByCode, get }; diff --git a/api/lib/infrastructure/repositories/campaign/target-profile-for-specifier-repository.js b/api/lib/infrastructure/repositories/campaign/target-profile-for-specifier-repository.js index df2e2901096..e26d0d19cdb 100644 --- a/api/lib/infrastructure/repositories/campaign/target-profile-for-specifier-repository.js +++ b/api/lib/infrastructure/repositories/campaign/target-profile-for-specifier-repository.js @@ -1,6 +1,6 @@ -const { knex } = require('../../../../db/knex-database-connection.js'); -const TargetProfileForSpecifier = require('../../../domain/read-models/campaign/TargetProfileForSpecifier.js'); -const bluebird = require('bluebird'); +import { knex } from '../../../../db/knex-database-connection.js'; +import { TargetProfileForSpecifier } from '../../../domain/read-models/campaign/TargetProfileForSpecifier.js'; +import bluebird from 'bluebird'; async function availableForOrganization(organizationId) { const targetProfileRows = await _fetchTargetProfiles(organizationId); @@ -51,6 +51,4 @@ async function _buildTargetProfileForSpecifier(row) { }); } -module.exports = { - availableForOrganization, -}; +export { availableForOrganization }; diff --git a/api/lib/infrastructure/repositories/campaigns-administration/campaign-repository.js b/api/lib/infrastructure/repositories/campaigns-administration/campaign-repository.js index 07ca2bb3198..215ab3d3c8a 100644 --- a/api/lib/infrastructure/repositories/campaigns-administration/campaign-repository.js +++ b/api/lib/infrastructure/repositories/campaigns-administration/campaign-repository.js @@ -1,10 +1,10 @@ -const { knex } = require('../../../../db/knex-database-connection.js'); +import { knex } from '../../../../db/knex-database-connection.js'; -module.exports = { - archiveCampaigns(campaignIds, userId) { - return knex('campaigns').whereNull('archivedAt').whereInArray('id', campaignIds).update({ - archivedBy: userId, - archivedAt: new Date(), - }); - }, +const archiveCampaigns = function (campaignIds, userId) { + return knex('campaigns').whereNull('archivedAt').whereInArray('id', campaignIds).update({ + archivedBy: userId, + archivedAt: new Date(), + }); }; + +export { archiveCampaigns }; diff --git a/api/lib/infrastructure/repositories/certifiable-badge-acquisition-repository.js b/api/lib/infrastructure/repositories/certifiable-badge-acquisition-repository.js index d763e22bcc5..71f4b1c1f47 100644 --- a/api/lib/infrastructure/repositories/certifiable-badge-acquisition-repository.js +++ b/api/lib/infrastructure/repositories/certifiable-badge-acquisition-repository.js @@ -1,61 +1,61 @@ -const CertifiableBadgeAcquisition = require('../../domain/models/CertifiableBadgeAcquisition.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const DomainTransaction = require('../DomainTransaction.js'); -const _ = require('lodash'); +import { CertifiableBadgeAcquisition } from '../../domain/models/CertifiableBadgeAcquisition.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import _ from 'lodash'; const BADGE_ACQUISITIONS_TABLE = 'badge-acquisitions'; -module.exports = { - async findHighestCertifiable({ userId, domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConn = domainTransaction.knexTransaction || knex; - const certifiableBadgeAcquisitions = await knexConn(BADGE_ACQUISITIONS_TABLE) - .select({ - badgeId: 'badges.id', - badgeKey: 'badges.key', - campaignId: 'campaign-participations.campaignId', - complementaryCertificationId: 'complementary-certifications.id', - complementaryCertificationKey: 'complementary-certifications.key', - complementaryCertificationBadgeId: 'complementary-certification-badges.id', - complementaryCertificationBadgeImageUrl: 'complementary-certification-badges.imageUrl', - complementaryCertificationBadgeLabel: 'complementary-certification-badges.label', - complementaryCertificationBadgeLevel: 'complementary-certification-badges.level', - }) - .join('badges', 'badges.id', 'badge-acquisitions.badgeId') - .join('complementary-certification-badges', 'badges.id', 'complementary-certification-badges.badgeId') - .join( - 'complementary-certifications', - 'complementary-certifications.id', - 'complementary-certification-badges.complementaryCertificationId' - ) - .join('campaign-participations', 'campaign-participations.id', 'badge-acquisitions.campaignParticipationId') - .where({ - 'badge-acquisitions.userId': userId, - 'badges.isCertifiable': true, - }) - .whereRaw( - `"badge-acquisitions"."createdAt" = - (select max(ba."createdAt") from "complementary-certification-badges" ccb - join "badges" b on ccb."badgeId" = b.id - join "badge-acquisitions" ba on ba."badgeId" = b.id - where "complementary-certification-badges"."complementaryCertificationId" = ccb."complementaryCertificationId" - and ba."userId" = ? and b."isCertifiable" = true) - `, - userId - ); +const findHighestCertifiable = async function ({ userId, domainTransaction = DomainTransaction.emptyTransaction() }) { + const knexConn = domainTransaction.knexTransaction || knex; + const certifiableBadgeAcquisitions = await knexConn(BADGE_ACQUISITIONS_TABLE) + .select({ + badgeId: 'badges.id', + badgeKey: 'badges.key', + campaignId: 'campaign-participations.campaignId', + complementaryCertificationId: 'complementary-certifications.id', + complementaryCertificationKey: 'complementary-certifications.key', + complementaryCertificationBadgeId: 'complementary-certification-badges.id', + complementaryCertificationBadgeImageUrl: 'complementary-certification-badges.imageUrl', + complementaryCertificationBadgeLabel: 'complementary-certification-badges.label', + complementaryCertificationBadgeLevel: 'complementary-certification-badges.level', + }) + .join('badges', 'badges.id', 'badge-acquisitions.badgeId') + .join('complementary-certification-badges', 'badges.id', 'complementary-certification-badges.badgeId') + .join( + 'complementary-certifications', + 'complementary-certifications.id', + 'complementary-certification-badges.complementaryCertificationId' + ) + .join('campaign-participations', 'campaign-participations.id', 'badge-acquisitions.campaignParticipationId') + .where({ + 'badge-acquisitions.userId': userId, + 'badges.isCertifiable': true, + }) + .whereRaw( + `"badge-acquisitions"."createdAt" = + (select max(ba."createdAt") from "complementary-certification-badges" ccb + join "badges" b on ccb."badgeId" = b.id + join "badge-acquisitions" ba on ba."badgeId" = b.id + where "complementary-certification-badges"."complementaryCertificationId" = ccb."complementaryCertificationId" + and ba."userId" = ? and b."isCertifiable" = true) + `, + userId + ); - const highestCertifiableBadgeAcquisitionByComplementaryCertificationId = _(certifiableBadgeAcquisitions) - .groupBy('complementaryCertificationId') - .values() - .map((certifiableBadgeAcquisitionByComplementaryCertifications) => - _.maxBy(certifiableBadgeAcquisitionByComplementaryCertifications, 'complementaryCertificationBadgeLevel') - ) - .flatten() - .value(); + const highestCertifiableBadgeAcquisitionByComplementaryCertificationId = _(certifiableBadgeAcquisitions) + .groupBy('complementaryCertificationId') + .values() + .map((certifiableBadgeAcquisitionByComplementaryCertifications) => + _.maxBy(certifiableBadgeAcquisitionByComplementaryCertifications, 'complementaryCertificationBadgeLevel') + ) + .flatten() + .value(); - return _toDomain(highestCertifiableBadgeAcquisitionByComplementaryCertificationId); - }, + return _toDomain(highestCertifiableBadgeAcquisitionByComplementaryCertificationId); }; +export { findHighestCertifiable }; + function _toDomain(certifiableBadgeAcquisitionsDto) { return certifiableBadgeAcquisitionsDto.map( (certifiableBadgeAcquisitionDto) => new CertifiableBadgeAcquisition(certifiableBadgeAcquisitionDto) diff --git a/api/lib/infrastructure/repositories/certifiable-profile-for-learning-content-repository.js b/api/lib/infrastructure/repositories/certifiable-profile-for-learning-content-repository.js index 4c5fc230a40..a92ecf616bb 100644 --- a/api/lib/infrastructure/repositories/certifiable-profile-for-learning-content-repository.js +++ b/api/lib/infrastructure/repositories/certifiable-profile-for-learning-content-repository.js @@ -1,24 +1,24 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const CertifiableProfileForLearningContent = require('../../domain/models/CertifiableProfileForLearningContent.js'); -const knowledgeElementRepository = require('./knowledge-element-repository.js'); +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; +import { CertifiableProfileForLearningContent } from '../../domain/models/CertifiableProfileForLearningContent.js'; +import * as knowledgeElementRepository from './knowledge-element-repository.js'; -module.exports = { - async get({ id, profileDate, learningContent }) { - const knowledgeElements = await knowledgeElementRepository.findUniqByUserId({ userId: id, limitDate: profileDate }); - const answerIds = _.map(knowledgeElements, 'answerId'); - const answerAndChallengeIds = await knex - .select('answers.id', 'answers.challengeId') - .from('answers') - .whereIn('id', answerIds); - const answerAndChallengeIdsByAnswerId = _.keyBy(answerAndChallengeIds, 'id'); +const get = async function ({ id, profileDate, learningContent }) { + const knowledgeElements = await knowledgeElementRepository.findUniqByUserId({ userId: id, limitDate: profileDate }); + const answerIds = _.map(knowledgeElements, 'answerId'); + const answerAndChallengeIds = await knex + .select('answers.id', 'answers.challengeId') + .from('answers') + .whereIn('id', answerIds); + const answerAndChallengeIdsByAnswerId = _.keyBy(answerAndChallengeIds, 'id'); - return new CertifiableProfileForLearningContent({ - userId: id, - profileDate, - learningContent, - knowledgeElements, - answerAndChallengeIdsByAnswerId, - }); - }, + return new CertifiableProfileForLearningContent({ + userId: id, + profileDate, + learningContent, + knowledgeElements, + answerAndChallengeIdsByAnswerId, + }); }; + +export { get }; diff --git a/api/lib/infrastructure/repositories/certificate-repository.js b/api/lib/infrastructure/repositories/certificate-repository.js index 21e0c7bf21d..1f98ff8ddef 100644 --- a/api/lib/infrastructure/repositories/certificate-repository.js +++ b/api/lib/infrastructure/repositories/certificate-repository.js @@ -1,128 +1,129 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const PrivateCertificate = require('../../domain/models/PrivateCertificate.js'); -const ShareableCertificate = require('../../domain/models/ShareableCertificate.js'); -const CertificationAttestation = require('../../domain/models/CertificationAttestation.js'); -const CertifiedBadge = require('../../../lib/domain/read-models/CertifiedBadge.js'); -const { NotFoundError } = require('../../../lib/domain/errors.js'); -const competenceTreeRepository = require('./competence-tree-repository.js'); -const ResultCompetenceTree = require('../../domain/models/ResultCompetenceTree.js'); -const CompetenceMark = require('../../domain/models/CompetenceMark.js'); -const AssessmentResult = require('../../domain/models/AssessmentResult.js'); - -module.exports = { - async getPrivateCertificate(id, { locale } = {}) { - const certificationCourseDTO = await _selectPrivateCertificates() - .where('certification-courses.id', '=', id) - .groupBy('certification-courses.id', 'sessions.id', 'assessment-results.id') - .where('certification-courses.isPublished', true) - .where('certification-courses.isCancelled', false) - .where('assessment-results.status', AssessmentResult.status.VALIDATED) - .first(); - - if (!certificationCourseDTO) { - throw new NotFoundError(`Certificate not found for ID ${id}`); - } - - const certifiedBadges = await _getCertifiedBadges(id); - - const competenceTree = await competenceTreeRepository.get({ locale }); - - return _toDomainForPrivateCertificate({ +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; +import { PrivateCertificate } from '../../domain/models/PrivateCertificate.js'; +import { ShareableCertificate } from '../../domain/models/ShareableCertificate.js'; +import { CertificationAttestation } from '../../domain/models/CertificationAttestation.js'; +import { CertifiedBadge } from '../../../lib/domain/read-models/CertifiedBadge.js'; +import { NotFoundError } from '../../../lib/domain/errors.js'; +import * as competenceTreeRepository from './competence-tree-repository.js'; +import { ResultCompetenceTree } from '../../domain/models/ResultCompetenceTree.js'; +import { CompetenceMark } from '../../domain/models/CompetenceMark.js'; +import { AssessmentResult } from '../../domain/models/AssessmentResult.js'; + +const getPrivateCertificate = async function (id, { locale } = {}) { + const certificationCourseDTO = await _selectPrivateCertificates() + .where('certification-courses.id', '=', id) + .groupBy('certification-courses.id', 'sessions.id', 'assessment-results.id') + .where('certification-courses.isPublished', true) + .where('certification-courses.isCancelled', false) + .where('assessment-results.status', AssessmentResult.status.VALIDATED) + .first(); + + if (!certificationCourseDTO) { + throw new NotFoundError(`Certificate not found for ID ${id}`); + } + + const certifiedBadges = await _getCertifiedBadges(id); + + const competenceTree = await competenceTreeRepository.get({ locale }); + + return _toDomainForPrivateCertificate({ + certificationCourseDTO, + competenceTree, + certifiedBadges, + }); +}; + +const findPrivateCertificatesByUserId = async function ({ userId }) { + const certificationCourseDTOs = await _selectPrivateCertificates() + .where('certification-courses.userId', '=', userId) + .groupBy('certification-courses.id', 'sessions.id', 'assessment-results.id') + .orderBy('certification-courses.createdAt', 'DESC'); + + const privateCertificates = certificationCourseDTOs.map((certificationCourseDTO) => + _toDomainForPrivateCertificate({ certificationCourseDTO, - competenceTree, - certifiedBadges, - }); - }, - - async findPrivateCertificatesByUserId({ userId }) { - const certificationCourseDTOs = await _selectPrivateCertificates() - .where('certification-courses.userId', '=', userId) - .groupBy('certification-courses.id', 'sessions.id', 'assessment-results.id') - .orderBy('certification-courses.createdAt', 'DESC'); - - const privateCertificates = certificationCourseDTOs.map((certificationCourseDTO) => - _toDomainForPrivateCertificate({ - certificationCourseDTO, - }) - ); - return privateCertificates; - }, - - async getShareableCertificateByVerificationCode(verificationCode, { locale } = {}) { - const shareableCertificateDTO = await _selectShareableCertificates() - .groupBy('certification-courses.id', 'sessions.id', 'assessment-results.id') - .where({ verificationCode }) - .first(); - - if (!shareableCertificateDTO) { - throw new NotFoundError(`There is no certification course with verification code "${verificationCode}"`); - } - - const competenceTree = await competenceTreeRepository.get({ locale }); - - const certifiedBadges = await _getCertifiedBadges(shareableCertificateDTO.id); - - return _toDomainForShareableCertificate({ shareableCertificateDTO, competenceTree, certifiedBadges }); - }, - - async getCertificationAttestation(id) { - const certificationCourseDTO = await _selectCertificationAttestations() - .where('certification-courses.id', '=', id) - .groupBy('certification-courses.id', 'sessions.id', 'assessment-results.id') - .first(); - - if (!certificationCourseDTO) { - throw new NotFoundError(`There is no certification course with id "${id}"`); - } - - const competenceTree = await competenceTreeRepository.get(); - const certifiedBadges = await _getCertifiedBadges(certificationCourseDTO.id); - - return _toDomainForCertificationAttestation({ certificationCourseDTO, competenceTree, certifiedBadges }); - }, - - async findByDivisionForScoIsManagingStudentsOrganization({ organizationId, division }) { - const certificationCourseDTOs = await _selectCertificationAttestations() - .select({ organizationLearnerId: 'view-active-organization-learners.id' }) - .innerJoin('certification-candidates', function () { - this.on({ 'certification-candidates.sessionId': 'certification-courses.sessionId' }).andOn({ - 'certification-candidates.userId': 'certification-courses.userId', - }); - }) - .innerJoin( - 'view-active-organization-learners', - 'view-active-organization-learners.id', - 'certification-candidates.organizationLearnerId' - ) - .innerJoin('organizations', 'organizations.id', 'view-active-organization-learners.organizationId') - .where({ - 'view-active-organization-learners.organizationId': organizationId, - 'view-active-organization-learners.isDisabled': false, - }) - .whereRaw('LOWER("view-active-organization-learners"."division") = ?', division.toLowerCase()) - .whereRaw('"certification-candidates"."userId" = "certification-courses"."userId"') - .whereRaw('"certification-candidates"."sessionId" = "certification-courses"."sessionId"') - .modify(_checkOrganizationIsScoIsManagingStudents) - .groupBy( - 'view-active-organization-learners.id', - 'certification-courses.id', - 'sessions.id', - 'assessment-results.id' - ) - .orderBy('certification-courses.createdAt', 'DESC'); - - const competenceTree = await competenceTreeRepository.get(); - - const mostRecentCertificationsPerOrganizationLearner = - _filterMostRecentCertificationCoursePerOrganizationLearner(certificationCourseDTOs); - return _(mostRecentCertificationsPerOrganizationLearner) - .orderBy(['lastName', 'firstName'], ['asc', 'asc']) - .map((certificationCourseDTO) => { - return _toDomainForCertificationAttestation({ certificationCourseDTO, competenceTree, certifiedBadges: [] }); - }) - .value(); - }, + }) + ); + return privateCertificates; +}; + +const getShareableCertificateByVerificationCode = async function (verificationCode, { locale } = {}) { + const shareableCertificateDTO = await _selectShareableCertificates() + .groupBy('certification-courses.id', 'sessions.id', 'assessment-results.id') + .where({ verificationCode }) + .first(); + + if (!shareableCertificateDTO) { + throw new NotFoundError(`There is no certification course with verification code "${verificationCode}"`); + } + + const competenceTree = await competenceTreeRepository.get({ locale }); + + const certifiedBadges = await _getCertifiedBadges(shareableCertificateDTO.id); + + return _toDomainForShareableCertificate({ shareableCertificateDTO, competenceTree, certifiedBadges }); +}; + +const getCertificationAttestation = async function (id) { + const certificationCourseDTO = await _selectCertificationAttestations() + .where('certification-courses.id', '=', id) + .groupBy('certification-courses.id', 'sessions.id', 'assessment-results.id') + .first(); + + if (!certificationCourseDTO) { + throw new NotFoundError(`There is no certification course with id "${id}"`); + } + + const competenceTree = await competenceTreeRepository.get(); + const certifiedBadges = await _getCertifiedBadges(certificationCourseDTO.id); + + return _toDomainForCertificationAttestation({ certificationCourseDTO, competenceTree, certifiedBadges }); +}; + +const findByDivisionForScoIsManagingStudentsOrganization = async function ({ organizationId, division }) { + const certificationCourseDTOs = await _selectCertificationAttestations() + .select({ organizationLearnerId: 'view-active-organization-learners.id' }) + .innerJoin('certification-candidates', function () { + this.on({ 'certification-candidates.sessionId': 'certification-courses.sessionId' }).andOn({ + 'certification-candidates.userId': 'certification-courses.userId', + }); + }) + .innerJoin( + 'view-active-organization-learners', + 'view-active-organization-learners.id', + 'certification-candidates.organizationLearnerId' + ) + .innerJoin('organizations', 'organizations.id', 'view-active-organization-learners.organizationId') + .where({ + 'view-active-organization-learners.organizationId': organizationId, + 'view-active-organization-learners.isDisabled': false, + }) + .whereRaw('LOWER("view-active-organization-learners"."division") = ?', division.toLowerCase()) + .whereRaw('"certification-candidates"."userId" = "certification-courses"."userId"') + .whereRaw('"certification-candidates"."sessionId" = "certification-courses"."sessionId"') + .modify(_checkOrganizationIsScoIsManagingStudents) + .groupBy('view-active-organization-learners.id', 'certification-courses.id', 'sessions.id', 'assessment-results.id') + .orderBy('certification-courses.createdAt', 'DESC'); + + const competenceTree = await competenceTreeRepository.get(); + + const mostRecentCertificationsPerOrganizationLearner = + _filterMostRecentCertificationCoursePerOrganizationLearner(certificationCourseDTOs); + return _(mostRecentCertificationsPerOrganizationLearner) + .orderBy(['lastName', 'firstName'], ['asc', 'asc']) + .map((certificationCourseDTO) => { + return _toDomainForCertificationAttestation({ certificationCourseDTO, competenceTree, certifiedBadges: [] }); + }) + .value(); +}; + +export { + getPrivateCertificate, + findPrivateCertificatesByUserId, + getShareableCertificateByVerificationCode, + getCertificationAttestation, + findByDivisionForScoIsManagingStudentsOrganization, }; async function _getCertifiedBadges(certificationCourseId) { diff --git a/api/lib/infrastructure/repositories/certification-assessment-repository.js b/api/lib/infrastructure/repositories/certification-assessment-repository.js index 95a79b11145..779983da3e2 100644 --- a/api/lib/infrastructure/repositories/certification-assessment-repository.js +++ b/api/lib/infrastructure/repositories/certification-assessment-repository.js @@ -1,12 +1,12 @@ -const _ = require('lodash'); -const DomainTransaction = require('../DomainTransaction.js'); -const CertificationAssessment = require('../../domain/models/CertificationAssessment.js'); -const CertificationChallengeWithType = require('../../domain/models/CertificationChallengeWithType.js'); -const Answer = require('../../domain/models/Answer.js'); -const challengeRepository = require('./challenge-repository.js'); -const answerStatusDatabaseAdapter = require('../adapters/answer-status-database-adapter.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { NotFoundError } = require('../../domain/errors.js'); +import _ from 'lodash'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { CertificationAssessment } from '../../domain/models/CertificationAssessment.js'; +import { CertificationChallengeWithType } from '../../domain/models/CertificationChallengeWithType.js'; +import { Answer } from '../../domain/models/Answer.js'; +import * as challengeRepository from './challenge-repository.js'; +import * as answerStatusDatabaseAdapter from '../adapters/answer-status-database-adapter.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { NotFoundError } from '../../domain/errors.js'; async function _getCertificationChallenges(certificationCourseId, knexConn) { const allChallenges = await challengeRepository.findOperative(); @@ -37,87 +37,87 @@ async function _getCertificationAnswersByDate(certificationAssessmentId, knexCon ); } -module.exports = { - async get(id) { - const certificationAssessmentRows = await knex('assessments') - .join('certification-courses', 'certification-courses.id', 'assessments.certificationCourseId') - .select({ - id: 'assessments.id', - userId: 'assessments.userId', - certificationCourseId: 'certification-courses.id', - createdAt: 'certification-courses.createdAt', - completedAt: 'certification-courses.completedAt', - isV2Certification: 'certification-courses.isV2Certification', - state: 'assessments.state', - }) - .where('assessments.id', '=', id) - .limit(1); - if (!certificationAssessmentRows[0]) { - throw new NotFoundError(`L'assessment de certification ${id} n'existe pas ou son accès est restreint`); - } - const certificationChallenges = await _getCertificationChallenges( - certificationAssessmentRows[0].certificationCourseId, - knex - ); - const certificationAnswersByDate = await _getCertificationAnswersByDate(certificationAssessmentRows[0].id, knex); +const get = async function (id) { + const certificationAssessmentRows = await knex('assessments') + .join('certification-courses', 'certification-courses.id', 'assessments.certificationCourseId') + .select({ + id: 'assessments.id', + userId: 'assessments.userId', + certificationCourseId: 'certification-courses.id', + createdAt: 'certification-courses.createdAt', + completedAt: 'certification-courses.completedAt', + isV2Certification: 'certification-courses.isV2Certification', + state: 'assessments.state', + }) + .where('assessments.id', '=', id) + .limit(1); + if (!certificationAssessmentRows[0]) { + throw new NotFoundError(`L'assessment de certification ${id} n'existe pas ou son accès est restreint`); + } + const certificationChallenges = await _getCertificationChallenges( + certificationAssessmentRows[0].certificationCourseId, + knex + ); + const certificationAnswersByDate = await _getCertificationAnswersByDate(certificationAssessmentRows[0].id, knex); - return new CertificationAssessment({ - ...certificationAssessmentRows[0], - certificationChallenges, - certificationAnswersByDate, - }); - }, + return new CertificationAssessment({ + ...certificationAssessmentRows[0], + certificationChallenges, + certificationAnswersByDate, + }); +}; - async getByCertificationCourseId({ - certificationCourseId, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - const knexConn = domainTransaction.knexTransaction || knex; - const certificationAssessmentRow = await knexConn('assessments') - .join('certification-courses', 'certification-courses.id', 'assessments.certificationCourseId') - .select({ - id: 'assessments.id', - userId: 'assessments.userId', - certificationCourseId: 'certification-courses.id', - createdAt: 'certification-courses.createdAt', - completedAt: 'certification-courses.completedAt', - isV2Certification: 'certification-courses.isV2Certification', - state: 'assessments.state', - }) - .where('assessments.certificationCourseId', '=', certificationCourseId) - .first(); - if (!certificationAssessmentRow) { - throw new NotFoundError( - `L'assessment de certification avec un certificationCourseId de ${certificationCourseId} n'existe pas ou son accès est restreint` - ); - } - const certificationChallenges = await _getCertificationChallenges( - certificationAssessmentRow.certificationCourseId, - knexConn +const getByCertificationCourseId = async function ({ + certificationCourseId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction.knexTransaction || knex; + const certificationAssessmentRow = await knexConn('assessments') + .join('certification-courses', 'certification-courses.id', 'assessments.certificationCourseId') + .select({ + id: 'assessments.id', + userId: 'assessments.userId', + certificationCourseId: 'certification-courses.id', + createdAt: 'certification-courses.createdAt', + completedAt: 'certification-courses.completedAt', + isV2Certification: 'certification-courses.isV2Certification', + state: 'assessments.state', + }) + .where('assessments.certificationCourseId', '=', certificationCourseId) + .first(); + if (!certificationAssessmentRow) { + throw new NotFoundError( + `L'assessment de certification avec un certificationCourseId de ${certificationCourseId} n'existe pas ou son accès est restreint` ); - const certificationAnswersByDate = await _getCertificationAnswersByDate(certificationAssessmentRow.id, knexConn); + } + const certificationChallenges = await _getCertificationChallenges( + certificationAssessmentRow.certificationCourseId, + knexConn + ); + const certificationAnswersByDate = await _getCertificationAnswersByDate(certificationAssessmentRow.id, knexConn); - return new CertificationAssessment({ - ...certificationAssessmentRow, - certificationChallenges, - certificationAnswersByDate, - }); - }, + return new CertificationAssessment({ + ...certificationAssessmentRow, + certificationChallenges, + certificationAnswersByDate, + }); +}; - async save(certificationAssessment) { - for (const challenge of certificationAssessment.certificationChallenges) { - await knex('certification-challenges') - .where({ id: challenge.id }) - .update(_.pick(challenge, ['isNeutralized', 'hasBeenSkippedAutomatically'])); - } - for (const answer of certificationAssessment.certificationAnswersByDate) { - await knex('answers') - .where({ id: answer.id }) - .update({ result: answerStatusDatabaseAdapter.toSQLString(answer.result) }); - } +const save = async function (certificationAssessment) { + for (const challenge of certificationAssessment.certificationChallenges) { + await knex('certification-challenges') + .where({ id: challenge.id }) + .update(_.pick(challenge, ['isNeutralized', 'hasBeenSkippedAutomatically'])); + } + for (const answer of certificationAssessment.certificationAnswersByDate) { + await knex('answers') + .where({ id: answer.id }) + .update({ result: answerStatusDatabaseAdapter.toSQLString(answer.result) }); + } - await knex('assessments') - .where({ certificationCourseId: certificationAssessment.certificationCourseId }) - .update({ state: certificationAssessment.state }); - }, + await knex('assessments') + .where({ certificationCourseId: certificationAssessment.certificationCourseId }) + .update({ state: certificationAssessment.state }); }; + +export { get, getByCertificationCourseId, save }; diff --git a/api/lib/infrastructure/repositories/certification-candidate-for-supervising-repository.js b/api/lib/infrastructure/repositories/certification-candidate-for-supervising-repository.js index 9dead6a9018..3afe3d4fd7b 100644 --- a/api/lib/infrastructure/repositories/certification-candidate-for-supervising-repository.js +++ b/api/lib/infrastructure/repositories/certification-candidate-for-supervising-repository.js @@ -1,34 +1,34 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const CertificationCandidateForSupervising = require('../../domain/models/CertificationCandidateForSupervising.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { NotFoundError } from '../../domain/errors.js'; +import { CertificationCandidateForSupervising } from '../../domain/models/CertificationCandidateForSupervising.js'; -module.exports = { - async get(certificationCandidateId) { - const result = await knex('certification-candidates') - .select( - 'certification-candidates.*', - 'assessments.state AS assessmentStatus', - 'certification-courses.createdAt AS startDateTime' - ) - .leftJoin('certification-courses', function () { - this.on('certification-courses.sessionId', '=', 'certification-candidates.sessionId'); - this.on('certification-courses.userId', '=', 'certification-candidates.userId'); - }) - .leftJoin('assessments', 'assessments.certificationCourseId', 'certification-courses.id') - .where({ 'certification-candidates.id': certificationCandidateId }) - .first(); - return new CertificationCandidateForSupervising({ ...result }); - }, +const get = async function (certificationCandidateId) { + const result = await knex('certification-candidates') + .select( + 'certification-candidates.*', + 'assessments.state AS assessmentStatus', + 'certification-courses.createdAt AS startDateTime' + ) + .leftJoin('certification-courses', function () { + this.on('certification-courses.sessionId', '=', 'certification-candidates.sessionId'); + this.on('certification-courses.userId', '=', 'certification-candidates.userId'); + }) + .leftJoin('assessments', 'assessments.certificationCourseId', 'certification-courses.id') + .where({ 'certification-candidates.id': certificationCandidateId }) + .first(); + return new CertificationCandidateForSupervising({ ...result }); +}; - async update(certificationCandidateForSupervising) { - const result = await knex('certification-candidates') - .where({ - id: certificationCandidateForSupervising.id, - }) - .update({ authorizedToStart: certificationCandidateForSupervising.authorizedToStart }); +const update = async function (certificationCandidateForSupervising) { + const result = await knex('certification-candidates') + .where({ + id: certificationCandidateForSupervising.id, + }) + .update({ authorizedToStart: certificationCandidateForSupervising.authorizedToStart }); - if (result === 0) { - throw new NotFoundError('Aucun candidat trouvé'); - } - }, + if (result === 0) { + throw new NotFoundError('Aucun candidat trouvé'); + } }; + +export { get, update }; diff --git a/api/lib/infrastructure/repositories/certification-candidate-repository.js b/api/lib/infrastructure/repositories/certification-candidate-repository.js index 2260237cab5..ef3fa56fb7e 100644 --- a/api/lib/infrastructure/repositories/certification-candidate-repository.js +++ b/api/lib/infrastructure/repositories/certification-candidate-repository.js @@ -1,212 +1,231 @@ -const _ = require('lodash'); -const { normalize } = require('../utils/string-utils.js'); -const logger = require('../../infrastructure/logger.js'); -const CertificationCandidateBookshelf = require('../orm-models/CertificationCandidate.js'); -const bookshelfToDomainConverter = require('../../infrastructure/utils/bookshelf-to-domain-converter.js'); -const { PGSQL_UNIQUE_CONSTRAINT_VIOLATION_ERROR } = require('../../../db/pgsql-errors.js'); -const { +import _ from 'lodash'; +import { normalize } from '../utils/string-utils.js'; +import { logger } from '../../infrastructure/logger.js'; +import { BookshelfCertificationCandidate } from '../orm-models/CertificationCandidate.js'; +import * as bookshelfToDomainConverter from '../../infrastructure/utils/bookshelf-to-domain-converter.js'; +import { PGSQL_UNIQUE_CONSTRAINT_VIOLATION_ERROR } from '../../../db/pgsql-errors.js'; + +import { NotFoundError, CertificationCandidateCreationOrUpdateError, CertificationCandidateMultipleUserLinksWithinSessionError, -} = require('../../domain/errors.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const CertificationCandidate = require('../../domain/models/CertificationCandidate.js'); -const ComplementaryCertification = require('../../domain/models/ComplementaryCertification.js'); -const DomainTransaction = require('../DomainTransaction.js'); - -module.exports = { - async linkToUser({ id, userId }) { - try { - const certificationCandidateBookshelf = new CertificationCandidateBookshelf({ id }); - await certificationCandidateBookshelf.save({ userId }, { patch: true, method: 'update' }); - } catch (bookshelfError) { - if (bookshelfError.code === PGSQL_UNIQUE_CONSTRAINT_VIOLATION_ERROR) { - throw new CertificationCandidateMultipleUserLinksWithinSessionError( - 'A user cannot be linked to several certification candidates within the same session' - ); - } - throw new CertificationCandidateCreationOrUpdateError( - 'An error occurred while linking the certification candidate to a user' +} from '../../domain/errors.js'; + +import { knex } from '../../../db/knex-database-connection.js'; +import { CertificationCandidate } from '../../domain/models/CertificationCandidate.js'; +import { ComplementaryCertification } from '../../domain/models/ComplementaryCertification.js'; +import { DomainTransaction } from '../DomainTransaction.js'; + +const linkToUser = async function ({ id, userId }) { + try { + const certificationCandidateBookshelf = new BookshelfCertificationCandidate({ id }); + await certificationCandidateBookshelf.save({ userId }, { patch: true, method: 'update' }); + } catch (bookshelfError) { + if (bookshelfError.code === PGSQL_UNIQUE_CONSTRAINT_VIOLATION_ERROR) { + throw new CertificationCandidateMultipleUserLinksWithinSessionError( + 'A user cannot be linked to several certification candidates within the same session' ); } - }, + throw new CertificationCandidateCreationOrUpdateError( + 'An error occurred while linking the certification candidate to a user' + ); + } +}; + +const saveInSession = async function ({ + certificationCandidate, + sessionId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const certificationCandidateDataToSave = _adaptModelToDb(certificationCandidate); + + try { + const insertCertificationCandidateQuery = knex('certification-candidates') + .insert({ ...certificationCandidateDataToSave, sessionId }) + .returning('*'); + + if (domainTransaction.knexTransaction) { + insertCertificationCandidateQuery.transacting(domainTransaction.knexTransaction); + } + + const [addedCertificationCandidate] = await insertCertificationCandidateQuery; - async saveInSession({ certificationCandidate, sessionId, domainTransaction = DomainTransaction.emptyTransaction() }) { - const certificationCandidateDataToSave = _adaptModelToDb(certificationCandidate); + if (!_.isEmpty(certificationCandidate.complementaryCertifications)) { + const complementaryCertificationSubscriptionsToSave = certificationCandidate.complementaryCertifications.map( + (complementaryCertification) => { + return { + complementaryCertificationId: complementaryCertification.id, + certificationCandidateId: addedCertificationCandidate.id, + }; + } + ); - try { - const insertCertificationCandidateQuery = knex('certification-candidates') - .insert({ ...certificationCandidateDataToSave, sessionId }) - .returning('*'); + const insertComplementaryCertificationSubscriptionQuery = knex( + 'complementary-certification-subscriptions' + ).insert(complementaryCertificationSubscriptionsToSave); if (domainTransaction.knexTransaction) { - insertCertificationCandidateQuery.transacting(domainTransaction.knexTransaction); + insertComplementaryCertificationSubscriptionQuery.transacting(domainTransaction.knexTransaction); } - const [addedCertificationCandidate] = await insertCertificationCandidateQuery; + await insertComplementaryCertificationSubscriptionQuery; + } - if (!_.isEmpty(certificationCandidate.complementaryCertifications)) { - const complementaryCertificationSubscriptionsToSave = certificationCandidate.complementaryCertifications.map( - (complementaryCertification) => { - return { - complementaryCertificationId: complementaryCertification.id, - certificationCandidateId: addedCertificationCandidate.id, - }; - } - ); + return new CertificationCandidate(addedCertificationCandidate); + } catch (error) { + logger.error(error); + throw new CertificationCandidateCreationOrUpdateError( + 'An error occurred while saving the certification candidate in a session' + ); + } +}; - const insertComplementaryCertificationSubscriptionQuery = knex( - 'complementary-certification-subscriptions' - ).insert(complementaryCertificationSubscriptionsToSave); +const remove = async function (certificationCandidateId) { + await knex.transaction(async (trx) => { + await trx('complementary-certification-subscriptions').where({ certificationCandidateId }).del(); + return trx('certification-candidates').where({ id: certificationCandidateId }).del(); + }); - if (domainTransaction.knexTransaction) { - insertComplementaryCertificationSubscriptionQuery.transacting(domainTransaction.knexTransaction); - } + return true; +}; - await insertComplementaryCertificationSubscriptionQuery; - } +const isNotLinked = async function (certificationCandidateId) { + const notLinkedCandidate = await BookshelfCertificationCandidate.where({ + id: certificationCandidateId, + userId: null, + }).fetch({ require: false, columns: ['id'] }); - return new CertificationCandidate(addedCertificationCandidate); - } catch (error) { - logger.error(error); - throw new CertificationCandidateCreationOrUpdateError( - 'An error occurred while saving the certification candidate in a session' - ); - } - }, + return !!notLinkedCandidate; +}; - async delete(certificationCandidateId) { - await knex.transaction(async (trx) => { - await trx('complementary-certification-subscriptions').where({ certificationCandidateId }).del(); - return trx('certification-candidates').where({ id: certificationCandidateId }).del(); - }); +const getBySessionIdAndUserId = async function ({ sessionId, userId }) { + const certificationCandidate = await knex + .select('certification-candidates.*') + .select({ complementaryCertifications: knex.raw(`json_agg("complementary-certifications".*)`) }) + .from('certification-candidates') + .leftJoin( + 'complementary-certification-subscriptions', + 'certification-candidates.id', + 'complementary-certification-subscriptions.certificationCandidateId' + ) + .leftJoin( + 'complementary-certifications', + 'complementary-certification-subscriptions.complementaryCertificationId', + 'complementary-certifications.id' + ) + .where({ sessionId, userId }) + .groupBy('certification-candidates.id') + .first(); + return certificationCandidate ? _toDomain(certificationCandidate) : undefined; +}; + +const findBySessionId = async function (sessionId) { + const results = await knex + .select('certification-candidates.*') + .select({ complementaryCertifications: knex.raw(`json_agg("complementary-certifications".*)`) }) + .from('certification-candidates') + .where({ 'certification-candidates.sessionId': sessionId }) + .leftJoin( + 'complementary-certification-subscriptions', + 'certification-candidates.id', + 'complementary-certification-subscriptions.certificationCandidateId' + ) + .leftJoin( + 'complementary-certifications', + 'complementary-certification-subscriptions.complementaryCertificationId', + 'complementary-certifications.id' + ) + .groupBy('certification-candidates.id') + .orderByRaw('LOWER("certification-candidates"."lastName") asc') + .orderByRaw('LOWER("certification-candidates"."firstName") asc'); + return results.map(_toDomain); +}; + +const findBySessionIdAndPersonalInfo = async function ({ sessionId, firstName, lastName, birthdate }) { + const results = await BookshelfCertificationCandidate.where({ sessionId, birthdate }).fetchAll(); + + const certificationCandidates = _buildCertificationCandidates(results); - return true; - }, - - async isNotLinked(certificationCandidateId) { - const notLinkedCandidate = await CertificationCandidateBookshelf.where({ - id: certificationCandidateId, - userId: null, - }).fetch({ require: false, columns: ['id'] }); - - return !!notLinkedCandidate; - }, - - async getBySessionIdAndUserId({ sessionId, userId }) { - const certificationCandidate = await knex - .select('certification-candidates.*') - .select({ complementaryCertifications: knex.raw(`json_agg("complementary-certifications".*)`) }) - .from('certification-candidates') - .leftJoin( - 'complementary-certification-subscriptions', - 'certification-candidates.id', - 'complementary-certification-subscriptions.certificationCandidateId' - ) - .leftJoin( - 'complementary-certifications', - 'complementary-certification-subscriptions.complementaryCertificationId', - 'complementary-certifications.id' - ) - .where({ sessionId, userId }) - .groupBy('certification-candidates.id') - .first(); - return certificationCandidate ? _toDomain(certificationCandidate) : undefined; - }, - - async findBySessionId(sessionId) { - const results = await knex - .select('certification-candidates.*') - .select({ complementaryCertifications: knex.raw(`json_agg("complementary-certifications".*)`) }) - .from('certification-candidates') - .where({ 'certification-candidates.sessionId': sessionId }) - .leftJoin( - 'complementary-certification-subscriptions', - 'certification-candidates.id', - 'complementary-certification-subscriptions.certificationCandidateId' - ) - .leftJoin( - 'complementary-certifications', - 'complementary-certification-subscriptions.complementaryCertificationId', - 'complementary-certifications.id' - ) - .groupBy('certification-candidates.id') - .orderByRaw('LOWER("certification-candidates"."lastName") asc') - .orderByRaw('LOWER("certification-candidates"."firstName") asc'); - return results.map(_toDomain); - }, - - async findBySessionIdAndPersonalInfo({ sessionId, firstName, lastName, birthdate }) { - const results = await CertificationCandidateBookshelf.where({ sessionId, birthdate }).fetchAll(); - - const certificationCandidates = _buildCertificationCandidates(results); - - const normalizedInputNames = { - lastName: normalize(lastName), - firstName: normalize(firstName), + const normalizedInputNames = { + lastName: normalize(lastName), + firstName: normalize(firstName), + }; + return _.filter(certificationCandidates, (certificationCandidate) => { + const certificationCandidateNormalizedNames = { + lastName: normalize(certificationCandidate.lastName), + firstName: normalize(certificationCandidate.firstName), }; - return _.filter(certificationCandidates, (certificationCandidate) => { - const certificationCandidateNormalizedNames = { - lastName: normalize(certificationCandidate.lastName), - firstName: normalize(certificationCandidate.firstName), - }; - return _.isEqual(normalizedInputNames, certificationCandidateNormalizedNames); - }); - }, - - findOneBySessionIdAndUserId({ sessionId, userId }) { - return CertificationCandidateBookshelf.where({ sessionId, userId }) - .fetchAll() - .then((results) => _buildCertificationCandidates(results)[0]); - }, - - async doesLinkedCertificationCandidateInSessionExist({ sessionId }) { - const anyLinkedCandidateInSession = await CertificationCandidateBookshelf.query({ - where: { sessionId }, - whereNotNull: 'userId', - }).fetch({ require: false, columns: 'id' }); - - return anyLinkedCandidateInSession !== null; - }, - - async update(certificationCandidate) { - const result = await knex('certification-candidates') - .where({ id: certificationCandidate.id }) - .update({ authorizedToStart: certificationCandidate.authorizedToStart }); - - if (result === 0) { - throw new NotFoundError('Aucun candidat trouvé'); - } - }, - - async deleteBySessionId({ sessionId, domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConn = domainTransaction.knexTransaction ?? knex; - await knexConn('complementary-certification-subscriptions') - .whereIn('certificationCandidateId', knexConn.select('id').from('certification-candidates').where({ sessionId })) - .del(); - - await knexConn('certification-candidates').where({ sessionId }).del(); - }, - - async getWithComplementaryCertifications(id) { - const candidateData = await knex('certification-candidates') - .select('certification-candidates.*') - .select({ complementaryCertifications: knex.raw('json_agg("complementary-certifications".*)') }) - .leftJoin( - 'complementary-certification-subscriptions', - 'complementary-certification-subscriptions.certificationCandidateId', - 'certification-candidates.id' - ) - .leftJoin( - 'complementary-certifications', - 'complementary-certifications.id', - 'complementary-certification-subscriptions.complementaryCertificationId' - ) - .where('certification-candidates.id', id) - .groupBy('certification-candidates.id') - .first(); - return _toDomain(candidateData); - }, + return _.isEqual(normalizedInputNames, certificationCandidateNormalizedNames); + }); +}; + +const findOneBySessionIdAndUserId = function ({ sessionId, userId }) { + return BookshelfCertificationCandidate.where({ sessionId, userId }) + .fetchAll() + .then((results) => _buildCertificationCandidates(results)[0]); +}; + +const doesLinkedCertificationCandidateInSessionExist = async function ({ sessionId }) { + const anyLinkedCandidateInSession = await BookshelfCertificationCandidate.query({ + where: { sessionId }, + whereNotNull: 'userId', + }).fetch({ require: false, columns: 'id' }); + + return anyLinkedCandidateInSession !== null; +}; + +const update = async function (certificationCandidate) { + const result = await knex('certification-candidates') + .where({ id: certificationCandidate.id }) + .update({ authorizedToStart: certificationCandidate.authorizedToStart }); + + if (result === 0) { + throw new NotFoundError('Aucun candidat trouvé'); + } +}; + +const deleteBySessionId = async function ({ sessionId, domainTransaction = DomainTransaction.emptyTransaction() }) { + const knexConn = domainTransaction.knexTransaction ?? knex; + await knexConn('complementary-certification-subscriptions') + .whereIn('certificationCandidateId', knexConn.select('id').from('certification-candidates').where({ sessionId })) + .del(); + + await knexConn('certification-candidates').where({ sessionId }).del(); +}; + +const getWithComplementaryCertifications = async function (id) { + const candidateData = await knex('certification-candidates') + .select('certification-candidates.*') + .select({ complementaryCertifications: knex.raw('json_agg("complementary-certifications".*)') }) + .leftJoin( + 'complementary-certification-subscriptions', + 'complementary-certification-subscriptions.certificationCandidateId', + 'certification-candidates.id' + ) + .leftJoin( + 'complementary-certifications', + 'complementary-certifications.id', + 'complementary-certification-subscriptions.complementaryCertificationId' + ) + .where('certification-candidates.id', id) + .groupBy('certification-candidates.id') + .first(); + return _toDomain(candidateData); +}; + +export { + linkToUser, + saveInSession, + remove, + isNotLinked, + getBySessionIdAndUserId, + findBySessionId, + findBySessionIdAndPersonalInfo, + findOneBySessionIdAndUserId, + doesLinkedCertificationCandidateInSessionExist, + update, + deleteBySessionId, + getWithComplementaryCertifications, }; function _buildCertificationCandidates(results) { @@ -216,7 +235,7 @@ function _buildCertificationCandidates(results) { }); } - return bookshelfToDomainConverter.buildDomainObjects(CertificationCandidateBookshelf, results); + return bookshelfToDomainConverter.buildDomainObjects(BookshelfCertificationCandidate, results); } function _adaptModelToDb(certificationCandidateToSave) { diff --git a/api/lib/infrastructure/repositories/certification-center-for-admin-repository.js b/api/lib/infrastructure/repositories/certification-center-for-admin-repository.js index 13c9c940125..91896740ee0 100644 --- a/api/lib/infrastructure/repositories/certification-center-for-admin-repository.js +++ b/api/lib/infrastructure/repositories/certification-center-for-admin-repository.js @@ -1,81 +1,77 @@ -const _ = require('lodash'); +import _ from 'lodash'; -const { knex } = require('../../../db/knex-database-connection.js'); -const CertificationCenterForAdmin = require('../../domain/models/CertificationCenterForAdmin.js'); -const ComplementaryCertification = require('../../domain/models/ComplementaryCertification.js'); -const { NotFoundError } = require('../../domain/errors.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { CertificationCenterForAdmin } from '../../domain/models/CertificationCenterForAdmin.js'; +import { ComplementaryCertification } from '../../domain/models/ComplementaryCertification.js'; +import { NotFoundError } from '../../domain/errors.js'; const CERTIFICATION_CENTERS_TABLE_NAME = 'certification-centers'; -module.exports = { - async get(id) { - const certificationCenter = await knex(CERTIFICATION_CENTERS_TABLE_NAME) - .select({ - id: 'certification-centers.id', - name: 'certification-centers.name', - type: 'certification-centers.type', - externalId: 'certification-centers.externalId', - dataProtectionOfficerFirstName: 'data-protection-officers.firstName', - dataProtectionOfficerLastName: 'data-protection-officers.lastName', - dataProtectionOfficerEmail: 'data-protection-officers.email', - createdAt: 'certification-centers.createdAt', - updatedAt: 'certification-centers.updatedAt', - }) - .leftJoin( - 'data-protection-officers', - 'data-protection-officers.certificationCenterId', - 'certification-centers.id' - ) - .where('certification-centers.id', id) - .first(); +const get = async function (id) { + const certificationCenter = await knex(CERTIFICATION_CENTERS_TABLE_NAME) + .select({ + id: 'certification-centers.id', + name: 'certification-centers.name', + type: 'certification-centers.type', + externalId: 'certification-centers.externalId', + dataProtectionOfficerFirstName: 'data-protection-officers.firstName', + dataProtectionOfficerLastName: 'data-protection-officers.lastName', + dataProtectionOfficerEmail: 'data-protection-officers.email', + createdAt: 'certification-centers.createdAt', + updatedAt: 'certification-centers.updatedAt', + }) + .leftJoin('data-protection-officers', 'data-protection-officers.certificationCenterId', 'certification-centers.id') + .where('certification-centers.id', id) + .first(); - if (!certificationCenter) { - throw new NotFoundError(`Certification center with id: ${id} not found`); - } + if (!certificationCenter) { + throw new NotFoundError(`Certification center with id: ${id} not found`); + } - const habilitations = await knex('complementary-certification-habilitations') - .select({ - id: 'complementary-certification-habilitations.complementaryCertificationId', - label: 'complementary-certifications.label', - key: 'complementary-certifications.key', - }) - .join( - 'complementary-certifications', - 'complementary-certifications.id', - 'complementary-certification-habilitations.complementaryCertificationId' - ) - .where('complementary-certification-habilitations.certificationCenterId', id) - .orderBy('complementary-certification-habilitations.complementaryCertificationId', 'asc'); + const habilitations = await knex('complementary-certification-habilitations') + .select({ + id: 'complementary-certification-habilitations.complementaryCertificationId', + label: 'complementary-certifications.label', + key: 'complementary-certifications.key', + }) + .join( + 'complementary-certifications', + 'complementary-certifications.id', + 'complementary-certification-habilitations.complementaryCertificationId' + ) + .where('complementary-certification-habilitations.certificationCenterId', id) + .orderBy('complementary-certification-habilitations.complementaryCertificationId', 'asc'); - certificationCenter.habilitations = habilitations.map((habilitation) => { - return new ComplementaryCertification({ - id: habilitation.id, - key: habilitation.key, - label: habilitation.label, - }); + certificationCenter.habilitations = habilitations.map((habilitation) => { + return new ComplementaryCertification({ + id: habilitation.id, + key: habilitation.key, + label: habilitation.label, }); + }); - return _toDomain(certificationCenter); - }, + return _toDomain(certificationCenter); +}; - async save(certificationCenter) { - const data = _.pick(certificationCenter, ['name', 'type', 'externalId']); - const [certificationCenterCreated] = await knex(CERTIFICATION_CENTERS_TABLE_NAME).returning('*').insert(data); - return _toDomain(certificationCenterCreated); - }, +const save = async function (certificationCenter) { + const data = _.pick(certificationCenter, ['name', 'type', 'externalId']); + const [certificationCenterCreated] = await knex(CERTIFICATION_CENTERS_TABLE_NAME).returning('*').insert(data); + return _toDomain(certificationCenterCreated); +}; - async update(certificationCenter) { - const data = _.pick(certificationCenter, ['name', 'type', 'externalId']); +const update = async function (certificationCenter) { + const data = _.pick(certificationCenter, ['name', 'type', 'externalId']); - const [certificationCenterRow] = await knex(CERTIFICATION_CENTERS_TABLE_NAME) - .update(data) - .where({ id: certificationCenter.id }) - .returning('*'); + const [certificationCenterRow] = await knex(CERTIFICATION_CENTERS_TABLE_NAME) + .update(data) + .where({ id: certificationCenter.id }) + .returning('*'); - return _toDomain(certificationCenterRow); - }, + return _toDomain(certificationCenterRow); }; +export { get, save, update }; + function _toDomain(certificationCenterDTO) { return new CertificationCenterForAdmin({ id: certificationCenterDTO.id, diff --git a/api/lib/infrastructure/repositories/certification-center-invitation-repository.js b/api/lib/infrastructure/repositories/certification-center-invitation-repository.js index d0696b426ee..47a4fc3aa44 100644 --- a/api/lib/infrastructure/repositories/certification-center-invitation-repository.js +++ b/api/lib/infrastructure/repositories/certification-center-invitation-repository.js @@ -1,6 +1,6 @@ -const CertificationCenterInvitation = require('../../domain/models/CertificationCenterInvitation.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { NotFoundError } = require('../../domain/errors.js'); +import { CertificationCenterInvitation } from '../../domain/models/CertificationCenterInvitation.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { NotFoundError } from '../../domain/errors.js'; const CERTIFICATION_CENTER_INVITATIONS = 'certification-center-invitations'; @@ -16,99 +16,104 @@ function _toDomain(invitationDTO) { }); } -module.exports = { - async findPendingByCertificationCenterId({ certificationCenterId }) { - const pendingCertificationCenterInvitations = await knex(CERTIFICATION_CENTER_INVITATIONS) - .select('id', 'email', 'certificationCenterId', 'updatedAt') - .where({ certificationCenterId, status: CertificationCenterInvitation.StatusType.PENDING }) - .orderBy('updatedAt', 'desc'); - return pendingCertificationCenterInvitations.map(_toDomain); - }, - - async getByIdAndCode({ id, code }) { - const certificationCenterInvitation = await knex(CERTIFICATION_CENTER_INVITATIONS) - .select({ - id: 'certification-center-invitations.id', - status: 'certification-center-invitations.status', - certificationCenterId: 'certification-center-invitations.certificationCenterId', - certificationCenterName: 'certification-centers.name', - }) - .leftJoin( - 'certification-centers', - 'certification-centers.id', - 'certification-center-invitations.certificationCenterId' - ) - .where({ - 'certification-center-invitations.id': id, - code, - }) - .first(); - - if (!certificationCenterInvitation) { - throw new NotFoundError("L'invitation à ce centre de certification n'existe pas"); - } - - return _toDomain(certificationCenterInvitation); - }, - - async get(id) { - const certificationCenterInvitation = await knex(CERTIFICATION_CENTER_INVITATIONS) - .select('*') - .where({ id }) - .first(); - if (!certificationCenterInvitation) { - throw new NotFoundError("L'invitation à ce centre de certification n'existe pas"); - } - return _toDomain(certificationCenterInvitation); - }, - - async findOnePendingByEmailAndCertificationCenterId({ email, certificationCenterId }) { - const existingPendingInvitation = await knex(CERTIFICATION_CENTER_INVITATIONS) - .select('id') - .where({ email, certificationCenterId, status: CertificationCenterInvitation.StatusType.PENDING }) - .first(); - - return existingPendingInvitation ? _toDomain(existingPendingInvitation) : null; - }, - - async create(invitation) { - const [newInvitation] = await knex(CERTIFICATION_CENTER_INVITATIONS) - .insert(invitation) - .returning(['id', 'email', 'code', 'certificationCenterId', 'updatedAt']); - - const { name: certificationCenterName } = await knex('certification-centers') - .select('name') - .where({ id: newInvitation.certificationCenterId }) - .first(); - - return _toDomain({ ...newInvitation, certificationCenterName }); - }, - - async update(certificationCenterInvitation) { - const [updatedCertificationCenterInvitation] = await knex('certification-center-invitations') - .update({ updatedAt: new Date() }) - .where({ id: certificationCenterInvitation.id }) - .returning(['id', 'email', 'code', 'certificationCenterId', 'updatedAt']); - - const { name: certificationCenterName } = await knex('certification-centers') - .select('name') - .where({ id: updatedCertificationCenterInvitation.certificationCenterId }) - .first(); - - return _toDomain({ ...updatedCertificationCenterInvitation, certificationCenterName }); - }, - - async markAsCancelled({ id }) { - const [certificationCenterInvitation] = await knex('certification-center-invitations') - .where({ id }) - .update({ - status: CertificationCenterInvitation.StatusType.CANCELLED, - updatedAt: new Date(), - }) - .returning('*'); - if (!certificationCenterInvitation) { - throw new NotFoundError(`Certification center invitation of id ${id} is not found.`); - } - return _toDomain(certificationCenterInvitation); - }, +const findPendingByCertificationCenterId = async function ({ certificationCenterId }) { + const pendingCertificationCenterInvitations = await knex(CERTIFICATION_CENTER_INVITATIONS) + .select('id', 'email', 'certificationCenterId', 'updatedAt') + .where({ certificationCenterId, status: CertificationCenterInvitation.StatusType.PENDING }) + .orderBy('updatedAt', 'desc'); + return pendingCertificationCenterInvitations.map(_toDomain); +}; + +const getByIdAndCode = async function ({ id, code }) { + const certificationCenterInvitation = await knex(CERTIFICATION_CENTER_INVITATIONS) + .select({ + id: 'certification-center-invitations.id', + status: 'certification-center-invitations.status', + certificationCenterId: 'certification-center-invitations.certificationCenterId', + certificationCenterName: 'certification-centers.name', + }) + .leftJoin( + 'certification-centers', + 'certification-centers.id', + 'certification-center-invitations.certificationCenterId' + ) + .where({ + 'certification-center-invitations.id': id, + code, + }) + .first(); + + if (!certificationCenterInvitation) { + throw new NotFoundError("L'invitation à ce centre de certification n'existe pas"); + } + + return _toDomain(certificationCenterInvitation); +}; + +const get = async function (id) { + const certificationCenterInvitation = await knex(CERTIFICATION_CENTER_INVITATIONS).select('*').where({ id }).first(); + if (!certificationCenterInvitation) { + throw new NotFoundError("L'invitation à ce centre de certification n'existe pas"); + } + return _toDomain(certificationCenterInvitation); +}; + +const findOnePendingByEmailAndCertificationCenterId = async function ({ email, certificationCenterId }) { + const existingPendingInvitation = await knex(CERTIFICATION_CENTER_INVITATIONS) + .select('id') + .where({ email, certificationCenterId, status: CertificationCenterInvitation.StatusType.PENDING }) + .first(); + + return existingPendingInvitation ? _toDomain(existingPendingInvitation) : null; +}; + +const create = async function (invitation) { + const [newInvitation] = await knex(CERTIFICATION_CENTER_INVITATIONS) + .insert(invitation) + .returning(['id', 'email', 'code', 'certificationCenterId', 'updatedAt']); + + const { name: certificationCenterName } = await knex('certification-centers') + .select('name') + .where({ id: newInvitation.certificationCenterId }) + .first(); + + return _toDomain({ ...newInvitation, certificationCenterName }); +}; + +const update = async function (certificationCenterInvitation) { + const [updatedCertificationCenterInvitation] = await knex('certification-center-invitations') + .update({ updatedAt: new Date() }) + .where({ id: certificationCenterInvitation.id }) + .returning(['id', 'email', 'code', 'certificationCenterId', 'updatedAt']); + + const { name: certificationCenterName } = await knex('certification-centers') + .select('name') + .where({ id: updatedCertificationCenterInvitation.certificationCenterId }) + .first(); + + return _toDomain({ ...updatedCertificationCenterInvitation, certificationCenterName }); +}; + +const markAsCancelled = async function ({ id }) { + const [certificationCenterInvitation] = await knex('certification-center-invitations') + .where({ id }) + .update({ + status: CertificationCenterInvitation.StatusType.CANCELLED, + updatedAt: new Date(), + }) + .returning('*'); + if (!certificationCenterInvitation) { + throw new NotFoundError(`Certification center invitation of id ${id} is not found.`); + } + return _toDomain(certificationCenterInvitation); +}; + +export { + findPendingByCertificationCenterId, + getByIdAndCode, + get, + findOnePendingByEmailAndCertificationCenterId, + create, + update, + markAsCancelled, }; diff --git a/api/lib/infrastructure/repositories/certification-center-invited-user-repository.js b/api/lib/infrastructure/repositories/certification-center-invited-user-repository.js index a0cce401fcc..8f4900e1985 100644 --- a/api/lib/infrastructure/repositories/certification-center-invited-user-repository.js +++ b/api/lib/infrastructure/repositories/certification-center-invited-user-repository.js @@ -1,37 +1,37 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const CertificationCenterInvitedUser = require('../../domain/models/CertificationCenterInvitedUser.js'); -const { NotFoundError } = require('../../domain/errors.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { CertificationCenterInvitedUser } from '../../domain/models/CertificationCenterInvitedUser.js'; +import { NotFoundError } from '../../domain/errors.js'; -module.exports = { - async get({ certificationCenterInvitationId, email }) { - const invitation = await knex('certification-center-invitations') - .select('id', 'certificationCenterId', 'code', 'status') - .where({ id: certificationCenterInvitationId }) - .first(); - if (!invitation) { - throw new NotFoundError(`No certification center invitation found for ID ${certificationCenterInvitationId}`); - } +const get = async function ({ certificationCenterInvitationId, email }) { + const invitation = await knex('certification-center-invitations') + .select('id', 'certificationCenterId', 'code', 'status') + .where({ id: certificationCenterInvitationId }) + .first(); + if (!invitation) { + throw new NotFoundError(`No certification center invitation found for ID ${certificationCenterInvitationId}`); + } - const user = await knex('users').select('id').where({ email }).first(); - if (!user) { - throw new NotFoundError(`No user found for email ${email} for this certification center invitation`); - } + const user = await knex('users').select('id').where({ email }).first(); + if (!user) { + throw new NotFoundError(`No user found for email ${email} for this certification center invitation`); + } - return new CertificationCenterInvitedUser({ - userId: user.id, - invitation, - status: invitation.status, - }); - }, + return new CertificationCenterInvitedUser({ + userId: user.id, + invitation, + status: invitation.status, + }); +}; - async save(certificationCenterInvitedUser) { - await knex('certification-center-memberships').insert({ - certificationCenterId: certificationCenterInvitedUser.invitation.certificationCenterId, - userId: certificationCenterInvitedUser.userId, - }); +const save = async function (certificationCenterInvitedUser) { + await knex('certification-center-memberships').insert({ + certificationCenterId: certificationCenterInvitedUser.invitation.certificationCenterId, + userId: certificationCenterInvitedUser.userId, + }); - await knex('certification-center-invitations') - .update({ status: certificationCenterInvitedUser.status, updatedAt: new Date() }) - .where({ id: certificationCenterInvitedUser.invitation.id }); - }, + await knex('certification-center-invitations') + .update({ status: certificationCenterInvitedUser.status, updatedAt: new Date() }) + .where({ id: certificationCenterInvitedUser.invitation.id }); }; + +export { get, save }; diff --git a/api/lib/infrastructure/repositories/certification-center-membership-repository.js b/api/lib/infrastructure/repositories/certification-center-membership-repository.js index a8dc215e93d..200b18fd717 100644 --- a/api/lib/infrastructure/repositories/certification-center-membership-repository.js +++ b/api/lib/infrastructure/repositories/certification-center-membership-repository.js @@ -1,16 +1,18 @@ -const bookshelfUtils = require('../utils/knex-utils.js'); -const BookshelfCertificationCenterMembership = require('../orm-models/CertificationCenterMembership.js'); -const bookshelfToDomainConverter = require('../../infrastructure/utils/bookshelf-to-domain-converter.js'); -const { +import * as knexUtils from '../utils/knex-utils.js'; +import { BookshelfCertificationCenterMembership } from '../orm-models/CertificationCenterMembership.js'; +import * as bookshelfToDomainConverter from '../../infrastructure/utils/bookshelf-to-domain-converter.js'; + +import { CertificationCenterMembershipCreationError, AlreadyExistingMembershipError, CertificationCenterMembershipDisableError, -} = require('../../domain/errors.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const CertificationCenter = require('../../domain/models/CertificationCenter.js'); -const User = require('../../domain/models/User.js'); -const CertificationCenterMembership = require('../../domain/models/CertificationCenterMembership.js'); -const DomainTransaction = require('../DomainTransaction.js'); +} from '../../domain/errors.js'; + +import { knex } from '../../../db/knex-database-connection.js'; +import { CertificationCenter } from '../../domain/models/CertificationCenter.js'; +import { User } from '../../domain/models/User.js'; +import { CertificationCenterMembership } from '../../domain/models/CertificationCenterMembership.js'; +import { DomainTransaction } from '../DomainTransaction.js'; function _toDomain(certificationCenterMembershipDTO) { let user, certificationCenter; @@ -41,129 +43,142 @@ function _toDomain(certificationCenterMembershipDTO) { }); } -module.exports = { - async findByUserId(userId) { - const certificationCenterMemberships = await knex - .select( - 'certification-center-memberships.*', - 'certification-centers.name', - 'certification-centers.type', - 'certification-centers.externalId', - 'certification-centers.createdAt AS certificationCenterCreatedAt', - 'certification-centers.updatedAt AS certificationCenterUpdatedAt' - ) - .from('certification-center-memberships') - .leftJoin( - 'certification-centers', - 'certification-centers.id', - 'certification-center-memberships.certificationCenterId' - ) - .where({ - userId, - disabledAt: null, - }); - - return certificationCenterMemberships.map(_toDomain); - }, - - async findActiveByCertificationCenterIdSortedById({ certificationCenterId }) { - const certificationCenterMemberships = await BookshelfCertificationCenterMembership.where({ - certificationCenterId, +const findByUserId = async function (userId) { + const certificationCenterMemberships = await knex + .select( + 'certification-center-memberships.*', + 'certification-centers.name', + 'certification-centers.type', + 'certification-centers.externalId', + 'certification-centers.createdAt AS certificationCenterCreatedAt', + 'certification-centers.updatedAt AS certificationCenterUpdatedAt' + ) + .from('certification-center-memberships') + .leftJoin( + 'certification-centers', + 'certification-centers.id', + 'certification-center-memberships.certificationCenterId' + ) + .where({ + userId, disabledAt: null, + }); + + return certificationCenterMemberships.map(_toDomain); +}; + +const findActiveByCertificationCenterIdSortedById = async function ({ certificationCenterId }) { + const certificationCenterMemberships = await BookshelfCertificationCenterMembership.where({ + certificationCenterId, + disabledAt: null, + }) + .orderBy('id', 'ASC') + .fetchAll({ + withRelated: ['certificationCenter', 'user'], + }); + + return bookshelfToDomainConverter.buildDomainObjects( + BookshelfCertificationCenterMembership, + certificationCenterMemberships + ); +}; + +const save = async function ({ userId, certificationCenterId }) { + try { + const newCertificationCenterMembership = await new BookshelfCertificationCenterMembership({ + userId, + certificationCenterId, }) - .orderBy('id', 'ASC') - .fetchAll({ - withRelated: ['certificationCenter', 'user'], - }); + .save() + .then((model) => model.fetch({ withRelated: ['user', 'certificationCenter'] })); - return bookshelfToDomainConverter.buildDomainObjects( + return bookshelfToDomainConverter.buildDomainObject( BookshelfCertificationCenterMembership, - certificationCenterMemberships + newCertificationCenterMembership ); - }, - - async save({ userId, certificationCenterId }) { - try { - const newCertificationCenterMembership = await new BookshelfCertificationCenterMembership({ - userId, - certificationCenterId, - }) - .save() - .then((model) => model.fetch({ withRelated: ['user', 'certificationCenter'] })); - - return bookshelfToDomainConverter.buildDomainObject( - BookshelfCertificationCenterMembership, - newCertificationCenterMembership + } catch (err) { + if (knexUtils.isUniqConstraintViolated(err)) { + throw new AlreadyExistingMembershipError( + `User is already member of certification center ${certificationCenterId}` ); - } catch (err) { - if (bookshelfUtils.isUniqConstraintViolated(err)) { - throw new AlreadyExistingMembershipError( - `User is already member of certification center ${certificationCenterId}` - ); - } - if (bookshelfUtils.foreignKeyConstraintViolated(err)) { - throw new CertificationCenterMembershipCreationError(); - } - throw err; } - }, - - async isMemberOfCertificationCenter({ userId, certificationCenterId }) { - const certificationCenterMembershipId = await knex('certification-center-memberships') - .select('id') - .where({ - userId, - certificationCenterId, - disabledAt: null, - }) - .first(); - - return Boolean(certificationCenterMembershipId); - }, - - async disableById({ certificationCenterMembershipId }) { - try { - const now = new Date(); - const result = await knex('certification-center-memberships') - .where({ id: certificationCenterMembershipId }) - .update({ disabledAt: now }) - .returning('*'); - - if (result.length === 0) { - throw new CertificationCenterMembershipDisableError(); - } - } catch (e) { - throw new CertificationCenterMembershipDisableError(); + if (knexUtils.foreignKeyConstraintViolated(err)) { + throw new CertificationCenterMembershipCreationError(); } - }, + throw err; + } +}; + +const isMemberOfCertificationCenter = async function ({ userId, certificationCenterId }) { + const certificationCenterMembershipId = await knex('certification-center-memberships') + .select('id') + .where({ + userId, + certificationCenterId, + disabledAt: null, + }) + .first(); - async updateRefererStatusByUserIdAndCertificationCenterId({ userId, certificationCenterId, isReferer }) { - await knex('certification-center-memberships').where({ userId, certificationCenterId }).update({ isReferer }); - }, + return Boolean(certificationCenterMembershipId); +}; - async getRefererByCertificationCenterId({ certificationCenterId }) { - const refererCertificationCenterMembership = await knex('certification-center-memberships') - .select('certification-center-memberships.*', 'users.lastName', 'users.firstName', 'users.email') - .join('users', 'users.id', 'certification-center-memberships.userId') - .where({ certificationCenterId, isReferer: true }) - .first(); +const disableById = async function ({ certificationCenterMembershipId }) { + try { + const now = new Date(); + const result = await knex('certification-center-memberships') + .where({ id: certificationCenterMembershipId }) + .update({ disabledAt: now }) + .returning('*'); - if (!refererCertificationCenterMembership) { - return null; + if (result.length === 0) { + throw new CertificationCenterMembershipDisableError(); } + } catch (e) { + throw new CertificationCenterMembershipDisableError(); + } +}; + +const updateRefererStatusByUserIdAndCertificationCenterId = async function ({ + userId, + certificationCenterId, + isReferer, +}) { + await knex('certification-center-memberships').where({ userId, certificationCenterId }).update({ isReferer }); +}; + +const getRefererByCertificationCenterId = async function ({ certificationCenterId }) { + const refererCertificationCenterMembership = await knex('certification-center-memberships') + .select('certification-center-memberships.*', 'users.lastName', 'users.firstName', 'users.email') + .join('users', 'users.id', 'certification-center-memberships.userId') + .where({ certificationCenterId, isReferer: true }) + .first(); + + if (!refererCertificationCenterMembership) { + return null; + } + + return _toDomain(refererCertificationCenterMembership); +}; + +const disableMembershipsByUserId = async function ({ + userId, + updatedByUserId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction.knexTransaction ?? knex; + await knexConn('certification-center-memberships') + .whereNull('disabledAt') + .andWhere({ userId }) + .update({ disabledAt: new Date(), updatedByUserId }); +}; - return _toDomain(refererCertificationCenterMembership); - }, - - async disableMembershipsByUserId({ - userId, - updatedByUserId, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - const knexConn = domainTransaction.knexTransaction ?? knex; - await knexConn('certification-center-memberships') - .whereNull('disabledAt') - .andWhere({ userId }) - .update({ disabledAt: new Date(), updatedByUserId }); - }, +export { + findByUserId, + findActiveByCertificationCenterIdSortedById, + save, + isMemberOfCertificationCenter, + disableById, + updateRefererStatusByUserIdAndCertificationCenterId, + getRefererByCertificationCenterId, + disableMembershipsByUserId, }; diff --git a/api/lib/infrastructure/repositories/certification-center-repository.js b/api/lib/infrastructure/repositories/certification-center-repository.js index 433408f04f0..c77fbb18a4a 100644 --- a/api/lib/infrastructure/repositories/certification-center-repository.js +++ b/api/lib/infrastructure/repositories/certification-center-repository.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const BookshelfCertificationCenter = require('../orm-models/CertificationCenter.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const CertificationCenter = require('../../domain/models/CertificationCenter.js'); -const ComplementaryCertification = require('../../domain/models/ComplementaryCertification.js'); -const { NotFoundError } = require('../../domain/errors.js'); +import _ from 'lodash'; +import { BookshelfCertificationCenter } from '../orm-models/CertificationCenter.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { CertificationCenter } from '../../domain/models/CertificationCenter.js'; +import { ComplementaryCertification } from '../../domain/models/ComplementaryCertification.js'; +import { NotFoundError } from '../../domain/errors.js'; function _toDomain(bookshelfCertificationCenter) { const dbCertificationCenter = bookshelfCertificationCenter.toJSON(); @@ -37,62 +37,11 @@ function _setSearchFiltersForQueryBuilder(filters, qb) { } } -module.exports = { - async get(id) { - const certificationCenterBookshelf = await BookshelfCertificationCenter.query((q) => q.orderBy('id', 'desc')) - .where({ id }) - .fetch({ - require: false, - withRelated: [ - { - habilitations: function (query) { - query.orderBy('id'); - }, - }, - ], - }); - - if (certificationCenterBookshelf) { - return _toDomain(certificationCenterBookshelf); - } - throw new NotFoundError(`Certification center with id: ${id} not found`); - }, - - async getBySessionId(sessionId) { - const certificationCenterBookshelf = await BookshelfCertificationCenter.where({ 'sessions.id': sessionId }) - .query((qb) => { - qb.innerJoin('sessions', 'sessions.certificationCenterId', 'certification-centers.id'); - }) - .fetch({ - require: false, - withRelated: [ - { - habilitations: function (query) { - query.orderBy('id'); - }, - }, - ], - }); - - if (certificationCenterBookshelf) { - return _toDomain(certificationCenterBookshelf); - } - throw new NotFoundError(`Could not find certification center for sessionId ${sessionId}.`); - }, - async save(certificationCenter) { - const cleanedCertificationCenter = _.omit(certificationCenter, ['createdAt', 'habilitations']); - const certificationCenterBookshelf = await new BookshelfCertificationCenter(cleanedCertificationCenter).save(); - await certificationCenterBookshelf.related('habilitations').fetch(); - return _toDomain(certificationCenterBookshelf); - }, - - async findPaginatedFiltered({ filter, page }) { - const certificationCenterBookshelf = await BookshelfCertificationCenter.query((qb) => { - _setSearchFiltersForQueryBuilder(filter, qb); - qb.orderBy('id'); - }).fetchPage({ - page: page.number, - pageSize: page.size, +const get = async function (id) { + const certificationCenterBookshelf = await BookshelfCertificationCenter.query((q) => q.orderBy('id', 'desc')) + .where({ id }) + .fetch({ + require: false, withRelated: [ { habilitations: function (query) { @@ -101,12 +50,19 @@ module.exports = { }, ], }); - const { models, pagination } = certificationCenterBookshelf; - return { models: models.map(_toDomain), pagination }; - }, - async findByExternalId({ externalId }) { - const certificationCenterBookshelf = await BookshelfCertificationCenter.where({ externalId }).fetch({ + if (certificationCenterBookshelf) { + return _toDomain(certificationCenterBookshelf); + } + throw new NotFoundError(`Certification center with id: ${id} not found`); +}; + +const getBySessionId = async function (sessionId) { + const certificationCenterBookshelf = await BookshelfCertificationCenter.where({ 'sessions.id': sessionId }) + .query((qb) => { + qb.innerJoin('sessions', 'sessions.certificationCenterId', 'certification-centers.id'); + }) + .fetch({ require: false, withRelated: [ { @@ -117,21 +73,66 @@ module.exports = { ], }); - return certificationCenterBookshelf ? _toDomain(certificationCenterBookshelf) : null; - }, + if (certificationCenterBookshelf) { + return _toDomain(certificationCenterBookshelf); + } + throw new NotFoundError(`Could not find certification center for sessionId ${sessionId}.`); +}; - async getRefererEmails(certificationCenterId) { - const refererEmails = await knex('certification-centers') - .select('users.email') - .join( - 'certification-center-memberships', - 'certification-center-memberships.certificationCenterId', - 'certification-centers.id' - ) - .join('users', 'users.id', 'certification-center-memberships.userId') - .where('certification-centers.id', certificationCenterId) - .where('certification-center-memberships.isReferer', true); +const save = async function (certificationCenter) { + const cleanedCertificationCenter = _.omit(certificationCenter, ['createdAt', 'habilitations']); + const certificationCenterBookshelf = await new BookshelfCertificationCenter(cleanedCertificationCenter).save(); + await certificationCenterBookshelf.related('habilitations').fetch(); + return _toDomain(certificationCenterBookshelf); +}; - return refererEmails; - }, +const findPaginatedFiltered = async function ({ filter, page }) { + const certificationCenterBookshelf = await BookshelfCertificationCenter.query((qb) => { + _setSearchFiltersForQueryBuilder(filter, qb); + qb.orderBy('id'); + }).fetchPage({ + page: page.number, + pageSize: page.size, + withRelated: [ + { + habilitations: function (query) { + query.orderBy('id'); + }, + }, + ], + }); + const { models, pagination } = certificationCenterBookshelf; + return { models: models.map(_toDomain), pagination }; }; + +const findByExternalId = async function ({ externalId }) { + const certificationCenterBookshelf = await BookshelfCertificationCenter.where({ externalId }).fetch({ + require: false, + withRelated: [ + { + habilitations: function (query) { + query.orderBy('id'); + }, + }, + ], + }); + + return certificationCenterBookshelf ? _toDomain(certificationCenterBookshelf) : null; +}; + +const getRefererEmails = async function (certificationCenterId) { + const refererEmails = await knex('certification-centers') + .select('users.email') + .join( + 'certification-center-memberships', + 'certification-center-memberships.certificationCenterId', + 'certification-centers.id' + ) + .join('users', 'users.id', 'certification-center-memberships.userId') + .where('certification-centers.id', certificationCenterId) + .where('certification-center-memberships.isReferer', true); + + return refererEmails; +}; + +export { get, getBySessionId, save, findPaginatedFiltered, findByExternalId, getRefererEmails }; diff --git a/api/lib/infrastructure/repositories/certification-challenge-repository.js b/api/lib/infrastructure/repositories/certification-challenge-repository.js index c3b38e8403c..4a0fb0b3e29 100644 --- a/api/lib/infrastructure/repositories/certification-challenge-repository.js +++ b/api/lib/infrastructure/repositories/certification-challenge-repository.js @@ -1,47 +1,46 @@ -const Bookshelf = require('../bookshelf.js'); -const bookshelfToDomainConverter = require('../utils/bookshelf-to-domain-converter.js'); -const DomainTransaction = require('../DomainTransaction.js'); -const CertificationChallengeBookshelf = require('../orm-models/CertificationChallenge.js'); -const logger = require('../../infrastructure/logger.js'); - -const { AssessmentEndedError } = require('../../domain/errors.js'); +import { Bookshelf } from '../bookshelf.js'; +import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { BookshelfCertificationChallenge } from '../orm-models/CertificationChallenge.js'; +import { logger } from '../../infrastructure/logger.js'; +import { AssessmentEndedError } from '../../domain/errors.js'; const logContext = { zone: 'certificationChallengeRepository.getNextNonAnsweredChallengeByCourseId', type: 'repository', }; -module.exports = { - async save({ certificationChallenge, domainTransaction = DomainTransaction.emptyTransaction() }) { - const certificationChallengeToSave = new CertificationChallengeBookshelf({ - challengeId: certificationChallenge.challengeId, - competenceId: certificationChallenge.competenceId, - associatedSkillName: certificationChallenge.associatedSkillName, - associatedSkillId: certificationChallenge.associatedSkillId, - courseId: certificationChallenge.courseId, - certifiableBadgeKey: certificationChallenge.certifiableBadgeKey, - }); - const savedCertificationChallenge = await certificationChallengeToSave.save(null, { - transacting: domainTransaction.knexTransaction, - }); - return bookshelfToDomainConverter.buildDomainObject(CertificationChallengeBookshelf, savedCertificationChallenge); - }, +const save = async function ({ certificationChallenge, domainTransaction = DomainTransaction.emptyTransaction() }) { + const certificationChallengeToSave = new BookshelfCertificationChallenge({ + challengeId: certificationChallenge.challengeId, + competenceId: certificationChallenge.competenceId, + associatedSkillName: certificationChallenge.associatedSkillName, + associatedSkillId: certificationChallenge.associatedSkillId, + courseId: certificationChallenge.courseId, + certifiableBadgeKey: certificationChallenge.certifiableBadgeKey, + }); + const savedCertificationChallenge = await certificationChallengeToSave.save(null, { + transacting: domainTransaction.knexTransaction, + }); + return bookshelfToDomainConverter.buildDomainObject(BookshelfCertificationChallenge, savedCertificationChallenge); +}; - async getNextNonAnsweredChallengeByCourseId(assessmentId, courseId) { - const answeredChallengeIds = Bookshelf.knex('answers').select('challengeId').where({ assessmentId }); +const getNextNonAnsweredChallengeByCourseId = async function (assessmentId, courseId) { + const answeredChallengeIds = Bookshelf.knex('answers').select('challengeId').where({ assessmentId }); - const certificationChallenge = await CertificationChallengeBookshelf.where({ courseId }) - .query((knex) => knex.whereNotIn('challengeId', answeredChallengeIds)) - .orderBy('id', 'asc') - .fetch({ require: false }); + const certificationChallenge = await BookshelfCertificationChallenge.where({ courseId }) + .query((knex) => knex.whereNotIn('challengeId', answeredChallengeIds)) + .orderBy('id', 'asc') + .fetch({ require: false }); - if (certificationChallenge === null) { - logger.trace(logContext, 'no found challenges'); - throw new AssessmentEndedError(); - } + if (certificationChallenge === null) { + logger.trace(logContext, 'no found challenges'); + throw new AssessmentEndedError(); + } - logContext.challengeId = certificationChallenge.id; - logger.trace(logContext, 'found challenge'); - return bookshelfToDomainConverter.buildDomainObject(CertificationChallengeBookshelf, certificationChallenge); - }, + logContext.challengeId = certificationChallenge.id; + logger.trace(logContext, 'found challenge'); + return bookshelfToDomainConverter.buildDomainObject(BookshelfCertificationChallenge, certificationChallenge); }; + +export { save, getNextNonAnsweredChallengeByCourseId }; diff --git a/api/lib/infrastructure/repositories/certification-course-repository.js b/api/lib/infrastructure/repositories/certification-course-repository.js index b1313461c9b..7c103387324 100644 --- a/api/lib/infrastructure/repositories/certification-course-repository.js +++ b/api/lib/infrastructure/repositories/certification-course-repository.js @@ -1,22 +1,25 @@ -const { _ } = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const bluebird = require('bluebird'); -const CertificationCourseBookshelf = require('../orm-models/CertificationCourse.js'); -const AssessmentBookshelf = require('../orm-models/Assessment.js'); -const bookshelfToDomainConverter = require('../utils/bookshelf-to-domain-converter.js'); -const DomainTransaction = require('../DomainTransaction.js'); -const CertificationCourse = require('../../domain/models/CertificationCourse.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const certificationChallengeRepository = require('./certification-challenge-repository.js'); -const CertificationIssueReport = require('../../domain/models/CertificationIssueReport.js'); -const ComplementaryCertificationCourse = require('../../domain/models/ComplementaryCertificationCourse.js'); -const Bookshelf = require('../bookshelf.js'); +import lodash from 'lodash'; + +const { _ } = lodash; + +import { knex } from '../../../db/knex-database-connection.js'; +import bluebird from 'bluebird'; +import { BookshelfCertificationCourse } from '../orm-models/CertificationCourse.js'; +import { BookshelfAssessment } from '../orm-models/Assessment.js'; +import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { CertificationCourse } from '../../domain/models/CertificationCourse.js'; +import { NotFoundError } from '../../domain/errors.js'; +import * as certificationChallengeRepository from './certification-challenge-repository.js'; +import { CertificationIssueReport } from '../../domain/models/CertificationIssueReport.js'; +import { ComplementaryCertificationCourse } from '../../domain/models/ComplementaryCertificationCourse.js'; +import { Bookshelf } from '../bookshelf.js'; async function save({ certificationCourse, domainTransaction = DomainTransaction.emptyTransaction() }) { const knexConn = domainTransaction.knexTransaction || Bookshelf.knex; const certificationCourseToSaveDTO = _adaptModelToDb(certificationCourse); const options = { transacting: domainTransaction.knexTransaction }; - const savedCertificationCourseDTO = await new CertificationCourseBookshelf(certificationCourseToSaveDTO).save( + const savedCertificationCourseDTO = await new BookshelfCertificationCourse(certificationCourseToSaveDTO).save( null, options ); @@ -54,7 +57,7 @@ async function changeCompletionDate( completedAt = null, domainTransaction = DomainTransaction.emptyTransaction() ) { - const certificationCourseBookshelf = new CertificationCourseBookshelf({ id: certificationCourseId, completedAt }); + const certificationCourseBookshelf = new BookshelfCertificationCourse({ id: certificationCourseId, completedAt }); const savedCertificationCourse = await certificationCourseBookshelf.save(null, { transacting: domainTransaction.knexTransaction, }); @@ -63,12 +66,12 @@ async function changeCompletionDate( async function get(id) { try { - const certificationCourseBookshelf = await CertificationCourseBookshelf.where({ id }).fetch({ + const certificationCourseBookshelf = await BookshelfCertificationCourse.where({ id }).fetch({ withRelated: ['assessment', 'challenges', 'certificationIssueReports', 'complementaryCertificationCourses'], }); return toDomain(certificationCourseBookshelf); } catch (bookshelfError) { - if (bookshelfError instanceof CertificationCourseBookshelf.NotFoundError) { + if (bookshelfError instanceof BookshelfCertificationCourse.NotFoundError) { throw new NotFoundError(`Certification course of id ${id} does not exist.`); } throw bookshelfError; @@ -89,7 +92,7 @@ async function findOneCertificationCourseByUserIdAndSessionId({ sessionId, domainTransaction = DomainTransaction.emptyTransaction(), }) { - const certificationCourse = await CertificationCourseBookshelf.where({ userId, sessionId }) + const certificationCourse = await BookshelfCertificationCourse.where({ userId, sessionId }) .orderBy('createdAt', 'desc') .fetch({ require: false, @@ -101,12 +104,12 @@ async function findOneCertificationCourseByUserIdAndSessionId({ async function update(certificationCourse) { const certificationCourseData = _pickUpdatableProperties(certificationCourse); - const certificationCourseBookshelf = new CertificationCourseBookshelf(certificationCourseData); + const certificationCourseBookshelf = new BookshelfCertificationCourse(certificationCourseData); try { const certificationCourse = await certificationCourseBookshelf.save(); return toDomain(certificationCourse); } catch (err) { - if (err instanceof CertificationCourseBookshelf.NoRowsUpdatedError) { + if (err instanceof BookshelfCertificationCourse.NoRowsUpdatedError) { throw new NotFoundError(`No rows updated for certification course of id ${certificationCourse.getId()}.`); } throw err; @@ -123,7 +126,7 @@ async function isVerificationCodeAvailable(verificationCode) { } async function findCertificationCoursesBySessionId({ sessionId }) { - const bookshelfCertificationCourses = await CertificationCourseBookshelf.where({ sessionId }).fetchAll(); + const bookshelfCertificationCourses = await BookshelfCertificationCourse.where({ sessionId }).fetchAll(); return bookshelfCertificationCourses.map(toDomain); } @@ -133,7 +136,7 @@ function toDomain(bookshelfCertificationCourse) { } const assessment = bookshelfToDomainConverter.buildDomainObject( - AssessmentBookshelf, + BookshelfAssessment, bookshelfCertificationCourse.related('assessment') ); const dbCertificationCourse = bookshelfCertificationCourse.toJSON(); @@ -174,7 +177,7 @@ function toDomain(bookshelfCertificationCourse) { }); } -module.exports = { +export { save, changeCompletionDate, get, diff --git a/api/lib/infrastructure/repositories/certification-cpf-city-repository.js b/api/lib/infrastructure/repositories/certification-cpf-city-repository.js index 5c003c1aff6..cb4bdc8ee99 100644 --- a/api/lib/infrastructure/repositories/certification-cpf-city-repository.js +++ b/api/lib/infrastructure/repositories/certification-cpf-city-repository.js @@ -1,28 +1,28 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const CertificationCpfCity = require('../../domain/models/CertificationCpfCity.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { CertificationCpfCity } from '../../domain/models/CertificationCpfCity.js'; const COLUMNS = ['id', 'name', 'postalCode', 'INSEECode', 'isActualName']; -module.exports = { - async findByINSEECode({ INSEECode }) { - const result = await knex - .select(COLUMNS) - .from('certification-cpf-cities') - .where({ INSEECode }) - .orderBy('isActualName', 'desc') - .orderBy('id'); +const findByINSEECode = async function ({ INSEECode }) { + const result = await knex + .select(COLUMNS) + .from('certification-cpf-cities') + .where({ INSEECode }) + .orderBy('isActualName', 'desc') + .orderBy('id'); - return result.map((city) => new CertificationCpfCity(city)); - }, + return result.map((city) => new CertificationCpfCity(city)); +}; - async findByPostalCode({ postalCode }) { - const result = await knex - .select(COLUMNS) - .from('certification-cpf-cities') - .where({ postalCode }) - .orderBy('isActualName', 'desc') - .orderBy('id'); +const findByPostalCode = async function ({ postalCode }) { + const result = await knex + .select(COLUMNS) + .from('certification-cpf-cities') + .where({ postalCode }) + .orderBy('isActualName', 'desc') + .orderBy('id'); - return result.map((city) => new CertificationCpfCity(city)); - }, + return result.map((city) => new CertificationCpfCity(city)); }; + +export { findByINSEECode, findByPostalCode }; diff --git a/api/lib/infrastructure/repositories/certification-cpf-country-repository.js b/api/lib/infrastructure/repositories/certification-cpf-country-repository.js index be580717503..d94a67c5623 100644 --- a/api/lib/infrastructure/repositories/certification-cpf-country-repository.js +++ b/api/lib/infrastructure/repositories/certification-cpf-country-repository.js @@ -1,16 +1,16 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const CertificationCpfCountry = require('../../domain/models/CertificationCpfCountry.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { CertificationCpfCountry } from '../../domain/models/CertificationCpfCountry.js'; -module.exports = { - async getByMatcher({ matcher }) { - const COLUMNS = ['id', 'code', 'commonName', 'originalName', 'matcher']; +const getByMatcher = async function ({ matcher }) { + const COLUMNS = ['id', 'code', 'commonName', 'originalName', 'matcher']; - const result = await knex.select(COLUMNS).from('certification-cpf-countries').where({ matcher }).first(); + const result = await knex.select(COLUMNS).from('certification-cpf-countries').where({ matcher }).first(); - if (!result) { - return null; - } + if (!result) { + return null; + } - return new CertificationCpfCountry(result); - }, + return new CertificationCpfCountry(result); }; + +export { getByMatcher }; diff --git a/api/lib/infrastructure/repositories/certification-issue-report-repository.js b/api/lib/infrastructure/repositories/certification-issue-report-repository.js index 19523134736..997352b2a3d 100644 --- a/api/lib/infrastructure/repositories/certification-issue-report-repository.js +++ b/api/lib/infrastructure/repositories/certification-issue-report-repository.js @@ -1,32 +1,35 @@ -const omit = require('lodash/omit'); -const { knex } = require('../../../db/knex-database-connection.js'); -const CertificationIssueReport = require('../../domain/models/CertificationIssueReport.js'); - -module.exports = { - async save(certificationIssueReport) { - const [data] = await knex - .from('certification-issue-reports') - .insert(omit(certificationIssueReport, ['isImpactful'])) - .onConflict(['id']) - .merge() - .returning('*'); - - return new CertificationIssueReport(data); - }, - - async get(id) { - const certificationIssueReport = await knex('certification-issue-reports').where({ id }).first(); - return new CertificationIssueReport(certificationIssueReport); - }, - - async findByCertificationCourseId(certificationCourseId) { - const certificationIssueReports = await knex('certification-issue-reports').where({ certificationCourseId }); - return certificationIssueReports.map( - (certificationIssueReport) => new CertificationIssueReport(certificationIssueReport) - ); - }, - - async delete(id) { - return knex('certification-issue-reports').where({ id }).del(); - }, +import lodash from 'lodash'; + +const { omit } = lodash; + +import { knex } from '../../../db/knex-database-connection.js'; +import { CertificationIssueReport } from '../../domain/models/CertificationIssueReport.js'; + +const save = async function (certificationIssueReport) { + const [data] = await knex + .from('certification-issue-reports') + .insert(omit(certificationIssueReport, ['isImpactful'])) + .onConflict(['id']) + .merge() + .returning('*'); + + return new CertificationIssueReport(data); +}; + +const get = async function (id) { + const certificationIssueReport = await knex('certification-issue-reports').where({ id }).first(); + return new CertificationIssueReport(certificationIssueReport); }; + +const findByCertificationCourseId = async function (certificationCourseId) { + const certificationIssueReports = await knex('certification-issue-reports').where({ certificationCourseId }); + return certificationIssueReports.map( + (certificationIssueReport) => new CertificationIssueReport(certificationIssueReport) + ); +}; + +const remove = async function (id) { + return knex('certification-issue-reports').where({ id }).del(); +}; + +export { save, get, findByCertificationCourseId, remove }; diff --git a/api/lib/infrastructure/repositories/certification-livret-scolaire-repository.js b/api/lib/infrastructure/repositories/certification-livret-scolaire-repository.js index 89929784e9a..a06f3404b61 100644 --- a/api/lib/infrastructure/repositories/certification-livret-scolaire-repository.js +++ b/api/lib/infrastructure/repositories/certification-livret-scolaire-repository.js @@ -1,84 +1,84 @@ -const Certificate = require('../../domain/read-models/livret-scolaire/Certificate.js'); -const { knex } = require('../../../db/knex-database-connection.js'); +import { Certificate } from '../../domain/read-models/livret-scolaire/Certificate.js'; +import { knex } from '../../../db/knex-database-connection.js'; -module.exports = { - async getCertificatesByOrganizationUAI(uai) { - const result = await knex - .select({ - id: 'certification-courses.id', - firstName: 'view-active-organization-learners.firstName', - middleName: 'view-active-organization-learners.middleName', - thirdName: 'view-active-organization-learners.thirdName', - lastName: 'view-active-organization-learners.lastName', - birthdate: 'view-active-organization-learners.birthdate', - nationalStudentId: 'view-active-organization-learners.nationalStudentId', - date: 'certification-courses.createdAt', - verificationCode: 'certification-courses.verificationCode', - deliveredAt: 'sessions.publishedAt', - certificationCenter: 'sessions.certificationCenter', - isPublished: 'certification-courses.isPublished', - status: 'assessment-results.status', - pixScore: 'assessment-results.pixScore', - competenceResults: knex.raw(` - json_agg( - json_build_object('level', "competence-marks".level, 'competenceId', "competence-marks"."competence_code") - ORDER BY "competence-marks"."competence_code" asc - )`), - }) - .from('certification-courses') - .innerJoin( - 'view-active-organization-learners', - 'view-active-organization-learners.userId', - 'certification-courses.userId' - ) - .innerJoin('sessions', 'sessions.id', 'certification-courses.sessionId') - .innerJoin( - 'certification-courses-last-assessment-results', - 'certification-courses.id', - 'certification-courses-last-assessment-results.certificationCourseId' - ) - .innerJoin( - 'assessment-results', - 'assessment-results.id', - 'certification-courses-last-assessment-results.lastAssessmentResultId' - ) - .innerJoin('assessments', 'assessments.certificationCourseId', 'certification-courses.id') - .innerJoin('competence-marks', 'competence-marks.assessmentResultId', 'assessment-results.id') - .whereNotExists( - knex - .select(1) - .from({ 'last-certification-courses': 'certification-courses' }) - .whereRaw('"last-certification-courses"."userId" = "certification-courses"."userId"') - .whereRaw('"last-certification-courses"."isCancelled"= false') - .whereRaw('"certification-courses"."createdAt" < "last-certification-courses"."createdAt"') - ) +const getCertificatesByOrganizationUAI = async function (uai) { + const result = await knex + .select({ + id: 'certification-courses.id', + firstName: 'view-active-organization-learners.firstName', + middleName: 'view-active-organization-learners.middleName', + thirdName: 'view-active-organization-learners.thirdName', + lastName: 'view-active-organization-learners.lastName', + birthdate: 'view-active-organization-learners.birthdate', + nationalStudentId: 'view-active-organization-learners.nationalStudentId', + date: 'certification-courses.createdAt', + verificationCode: 'certification-courses.verificationCode', + deliveredAt: 'sessions.publishedAt', + certificationCenter: 'sessions.certificationCenter', + isPublished: 'certification-courses.isPublished', + status: 'assessment-results.status', + pixScore: 'assessment-results.pixScore', + competenceResults: knex.raw(` + json_agg( + json_build_object('level', "competence-marks".level, 'competenceId', "competence-marks"."competence_code") + ORDER BY "competence-marks"."competence_code" asc + )`), + }) + .from('certification-courses') + .innerJoin( + 'view-active-organization-learners', + 'view-active-organization-learners.userId', + 'certification-courses.userId' + ) + .innerJoin('sessions', 'sessions.id', 'certification-courses.sessionId') + .innerJoin( + 'certification-courses-last-assessment-results', + 'certification-courses.id', + 'certification-courses-last-assessment-results.certificationCourseId' + ) + .innerJoin( + 'assessment-results', + 'assessment-results.id', + 'certification-courses-last-assessment-results.lastAssessmentResultId' + ) + .innerJoin('assessments', 'assessments.certificationCourseId', 'certification-courses.id') + .innerJoin('competence-marks', 'competence-marks.assessmentResultId', 'assessment-results.id') + .whereNotExists( + knex + .select(1) + .from({ 'last-certification-courses': 'certification-courses' }) + .whereRaw('"last-certification-courses"."userId" = "certification-courses"."userId"') + .whereRaw('"last-certification-courses"."isCancelled"= false') + .whereRaw('"certification-courses"."createdAt" < "last-certification-courses"."createdAt"') + ) - .where({ 'certification-courses.isCancelled': false }) - .where({ 'view-active-organization-learners.isDisabled': false }) - .where( - 'view-active-organization-learners.organizationId', - '=', - knex.select('id').from('organizations').whereRaw('LOWER("externalId") = LOWER(?)', uai) - ) + .where({ 'certification-courses.isCancelled': false }) + .where({ 'view-active-organization-learners.isDisabled': false }) + .where( + 'view-active-organization-learners.organizationId', + '=', + knex.select('id').from('organizations').whereRaw('LOWER("externalId") = LOWER(?)', uai) + ) - .groupBy( - 'view-active-organization-learners.id', - 'view-active-organization-learners.firstName', - 'view-active-organization-learners.middleName', - 'view-active-organization-learners.thirdName', - 'view-active-organization-learners.lastName', - 'view-active-organization-learners.birthdate', - 'view-active-organization-learners.nationalStudentId', - 'certification-courses.id', - 'sessions.id', - 'assessments.id', - 'assessment-results.id' - ) + .groupBy( + 'view-active-organization-learners.id', + 'view-active-organization-learners.firstName', + 'view-active-organization-learners.middleName', + 'view-active-organization-learners.thirdName', + 'view-active-organization-learners.lastName', + 'view-active-organization-learners.birthdate', + 'view-active-organization-learners.nationalStudentId', + 'certification-courses.id', + 'sessions.id', + 'assessments.id', + 'assessment-results.id' + ) - .orderBy('lastName', 'ASC') - .orderBy('firstName', 'ASC') - .orderBy('id', 'ASC'); + .orderBy('lastName', 'ASC') + .orderBy('firstName', 'ASC') + .orderBy('id', 'ASC'); - return result.map(Certificate.from); - }, + return result.map(Certificate.from); }; + +export { getCertificatesByOrganizationUAI }; diff --git a/api/lib/infrastructure/repositories/certification-officer-repository.js b/api/lib/infrastructure/repositories/certification-officer-repository.js index eb2fdb7e8a2..f9d6f0170cf 100644 --- a/api/lib/infrastructure/repositories/certification-officer-repository.js +++ b/api/lib/infrastructure/repositories/certification-officer-repository.js @@ -1,25 +1,24 @@ -const BookshelfUser = require('../orm-models/User.js'); +import { BookshelfUser } from '../orm-models/User.js'; +import { UserNotFoundError } from '../../domain/errors.js'; +import { CertificationOfficer } from '../../domain/models/CertificationOfficer.js'; -const { UserNotFoundError } = require('../../domain/errors.js'); -const CertificationOfficer = require('../../domain/models/CertificationOfficer.js'); +const get = async function (certificationOfficerId) { + try { + const certificationOfficer = await BookshelfUser.where({ id: certificationOfficerId }).fetch({ + columns: ['id', 'firstName', 'lastName'], + }); -module.exports = { - async get(certificationOfficerId) { - try { - const certificationOfficer = await BookshelfUser.where({ id: certificationOfficerId }).fetch({ - columns: ['id', 'firstName', 'lastName'], - }); - - return _toDomain(certificationOfficer.attributes); - } catch (error) { - if (error instanceof BookshelfUser.NotFoundError) { - throw new UserNotFoundError(`User not found for ID ${certificationOfficerId}`); - } - throw error; + return _toDomain(certificationOfficer.attributes); + } catch (error) { + if (error instanceof BookshelfUser.NotFoundError) { + throw new UserNotFoundError(`User not found for ID ${certificationOfficerId}`); } - }, + throw error; + } }; +export { get }; + function _toDomain(certificationOfficer) { return new CertificationOfficer(certificationOfficer); } diff --git a/api/lib/infrastructure/repositories/certification-point-of-contact-repository.js b/api/lib/infrastructure/repositories/certification-point-of-contact-repository.js index 0ad937652a7..3c0d2776d32 100644 --- a/api/lib/infrastructure/repositories/certification-point-of-contact-repository.js +++ b/api/lib/infrastructure/repositories/certification-point-of-contact-repository.js @@ -1,48 +1,48 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const CertificationPointOfContact = require('../../domain/read-models/CertificationPointOfContact.js'); -const AllowedCertificationCenterAccess = require('../../domain/read-models/AllowedCertificationCenterAccess.js'); +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; +import { NotFoundError } from '../../domain/errors.js'; +import { CertificationPointOfContact } from '../../domain/read-models/CertificationPointOfContact.js'; +import { AllowedCertificationCenterAccess } from '../../domain/read-models/AllowedCertificationCenterAccess.js'; -module.exports = { - async get(userId) { - const certificationPointOfContactDTO = await knex - .select({ - id: 'users.id', - firstName: 'users.firstName', - lastName: 'users.lastName', - email: 'users.email', - lang: 'users.lang', - pixCertifTermsOfServiceAccepted: 'users.pixCertifTermsOfServiceAccepted', - certificationCenterIds: knex.raw('array_agg(?? order by ?? asc)', [ - 'certificationCenterId', - 'certificationCenterId', - ]), - }) - .from('users') - .leftJoin('certification-center-memberships', 'certification-center-memberships.userId', 'users.id') - .where('users.id', userId) - .groupByRaw('1, 2, 3, 4, 5') - .first(); +const get = async function (userId) { + const certificationPointOfContactDTO = await knex + .select({ + id: 'users.id', + firstName: 'users.firstName', + lastName: 'users.lastName', + email: 'users.email', + lang: 'users.lang', + pixCertifTermsOfServiceAccepted: 'users.pixCertifTermsOfServiceAccepted', + certificationCenterIds: knex.raw('array_agg(?? order by ?? asc)', [ + 'certificationCenterId', + 'certificationCenterId', + ]), + }) + .from('users') + .leftJoin('certification-center-memberships', 'certification-center-memberships.userId', 'users.id') + .where('users.id', userId) + .groupByRaw('1, 2, 3, 4, 5') + .first(); - if (!certificationPointOfContactDTO) { - throw new NotFoundError(`Le référent de certification ${userId} n'existe pas.`); - } + if (!certificationPointOfContactDTO) { + throw new NotFoundError(`Le référent de certification ${userId} n'existe pas.`); + } - const authorizedCertificationCenterIds = await _removeDisabledCertificationCenterAccesses({ - certificationPointOfContactDTO, - }); - const allowedCertificationCenterAccesses = await _findAllowedCertificationCenterAccesses( - authorizedCertificationCenterIds - ); + const authorizedCertificationCenterIds = await _removeDisabledCertificationCenterAccesses({ + certificationPointOfContactDTO, + }); + const allowedCertificationCenterAccesses = await _findAllowedCertificationCenterAccesses( + authorizedCertificationCenterIds + ); - return new CertificationPointOfContact({ - ...certificationPointOfContactDTO, - allowedCertificationCenterAccesses, - }); - }, + return new CertificationPointOfContact({ + ...certificationPointOfContactDTO, + allowedCertificationCenterAccesses, + }); }; +export { get }; + async function _removeDisabledCertificationCenterAccesses({ certificationPointOfContactDTO }) { const certificationCenters = await knex .select('certificationCenterId') diff --git a/api/lib/infrastructure/repositories/certification-report-repository.js b/api/lib/infrastructure/repositories/certification-report-repository.js index 34a59d51cc6..9147ededc66 100644 --- a/api/lib/infrastructure/repositories/certification-report-repository.js +++ b/api/lib/infrastructure/repositories/certification-report-repository.js @@ -1,47 +1,46 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); +import _ from 'lodash'; +import bluebird from 'bluebird'; -const Bookshelf = require('../bookshelf.js'); -const CertificationReport = require('../../domain/models/CertificationReport.js'); +import { Bookshelf } from '../bookshelf.js'; +import { CertificationReport } from '../../domain/models/CertificationReport.js'; +import { BookshelfCertificationCourse } from '../orm-models/CertificationCourse.js'; +import { CertificationCourseUpdateError } from '../../domain/errors.js'; +import { toDomain } from './certification-course-repository.js'; -const CertificationCourseBookshelf = require('../orm-models/CertificationCourse.js'); -const { CertificationCourseUpdateError } = require('../../domain/errors.js'); -const { toDomain } = require('./certification-course-repository.js'); +const findBySessionId = async function (sessionId) { + const results = await BookshelfCertificationCourse.where({ sessionId }) + .query((qb) => { + qb.orderByRaw('LOWER("lastName") asc'); + qb.orderByRaw('LOWER("firstName") asc'); + }) + .fetchAll({ + withRelated: ['certificationIssueReports', 'assessment'], + }); -module.exports = { - async findBySessionId(sessionId) { - const results = await CertificationCourseBookshelf.where({ sessionId }) - .query((qb) => { - qb.orderByRaw('LOWER("lastName") asc'); - qb.orderByRaw('LOWER("firstName") asc'); - }) - .fetchAll({ - withRelated: ['certificationIssueReports', 'assessment'], - }); - - const certificationCourses = results.map(toDomain); - return _.map(certificationCourses, CertificationReport.fromCertificationCourse); - }, + const certificationCourses = results.map(toDomain); + return _.map(certificationCourses, CertificationReport.fromCertificationCourse); +}; - async finalizeAll(certificationReports) { - try { - await Bookshelf.transaction((trx) => { - const finalizeReport = (certificationReport) => _finalize({ certificationReport, transaction: trx }); - return bluebird.mapSeries(certificationReports, finalizeReport); - }); - } catch (err) { - throw new CertificationCourseUpdateError('An error occurred while finalizing the session'); - } - }, +const finalizeAll = async function (certificationReports) { + try { + await Bookshelf.transaction((trx) => { + const finalizeReport = (certificationReport) => _finalize({ certificationReport, transaction: trx }); + return bluebird.mapSeries(certificationReports, finalizeReport); + }); + } catch (err) { + throw new CertificationCourseUpdateError('An error occurred while finalizing the session'); + } }; +export { findBySessionId, finalizeAll }; + async function _finalize({ certificationReport, transaction = undefined }) { const saveOptions = { patch: true, method: 'update' }; if (transaction) { saveOptions.transacting = transaction; } - await new CertificationCourseBookshelf({ id: certificationReport.certificationCourseId }).save( + await new BookshelfCertificationCourse({ id: certificationReport.certificationCourseId }).save( { hasSeenEndTestScreen: certificationReport.hasSeenEndTestScreen }, saveOptions ); diff --git a/api/lib/infrastructure/repositories/certification-repository.js b/api/lib/infrastructure/repositories/certification-repository.js index 52b079f8169..1366b45bb74 100644 --- a/api/lib/infrastructure/repositories/certification-repository.js +++ b/api/lib/infrastructure/repositories/certification-repository.js @@ -1,56 +1,55 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const { CertificationCourseNotPublishableError } = require('../../../lib/domain/errors.js'); -const { status } = require('../../../lib/domain/models/AssessmentResult.js'); - -module.exports = { - async publishCertificationCoursesBySessionId(sessionId) { - const certificationDTOs = await knex('certification-courses') - .select({ - certificationId: 'certification-courses.id', - isCancelled: 'certification-courses.isCancelled', - assessmentResultStatus: 'assessment-results.status', - }) - .where('certification-courses.sessionId', sessionId) - .join('assessments', 'assessments.certificationCourseId', 'certification-courses.id') - .leftJoin( - 'certification-courses-last-assessment-results', - 'certification-courses.id', - 'certification-courses-last-assessment-results.certificationCourseId' - ) - .leftJoin( - 'assessment-results', - 'assessment-results.id', - 'certification-courses-last-assessment-results.lastAssessmentResultId' - ); - - const hasCertificationInError = _hasCertificationInError(certificationDTOs); - const hasCertificationWithNoAssessmentResultStatus = - _hasCertificationWithNoAssessmentResultStatus(certificationDTOs); - if (hasCertificationInError || hasCertificationWithNoAssessmentResultStatus) { - throw new CertificationCourseNotPublishableError(); - } - - const certificationDataToUpdate = certificationDTOs.map(({ certificationId, assessmentResultStatus }) => ({ - id: certificationId, - pixCertificationStatus: assessmentResultStatus, - isPublished: true, - updatedAt: new Date(), - })); - - // Trick to .batchUpdate(), which does not exist in knex per say - await knex('certification-courses') - .insert(certificationDataToUpdate) - .onConflict('id') - .merge(['pixCertificationStatus', 'isPublished', 'updatedAt']); - }, - - async unpublishCertificationCoursesBySessionId(sessionId) { - await knex('certification-courses') - .where({ sessionId }) - .update({ isPublished: false, pixCertificationStatus: null, updatedAt: new Date() }); - }, +import { knex } from '../../../db/knex-database-connection.js'; +import { CertificationCourseNotPublishableError } from '../../../lib/domain/errors.js'; +import { status } from '../../../lib/domain/models/AssessmentResult.js'; + +const publishCertificationCoursesBySessionId = async function (sessionId) { + const certificationDTOs = await knex('certification-courses') + .select({ + certificationId: 'certification-courses.id', + isCancelled: 'certification-courses.isCancelled', + assessmentResultStatus: 'assessment-results.status', + }) + .where('certification-courses.sessionId', sessionId) + .join('assessments', 'assessments.certificationCourseId', 'certification-courses.id') + .leftJoin( + 'certification-courses-last-assessment-results', + 'certification-courses.id', + 'certification-courses-last-assessment-results.certificationCourseId' + ) + .leftJoin( + 'assessment-results', + 'assessment-results.id', + 'certification-courses-last-assessment-results.lastAssessmentResultId' + ); + + const hasCertificationInError = _hasCertificationInError(certificationDTOs); + const hasCertificationWithNoAssessmentResultStatus = _hasCertificationWithNoAssessmentResultStatus(certificationDTOs); + if (hasCertificationInError || hasCertificationWithNoAssessmentResultStatus) { + throw new CertificationCourseNotPublishableError(); + } + + const certificationDataToUpdate = certificationDTOs.map(({ certificationId, assessmentResultStatus }) => ({ + id: certificationId, + pixCertificationStatus: assessmentResultStatus, + isPublished: true, + updatedAt: new Date(), + })); + + // Trick to .batchUpdate(), which does not exist in knex per say + await knex('certification-courses') + .insert(certificationDataToUpdate) + .onConflict('id') + .merge(['pixCertificationStatus', 'isPublished', 'updatedAt']); }; +const unpublishCertificationCoursesBySessionId = async function (sessionId) { + await knex('certification-courses') + .where({ sessionId }) + .update({ isPublished: false, pixCertificationStatus: null, updatedAt: new Date() }); +}; + +export { publishCertificationCoursesBySessionId, unpublishCertificationCoursesBySessionId }; + function _hasCertificationInError(certificationDTOs) { return certificationDTOs.some((dto) => dto.assessmentResultStatus === status.ERROR); } diff --git a/api/lib/infrastructure/repositories/certification-result-repository.js b/api/lib/infrastructure/repositories/certification-result-repository.js index c2409b6341a..1a211017ab2 100644 --- a/api/lib/infrastructure/repositories/certification-result-repository.js +++ b/api/lib/infrastructure/repositories/certification-result-repository.js @@ -1,58 +1,60 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const ComplementaryCertificationCourseResult = require('../../domain/models/ComplementaryCertificationCourseResult.js'); -const CertificationResult = require('../../domain/models/CertificationResult.js'); -const isEmpty = require('lodash/isEmpty'); +import { knex } from '../../../db/knex-database-connection.js'; +import { ComplementaryCertificationCourseResult } from '../../domain/models/ComplementaryCertificationCourseResult.js'; +import { CertificationResult } from '../../domain/models/CertificationResult.js'; +import lodash from 'lodash'; -module.exports = { - async findBySessionId({ sessionId }) { - const certificationResultDTOs = await _selectCertificationResults() - .where('certification-courses.sessionId', sessionId) - .orderBy('certification-courses.lastName', 'ASC') - .orderBy('certification-courses.firstName', 'ASC'); +const { isEmpty } = lodash; - const complementaryCertificationCourseResultsByCertificationCourseId = - await _selectComplementaryCertificationCourseResultsBySessionId({ - sessionId, - }); +const findBySessionId = async function ({ sessionId }) { + const certificationResultDTOs = await _selectCertificationResults() + .where('certification-courses.sessionId', sessionId) + .orderBy('certification-courses.lastName', 'ASC') + .orderBy('certification-courses.firstName', 'ASC'); - return certificationResultDTOs.map((certificationResultDTO) => { - certificationResultDTO.complementaryCertificationCourseResults = - complementaryCertificationCourseResultsByCertificationCourseId.find( - ({ certificationCourseId }) => certificationCourseId === certificationResultDTO.id - )?.complementaryCertificationCourseResults; - return _toDomain(certificationResultDTO); + const complementaryCertificationCourseResultsByCertificationCourseId = + await _selectComplementaryCertificationCourseResultsBySessionId({ + sessionId, }); - }, - async findByCertificationCandidateIds({ certificationCandidateIds }) { - const certificationResultDTOs = await _selectCertificationResults() - .join('certification-candidates', function () { - this.on({ 'certification-candidates.sessionId': 'certification-courses.sessionId' }).andOn({ - 'certification-candidates.userId': 'certification-courses.userId', - }); - }) - .whereIn('certification-candidates.id', certificationCandidateIds) - .orderBy('certification-courses.lastName', 'ASC') - .orderBy('certification-courses.firstName', 'ASC'); + return certificationResultDTOs.map((certificationResultDTO) => { + certificationResultDTO.complementaryCertificationCourseResults = + complementaryCertificationCourseResultsByCertificationCourseId.find( + ({ certificationCourseId }) => certificationCourseId === certificationResultDTO.id + )?.complementaryCertificationCourseResults; + return _toDomain(certificationResultDTO); + }); +}; + +const findByCertificationCandidateIds = async function ({ certificationCandidateIds }) { + const certificationResultDTOs = await _selectCertificationResults() + .join('certification-candidates', function () { + this.on({ 'certification-candidates.sessionId': 'certification-courses.sessionId' }).andOn({ + 'certification-candidates.userId': 'certification-courses.userId', + }); + }) + .whereIn('certification-candidates.id', certificationCandidateIds) + .orderBy('certification-courses.lastName', 'ASC') + .orderBy('certification-courses.firstName', 'ASC'); - let complementaryCertificationCourseResultsByCertificationCourseId = []; - if (!isEmpty(certificationResultDTOs)) { - complementaryCertificationCourseResultsByCertificationCourseId = - await _selectComplementaryCertificationCourseResultsBySessionId({ - sessionId: certificationResultDTOs[0].sessionId, - }); - } + let complementaryCertificationCourseResultsByCertificationCourseId = []; + if (!isEmpty(certificationResultDTOs)) { + complementaryCertificationCourseResultsByCertificationCourseId = + await _selectComplementaryCertificationCourseResultsBySessionId({ + sessionId: certificationResultDTOs[0].sessionId, + }); + } - return certificationResultDTOs.map((certificationResultDTO) => { - certificationResultDTO.complementaryCertificationCourseResults = - complementaryCertificationCourseResultsByCertificationCourseId.find( - ({ certificationCourseId }) => certificationCourseId === certificationResultDTO.id - )?.complementaryCertificationCourseResults; - return _toDomain(certificationResultDTO); - }); - }, + return certificationResultDTOs.map((certificationResultDTO) => { + certificationResultDTO.complementaryCertificationCourseResults = + complementaryCertificationCourseResultsByCertificationCourseId.find( + ({ certificationCourseId }) => certificationCourseId === certificationResultDTO.id + )?.complementaryCertificationCourseResults; + return _toDomain(certificationResultDTO); + }); }; +export { findBySessionId, findByCertificationCandidateIds }; + function _selectCertificationResults() { return knex .select({ diff --git a/api/lib/infrastructure/repositories/certified-profile-repository.js b/api/lib/infrastructure/repositories/certified-profile-repository.js index d4bbb4fe2b5..6fb2ab2a642 100644 --- a/api/lib/infrastructure/repositories/certified-profile-repository.js +++ b/api/lib/infrastructure/repositories/certified-profile-repository.js @@ -1,64 +1,66 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; + +import { CertifiedProfile, CertifiedArea, CertifiedCompetence, CertifiedTube, CertifiedSkill, -} = require('../../domain/read-models/CertifiedProfile.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const { skillDatasource } = require('../datasources/learning-content/skill-datasource.js'); -const { tubeDatasource } = require('../datasources/learning-content/tube-datasource.js'); -const { competenceDatasource } = require('../datasources/learning-content/competence-datasource.js'); -const { areaDatasource } = require('../datasources/learning-content/area-datasource.js'); -const knowledgeElementRepository = require('./knowledge-element-repository.js'); +} from '../../domain/read-models/CertifiedProfile.js'; -module.exports = { - async get(certificationCourseId) { - const certificationDatas = await knex - .select({ - userId: 'certification-courses.userId', - createdAt: 'certification-courses.createdAt', - skillId: 'certification-challenges.associatedSkillId', - }) - .from('certification-courses') - .join('certification-challenges', 'certification-challenges.courseId', 'certification-courses.id') - .where('certification-courses.id', certificationCourseId); +import { NotFoundError } from '../../domain/errors.js'; +import { skillDatasource } from '../datasources/learning-content/skill-datasource.js'; +import { tubeDatasource } from '../datasources/learning-content/tube-datasource.js'; +import { competenceDatasource } from '../datasources/learning-content/competence-datasource.js'; +import { areaDatasource } from '../datasources/learning-content/area-datasource.js'; +import * as knowledgeElementRepository from './knowledge-element-repository.js'; - if (certificationDatas.length === 0) { - throw new NotFoundError(`Test de certification ${certificationCourseId} n'existe pas`); - } - const userId = certificationDatas[0].userId; - const createdAt = certificationDatas[0].createdAt; - const askedSkillIds = certificationDatas.map((data) => data.skillId); +const get = async function (certificationCourseId) { + const certificationDatas = await knex + .select({ + userId: 'certification-courses.userId', + createdAt: 'certification-courses.createdAt', + skillId: 'certification-challenges.associatedSkillId', + }) + .from('certification-courses') + .join('certification-challenges', 'certification-challenges.courseId', 'certification-courses.id') + .where('certification-courses.id', certificationCourseId); - const knowledgeElements = await knowledgeElementRepository.findUniqByUserId({ - userId, - limitDate: createdAt, - }); + if (certificationDatas.length === 0) { + throw new NotFoundError(`Test de certification ${certificationCourseId} n'existe pas`); + } + const userId = certificationDatas[0].userId; + const createdAt = certificationDatas[0].createdAt; + const askedSkillIds = certificationDatas.map((data) => data.skillId); - const isKnowledgeElementValidated = (knowledgeElement) => knowledgeElement.status === 'validated'; - const skillIds = knowledgeElements - .filter((knowledgeElement) => isKnowledgeElementValidated(knowledgeElement)) - .map((pixKnowledgeElement) => pixKnowledgeElement.skillId); + const knowledgeElements = await knowledgeElementRepository.findUniqByUserId({ + userId, + limitDate: createdAt, + }); - const certifiedSkills = await _createCertifiedSkills(skillIds, askedSkillIds); - const certifiedTubes = await _createCertifiedTubes(certifiedSkills); - const certifiedCompetences = await _createCertifiedCompetences(certifiedTubes); - const certifiedAreas = await _createCertifiedAreas(certifiedCompetences); + const isKnowledgeElementValidated = (knowledgeElement) => knowledgeElement.status === 'validated'; + const skillIds = knowledgeElements + .filter((knowledgeElement) => isKnowledgeElementValidated(knowledgeElement)) + .map((pixKnowledgeElement) => pixKnowledgeElement.skillId); - return new CertifiedProfile({ - id: certificationCourseId, - userId, - certifiedAreas, - certifiedCompetences, - certifiedTubes, - certifiedSkills, - }); - }, + const certifiedSkills = await _createCertifiedSkills(skillIds, askedSkillIds); + const certifiedTubes = await _createCertifiedTubes(certifiedSkills); + const certifiedCompetences = await _createCertifiedCompetences(certifiedTubes); + const certifiedAreas = await _createCertifiedAreas(certifiedCompetences); + + return new CertifiedProfile({ + id: certificationCourseId, + userId, + certifiedAreas, + certifiedCompetences, + certifiedTubes, + certifiedSkills, + }); }; +export { get }; + async function _createCertifiedSkills(skillIds, askedSkillIds) { const learningContentSkills = await skillDatasource.findByRecordIds(skillIds); return learningContentSkills.map((learningContentSkill) => { diff --git a/api/lib/infrastructure/repositories/challenge-for-pix-auto-answer-repository.js b/api/lib/infrastructure/repositories/challenge-for-pix-auto-answer-repository.js index 7e3460c3e2e..e4378cd2f97 100644 --- a/api/lib/infrastructure/repositories/challenge-for-pix-auto-answer-repository.js +++ b/api/lib/infrastructure/repositories/challenge-for-pix-auto-answer-repository.js @@ -1,14 +1,14 @@ -const ChallengeForPixAutoAnswer = require('../../domain/read-models/ChallengeForPixAutoAnswer.js'); -const { challengeDatasource } = require('../datasources/learning-content/challenge-datasource.js'); +import { ChallengeForPixAutoAnswer } from '../../domain/read-models/ChallengeForPixAutoAnswer.js'; +import { challengeDatasource } from '../datasources/learning-content/challenge-datasource.js'; -module.exports = { - async get(challengeId) { - const challenge = await challengeDatasource.get(challengeId); - return new ChallengeForPixAutoAnswer({ - id: challenge.id, - solution: challenge.solution, - type: challenge.type, - autoReply: challenge.autoReply, - }); - }, +const get = async function (challengeId) { + const challenge = await challengeDatasource.get(challengeId); + return new ChallengeForPixAutoAnswer({ + id: challenge.id, + solution: challenge.solution, + type: challenge.type, + autoReply: challenge.autoReply, + }); }; + +export { get }; diff --git a/api/lib/infrastructure/repositories/challenge-repository.js b/api/lib/infrastructure/repositories/challenge-repository.js index 57df1dbf206..f99be7c38ff 100644 --- a/api/lib/infrastructure/repositories/challenge-repository.js +++ b/api/lib/infrastructure/repositories/challenge-repository.js @@ -1,101 +1,112 @@ -const _ = require('lodash'); -const Challenge = require('../../domain/models/Challenge.js'); - -const { challengeDatasource } = require('../datasources/learning-content/challenge-datasource.js'); -const { skillDatasource } = require('../datasources/learning-content/skill-datasource.js'); -const skillAdapter = require('../adapters/skill-adapter.js'); -const solutionAdapter = require('../adapters/solution-adapter.js'); -const LearningContentResourceNotFound = require('../datasources/learning-content/LearningContentResourceNotFound.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const config = require('../../config.js'); - -module.exports = { - async get(id) { - try { - const challenge = await challengeDatasource.get(id); - const skill = await skillDatasource.get(challenge.skillId); - return _toDomain({ challengeDataObject: challenge, skillDataObject: skill }); - } catch (error) { - if (error instanceof LearningContentResourceNotFound) { - throw new NotFoundError(); - } - throw error; +import _ from 'lodash'; +import { Challenge } from '../../domain/models/Challenge.js'; +import { challengeDatasource } from '../datasources/learning-content/challenge-datasource.js'; +import { skillDatasource } from '../datasources/learning-content/skill-datasource.js'; +import * as skillAdapter from '../adapters/skill-adapter.js'; +import * as solutionAdapter from '../adapters/solution-adapter.js'; +import { LearningContentResourceNotFound } from '../datasources/learning-content/LearningContentResourceNotFound.js'; +import { NotFoundError } from '../../domain/errors.js'; +import { config } from '../../config.js'; + +const get = async function (id) { + try { + const challenge = await challengeDatasource.get(id); + const skill = await skillDatasource.get(challenge.skillId); + return _toDomain({ challengeDataObject: challenge, skillDataObject: skill }); + } catch (error) { + if (error instanceof LearningContentResourceNotFound) { + throw new NotFoundError(); } - }, - - async getMany(ids) { - try { - const challengeDataObjects = await challengeDatasource.getMany(ids); - const skills = await skillDatasource.getMany(challengeDataObjects.map(({ skillId }) => skillId)); - return _toDomainCollection({ challengeDataObjects, skills }); - } catch (error) { - if (error instanceof LearningContentResourceNotFound) { - throw new NotFoundError(); - } - throw error; - } - }, + throw error; + } +}; - async list() { - const challengeDataObjects = await challengeDatasource.list(); - const skills = await skillDatasource.list(); +const getMany = async function (ids) { + try { + const challengeDataObjects = await challengeDatasource.getMany(ids); + const skills = await skillDatasource.getMany(challengeDataObjects.map(({ skillId }) => skillId)); return _toDomainCollection({ challengeDataObjects, skills }); - }, - - async findValidated() { - const challengeDataObjects = await challengeDatasource.findValidated(); - const activeSkills = await skillDatasource.findActive(); - return _toDomainCollection({ challengeDataObjects, skills: activeSkills }); - }, - - async findOperative() { - const challengeDataObjects = await challengeDatasource.findOperative(); - const operativeSkills = await skillDatasource.findOperative(); - return _toDomainCollection({ challengeDataObjects, skills: operativeSkills }); - }, - - async findOperativeHavingLocale(locale) { - const challengeDataObjects = await challengeDatasource.findOperativeHavingLocale(locale); - const operativeSkills = await skillDatasource.findOperative(); - return _toDomainCollection({ challengeDataObjects, skills: operativeSkills }); - }, - - async findValidatedByCompetenceId(competenceId) { - const challengeDataObjects = await challengeDatasource.findValidatedByCompetenceId(competenceId); - const activeSkills = await skillDatasource.findActive(); - return _toDomainCollection({ challengeDataObjects, skills: activeSkills }); - }, - - async findOperativeBySkills(skills) { - const skillIds = skills.map((skill) => skill.id); - const challengeDataObjects = await challengeDatasource.findOperativeBySkillIds(skillIds); - const operativeSkills = await skillDatasource.findOperative(); - return _toDomainCollection({ challengeDataObjects, skills: operativeSkills }); - }, - - async findActiveFlashCompatible({ - locale, - successProbabilityThreshold = config.features.successProbabilityThreshold, - } = {}) { - const challengeDataObjects = await challengeDatasource.findActiveFlashCompatible(locale); - const activeSkills = await skillDatasource.findActive(); - return _toDomainCollection({ challengeDataObjects, skills: activeSkills, successProbabilityThreshold }); - }, - - async findOperativeFlashCompatible({ - locale, - successProbabilityThreshold = config.features.successProbabilityThreshold, - } = {}) { - const challengeDataObjects = await challengeDatasource.findOperativeFlashCompatible(locale); - const skills = await skillDatasource.list(); - return _toDomainCollection({ challengeDataObjects, skills, successProbabilityThreshold }); - }, - - async findValidatedBySkillId(skillId) { - const challengeDataObjects = await challengeDatasource.findValidatedBySkillId(skillId); - const activeSkills = await skillDatasource.findActive(); - return _toDomainCollection({ challengeDataObjects, skills: activeSkills }); - }, + } catch (error) { + if (error instanceof LearningContentResourceNotFound) { + throw new NotFoundError(); + } + throw error; + } +}; + +const list = async function () { + const challengeDataObjects = await challengeDatasource.list(); + const skills = await skillDatasource.list(); + return _toDomainCollection({ challengeDataObjects, skills }); +}; + +const findValidated = async function () { + const challengeDataObjects = await challengeDatasource.findValidated(); + const activeSkills = await skillDatasource.findActive(); + return _toDomainCollection({ challengeDataObjects, skills: activeSkills }); +}; + +const findOperative = async function () { + const challengeDataObjects = await challengeDatasource.findOperative(); + const operativeSkills = await skillDatasource.findOperative(); + return _toDomainCollection({ challengeDataObjects, skills: operativeSkills }); +}; + +const findOperativeHavingLocale = async function (locale) { + const challengeDataObjects = await challengeDatasource.findOperativeHavingLocale(locale); + const operativeSkills = await skillDatasource.findOperative(); + return _toDomainCollection({ challengeDataObjects, skills: operativeSkills }); +}; + +const findValidatedByCompetenceId = async function (competenceId) { + const challengeDataObjects = await challengeDatasource.findValidatedByCompetenceId(competenceId); + const activeSkills = await skillDatasource.findActive(); + return _toDomainCollection({ challengeDataObjects, skills: activeSkills }); +}; + +const findOperativeBySkills = async function (skills) { + const skillIds = skills.map((skill) => skill.id); + const challengeDataObjects = await challengeDatasource.findOperativeBySkillIds(skillIds); + const operativeSkills = await skillDatasource.findOperative(); + return _toDomainCollection({ challengeDataObjects, skills: operativeSkills }); +}; + +const findActiveFlashCompatible = async function ({ + locale, + successProbabilityThreshold = config.features.successProbabilityThreshold, +} = {}) { + const challengeDataObjects = await challengeDatasource.findActiveFlashCompatible(locale); + const activeSkills = await skillDatasource.findActive(); + return _toDomainCollection({ challengeDataObjects, skills: activeSkills, successProbabilityThreshold }); +}; + +const findOperativeFlashCompatible = async function ({ + locale, + successProbabilityThreshold = config.features.successProbabilityThreshold, +} = {}) { + const challengeDataObjects = await challengeDatasource.findOperativeFlashCompatible(locale); + const skills = await skillDatasource.list(); + return _toDomainCollection({ challengeDataObjects, skills, successProbabilityThreshold }); +}; + +const findValidatedBySkillId = async function (skillId) { + const challengeDataObjects = await challengeDatasource.findValidatedBySkillId(skillId); + const activeSkills = await skillDatasource.findActive(); + return _toDomainCollection({ challengeDataObjects, skills: activeSkills }); +}; + +export { + get, + getMany, + list, + findValidated, + findOperative, + findOperativeHavingLocale, + findValidatedByCompetenceId, + findOperativeBySkills, + findActiveFlashCompatible, + findOperativeFlashCompatible, + findValidatedBySkillId, }; function _toDomainCollection({ challengeDataObjects, skills, successProbabilityThreshold }) { diff --git a/api/lib/infrastructure/repositories/clea-certified-candidate-repository.js b/api/lib/infrastructure/repositories/clea-certified-candidate-repository.js index f620b510466..c672601b0b6 100644 --- a/api/lib/infrastructure/repositories/clea-certified-candidate-repository.js +++ b/api/lib/infrastructure/repositories/clea-certified-candidate-repository.js @@ -1,49 +1,49 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const { CLEA } = require('../../domain/models/ComplementaryCertification.js'); -const CleaCertifiedCandidate = require('../../domain/read-models/CleaCertifiedCandidate.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { CLEA } from '../../domain/models/ComplementaryCertification.js'; +import { CleaCertifiedCandidate } from '../../domain/read-models/CleaCertifiedCandidate.js'; -module.exports = { - async getBySessionId(sessionId) { - const results = await knex - .from('certification-courses') - .select( - 'certification-courses.firstName', - 'certification-courses.lastName', - 'certification-candidates.resultRecipientEmail', - 'certification-courses.birthdate', - 'certification-courses.birthplace', - 'certification-courses.birthPostalCode', - 'certification-courses.birthINSEECode', - 'certification-courses.birthCountry', - 'certification-courses.sex', - 'certification-courses.createdAt' - ) - .innerJoin('certification-candidates', function () { - this.on({ 'certification-candidates.sessionId': 'certification-courses.sessionId' }).andOn({ - 'certification-candidates.userId': 'certification-courses.userId', - }); - }) - .innerJoin( - 'complementary-certification-courses', - 'complementary-certification-courses.certificationCourseId', - 'certification-courses.id' - ) - .innerJoin( - 'complementary-certifications', - 'complementary-certifications.id', - 'complementary-certification-courses.complementaryCertificationId' - ) - .innerJoin( - 'complementary-certification-course-results', - 'complementary-certification-course-results.complementaryCertificationCourseId', - 'complementary-certification-courses.id' - ) - .where({ - 'certification-courses.sessionId': sessionId, - 'certification-courses.isPublished': true, - 'complementary-certifications.key': CLEA, - 'complementary-certification-course-results.acquired': true, +const getBySessionId = async function (sessionId) { + const results = await knex + .from('certification-courses') + .select( + 'certification-courses.firstName', + 'certification-courses.lastName', + 'certification-candidates.resultRecipientEmail', + 'certification-courses.birthdate', + 'certification-courses.birthplace', + 'certification-courses.birthPostalCode', + 'certification-courses.birthINSEECode', + 'certification-courses.birthCountry', + 'certification-courses.sex', + 'certification-courses.createdAt' + ) + .innerJoin('certification-candidates', function () { + this.on({ 'certification-candidates.sessionId': 'certification-courses.sessionId' }).andOn({ + 'certification-candidates.userId': 'certification-courses.userId', }); - return results.map((candidate) => new CleaCertifiedCandidate(candidate)); - }, + }) + .innerJoin( + 'complementary-certification-courses', + 'complementary-certification-courses.certificationCourseId', + 'certification-courses.id' + ) + .innerJoin( + 'complementary-certifications', + 'complementary-certifications.id', + 'complementary-certification-courses.complementaryCertificationId' + ) + .innerJoin( + 'complementary-certification-course-results', + 'complementary-certification-course-results.complementaryCertificationCourseId', + 'complementary-certification-courses.id' + ) + .where({ + 'certification-courses.sessionId': sessionId, + 'certification-courses.isPublished': true, + 'complementary-certifications.key': CLEA, + 'complementary-certification-course-results.acquired': true, + }); + return results.map((candidate) => new CleaCertifiedCandidate(candidate)); }; + +export { getBySessionId }; diff --git a/api/lib/infrastructure/repositories/competence-evaluation-repository.js b/api/lib/infrastructure/repositories/competence-evaluation-repository.js index 3d273a73665..9fff677daa2 100644 --- a/api/lib/infrastructure/repositories/competence-evaluation-repository.js +++ b/api/lib/infrastructure/repositories/competence-evaluation-repository.js @@ -1,109 +1,119 @@ -const bookshelfToDomainConverter = require('../utils/bookshelf-to-domain-converter.js'); -const BookshelfCompetenceEvaluation = require('../orm-models/CompetenceEvaluation.js'); -const _ = require('lodash'); -const { NotFoundError } = require('../../domain/errors.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); +import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js'; +import { BookshelfCompetenceEvaluation } from '../orm-models/CompetenceEvaluation.js'; +import _ from 'lodash'; +import { NotFoundError } from '../../domain/errors.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; -module.exports = { - async save({ competenceEvaluation, domainTransaction = DomainTransaction.emptyTransaction() }) { - let competenceEvaluationCreated = await _getByCompetenceIdAndUserId({ - competenceId: competenceEvaluation.competenceId, - userId: competenceEvaluation.userId, - domainTransaction, - }); - if (competenceEvaluationCreated) { - return competenceEvaluationCreated; - } else { - competenceEvaluationCreated = await new BookshelfCompetenceEvaluation( - _.omit(competenceEvaluation, ['assessment', 'scorecard']) - ) - .save(null, { transacting: domainTransaction.knexTransaction }) - .then((result) => bookshelfToDomainConverter.buildDomainObject(BookshelfCompetenceEvaluation, result)); - } +const save = async function ({ competenceEvaluation, domainTransaction = DomainTransaction.emptyTransaction() }) { + let competenceEvaluationCreated = await _getByCompetenceIdAndUserId({ + competenceId: competenceEvaluation.competenceId, + userId: competenceEvaluation.userId, + domainTransaction, + }); + if (competenceEvaluationCreated) { return competenceEvaluationCreated; - }, + } else { + competenceEvaluationCreated = await new BookshelfCompetenceEvaluation( + _.omit(competenceEvaluation, ['assessment', 'scorecard']) + ) + .save(null, { transacting: domainTransaction.knexTransaction }) + .then((result) => bookshelfToDomainConverter.buildDomainObject(BookshelfCompetenceEvaluation, result)); + } + return competenceEvaluationCreated; +}; - updateStatusByAssessmentId({ assessmentId, status }) { - return BookshelfCompetenceEvaluation.where({ assessmentId }) - .save({ status }, { require: true, patch: true }) - .then((updatedCompetenceEvaluation) => - bookshelfToDomainConverter.buildDomainObject(BookshelfCompetenceEvaluation, updatedCompetenceEvaluation) - ); - }, +const updateStatusByAssessmentId = function ({ assessmentId, status }) { + return BookshelfCompetenceEvaluation.where({ assessmentId }) + .save({ status }, { require: true, patch: true }) + .then((updatedCompetenceEvaluation) => + bookshelfToDomainConverter.buildDomainObject(BookshelfCompetenceEvaluation, updatedCompetenceEvaluation) + ); +}; - updateStatusByUserIdAndCompetenceId({ userId, competenceId, status }) { - return BookshelfCompetenceEvaluation.where({ userId, competenceId }) - .save({ status }, { require: true, patch: true }) - .then((updatedCompetenceEvaluation) => - bookshelfToDomainConverter.buildDomainObject(BookshelfCompetenceEvaluation, updatedCompetenceEvaluation) - ); - }, +const updateStatusByUserIdAndCompetenceId = function ({ userId, competenceId, status }) { + return BookshelfCompetenceEvaluation.where({ userId, competenceId }) + .save({ status }, { require: true, patch: true }) + .then((updatedCompetenceEvaluation) => + bookshelfToDomainConverter.buildDomainObject(BookshelfCompetenceEvaluation, updatedCompetenceEvaluation) + ); +}; - updateAssessmentId({ - currentAssessmentId, - newAssessmentId, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - return BookshelfCompetenceEvaluation.where({ assessmentId: currentAssessmentId }) - .save( - { assessmentId: newAssessmentId }, - { require: true, patch: true, transacting: domainTransaction.knexTransaction } - ) - .then((updatedCompetenceEvaluation) => - bookshelfToDomainConverter.buildDomainObject(BookshelfCompetenceEvaluation, updatedCompetenceEvaluation) - ); - }, +const updateAssessmentId = function ({ + currentAssessmentId, + newAssessmentId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + return BookshelfCompetenceEvaluation.where({ assessmentId: currentAssessmentId }) + .save( + { assessmentId: newAssessmentId }, + { require: true, patch: true, transacting: domainTransaction.knexTransaction } + ) + .then((updatedCompetenceEvaluation) => + bookshelfToDomainConverter.buildDomainObject(BookshelfCompetenceEvaluation, updatedCompetenceEvaluation) + ); +}; - getByAssessmentId(assessmentId) { - return BookshelfCompetenceEvaluation.where({ assessmentId }) - .orderBy('createdAt', 'asc') - .fetch({ withRelated: ['assessment'] }) - .then((result) => bookshelfToDomainConverter.buildDomainObject(BookshelfCompetenceEvaluation, result)) - .catch((bookshelfError) => { - if (bookshelfError instanceof BookshelfCompetenceEvaluation.NotFoundError) { - throw new NotFoundError(); - } - throw bookshelfError; - }); - }, +const getByAssessmentId = function (assessmentId) { + return BookshelfCompetenceEvaluation.where({ assessmentId }) + .orderBy('createdAt', 'asc') + .fetch({ withRelated: ['assessment'] }) + .then((result) => bookshelfToDomainConverter.buildDomainObject(BookshelfCompetenceEvaluation, result)) + .catch((bookshelfError) => { + if (bookshelfError instanceof BookshelfCompetenceEvaluation.NotFoundError) { + throw new NotFoundError(); + } + throw bookshelfError; + }); +}; - async getByCompetenceIdAndUserId({ +const getByCompetenceIdAndUserId = async function ({ + competenceId, + userId, + domainTransaction = DomainTransaction.emptyTransaction(), + forUpdate = false, +}) { + const competenceEvaluation = await _getByCompetenceIdAndUserId({ competenceId, userId, - domainTransaction = DomainTransaction.emptyTransaction(), - forUpdate = false, - }) { - const competenceEvaluation = await _getByCompetenceIdAndUserId({ - competenceId, - userId, - domainTransaction, - forUpdate, - }); - if (competenceEvaluation === null) { - throw new NotFoundError(); - } - return competenceEvaluation; - }, + domainTransaction, + forUpdate, + }); + if (competenceEvaluation === null) { + throw new NotFoundError(); + } + return competenceEvaluation; +}; - findByUserId(userId) { - return BookshelfCompetenceEvaluation.where({ userId }) - .orderBy('createdAt', 'asc') - .fetchAll({ withRelated: ['assessment'] }) - .then((results) => bookshelfToDomainConverter.buildDomainObjects(BookshelfCompetenceEvaluation, results)) - .then(_selectOnlyOneCompetenceEvaluationByCompetence); - }, +const findByUserId = function (userId) { + return BookshelfCompetenceEvaluation.where({ userId }) + .orderBy('createdAt', 'asc') + .fetchAll({ withRelated: ['assessment'] }) + .then((results) => bookshelfToDomainConverter.buildDomainObjects(BookshelfCompetenceEvaluation, results)) + .then(_selectOnlyOneCompetenceEvaluationByCompetence); +}; - findByAssessmentId(assessmentId) { - return BookshelfCompetenceEvaluation.where({ assessmentId }) - .orderBy('createdAt', 'asc') - .fetchAll() - .then((results) => bookshelfToDomainConverter.buildDomainObjects(BookshelfCompetenceEvaluation, results)); - }, +const findByAssessmentId = function (assessmentId) { + return BookshelfCompetenceEvaluation.where({ assessmentId }) + .orderBy('createdAt', 'asc') + .fetchAll() + .then((results) => bookshelfToDomainConverter.buildDomainObjects(BookshelfCompetenceEvaluation, results)); +}; + +const existsByCompetenceIdAndUserId = async function ({ competenceId, userId }) { + const competenceEvaluation = await _getByCompetenceIdAndUserId({ competenceId, userId }); + return competenceEvaluation ? true : false; +}; - async existsByCompetenceIdAndUserId({ competenceId, userId }) { - const competenceEvaluation = await _getByCompetenceIdAndUserId({ competenceId, userId }); - return competenceEvaluation ? true : false; - }, +export { + save, + updateStatusByAssessmentId, + updateStatusByUserIdAndCompetenceId, + updateAssessmentId, + getByAssessmentId, + getByCompetenceIdAndUserId, + findByUserId, + findByAssessmentId, + existsByCompetenceIdAndUserId, }; async function _getByCompetenceIdAndUserId({ diff --git a/api/lib/infrastructure/repositories/competence-mark-repository.js b/api/lib/infrastructure/repositories/competence-mark-repository.js index e0c84a83213..11896033863 100644 --- a/api/lib/infrastructure/repositories/competence-mark-repository.js +++ b/api/lib/infrastructure/repositories/competence-mark-repository.js @@ -1,51 +1,51 @@ -const BookshelfCompetenceMark = require('../orm-models/CompetenceMark.js'); -const CompetenceMark = require('../../domain/models/CompetenceMark.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const DomainTransaction = require('../DomainTransaction.js'); +import { BookshelfCompetenceMark } from '../orm-models/CompetenceMark.js'; +import { CompetenceMark } from '../../domain/models/CompetenceMark.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { DomainTransaction } from '../DomainTransaction.js'; function _toDomain(competenceMark) { return new CompetenceMark(competenceMark); } -module.exports = { - async save(competenceMark, domainTransaction = DomainTransaction.emptyTransaction()) { - await competenceMark.validate(); - const savedCompetenceMark = await new BookshelfCompetenceMark(competenceMark).save(null, { - transacting: domainTransaction.knexTransaction, - }); - return savedCompetenceMark.toDomainEntity(); - }, +const save = async function (competenceMark, domainTransaction = DomainTransaction.emptyTransaction()) { + await competenceMark.validate(); + const savedCompetenceMark = await new BookshelfCompetenceMark(competenceMark).save(null, { + transacting: domainTransaction.knexTransaction, + }); + return savedCompetenceMark.toDomainEntity(); +}; - async findByAssessmentResultId(assessmentResultId) { - const competenceMarks = await BookshelfCompetenceMark.where({ assessmentResultId }).fetchAll(); - return competenceMarks.models.map((model) => _toDomain(model.attributes)); - }, +const findByAssessmentResultId = async function (assessmentResultId) { + const competenceMarks = await BookshelfCompetenceMark.where({ assessmentResultId }).fetchAll(); + return competenceMarks.models.map((model) => _toDomain(model.attributes)); +}; - async findByCertificationCourseId(certificationCourseId) { - const competenceMarks = await knex - .select( - 'competence-marks.id', - 'competence-marks.area_code', - 'competence-marks.competence_code', - 'competence-marks.competenceId', - 'competence-marks.level', - 'competence-marks.score', - 'competence-marks.assessmentResultId' - ) - .from('assessments') - .join('assessment-results', 'assessments.id', 'assessment-results.assessmentId') - .leftJoin({ 'latest-assessment-results': 'assessment-results' }, function () { - this.on('assessments.id', 'latest-assessment-results.assessmentId').andOn( - 'assessment-results.createdAt', - '<', - 'latest-assessment-results.createdAt' - ); - }) - .join('competence-marks', 'assessment-results.id', 'competence-marks.assessmentResultId') - .whereNull('latest-assessment-results.id') - .where('assessments.certificationCourseId', certificationCourseId) - .orderBy('competence-marks.id'); +const findByCertificationCourseId = async function (certificationCourseId) { + const competenceMarks = await knex + .select( + 'competence-marks.id', + 'competence-marks.area_code', + 'competence-marks.competence_code', + 'competence-marks.competenceId', + 'competence-marks.level', + 'competence-marks.score', + 'competence-marks.assessmentResultId' + ) + .from('assessments') + .join('assessment-results', 'assessments.id', 'assessment-results.assessmentId') + .leftJoin({ 'latest-assessment-results': 'assessment-results' }, function () { + this.on('assessments.id', 'latest-assessment-results.assessmentId').andOn( + 'assessment-results.createdAt', + '<', + 'latest-assessment-results.createdAt' + ); + }) + .join('competence-marks', 'assessment-results.id', 'competence-marks.assessmentResultId') + .whereNull('latest-assessment-results.id') + .where('assessments.certificationCourseId', certificationCourseId) + .orderBy('competence-marks.id'); - return competenceMarks.map(_toDomain); - }, + return competenceMarks.map(_toDomain); }; + +export { save, findByAssessmentResultId, findByCertificationCourseId }; diff --git a/api/lib/infrastructure/repositories/competence-repository.js b/api/lib/infrastructure/repositories/competence-repository.js index 612ba7e7954..0ff1a8991d2 100644 --- a/api/lib/infrastructure/repositories/competence-repository.js +++ b/api/lib/infrastructure/repositories/competence-repository.js @@ -1,11 +1,13 @@ -const _ = require('lodash'); -const LearningContentResourceNotFound = require('../datasources/learning-content/LearningContentResourceNotFound.js'); -const Competence = require('../../domain/models/Competence.js'); -const { competenceDatasource } = require('../datasources/learning-content/competence-datasource.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const { FRENCH_FRANCE } = require('../../domain/constants.js').LOCALE; -const { PIX_ORIGIN } = require('../../domain/constants.js'); -const { getTranslatedKey } = require('../../domain/services/get-translated-text.js'); +import _ from 'lodash'; +import { LearningContentResourceNotFound } from '../datasources/learning-content/LearningContentResourceNotFound.js'; +import { Competence } from '../../domain/models/Competence.js'; +import { competenceDatasource } from '../datasources/learning-content/competence-datasource.js'; +import { NotFoundError } from '../../domain/errors.js'; +import { LOCALE, PIX_ORIGIN } from '../../domain/constants.js'; + +const { FRENCH_FRANCE } = LOCALE; + +import { getTranslatedKey } from '../../domain/services/get-translated-text.js'; function _toDomain({ competenceData, locale }) { const translatedCompetenceName = getTranslatedKey(competenceData.name_i18n, locale); @@ -23,55 +25,55 @@ function _toDomain({ competenceData, locale }) { }); } -module.exports = { - list({ locale } = { locale: FRENCH_FRANCE }) { - return _list({ locale: locale || FRENCH_FRANCE }); - }, +const list = function ({ locale } = { locale: FRENCH_FRANCE }) { + return _list({ locale: locale || FRENCH_FRANCE }); +}; - async listPixCompetencesOnly({ locale } = { locale: FRENCH_FRANCE }) { - const allCompetences = await _list({ locale }); - return allCompetences.filter((competence) => competence.origin === PIX_ORIGIN); - }, +const listPixCompetencesOnly = async function ({ locale } = { locale: FRENCH_FRANCE }) { + const allCompetences = await _list({ locale }); + return allCompetences.filter((competence) => competence.origin === PIX_ORIGIN); +}; - async get({ id, locale }) { - try { - const competenceData = await competenceDatasource.get(id); - return _toDomain({ competenceData, locale }); - } catch (err) { - if (err instanceof LearningContentResourceNotFound) { - throw new NotFoundError('La compétence demandée n’existe pas'); - } - throw err; +const get = async function ({ id, locale }) { + try { + const competenceData = await competenceDatasource.get(id); + return _toDomain({ competenceData, locale }); + } catch (err) { + if (err instanceof LearningContentResourceNotFound) { + throw new NotFoundError('La compétence demandée n’existe pas'); } - }, + throw err; + } +}; - async getCompetenceName({ id, locale }) { - try { - const competence = await competenceDatasource.get(id); - return getTranslatedKey(competence.name_i18n, locale); - } catch (err) { - if (err instanceof LearningContentResourceNotFound) { - throw new NotFoundError('La compétence demandée n’existe pas'); - } - throw err; +const getCompetenceName = async function ({ id, locale }) { + try { + const competence = await competenceDatasource.get(id); + return getTranslatedKey(competence.name_i18n, locale); + } catch (err) { + if (err instanceof LearningContentResourceNotFound) { + throw new NotFoundError('La compétence demandée n’existe pas'); } - }, + throw err; + } +}; - async findByRecordIds({ competenceIds, locale }) { - const competenceDatas = await competenceDatasource.list(); - return competenceDatas - .filter(({ id }) => competenceIds.includes(id)) - .map((competenceData) => _toDomain({ competenceData, locale })); - }, +const findByRecordIds = async function ({ competenceIds, locale }) { + const competenceDatas = await competenceDatasource.list(); + return competenceDatas + .filter(({ id }) => competenceIds.includes(id)) + .map((competenceData) => _toDomain({ competenceData, locale })); +}; - async findByAreaId({ areaId, locale }) { - const competenceDatas = await competenceDatasource.list(); - return competenceDatas - .filter((competenceData) => competenceData.areaId === areaId) - .map((competenceData) => _toDomain({ competenceData, locale })); - }, +const findByAreaId = async function ({ areaId, locale }) { + const competenceDatas = await competenceDatasource.list(); + return competenceDatas + .filter((competenceData) => competenceData.areaId === areaId) + .map((competenceData) => _toDomain({ competenceData, locale })); }; +export { list, listPixCompetencesOnly, get, getCompetenceName, findByRecordIds, findByAreaId }; + async function _list({ locale }) { const competenceDatas = await competenceDatasource.list(); return _.sortBy( diff --git a/api/lib/infrastructure/repositories/competence-tree-repository.js b/api/lib/infrastructure/repositories/competence-tree-repository.js index 0a78996eb1b..4444e38ee90 100644 --- a/api/lib/infrastructure/repositories/competence-tree-repository.js +++ b/api/lib/infrastructure/repositories/competence-tree-repository.js @@ -1,9 +1,9 @@ -const areaRepository = require('./area-repository.js'); -const CompetenceTree = require('../../domain/models/CompetenceTree.js'); +import * as areaRepository from './area-repository.js'; +import { CompetenceTree } from '../../domain/models/CompetenceTree.js'; -module.exports = { - async get({ locale, dependencies = { areaRepository } } = {}) { - const areas = await dependencies.areaRepository.listWithPixCompetencesOnly({ locale }); - return new CompetenceTree({ areas }); - }, +const get = async function ({ locale, dependencies = { areaRepository } } = {}) { + const areas = await dependencies.areaRepository.listWithPixCompetencesOnly({ locale }); + return new CompetenceTree({ areas }); }; + +export { get }; diff --git a/api/lib/infrastructure/repositories/complementary-certification-course-repository.js b/api/lib/infrastructure/repositories/complementary-certification-course-repository.js index 249a1c2fe8c..efdaf9c85c5 100644 --- a/api/lib/infrastructure/repositories/complementary-certification-course-repository.js +++ b/api/lib/infrastructure/repositories/complementary-certification-course-repository.js @@ -1,18 +1,21 @@ -const { knex } = require('../../../db/knex-database-connection.js'); +import { knex } from '../../../db/knex-database-connection.js'; -module.exports = { - async getComplementaryCertificationCourseId({ certificationCourseId, complementaryCertificationKey }) { - const result = await knex - .from('complementary-certification-courses') - .select('complementary-certification-courses.id') - .innerJoin( - 'complementary-certifications', - 'complementary-certifications.id', - 'complementary-certification-courses.complementaryCertificationId' - ) - .where({ certificationCourseId, key: complementaryCertificationKey }) - .first(); +const getComplementaryCertificationCourseId = async function ({ + certificationCourseId, + complementaryCertificationKey, +}) { + const result = await knex + .from('complementary-certification-courses') + .select('complementary-certification-courses.id') + .innerJoin( + 'complementary-certifications', + 'complementary-certifications.id', + 'complementary-certification-courses.complementaryCertificationId' + ) + .where({ certificationCourseId, key: complementaryCertificationKey }) + .first(); - return result?.id; - }, + return result?.id; }; + +export { getComplementaryCertificationCourseId }; diff --git a/api/lib/infrastructure/repositories/complementary-certification-course-result-repository.js b/api/lib/infrastructure/repositories/complementary-certification-course-result-repository.js index 79fb60e8e67..3f629ba108c 100644 --- a/api/lib/infrastructure/repositories/complementary-certification-course-result-repository.js +++ b/api/lib/infrastructure/repositories/complementary-certification-course-result-repository.js @@ -1,29 +1,29 @@ -const ComplementaryCertificationCourseResult = require('../../domain/models/ComplementaryCertificationCourseResult.js'); -const { knex } = require('../../../db/knex-database-connection.js'); +import { ComplementaryCertificationCourseResult } from '../../domain/models/ComplementaryCertificationCourseResult.js'; +import { knex } from '../../../db/knex-database-connection.js'; -module.exports = { - async getPixSourceResultByComplementaryCertificationCourseId({ complementaryCertificationCourseId }) { - const result = await knex - .select('*') - .from('complementary-certification-course-results') - .where({ complementaryCertificationCourseId, source: ComplementaryCertificationCourseResult.sources.PIX }) - .first(); +const getPixSourceResultByComplementaryCertificationCourseId = async function ({ complementaryCertificationCourseId }) { + const result = await knex + .select('*') + .from('complementary-certification-course-results') + .where({ complementaryCertificationCourseId, source: ComplementaryCertificationCourseResult.sources.PIX }) + .first(); - if (!result) return null; + if (!result) return null; - return ComplementaryCertificationCourseResult.from(result); - }, + return ComplementaryCertificationCourseResult.from(result); +}; - async getAllowedJuryLevelByBadgeKey({ key }) { - return knex('badges') - .pluck('key') - .where('targetProfileId', '=', knex('badges').select('targetProfileId').where({ key })); - }, +const getAllowedJuryLevelByBadgeKey = async function ({ key }) { + return knex('badges') + .pluck('key') + .where('targetProfileId', '=', knex('badges').select('targetProfileId').where({ key })); +}; - async save({ complementaryCertificationCourseId, partnerKey, acquired, source }) { - return knex('complementary-certification-course-results') - .insert({ partnerKey, acquired, complementaryCertificationCourseId, source }) - .onConflict(['complementaryCertificationCourseId', 'source']) - .merge(); - }, +const save = async function ({ complementaryCertificationCourseId, partnerKey, acquired, source }) { + return knex('complementary-certification-course-results') + .insert({ partnerKey, acquired, complementaryCertificationCourseId, source }) + .onConflict(['complementaryCertificationCourseId', 'source']) + .merge(); }; + +export { getPixSourceResultByComplementaryCertificationCourseId, getAllowedJuryLevelByBadgeKey, save }; diff --git a/api/lib/infrastructure/repositories/complementary-certification-habilitation-repository.js b/api/lib/infrastructure/repositories/complementary-certification-habilitation-repository.js index 03f4ad0b8ed..ff0c3ab69b1 100644 --- a/api/lib/infrastructure/repositories/complementary-certification-habilitation-repository.js +++ b/api/lib/infrastructure/repositories/complementary-certification-habilitation-repository.js @@ -1,32 +1,32 @@ -const { knex } = require('../../../db/knex-database-connection.js'); +import { knex } from '../../../db/knex-database-connection.js'; const COMPLEMENTARY_CERTIFICATION_HABILITATIONS_TABLE_NAME = 'complementary-certification-habilitations'; -module.exports = { - async save(complementaryCertification) { - const columnsToSave = { - complementaryCertificationId: complementaryCertification.complementaryCertificationId, - certificationCenterId: complementaryCertification.certificationCenterId, - }; - return knex(COMPLEMENTARY_CERTIFICATION_HABILITATIONS_TABLE_NAME).insert(columnsToSave); - }, +const save = async function (complementaryCertification) { + const columnsToSave = { + complementaryCertificationId: complementaryCertification.complementaryCertificationId, + certificationCenterId: complementaryCertification.certificationCenterId, + }; + return knex(COMPLEMENTARY_CERTIFICATION_HABILITATIONS_TABLE_NAME).insert(columnsToSave); +}; - async deleteByCertificationCenterId(certificationCenterId) { - return knex(COMPLEMENTARY_CERTIFICATION_HABILITATIONS_TABLE_NAME).delete().where({ certificationCenterId }); - }, +const deleteByCertificationCenterId = async function (certificationCenterId) { + return knex(COMPLEMENTARY_CERTIFICATION_HABILITATIONS_TABLE_NAME).delete().where({ certificationCenterId }); +}; - async findByCertificationCenterId(certificationCenterId) { - return knex(COMPLEMENTARY_CERTIFICATION_HABILITATIONS_TABLE_NAME) - .select([ - 'complementary-certifications.id', - 'complementary-certifications.key', - 'complementary-certifications.label', - ]) - .join( - 'complementary-certifications', - 'complementary-certifications.id', - `${COMPLEMENTARY_CERTIFICATION_HABILITATIONS_TABLE_NAME}.complementaryCertificationId` - ) - .where(`${COMPLEMENTARY_CERTIFICATION_HABILITATIONS_TABLE_NAME}.certificationCenterId`, certificationCenterId); - }, +const findByCertificationCenterId = async function (certificationCenterId) { + return knex(COMPLEMENTARY_CERTIFICATION_HABILITATIONS_TABLE_NAME) + .select([ + 'complementary-certifications.id', + 'complementary-certifications.key', + 'complementary-certifications.label', + ]) + .join( + 'complementary-certifications', + 'complementary-certifications.id', + `${COMPLEMENTARY_CERTIFICATION_HABILITATIONS_TABLE_NAME}.complementaryCertificationId` + ) + .where(`${COMPLEMENTARY_CERTIFICATION_HABILITATIONS_TABLE_NAME}.certificationCenterId`, certificationCenterId); }; + +export { save, deleteByCertificationCenterId, findByCertificationCenterId }; diff --git a/api/lib/infrastructure/repositories/complementary-certification-repository.js b/api/lib/infrastructure/repositories/complementary-certification-repository.js index b708d30367a..01a9b5f3df5 100644 --- a/api/lib/infrastructure/repositories/complementary-certification-repository.js +++ b/api/lib/infrastructure/repositories/complementary-certification-repository.js @@ -1,5 +1,5 @@ -const ComplementaryCertification = require('../../domain/models/ComplementaryCertification.js'); -const { knex } = require('../../../db/knex-database-connection.js'); +import { ComplementaryCertification } from '../../domain/models/ComplementaryCertification.js'; +import { knex } from '../../../db/knex-database-connection.js'; function _toDomain(row) { return new ComplementaryCertification({ @@ -7,16 +7,16 @@ function _toDomain(row) { }); } -module.exports = { - async findAll() { - const result = await knex.from('complementary-certifications').select('id', 'label', 'key').orderBy('id', 'asc'); +const findAll = async function () { + const result = await knex.from('complementary-certifications').select('id', 'label', 'key').orderBy('id', 'asc'); - return result.map(_toDomain); - }, + return result.map(_toDomain); +}; - async getByLabel({ label }) { - const result = await knex.from('complementary-certifications').where({ label }).first(); +const getByLabel = async function ({ label }) { + const result = await knex.from('complementary-certifications').where({ label }).first(); - return _toDomain(result); - }, + return _toDomain(result); }; + +export { findAll, getByLabel }; diff --git a/api/lib/infrastructure/repositories/complementary-certification-scoring-criteria-repository.js b/api/lib/infrastructure/repositories/complementary-certification-scoring-criteria-repository.js index b7fcd0f7d87..354a49e5863 100644 --- a/api/lib/infrastructure/repositories/complementary-certification-scoring-criteria-repository.js +++ b/api/lib/infrastructure/repositories/complementary-certification-scoring-criteria-repository.js @@ -1,44 +1,44 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const ComplementaryCertificationScoringCriteria = require('../../domain/models/ComplementaryCertificationScoringCriteria.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { ComplementaryCertificationScoringCriteria } from '../../domain/models/ComplementaryCertificationScoringCriteria.js'; -module.exports = { - async findByCertificationCourseId({ certificationCourseId }) { - const results = await knex('complementary-certification-courses') - .select({ - complementaryCertificationCourseId: 'complementary-certification-courses.id', - minimumReproducibilityRate: 'complementary-certifications.minimumReproducibilityRate', - complementaryCertificationBadgeKey: 'badges.key', - hasComplementaryReferential: 'complementary-certifications.hasComplementaryReferential', - minimumEarnedPix: 'complementary-certifications.minimumEarnedPix', - }) - .join( - 'complementary-certification-badges', - 'complementary-certification-badges.id', - 'complementary-certification-courses.complementaryCertificationBadgeId' - ) - .join( - 'complementary-certifications', - 'complementary-certifications.id', - 'complementary-certification-badges.complementaryCertificationId' - ) - .join('badges', 'badges.id', 'complementary-certification-badges.badgeId') - .where({ certificationCourseId }); +const findByCertificationCourseId = async function ({ certificationCourseId }) { + const results = await knex('complementary-certification-courses') + .select({ + complementaryCertificationCourseId: 'complementary-certification-courses.id', + minimumReproducibilityRate: 'complementary-certifications.minimumReproducibilityRate', + complementaryCertificationBadgeKey: 'badges.key', + hasComplementaryReferential: 'complementary-certifications.hasComplementaryReferential', + minimumEarnedPix: 'complementary-certifications.minimumEarnedPix', + }) + .join( + 'complementary-certification-badges', + 'complementary-certification-badges.id', + 'complementary-certification-courses.complementaryCertificationBadgeId' + ) + .join( + 'complementary-certifications', + 'complementary-certifications.id', + 'complementary-certification-badges.complementaryCertificationId' + ) + .join('badges', 'badges.id', 'complementary-certification-badges.badgeId') + .where({ certificationCourseId }); - return results.map( - ({ + return results.map( + ({ + complementaryCertificationCourseId, + minimumReproducibilityRate, + complementaryCertificationBadgeKey, + hasComplementaryReferential, + minimumEarnedPix, + }) => + new ComplementaryCertificationScoringCriteria({ complementaryCertificationCourseId, - minimumReproducibilityRate, + minimumReproducibilityRate: Number(minimumReproducibilityRate), complementaryCertificationBadgeKey, hasComplementaryReferential, minimumEarnedPix, - }) => - new ComplementaryCertificationScoringCriteria({ - complementaryCertificationCourseId, - minimumReproducibilityRate: Number(minimumReproducibilityRate), - complementaryCertificationBadgeKey, - hasComplementaryReferential, - minimumEarnedPix, - }) - ); - }, + }) + ); }; + +export { findByCertificationCourseId }; diff --git a/api/lib/infrastructure/repositories/complementary-certification-subscription-repository.js b/api/lib/infrastructure/repositories/complementary-certification-subscription-repository.js index 22566f68c55..7984b1a76e6 100644 --- a/api/lib/infrastructure/repositories/complementary-certification-subscription-repository.js +++ b/api/lib/infrastructure/repositories/complementary-certification-subscription-repository.js @@ -1,7 +1,7 @@ -const { knex } = require('../../../db/knex-database-connection.js'); +import { knex } from '../../../db/knex-database-connection.js'; -module.exports = { - async save(complementaryCertificationSubscription) { - return knex('complementary-certification-subscriptions').insert(complementaryCertificationSubscription); - }, +const save = async function (complementaryCertificationSubscription) { + return knex('complementary-certification-subscriptions').insert(complementaryCertificationSubscription); }; + +export { save }; diff --git a/api/lib/infrastructure/repositories/correction-repository.js b/api/lib/infrastructure/repositories/correction-repository.js index e93b21e6790..89caa8cb2b2 100644 --- a/api/lib/infrastructure/repositories/correction-repository.js +++ b/api/lib/infrastructure/repositories/correction-repository.js @@ -1,45 +1,45 @@ -const _ = require('lodash'); +import _ from 'lodash'; -const Correction = require('../../domain/models/Correction.js'); -const Hint = require('../../domain/models/Hint.js'); -const { challengeDatasource } = require('../datasources/learning-content/challenge-datasource.js'); -const { skillDatasource } = require('../datasources/learning-content/skill-datasource.js'); -const tutorialRepository = require('./tutorial-repository.js'); +import { Correction } from '../../domain/models/Correction.js'; +import { Hint } from '../../domain/models/Hint.js'; +import { challengeDatasource } from '../datasources/learning-content/challenge-datasource.js'; +import { skillDatasource } from '../datasources/learning-content/skill-datasource.js'; +import * as tutorialRepository from './tutorial-repository.js'; const VALIDATED_HINT_STATUSES = ['Validé', 'pré-validé']; -const { getTranslatedKey } = require('../../domain/services/get-translated-text.js'); +import { getTranslatedKey } from '../../domain/services/get-translated-text.js'; -module.exports = { - async getByChallengeId({ challengeId, userId, locale, dependencies = { tutorialRepository } } = {}) { - const challenge = await challengeDatasource.get(challengeId); - const skill = await _getSkill(challenge); - const hint = await _getHint({ skill, locale }); +const getByChallengeId = async function ({ challengeId, userId, locale, dependencies = { tutorialRepository } } = {}) { + const challenge = await challengeDatasource.get(challengeId); + const skill = await _getSkill(challenge); + const hint = await _getHint({ skill, locale }); - const tutorials = await _getTutorials({ - userId, - skill, - tutorialIdsProperty: 'tutorialIds', - locale, - tutorialRepository: dependencies.tutorialRepository, - }); - const learningMoreTutorials = await _getTutorials({ - userId, - skill, - tutorialIdsProperty: 'learningMoreTutorialIds', - locale, - tutorialRepository: dependencies.tutorialRepository, - }); + const tutorials = await _getTutorials({ + userId, + skill, + tutorialIdsProperty: 'tutorialIds', + locale, + tutorialRepository: dependencies.tutorialRepository, + }); + const learningMoreTutorials = await _getTutorials({ + userId, + skill, + tutorialIdsProperty: 'learningMoreTutorialIds', + locale, + tutorialRepository: dependencies.tutorialRepository, + }); - return new Correction({ - id: challenge.id, - solution: challenge.solution, - solutionToDisplay: challenge.solutionToDisplay, - hint, - tutorials, - learningMoreTutorials: learningMoreTutorials, - }); - }, + return new Correction({ + id: challenge.id, + solution: challenge.solution, + solutionToDisplay: challenge.solutionToDisplay, + hint, + tutorials, + learningMoreTutorials: learningMoreTutorials, + }); }; +export { getByChallengeId }; + async function _getHint({ skill, locale }) { if (_hasValidatedHint(skill)) { return _convertSkillToHint({ skill, locale }); diff --git a/api/lib/infrastructure/repositories/country-repository.js b/api/lib/infrastructure/repositories/country-repository.js index c4c8979b60f..4e141e53d92 100644 --- a/api/lib/infrastructure/repositories/country-repository.js +++ b/api/lib/infrastructure/repositories/country-repository.js @@ -1,18 +1,18 @@ -const { Country } = require('../../domain/read-models/Country.js'); -const { knex } = require('../../../db/knex-database-connection.js'); +import { Country } from '../../domain/read-models/Country.js'; +import { knex } from '../../../db/knex-database-connection.js'; -module.exports = { - async findAll() { - const result = await knex - .from('certification-cpf-countries') - .select('commonName', 'code', 'matcher') - .where('commonName', '=', knex.ref('originalName')) - .orderBy('commonName', 'asc'); +const findAll = async function () { + const result = await knex + .from('certification-cpf-countries') + .select('commonName', 'code', 'matcher') + .where('commonName', '=', knex.ref('originalName')) + .orderBy('commonName', 'asc'); - return result.map(_toDomain); - }, + return result.map(_toDomain); }; +export { findAll }; + function _toDomain(row) { return new Country({ ...row, diff --git a/api/lib/infrastructure/repositories/course-repository.js b/api/lib/infrastructure/repositories/course-repository.js index 04569c52cea..a00d82bd820 100644 --- a/api/lib/infrastructure/repositories/course-repository.js +++ b/api/lib/infrastructure/repositories/course-repository.js @@ -1,7 +1,7 @@ -const Course = require('../../domain/models/Course.js'); -const { courseDatasource } = require('../datasources/learning-content/course-datasource.js'); -const LearningContentResourceNotFound = require('../datasources/learning-content/LearningContentResourceNotFound.js'); -const { NotFoundError } = require('../../domain/errors.js'); +import { Course } from '../../domain/models/Course.js'; +import { courseDatasource } from '../datasources/learning-content/course-datasource.js'; +import { LearningContentResourceNotFound } from '../datasources/learning-content/LearningContentResourceNotFound.js'; +import { NotFoundError } from '../../domain/errors.js'; function _toDomain(courseDataObject) { return new Course({ @@ -26,17 +26,17 @@ async function _get(id) { } } -module.exports = { - async get(id) { - return _get(id); - }, +const get = async function (id) { + return _get(id); +}; - async getCourseName(id) { - try { - const course = await _get(id); - return course.name; - } catch (err) { - throw new NotFoundError("Le test demandé n'existe pas"); - } - }, +const getCourseName = async function (id) { + try { + const course = await _get(id); + return course.name; + } catch (err) { + throw new NotFoundError("Le test demandé n'existe pas"); + } }; + +export { get, getCourseName }; diff --git a/api/lib/infrastructure/repositories/cpf-certification-result-repository.js b/api/lib/infrastructure/repositories/cpf-certification-result-repository.js index cc3385aa8d4..664776f88ab 100644 --- a/api/lib/infrastructure/repositories/cpf-certification-result-repository.js +++ b/api/lib/infrastructure/repositories/cpf-certification-result-repository.js @@ -1,72 +1,78 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const CpfCertificationResult = require('../../domain/read-models/CpfCertificationResult.js'); -const AssessmentResult = require('../../domain/models/AssessmentResult.js'); -const { cpfImportStatus } = require('../../domain/models/CertificationCourse.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { CpfCertificationResult } from '../../domain/read-models/CpfCertificationResult.js'; +import { AssessmentResult } from '../../domain/models/AssessmentResult.js'; +import { cpfImportStatus } from '../../domain/models/CertificationCourse.js'; -module.exports = { - async countByTimeRange({ startDate, endDate }) { - const query = _selectCpfCertificationResults(); - const { count } = await _filterQuery(query, startDate, endDate) - .count('certification-courses.id') - .whereNull('certification-courses.cpfImportStatus') - .first(); - return count; - }, +const countByTimeRange = async function ({ startDate, endDate }) { + const query = _selectCpfCertificationResults(); + const { count } = await _filterQuery(query, startDate, endDate) + .count('certification-courses.id') + .whereNull('certification-courses.cpfImportStatus') + .first(); + return count; +}; + +const findByBatchId = async function (batchId) { + const cpfCertificationResults = await _selectCpfCertificationResults() + .select('certification-courses.*', 'assessment-results.pixScore', 'sessions.publishedAt') + .select( + knex.raw(` + json_agg(json_build_object( + 'competenceCode', "competence-marks"."competence_code", + 'areaCode', "competence-marks"."area_code", + 'level', "competence-marks"."level" + ) ORDER BY "competence-marks"."competence_code" asc) as "competenceMarks"`) + ) + .innerJoin('competence-marks', 'competence-marks.assessmentResultId', 'assessment-results.id') + .where('certification-courses.cpfFilename', batchId) + .groupBy('certification-courses.id', 'assessment-results.pixScore', 'sessions.publishedAt'); + return cpfCertificationResults.map((certificationCourse) => new CpfCertificationResult(certificationCourse)); +}; - async findByBatchId(batchId) { - const cpfCertificationResults = await _selectCpfCertificationResults() - .select('certification-courses.*', 'assessment-results.pixScore', 'sessions.publishedAt') - .select( - knex.raw(` - json_agg(json_build_object( - 'competenceCode', "competence-marks"."competence_code", - 'areaCode', "competence-marks"."area_code", - 'level', "competence-marks"."level" - ) ORDER BY "competence-marks"."competence_code" asc) as "competenceMarks"`) - ) - .innerJoin('competence-marks', 'competence-marks.assessmentResultId', 'assessment-results.id') - .where('certification-courses.cpfFilename', batchId) - .groupBy('certification-courses.id', 'assessment-results.pixScore', 'sessions.publishedAt'); - return cpfCertificationResults.map((certificationCourse) => new CpfCertificationResult(certificationCourse)); - }, +const markCertificationCoursesAsExported = async function ({ certificationCourseIds, filename }) { + const now = new Date(); - async markCertificationCoursesAsExported({ certificationCourseIds, filename }) { - const now = new Date(); + return knex('certification-courses') + .update({ cpfFilename: filename, cpfImportStatus: cpfImportStatus.READY_TO_SEND, updatedAt: now }) + .whereIn('id', certificationCourseIds); +}; - return knex('certification-courses') - .update({ cpfFilename: filename, cpfImportStatus: cpfImportStatus.READY_TO_SEND, updatedAt: now }) - .whereIn('id', certificationCourseIds); - }, +const markCertificationToExport = async function ({ startDate, endDate, limit = 'ALL', offset = 0, batchId }) { + const now = new Date(); - async markCertificationToExport({ startDate, endDate, limit = 'ALL', offset = 0, batchId }) { - const now = new Date(); + return knex + .with('certification-courses-to-mark', (qb) => { + const query = _selectCpfCertificationResults(qb); + return _filterQuery(query, startDate, endDate) + .select('certification-courses.id') + .where((qb) => { + qb.orWhereNull('certification-courses.cpfImportStatus'); + qb.orWhere('certification-courses.cpfImportStatus', cpfImportStatus.PENDING); + }) + .orderBy('certification-courses.id') + .offset(offset) + .limit(limit); + }) + .update({ cpfFilename: batchId, cpfImportStatus: cpfImportStatus.PENDING, updatedAt: now }) + .from('certification-courses') + .whereIn('id', knex.select('id').from('certification-courses-to-mark')) + .whereNull('certification-courses.cpfImportStatus'); +}; - return knex - .with('certification-courses-to-mark', (qb) => { - const query = _selectCpfCertificationResults(qb); - return _filterQuery(query, startDate, endDate) - .select('certification-courses.id') - .where((qb) => { - qb.orWhereNull('certification-courses.cpfImportStatus'); - qb.orWhere('certification-courses.cpfImportStatus', cpfImportStatus.PENDING); - }) - .orderBy('certification-courses.id') - .offset(offset) - .limit(limit); - }) - .update({ cpfFilename: batchId, cpfImportStatus: cpfImportStatus.PENDING, updatedAt: now }) - .from('certification-courses') - .whereIn('id', knex.select('id').from('certification-courses-to-mark')) - .whereNull('certification-courses.cpfImportStatus'); - }, +const updateCertificationImportStatus = async function ({ certificationCourseIds, cpfImportStatus }) { + const now = new Date(); - async updateCertificationImportStatus({ certificationCourseIds, cpfImportStatus }) { - const now = new Date(); + return knex('certification-courses') + .update({ cpfImportStatus, updatedAt: now }) + .whereIn('id', certificationCourseIds); +}; - return knex('certification-courses') - .update({ cpfImportStatus, updatedAt: now }) - .whereIn('id', certificationCourseIds); - }, +export { + countByTimeRange, + findByBatchId, + markCertificationCoursesAsExported, + markCertificationToExport, + updateCertificationImportStatus, }; function _selectCpfCertificationResults(qb = knex) { diff --git a/api/lib/infrastructure/repositories/data-protection-officer-repository.js b/api/lib/infrastructure/repositories/data-protection-officer-repository.js index 8a8c3330949..f5efae2355b 100644 --- a/api/lib/infrastructure/repositories/data-protection-officer-repository.js +++ b/api/lib/infrastructure/repositories/data-protection-officer-repository.js @@ -1,6 +1,6 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const DataProtectionOfficer = require('../../domain/models/DataProtectionOfficer.js'); -const DomainTransaction = require('../DomainTransaction.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { DataProtectionOfficer } from '../../domain/models/DataProtectionOfficer.js'; +import { DomainTransaction } from '../DomainTransaction.js'; const DATA_PROTECTION_OFFICERS_TABLE_NAME = 'data-protection-officers'; @@ -59,9 +59,4 @@ async function update(dataProtectionOfficer) { return new DataProtectionOfficer(dataProtectionOfficerRow); } -module.exports = { - batchAddDataProtectionOfficerToOrganization, - create, - get, - update, -}; +export { batchAddDataProtectionOfficerToOrganization, create, get, update }; diff --git a/api/lib/infrastructure/repositories/division-repository.js b/api/lib/infrastructure/repositories/division-repository.js index 09e602e8ecf..0f57ce122ea 100644 --- a/api/lib/infrastructure/repositories/division-repository.js +++ b/api/lib/infrastructure/repositories/division-repository.js @@ -1,5 +1,5 @@ -const Division = require('../../domain/models/Division.js'); -const { knex } = require('../../../db/knex-database-connection.js'); +import { Division } from '../../domain/models/Division.js'; +import { knex } from '../../../db/knex-database-connection.js'; async function findByCampaignId(campaignId) { const divisions = await knex('view-active-organization-learners') @@ -31,7 +31,4 @@ function _toDomain(division) { return new Division({ name: division }); } -module.exports = { - findByCampaignId, - findByOrganizationIdForCurrentSchoolYear, -}; +export { findByCampaignId, findByOrganizationIdForCurrentSchoolYear }; diff --git a/api/lib/infrastructure/repositories/flash-assessment-result-repository.js b/api/lib/infrastructure/repositories/flash-assessment-result-repository.js index 8e1f79144fa..f495e38b1c4 100644 --- a/api/lib/infrastructure/repositories/flash-assessment-result-repository.js +++ b/api/lib/infrastructure/repositories/flash-assessment-result-repository.js @@ -1,27 +1,27 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const DomainTransaction = require('../DomainTransaction.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { DomainTransaction } from '../DomainTransaction.js'; const TABLE_NAME = 'flash-assessment-results'; -module.exports = { - async save({ +const save = async function ({ + answerId, + estimatedLevel, + errorRate, + assessmentId, + domainTransaction: { knexTransaction } = DomainTransaction.emptyTransaction(), +}) { + const query = knex(TABLE_NAME).insert({ answerId, estimatedLevel, errorRate, assessmentId, - domainTransaction: { knexTransaction } = DomainTransaction.emptyTransaction(), - }) { - const query = knex(TABLE_NAME).insert({ - answerId, - estimatedLevel, - errorRate, - assessmentId, - }); - if (knexTransaction) query.transacting(knexTransaction); - return query; - }, + }); + if (knexTransaction) query.transacting(knexTransaction); + return query; +}; - async getLatestByAssessmentId(assessmentId) { - return knex(TABLE_NAME).where({ assessmentId }).orderBy('id', 'desc').limit(1).first(); - }, +const getLatestByAssessmentId = async function (assessmentId) { + return knex(TABLE_NAME).where({ assessmentId }).orderBy('id', 'desc').limit(1).first(); }; + +export { save, getLatestByAssessmentId }; diff --git a/api/lib/infrastructure/repositories/framework-repository.js b/api/lib/infrastructure/repositories/framework-repository.js index 14316f2f61b..b148550d39f 100644 --- a/api/lib/infrastructure/repositories/framework-repository.js +++ b/api/lib/infrastructure/repositories/framework-repository.js @@ -1,7 +1,7 @@ -const Framework = require('../../domain/models/Framework.js'); -const { frameworkDatasource } = require('../datasources/learning-content/framework-datasource.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const _ = require('lodash'); +import { Framework } from '../../domain/models/Framework.js'; +import { frameworkDatasource } from '../datasources/learning-content/framework-datasource.js'; +import { NotFoundError } from '../../domain/errors.js'; +import _ from 'lodash'; async function list() { const frameworkDataObjects = await frameworkDatasource.list(); @@ -31,8 +31,4 @@ async function findByRecordIds(frameworkIds) { return _.orderBy(frameworks, (framework) => framework.name.toLowerCase()); } -module.exports = { - list, - getByName, - findByRecordIds, -}; +export { list, getByName, findByRecordIds }; diff --git a/api/lib/infrastructure/repositories/group-repository.js b/api/lib/infrastructure/repositories/group-repository.js index 0ea7fd985e8..c0e877ee43c 100644 --- a/api/lib/infrastructure/repositories/group-repository.js +++ b/api/lib/infrastructure/repositories/group-repository.js @@ -1,5 +1,5 @@ -const Group = require('../../domain/models/Group.js'); -const { knex } = require('../../../db/knex-database-connection.js'); +import { Group } from '../../domain/models/Group.js'; +import { knex } from '../../../db/knex-database-connection.js'; async function findByCampaignId(campaignId) { const groups = await knex('view-active-organization-learners') @@ -31,7 +31,4 @@ function _toDomain(group) { return new Group({ name: group }); } -module.exports = { - findByCampaignId, - findByOrganizationId, -}; +export { findByCampaignId, findByOrganizationId }; diff --git a/api/lib/infrastructure/repositories/issue-report-category-repository.js b/api/lib/infrastructure/repositories/issue-report-category-repository.js index 1b9f1064d66..9ce8d789c04 100644 --- a/api/lib/infrastructure/repositories/issue-report-category-repository.js +++ b/api/lib/infrastructure/repositories/issue-report-category-repository.js @@ -1,7 +1,7 @@ -const { knex } = require('../../../db/knex-database-connection.js'); +import { knex } from '../../../db/knex-database-connection.js'; -module.exports = { - async get({ name }) { - return knex('issue-report-categories').where({ name }).first(); - }, +const get = async function ({ name }) { + return knex('issue-report-categories').where({ name }).first(); }; + +export { get }; diff --git a/api/lib/infrastructure/repositories/jury-certification-repository.js b/api/lib/infrastructure/repositories/jury-certification-repository.js index 1bdb1f68f72..565119019d6 100644 --- a/api/lib/infrastructure/repositories/jury-certification-repository.js +++ b/api/lib/infrastructure/repositories/jury-certification-repository.js @@ -1,67 +1,67 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const _ = require('lodash'); -const JuryCertification = require('../../domain/models/JuryCertification.js'); -const CertificationIssueReport = require('../../domain/models/CertificationIssueReport.js'); -const ComplementaryCertificationCourseResultsForJuryCertification = require('../../domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification.js'); -const ComplementaryCertificationCourseResultsForJuryCertificationWithExternal = require('../../domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal.js'); - -module.exports = { - async get(certificationCourseId) { - const juryCertificationDTO = await _selectJuryCertifications() - .where('certification-courses.id', certificationCourseId) - .first(); - - if (!juryCertificationDTO) { - throw new NotFoundError(`Certification course of id ${certificationCourseId} does not exist.`); - } - - const competenceMarkDTOs = await knex('competence-marks') - .where({ - assessmentResultId: juryCertificationDTO.assessmentResultId, - }) - .orderBy('competence_code', 'asc'); - - const complementaryCertificationCourseResultDTOs = await knex('complementary-certification-course-results') - .select( - 'complementary-certification-course-results.*', - 'complementary-certification-courses.id', - 'complementary-certification-badges.label', - 'complementary-certification-badges.level', - 'complementary-certifications.hasExternalJury' - ) - .leftJoin( - 'complementary-certification-courses', - 'complementary-certification-course-results.complementaryCertificationCourseId', - 'complementary-certification-courses.id' - ) - .leftJoin('badges', 'badges.key', 'complementary-certification-course-results.partnerKey') - .leftJoin('complementary-certification-badges', 'complementary-certification-badges.badgeId', 'badges.id') - .leftJoin( - 'complementary-certifications', - 'complementary-certifications.id', - 'complementary-certification-badges.complementaryCertificationId' - ) - .where({ - certificationCourseId: juryCertificationDTO.certificationCourseId, - }); - - const badgeKeyAndLabelsGroupedByTargetProfile = await _getBadgeKeyAndLabelsGroupedByTargetProfile(); - - const certificationIssueReportDTOs = await knex('certification-issue-reports') - .where({ certificationCourseId }) - .orderBy('id', 'ASC'); - - return _toDomainWithComplementaryCertifications({ - juryCertificationDTO, - certificationIssueReportDTOs, - competenceMarkDTOs, - complementaryCertificationCourseResultDTOs, - badgeKeyAndLabelsGroupedByTargetProfile, +import { knex } from '../../../db/knex-database-connection.js'; +import { NotFoundError } from '../../domain/errors.js'; +import _ from 'lodash'; +import { JuryCertification } from '../../domain/models/JuryCertification.js'; +import { CertificationIssueReport } from '../../domain/models/CertificationIssueReport.js'; +import { ComplementaryCertificationCourseResultsForJuryCertification } from '../../domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification.js'; +import { ComplementaryCertificationCourseResultsForJuryCertificationWithExternal } from '../../domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal.js'; + +const get = async function (certificationCourseId) { + const juryCertificationDTO = await _selectJuryCertifications() + .where('certification-courses.id', certificationCourseId) + .first(); + + if (!juryCertificationDTO) { + throw new NotFoundError(`Certification course of id ${certificationCourseId} does not exist.`); + } + + const competenceMarkDTOs = await knex('competence-marks') + .where({ + assessmentResultId: juryCertificationDTO.assessmentResultId, + }) + .orderBy('competence_code', 'asc'); + + const complementaryCertificationCourseResultDTOs = await knex('complementary-certification-course-results') + .select( + 'complementary-certification-course-results.*', + 'complementary-certification-courses.id', + 'complementary-certification-badges.label', + 'complementary-certification-badges.level', + 'complementary-certifications.hasExternalJury' + ) + .leftJoin( + 'complementary-certification-courses', + 'complementary-certification-course-results.complementaryCertificationCourseId', + 'complementary-certification-courses.id' + ) + .leftJoin('badges', 'badges.key', 'complementary-certification-course-results.partnerKey') + .leftJoin('complementary-certification-badges', 'complementary-certification-badges.badgeId', 'badges.id') + .leftJoin( + 'complementary-certifications', + 'complementary-certifications.id', + 'complementary-certification-badges.complementaryCertificationId' + ) + .where({ + certificationCourseId: juryCertificationDTO.certificationCourseId, }); - }, + + const badgeKeyAndLabelsGroupedByTargetProfile = await _getBadgeKeyAndLabelsGroupedByTargetProfile(); + + const certificationIssueReportDTOs = await knex('certification-issue-reports') + .where({ certificationCourseId }) + .orderBy('id', 'ASC'); + + return _toDomainWithComplementaryCertifications({ + juryCertificationDTO, + certificationIssueReportDTOs, + competenceMarkDTOs, + complementaryCertificationCourseResultDTOs, + badgeKeyAndLabelsGroupedByTargetProfile, + }); }; +export { get }; + function _selectJuryCertifications() { return knex .select({ diff --git a/api/lib/infrastructure/repositories/jury-certification-summary-repository.js b/api/lib/infrastructure/repositories/jury-certification-summary-repository.js index 819e1663310..d5a901417fb 100644 --- a/api/lib/infrastructure/repositories/jury-certification-summary-repository.js +++ b/api/lib/infrastructure/repositories/jury-certification-summary-repository.js @@ -1,45 +1,45 @@ -const _ = require('lodash'); -const { fetchPage } = require('../utils/knex-utils.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const JuryCertificationSummary = require('../../domain/read-models/JuryCertificationSummary.js'); -const CertificationIssueReport = require('../../domain/models/CertificationIssueReport.js'); -const Assessment = require('../../domain/models/Assessment.js'); -const ComplementaryCertificationCourseResult = require('../../domain/models/ComplementaryCertificationCourseResult.js'); +import _ from 'lodash'; +import { fetchPage } from '../utils/knex-utils.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { JuryCertificationSummary } from '../../domain/read-models/JuryCertificationSummary.js'; +import { CertificationIssueReport } from '../../domain/models/CertificationIssueReport.js'; +import { Assessment } from '../../domain/models/Assessment.js'; +import { ComplementaryCertificationCourseResult } from '../../domain/models/ComplementaryCertificationCourseResult.js'; -module.exports = { - async findBySessionId(sessionId) { - const result = await _getCertificationCoursesIdBySessionIdQuery(sessionId); +const findBySessionId = async function (sessionId) { + const result = await _getCertificationCoursesIdBySessionIdQuery(sessionId); - const certificationCourseIds = result.map((obj) => obj.id); + const certificationCourseIds = result.map((obj) => obj.id); - const results = await _getByCertificationCourseIds(certificationCourseIds); + const results = await _getByCertificationCourseIds(certificationCourseIds); - const juryCertificationSummaryDTOs = await _getJuryCertificationSummaries(results); + const juryCertificationSummaryDTOs = await _getJuryCertificationSummaries(results); - const juryCertificationSummaries = _.map(juryCertificationSummaryDTOs, _toDomain); - return juryCertificationSummaries; - }, + const juryCertificationSummaries = _.map(juryCertificationSummaryDTOs, _toDomain); + return juryCertificationSummaries; +}; - async findBySessionIdPaginated({ page, sessionId }) { - const query = _getCertificationCoursesIdBySessionIdQuery(sessionId); +const findBySessionIdPaginated = async function ({ page, sessionId }) { + const query = _getCertificationCoursesIdBySessionIdQuery(sessionId); - const { results: orderedCertificationCourseIdsInObjects, pagination } = await fetchPage(query, page); + const { results: orderedCertificationCourseIdsInObjects, pagination } = await fetchPage(query, page); - const orderedCertificationCourseIds = orderedCertificationCourseIdsInObjects.map((obj) => obj.id); + const orderedCertificationCourseIds = orderedCertificationCourseIdsInObjects.map((obj) => obj.id); - const results = await _getByCertificationCourseIds(orderedCertificationCourseIds); + const results = await _getByCertificationCourseIds(orderedCertificationCourseIds); - const orderedResults = orderedCertificationCourseIds.map((id) => results.find((result) => result.id === id)); + const orderedResults = orderedCertificationCourseIds.map((id) => results.find((result) => result.id === id)); - const juryCertificationSummaryDTOs = await _getJuryCertificationSummaries(orderedResults); - const juryCertificationSummaries = _.map(juryCertificationSummaryDTOs, _toDomain); - return { - pagination, - juryCertificationSummaries, - }; - }, + const juryCertificationSummaryDTOs = await _getJuryCertificationSummaries(orderedResults); + const juryCertificationSummaries = _.map(juryCertificationSummaryDTOs, _toDomain); + return { + pagination, + juryCertificationSummaries, + }; }; +export { findBySessionId, findBySessionIdPaginated }; + async function _getJuryCertificationSummaries(results) { const certificationCourseIds = results.map((row) => row.id); const certificationIssueReportRows = await knex('certification-issue-reports').whereIn( diff --git a/api/lib/infrastructure/repositories/knowledge-element-repository.js b/api/lib/infrastructure/repositories/knowledge-element-repository.js index dbdb0ab64fa..384ee8c8461 100644 --- a/api/lib/infrastructure/repositories/knowledge-element-repository.js +++ b/api/lib/infrastructure/repositories/knowledge-element-repository.js @@ -1,12 +1,12 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); -const { constants } = require('../constants.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const KnowledgeElement = require('../../domain/models/KnowledgeElement.js'); -const CampaignParticipationStatuses = require('../../domain/models/CampaignParticipationStatuses.js'); -const knowledgeElementSnapshotRepository = require('./knowledge-element-snapshot-repository.js'); -const campaignRepository = require('./campaign-repository.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import { constants } from '../constants.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { KnowledgeElement } from '../../domain/models/KnowledgeElement.js'; +import { CampaignParticipationStatuses } from '../../domain/models/CampaignParticipationStatuses.js'; +import * as knowledgeElementSnapshotRepository from './knowledge-element-snapshot-repository.js'; +import * as campaignRepository from './campaign-repository.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; const { SHARED } = CampaignParticipationStatuses; @@ -86,132 +86,152 @@ async function _countValidatedByCompetencesForUsersWithinCampaign(userIdsAndDate ); } -module.exports = { - async save(knowledgeElement) { - const knowledgeElementToSave = _.omit(knowledgeElement, ['id', 'createdAt']); - const [savedKnowledgeElement] = await knex(tableName).insert(knowledgeElementToSave).returning('*'); - return new KnowledgeElement(savedKnowledgeElement); - }, - - findUniqByUserId({ userId, limitDate, domainTransaction }) { - return _findAssessedByUserIdAndLimitDateQuery({ userId, limitDate, domainTransaction }); - }, - - async findUniqByUserIdAndAssessmentId({ userId, assessmentId }) { - const query = _findByUserIdAndLimitDateQuery({ userId }); - const knowledgeElementRows = await query.where({ assessmentId }); - - const knowledgeElements = _.map( - knowledgeElementRows, - (knowledgeElementRow) => new KnowledgeElement(knowledgeElementRow) - ); - return _applyFilters(knowledgeElements); - }, - - async findUniqByUserIdAndCompetenceId({ - userId, - competenceId, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - const knowledgeElements = await _findAssessedByUserIdAndLimitDateQuery({ userId, domainTransaction }); - return knowledgeElements.filter((knowledgeElement) => knowledgeElement.competenceId === competenceId); - }, - - async findUniqByUserIdGroupedByCompetenceId({ userId, limitDate }) { - const knowledgeElements = await this.findUniqByUserId({ userId, limitDate }); - return _.groupBy(knowledgeElements, 'competenceId'); - }, - - async findByCampaignIdAndUserIdForSharedCampaignParticipation({ campaignId, userId }) { - const [sharedCampaignParticipation] = await knex('campaign-participations') - .select('sharedAt') - .where({ campaignId, status: SHARED, userId }) - .limit(1); - - if (!sharedCampaignParticipation) { - return []; - } +const save = async function (knowledgeElement) { + const knowledgeElementToSave = _.omit(knowledgeElement, ['id', 'createdAt']); + const [savedKnowledgeElement] = await knex(tableName).insert(knowledgeElementToSave).returning('*'); + return new KnowledgeElement(savedKnowledgeElement); +}; - const { sharedAt } = sharedCampaignParticipation; - const knowledgeElements = await _findAssessedByUserIdAndLimitDateQuery({ userId, limitDate: sharedAt }); +const findUniqByUserId = function ({ userId, limitDate, domainTransaction }) { + return _findAssessedByUserIdAndLimitDateQuery({ userId, limitDate, domainTransaction }); +}; - return _filterValidatedKnowledgeElementsByCampaignId(knowledgeElements, campaignId); - }, +const findUniqByUserIdAndAssessmentId = async function ({ userId, assessmentId }) { + const query = _findByUserIdAndLimitDateQuery({ userId }); + const knowledgeElementRows = await query.where({ assessmentId }); - async findByCampaignIdForSharedCampaignParticipation(campaignId) { - const sharedCampaignParticipations = await knex('campaign-participations') - .select('userId', 'sharedAt') - .where({ campaignId, status: SHARED }); + const knowledgeElements = _.map( + knowledgeElementRows, + (knowledgeElementRow) => new KnowledgeElement(knowledgeElementRow) + ); + return _applyFilters(knowledgeElements); +}; - const knowledgeElements = _.flatMap( - await bluebird.map( - sharedCampaignParticipations, - async ({ userId, sharedAt }) => { - return _findAssessedByUserIdAndLimitDateQuery({ userId, limitDate: sharedAt }); - }, - { concurrency: constants.CONCURRENCY_HEAVY_OPERATIONS } - ) - ); +const findUniqByUserIdAndCompetenceId = async function ({ + userId, + competenceId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knowledgeElements = await _findAssessedByUserIdAndLimitDateQuery({ userId, domainTransaction }); + return knowledgeElements.filter((knowledgeElement) => knowledgeElement.competenceId === competenceId); +}; - return _filterValidatedKnowledgeElementsByCampaignId(knowledgeElements, campaignId); - }, +const findUniqByUserIdGroupedByCompetenceId = async function ({ userId, limitDate }) { + const knowledgeElements = await this.findUniqByUserId({ userId, limitDate }); + return _.groupBy(knowledgeElements, 'competenceId'); +}; - async findSnapshotGroupedByCompetencesForUsers(userIdsAndDates) { - const knowledgeElementsGroupedByUser = await _findSnapshotsForUsers(userIdsAndDates); +const findByCampaignIdAndUserIdForSharedCampaignParticipation = async function ({ campaignId, userId }) { + const [sharedCampaignParticipation] = await knex('campaign-participations') + .select('sharedAt') + .where({ campaignId, status: SHARED, userId }) + .limit(1); - for (const [userId, knowledgeElements] of Object.entries(knowledgeElementsGroupedByUser)) { - knowledgeElementsGroupedByUser[userId] = _.groupBy(knowledgeElements, 'competenceId'); - } - return knowledgeElementsGroupedByUser; - }, + if (!sharedCampaignParticipation) { + return []; + } - async countValidatedByCompetencesForUsersWithinCampaign(userIdsAndDates, campaignLearningContent) { - return _countValidatedByCompetencesForUsersWithinCampaign(userIdsAndDates, campaignLearningContent); - }, + const { sharedAt } = sharedCampaignParticipation; + const knowledgeElements = await _findAssessedByUserIdAndLimitDateQuery({ userId, limitDate: sharedAt }); - async countValidatedByCompetencesForOneUserWithinCampaign(userId, limitDate, campaignLearningContent) { - return _countValidatedByCompetencesForUsersWithinCampaign({ [userId]: limitDate }, campaignLearningContent); - }, + return _filterValidatedKnowledgeElementsByCampaignId(knowledgeElements, campaignId); +}; - async findGroupedByCompetencesForUsersWithinLearningContent(userIdsAndDates, campaignLearningContent) { - const knowledgeElementsGroupedByUser = await _findSnapshotsForUsers(userIdsAndDates); - const knowledgeElementsGroupedByUserAndCompetence = {}; +const findByCampaignIdForSharedCampaignParticipation = async function (campaignId) { + const sharedCampaignParticipations = await knex('campaign-participations') + .select('userId', 'sharedAt') + .where({ campaignId, status: SHARED }); + + const knowledgeElements = _.flatMap( + await bluebird.map( + sharedCampaignParticipations, + async ({ userId, sharedAt }) => { + return _findAssessedByUserIdAndLimitDateQuery({ userId, limitDate: sharedAt }); + }, + { concurrency: constants.CONCURRENCY_HEAVY_OPERATIONS } + ) + ); - for (const [userId, knowledgeElements] of Object.entries(knowledgeElementsGroupedByUser)) { - knowledgeElementsGroupedByUserAndCompetence[userId] = - campaignLearningContent.getKnowledgeElementsGroupedByCompetence(knowledgeElements); - } + return _filterValidatedKnowledgeElementsByCampaignId(knowledgeElements, campaignId); +}; - return knowledgeElementsGroupedByUserAndCompetence; - }, +const findSnapshotGroupedByCompetencesForUsers = async function (userIdsAndDates) { + const knowledgeElementsGroupedByUser = await _findSnapshotsForUsers(userIdsAndDates); - async findValidatedGroupedByTubesWithinCampaign(userIdsAndDates, campaignLearningContent) { - const knowledgeElementsGroupedByUser = await _findSnapshotsForUsers(userIdsAndDates); + for (const [userId, knowledgeElements] of Object.entries(knowledgeElementsGroupedByUser)) { + knowledgeElementsGroupedByUser[userId] = _.groupBy(knowledgeElements, 'competenceId'); + } + return knowledgeElementsGroupedByUser; +}; - return campaignLearningContent.getValidatedKnowledgeElementsGroupedByTube( - _.flatMap(knowledgeElementsGroupedByUser) - ); - }, +const countValidatedByCompetencesForUsersWithinCampaign = async function (userIdsAndDates, campaignLearningContent) { + return _countValidatedByCompetencesForUsersWithinCampaign(userIdsAndDates, campaignLearningContent); +}; - async findSnapshotForUsers(userIdsAndDates) { - return _findSnapshotsForUsers(userIdsAndDates); - }, +const countValidatedByCompetencesForOneUserWithinCampaign = async function ( + userId, + limitDate, + campaignLearningContent +) { + return _countValidatedByCompetencesForUsersWithinCampaign({ [userId]: limitDate }, campaignLearningContent); +}; - async findInvalidatedAndDirectByUserId(userId) { - const invalidatedKnowledgeElements = await knex(tableName) - .where({ - userId, - status: KnowledgeElement.StatusType.INVALIDATED, - source: KnowledgeElement.SourceType.DIRECT, - }) - .orderBy('createdAt', 'desc'); +const findGroupedByCompetencesForUsersWithinLearningContent = async function ( + userIdsAndDates, + campaignLearningContent +) { + const knowledgeElementsGroupedByUser = await _findSnapshotsForUsers(userIdsAndDates); + const knowledgeElementsGroupedByUserAndCompetence = {}; - if (!invalidatedKnowledgeElements.length) { - return []; - } + for (const [userId, knowledgeElements] of Object.entries(knowledgeElementsGroupedByUser)) { + knowledgeElementsGroupedByUserAndCompetence[userId] = + campaignLearningContent.getKnowledgeElementsGroupedByCompetence(knowledgeElements); + } + + return knowledgeElementsGroupedByUserAndCompetence; +}; + +const findValidatedGroupedByTubesWithinCampaign = async function (userIdsAndDates, campaignLearningContent) { + const knowledgeElementsGroupedByUser = await _findSnapshotsForUsers(userIdsAndDates); + + return campaignLearningContent.getValidatedKnowledgeElementsGroupedByTube(_.flatMap(knowledgeElementsGroupedByUser)); +}; + +const findSnapshotForUsers = async function (userIdsAndDates) { + return _findSnapshotsForUsers(userIdsAndDates); +}; + +const findInvalidatedAndDirectByUserId = async function (userId) { + const invalidatedKnowledgeElements = await knex(tableName) + .where({ + userId, + status: KnowledgeElement.StatusType.INVALIDATED, + source: KnowledgeElement.SourceType.DIRECT, + }) + .orderBy('createdAt', 'desc'); + + if (!invalidatedKnowledgeElements.length) { + return []; + } + + return invalidatedKnowledgeElements.map( + (invalidatedKnowledgeElement) => new KnowledgeElement(invalidatedKnowledgeElement) + ); +}; - return invalidatedKnowledgeElements.map( - (invalidatedKnowledgeElement) => new KnowledgeElement(invalidatedKnowledgeElement) - ); - }, +export { + save, + findUniqByUserId, + findUniqByUserIdAndAssessmentId, + findUniqByUserIdAndCompetenceId, + findUniqByUserIdGroupedByCompetenceId, + findByCampaignIdAndUserIdForSharedCampaignParticipation, + findByCampaignIdForSharedCampaignParticipation, + findSnapshotGroupedByCompetencesForUsers, + countValidatedByCompetencesForUsersWithinCampaign, + countValidatedByCompetencesForOneUserWithinCampaign, + findGroupedByCompetencesForUsersWithinLearningContent, + findValidatedGroupedByTubesWithinCampaign, + findSnapshotForUsers, + findInvalidatedAndDirectByUserId, }; diff --git a/api/lib/infrastructure/repositories/knowledge-element-snapshot-repository.js b/api/lib/infrastructure/repositories/knowledge-element-snapshot-repository.js index 9a0b0045269..aab07b0153f 100644 --- a/api/lib/infrastructure/repositories/knowledge-element-snapshot-repository.js +++ b/api/lib/infrastructure/repositories/knowledge-element-snapshot-repository.js @@ -1,10 +1,10 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const BookshelfKnowledgeElementSnapshot = require('../orm-models/KnowledgeElementSnapshot.js'); -const KnowledgeElement = require('../../domain/models/KnowledgeElement.js'); -const { AlreadyExistingEntityError } = require('../../domain/errors.js'); -const bookshelfUtils = require('../utils/knex-utils.js'); -const DomainTransaction = require('../DomainTransaction.js'); +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; +import { BookshelfKnowledgeElementSnapshot } from '../orm-models/KnowledgeElementSnapshot.js'; +import { KnowledgeElement } from '../../domain/models/KnowledgeElement.js'; +import { AlreadyExistingEntityError } from '../../domain/errors.js'; +import * as knexUtils from '../utils/knex-utils.js'; +import { DomainTransaction } from '../DomainTransaction.js'; function _toKnowledgeElementCollection({ snapshot } = {}) { if (!snapshot) return null; @@ -17,43 +17,48 @@ function _toKnowledgeElementCollection({ snapshot } = {}) { ); } -module.exports = { - async save({ userId, snappedAt, knowledgeElements, domainTransaction = DomainTransaction.emptyTransaction() }) { - try { - await new BookshelfKnowledgeElementSnapshot({ - userId, - snappedAt, - snapshot: JSON.stringify(knowledgeElements), - }).save(null, { transacting: domainTransaction.knexTransaction }); - } catch (error) { - if (bookshelfUtils.isUniqConstraintViolated(error)) { - throw new AlreadyExistingEntityError( - `A snapshot already exists for the user ${userId} at the datetime ${snappedAt}.` - ); - } +const save = async function ({ + userId, + snappedAt, + knowledgeElements, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + try { + await new BookshelfKnowledgeElementSnapshot({ + userId, + snappedAt, + snapshot: JSON.stringify(knowledgeElements), + }).save(null, { transacting: domainTransaction.knexTransaction }); + } catch (error) { + if (knexUtils.isUniqConstraintViolated(error)) { + throw new AlreadyExistingEntityError( + `A snapshot already exists for the user ${userId} at the datetime ${snappedAt}.` + ); } - }, + } +}; - async findByUserIdsAndSnappedAtDates(userIdsAndSnappedAtDates = {}) { - const params = Object.entries(userIdsAndSnappedAtDates); - const results = await knex - .select('userId', 'snapshot') - .from('knowledge-element-snapshots') - .whereIn(['userId', 'snappedAt'], params); +const findByUserIdsAndSnappedAtDates = async function (userIdsAndSnappedAtDates = {}) { + const params = Object.entries(userIdsAndSnappedAtDates); + const results = await knex + .select('userId', 'snapshot') + .from('knowledge-element-snapshots') + .whereIn(['userId', 'snappedAt'], params); - const knowledgeElementsByUserId = {}; - for (const result of results) { - knowledgeElementsByUserId[result.userId] = _toKnowledgeElementCollection(result); - } + const knowledgeElementsByUserId = {}; + for (const result of results) { + knowledgeElementsByUserId[result.userId] = _toKnowledgeElementCollection(result); + } - const userIdsWithoutSnapshot = _.difference( - Object.keys(userIdsAndSnappedAtDates), - Object.keys(knowledgeElementsByUserId) - ); - for (const userId of userIdsWithoutSnapshot) { - knowledgeElementsByUserId[userId] = null; - } + const userIdsWithoutSnapshot = _.difference( + Object.keys(userIdsAndSnappedAtDates), + Object.keys(knowledgeElementsByUserId) + ); + for (const userId of userIdsWithoutSnapshot) { + knowledgeElementsByUserId[userId] = null; + } - return knowledgeElementsByUserId; - }, + return knowledgeElementsByUserId; }; + +export { save, findByUserIdsAndSnappedAtDates }; diff --git a/api/lib/infrastructure/repositories/learning-content-repository.js b/api/lib/infrastructure/repositories/learning-content-repository.js index 9ebaeff783e..b1165376581 100644 --- a/api/lib/infrastructure/repositories/learning-content-repository.js +++ b/api/lib/infrastructure/repositories/learning-content-repository.js @@ -1,16 +1,15 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { NoSkillsInCampaignError, NotFoundError } = require('../../domain/errors.js'); -const tubeRepository = require('./tube-repository.js'); -const thematicRepository = require('./thematic-repository.js'); -const campaignRepository = require('./campaign-repository.js'); -const competenceRepository = require('./competence-repository.js'); -const areaRepository = require('./area-repository.js'); -const frameworkRepository = require('./framework-repository.js'); -const skillRepository = require('./skill-repository.js'); -const LearningContent = require('../../domain/models/LearningContent.js'); -// TODO pas satisfaisant comme dépendance -const learningContentConversionService = require('../../domain/services/learning-content/learning-content-conversion-service.js'); +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; +import { NoSkillsInCampaignError, NotFoundError } from '../../domain/errors.js'; +import * as tubeRepository from './tube-repository.js'; +import * as thematicRepository from './thematic-repository.js'; +import * as campaignRepository from './campaign-repository.js'; +import * as competenceRepository from './competence-repository.js'; +import * as areaRepository from './area-repository.js'; +import * as frameworkRepository from './framework-repository.js'; +import * as skillRepository from './skill-repository.js'; +import { LearningContent } from '../../domain/models/LearningContent.js'; +import * as learningContentConversionService from '../../domain/services/learning-content/learning-content-conversion-service.js'; async function findByCampaignId(campaignId, locale) { const skills = await campaignRepository.findSkills({ campaignId }); @@ -149,9 +148,4 @@ async function _getLearningContentByFrameworks(frameworks, locale) { return frameworks; } -module.exports = { - findByCampaignId, - findByTargetProfileId, - findByCampaignParticipationId, - findByFrameworkNames, -}; +export { findByCampaignId, findByTargetProfileId, findByCampaignParticipationId, findByFrameworkNames }; diff --git a/api/lib/infrastructure/repositories/membership-repository.js b/api/lib/infrastructure/repositories/membership-repository.js index 1cc28185434..187d8399e8c 100644 --- a/api/lib/infrastructure/repositories/membership-repository.js +++ b/api/lib/infrastructure/repositories/membership-repository.js @@ -1,12 +1,12 @@ -const BookshelfMembership = require('../orm-models/Membership.js'); -const { MembershipCreationError, MembershipUpdateError, NotFoundError } = require('../../domain/errors.js'); -const Membership = require('../../domain/models/Membership.js'); -const User = require('../../domain/models/User.js'); -const Organization = require('../../domain/models/Organization.js'); -const bookshelfUtils = require('../utils/knex-utils.js'); -const bookshelfToDomainConverter = require('../utils/bookshelf-to-domain-converter.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const DomainTransaction = require('../DomainTransaction.js'); +import { BookshelfMembership } from '../orm-models/Membership.js'; +import { MembershipCreationError, MembershipUpdateError, NotFoundError } from '../../domain/errors.js'; +import { Membership } from '../../domain/models/Membership.js'; +import { User } from '../../domain/models/User.js'; +import { Organization } from '../../domain/models/Organization.js'; +import * as knexUtils from '../utils/knex-utils.js'; +import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { DomainTransaction } from '../DomainTransaction.js'; const DEFAULT_PAGE_SIZE = 10; const DEFAULT_PAGE_NUMBER = 1; @@ -41,101 +41,110 @@ function _setSearchFiltersForQueryBuilder(filter, qb) { } } -module.exports = { - create(userId, organizationId, organizationRole) { - return new BookshelfMembership({ userId, organizationId, organizationRole }) - .save() - .then((bookshelfMembership) => bookshelfMembership.load(['user'])) - .then(_toDomain) - .catch((err) => { - if (bookshelfUtils.isUniqConstraintViolated(err)) { - throw new MembershipCreationError(err.message); - } - throw err; - }); - }, - - async get(membershipId) { - let bookshelfMembership; - try { - bookshelfMembership = await BookshelfMembership.where('id', membershipId).fetch({ - withRelated: ['user', 'organization'], - }); - } catch (error) { - if (error instanceof BookshelfMembership.NotFoundError) { - throw new NotFoundError(`Membership ${membershipId} not found`); +const create = function (userId, organizationId, organizationRole) { + return new BookshelfMembership({ userId, organizationId, organizationRole }) + .save() + .then((bookshelfMembership) => bookshelfMembership.load(['user'])) + .then(_toDomain) + .catch((err) => { + if (knexUtils.isUniqConstraintViolated(err)) { + throw new MembershipCreationError(err.message); } - throw error; - } + throw err; + }); +}; - return _toDomain(bookshelfMembership); - }, - - async findByOrganizationId({ organizationId }) { - const memberships = await BookshelfMembership.where({ organizationId, disabledAt: null }) - .orderBy('id', 'ASC') - .fetchAll({ withRelated: ['user'] }); - return bookshelfToDomainConverter.buildDomainObjects(BookshelfMembership, memberships); - }, - - async findPaginatedFiltered({ organizationId, filter, page }) { - const pageSize = page.size ? page.size : DEFAULT_PAGE_SIZE; - const pageNumber = page.number ? page.number : DEFAULT_PAGE_NUMBER; - const { models, pagination } = await BookshelfMembership.query((qb) => { - qb.where({ 'memberships.organizationId': organizationId, 'memberships.disabledAt': null }); - _setSearchFiltersForQueryBuilder(filter, qb); - qb.innerJoin('users', 'memberships.userId', 'users.id'); - qb.orderByRaw('"organizationRole" ASC, LOWER(users."lastName") ASC, LOWER(users."firstName") ASC'); - }).fetchPage({ - withRelated: ['user'], - page: pageNumber, - pageSize, +const get = async function (membershipId) { + let bookshelfMembership; + try { + bookshelfMembership = await BookshelfMembership.where('id', membershipId).fetch({ + withRelated: ['user', 'organization'], }); - const memberships = bookshelfToDomainConverter.buildDomainObjects(BookshelfMembership, models); - return { models: memberships, pagination }; - }, - - findByUserIdAndOrganizationId({ userId, organizationId, includeOrganization = false }) { - return BookshelfMembership.where({ userId, organizationId, disabledAt: null }) - .fetchAll({ withRelated: includeOrganization ? ['organization', 'organization.tags'] : [] }) - .then((memberships) => bookshelfToDomainConverter.buildDomainObjects(BookshelfMembership, memberships)); - }, - - findByUserId({ userId }) { - return BookshelfMembership.where({ userId, disabledAt: null }) - .fetchAll({ withRelated: ['organization'] }) - .then((memberships) => bookshelfToDomainConverter.buildDomainObjects(BookshelfMembership, memberships)); - }, - - async updateById({ id, membership }) { - let updatedMembership; - - if (!membership) { - throw new MembershipUpdateError("Le membership n'est pas renseigné"); + } catch (error) { + if (error instanceof BookshelfMembership.NotFoundError) { + throw new NotFoundError(`Membership ${membershipId} not found`); } + throw error; + } - try { - updatedMembership = await new BookshelfMembership({ id }).save(membership, { - patch: true, - method: 'update', - require: true, - }); - } catch (err) { - throw new MembershipUpdateError(err.message); - } + return _toDomain(bookshelfMembership); +}; - const updatedMembershipWithUserAndOrganization = await updatedMembership.refresh({ - withRelated: ['user', 'organization'], +const findByOrganizationId = async function ({ organizationId }) { + const memberships = await BookshelfMembership.where({ organizationId, disabledAt: null }) + .orderBy('id', 'ASC') + .fetchAll({ withRelated: ['user'] }); + return bookshelfToDomainConverter.buildDomainObjects(BookshelfMembership, memberships); +}; + +const findPaginatedFiltered = async function ({ organizationId, filter, page }) { + const pageSize = page.size ? page.size : DEFAULT_PAGE_SIZE; + const pageNumber = page.number ? page.number : DEFAULT_PAGE_NUMBER; + const { models, pagination } = await BookshelfMembership.query((qb) => { + qb.where({ 'memberships.organizationId': organizationId, 'memberships.disabledAt': null }); + _setSearchFiltersForQueryBuilder(filter, qb); + qb.innerJoin('users', 'memberships.userId', 'users.id'); + qb.orderByRaw('"organizationRole" ASC, LOWER(users."lastName") ASC, LOWER(users."firstName") ASC'); + }).fetchPage({ + withRelated: ['user'], + page: pageNumber, + pageSize, + }); + const memberships = bookshelfToDomainConverter.buildDomainObjects(BookshelfMembership, models); + return { models: memberships, pagination }; +}; + +const findByUserIdAndOrganizationId = function ({ userId, organizationId, includeOrganization = false }) { + return BookshelfMembership.where({ userId, organizationId, disabledAt: null }) + .fetchAll({ withRelated: includeOrganization ? ['organization', 'organization.tags'] : [] }) + .then((memberships) => bookshelfToDomainConverter.buildDomainObjects(BookshelfMembership, memberships)); +}; + +const findByUserId = function ({ userId }) { + return BookshelfMembership.where({ userId, disabledAt: null }) + .fetchAll({ withRelated: ['organization'] }) + .then((memberships) => bookshelfToDomainConverter.buildDomainObjects(BookshelfMembership, memberships)); +}; + +const updateById = async function ({ id, membership }) { + let updatedMembership; + + if (!membership) { + throw new MembershipUpdateError("Le membership n'est pas renseigné"); + } + + try { + updatedMembership = await new BookshelfMembership({ id }).save(membership, { + patch: true, + method: 'update', + require: true, }); - return bookshelfToDomainConverter.buildDomainObject(BookshelfMembership, updatedMembershipWithUserAndOrganization); - }, - - async disableMembershipsByUserId({ - userId, - updatedByUserId, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - const knexConn = domainTransaction.knexTransaction ?? knex; - await knexConn('memberships').where({ userId }).update({ disabledAt: new Date(), updatedByUserId }); - }, + } catch (err) { + throw new MembershipUpdateError(err.message); + } + + const updatedMembershipWithUserAndOrganization = await updatedMembership.refresh({ + withRelated: ['user', 'organization'], + }); + return bookshelfToDomainConverter.buildDomainObject(BookshelfMembership, updatedMembershipWithUserAndOrganization); +}; + +const disableMembershipsByUserId = async function ({ + userId, + updatedByUserId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction.knexTransaction ?? knex; + await knexConn('memberships').where({ userId }).update({ disabledAt: new Date(), updatedByUserId }); +}; + +export { + create, + get, + findByOrganizationId, + findPaginatedFiltered, + findByUserIdAndOrganizationId, + findByUserId, + updateById, + disableMembershipsByUserId, }; diff --git a/api/lib/infrastructure/repositories/organization-for-admin-repository.js b/api/lib/infrastructure/repositories/organization-for-admin-repository.js index ab15c707e07..83969e0475a 100644 --- a/api/lib/infrastructure/repositories/organization-for-admin-repository.js +++ b/api/lib/infrastructure/repositories/organization-for-admin-repository.js @@ -1,10 +1,10 @@ -const { NotFoundError, MissingAttributesError } = require('../../domain/errors.js'); -const OrganizationForAdmin = require('../../domain/models/organizations-administration/Organization.js'); -const Tag = require('../../domain/models/Tag.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const OrganizationInvitation = require('../../domain/models/OrganizationInvitation.js'); -const _ = require('lodash'); -const apps = require('../../domain/constants.js'); +import { NotFoundError, MissingAttributesError } from '../../domain/errors.js'; +import { OrganizationForAdmin } from '../../domain/models/organizations-administration/Organization.js'; +import { Tag } from '../../domain/models/Tag.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { OrganizationInvitation } from '../../domain/models/OrganizationInvitation.js'; +import _ from 'lodash'; +import * as apps from '../../domain/constants.js'; const ORGANIZATIONS_TABLE_NAME = 'organizations'; @@ -42,138 +42,138 @@ function _toDomain(rawOrganization) { return organization; } -module.exports = { - async get(id) { - const organization = await knex(ORGANIZATIONS_TABLE_NAME) - .select({ - id: 'organizations.id', - name: 'organizations.name', - type: 'organizations.type', - logoUrl: 'organizations.logoUrl', - externalId: 'organizations.externalId', - provinceCode: 'organizations.provinceCode', - isManagingStudents: 'organizations.isManagingStudents', - credit: 'organizations.credit', - email: 'organizations.email', - documentationUrl: 'organizations.documentationUrl', - createdBy: 'organizations.createdBy', - createdAt: 'organizations.createdAt', - showNPS: 'organizations.showNPS', - formNPSUrl: 'organizations.formNPSUrl', - showSkills: 'organizations.showSkills', - archivedAt: 'organizations.archivedAt', - archivistFirstName: 'archivists.firstName', - archivistLastName: 'archivists.lastName', - dataProtectionOfficerFirstName: 'dataProtectionOfficers.firstName', - dataProtectionOfficerLastName: 'dataProtectionOfficers.lastName', - dataProtectionOfficerEmail: 'dataProtectionOfficers.email', - creatorFirstName: 'creators.firstName', - creatorLastName: 'creators.lastName', - identityProviderForCampaigns: 'organizations.identityProviderForCampaigns', - }) - .leftJoin('users AS archivists', 'archivists.id', 'organizations.archivedBy') - .leftJoin('users AS creators', 'creators.id', 'organizations.createdBy') - .leftJoin( - 'data-protection-officers AS dataProtectionOfficers', - 'dataProtectionOfficers.organizationId', - 'organizations.id' - ) - .where('organizations.id', id) - .first(); - - if (!organization) { - throw new NotFoundError(`Not found organization for ID ${id}`); - } - - const tags = await knex('tags') - .select('tags.*') - .join('organization-tags', 'organization-tags.tagId', 'tags.id') - .where('organization-tags.organizationId', organization.id); - - const availableFeatures = await knex('features') - .select('key') - .join('organization-features', function () { - this.on('features.id', 'organization-features.featureId').andOn( - 'organization-features.organizationId', - organization.id - ); - }) - .pluck('key'); - - organization.enableMultipleSendingAssessment = availableFeatures.includes( - apps.ORGANIZATION_FEATURE.MULTIPLE_SENDING_ASSESSMENT - ); - - organization.tags = tags.map((tag) => { - return new Tag(tag); - }); - - return _toDomain(organization); - }, - - async update(organization) { - const organizationRawData = _.pick(organization, [ - 'name', - 'type', - 'logoUrl', - 'externalId', - 'provinceCode', - 'isManagingStudents', - 'email', - 'credit', - 'documentationUrl', - 'showSkills', - 'identityProviderForCampaigns', - ]); - - const [organizationDB] = await knex(ORGANIZATIONS_TABLE_NAME) - .update(organizationRawData) - .where({ id: organization.id }) - .returning('*'); - - const tagsDB = await knex('tags') - .select(['tags.id', 'tags.name']) - .join('organization-tags', 'organization-tags.tagId', 'tags.id') - .where('organization-tags.organizationId', organizationDB.id); - const archivist = await knex('users') - .select(['users.firstName', 'users.lastName']) - .join('organizations', 'organizations.archivedBy', 'users.id') - .where('organizations.id', organizationDB.id) - .first(); - - const tags = tagsDB.map((tagDB) => new Tag(tagDB)); - - if (archivist) { - organizationDB.archivistFirstName = archivist.firstName; - organizationDB.archivistLastName = archivist.lastName; - } - - return _toDomain({ ...organizationDB, tags }); - }, - - async archive({ id, archivedBy }) { - if (!archivedBy) { - throw new MissingAttributesError(); - } - - const archiveDate = new Date(); - - await knex('organization-invitations') - .where({ organizationId: id, status: OrganizationInvitation.StatusType.PENDING }) - .update({ status: OrganizationInvitation.StatusType.CANCELLED, updatedAt: archiveDate }); - - await knex('campaigns').where({ organizationId: id, archivedAt: null }).update({ archivedAt: archiveDate }); - - await knex('memberships').where({ organizationId: id, disabledAt: null }).update({ disabledAt: archiveDate }); - - await knex(ORGANIZATIONS_TABLE_NAME) - .where({ id: id, archivedBy: null }) - .update({ archivedBy: archivedBy, archivedAt: archiveDate }); - }, - - async save(organization) { - const data = _.pick(organization, ['name', 'type', 'documentationUrl', 'credit', 'createdBy']); - const [organizationCreated] = await knex(ORGANIZATIONS_TABLE_NAME).returning('*').insert(data); - return _toDomain(organizationCreated); - }, +const get = async function (id) { + const organization = await knex(ORGANIZATIONS_TABLE_NAME) + .select({ + id: 'organizations.id', + name: 'organizations.name', + type: 'organizations.type', + logoUrl: 'organizations.logoUrl', + externalId: 'organizations.externalId', + provinceCode: 'organizations.provinceCode', + isManagingStudents: 'organizations.isManagingStudents', + credit: 'organizations.credit', + email: 'organizations.email', + documentationUrl: 'organizations.documentationUrl', + createdBy: 'organizations.createdBy', + createdAt: 'organizations.createdAt', + showNPS: 'organizations.showNPS', + formNPSUrl: 'organizations.formNPSUrl', + showSkills: 'organizations.showSkills', + archivedAt: 'organizations.archivedAt', + archivistFirstName: 'archivists.firstName', + archivistLastName: 'archivists.lastName', + dataProtectionOfficerFirstName: 'dataProtectionOfficers.firstName', + dataProtectionOfficerLastName: 'dataProtectionOfficers.lastName', + dataProtectionOfficerEmail: 'dataProtectionOfficers.email', + creatorFirstName: 'creators.firstName', + creatorLastName: 'creators.lastName', + identityProviderForCampaigns: 'organizations.identityProviderForCampaigns', + }) + .leftJoin('users AS archivists', 'archivists.id', 'organizations.archivedBy') + .leftJoin('users AS creators', 'creators.id', 'organizations.createdBy') + .leftJoin( + 'data-protection-officers AS dataProtectionOfficers', + 'dataProtectionOfficers.organizationId', + 'organizations.id' + ) + .where('organizations.id', id) + .first(); + + if (!organization) { + throw new NotFoundError(`Not found organization for ID ${id}`); + } + + const tags = await knex('tags') + .select('tags.*') + .join('organization-tags', 'organization-tags.tagId', 'tags.id') + .where('organization-tags.organizationId', organization.id); + + const availableFeatures = await knex('features') + .select('key') + .join('organization-features', function () { + this.on('features.id', 'organization-features.featureId').andOn( + 'organization-features.organizationId', + organization.id + ); + }) + .pluck('key'); + + organization.enableMultipleSendingAssessment = availableFeatures.includes( + apps.ORGANIZATION_FEATURE.MULTIPLE_SENDING_ASSESSMENT + ); + + organization.tags = tags.map((tag) => { + return new Tag(tag); + }); + + return _toDomain(organization); +}; + +const update = async function (organization) { + const organizationRawData = _.pick(organization, [ + 'name', + 'type', + 'logoUrl', + 'externalId', + 'provinceCode', + 'isManagingStudents', + 'email', + 'credit', + 'documentationUrl', + 'showSkills', + 'identityProviderForCampaigns', + ]); + + const [organizationDB] = await knex(ORGANIZATIONS_TABLE_NAME) + .update(organizationRawData) + .where({ id: organization.id }) + .returning('*'); + + const tagsDB = await knex('tags') + .select(['tags.id', 'tags.name']) + .join('organization-tags', 'organization-tags.tagId', 'tags.id') + .where('organization-tags.organizationId', organizationDB.id); + const archivist = await knex('users') + .select(['users.firstName', 'users.lastName']) + .join('organizations', 'organizations.archivedBy', 'users.id') + .where('organizations.id', organizationDB.id) + .first(); + + const tags = tagsDB.map((tagDB) => new Tag(tagDB)); + + if (archivist) { + organizationDB.archivistFirstName = archivist.firstName; + organizationDB.archivistLastName = archivist.lastName; + } + + return _toDomain({ ...organizationDB, tags }); +}; + +const archive = async function ({ id, archivedBy }) { + if (!archivedBy) { + throw new MissingAttributesError(); + } + + const archiveDate = new Date(); + + await knex('organization-invitations') + .where({ organizationId: id, status: OrganizationInvitation.StatusType.PENDING }) + .update({ status: OrganizationInvitation.StatusType.CANCELLED, updatedAt: archiveDate }); + + await knex('campaigns').where({ organizationId: id, archivedAt: null }).update({ archivedAt: archiveDate }); + + await knex('memberships').where({ organizationId: id, disabledAt: null }).update({ disabledAt: archiveDate }); + + await knex(ORGANIZATIONS_TABLE_NAME) + .where({ id: id, archivedBy: null }) + .update({ archivedBy: archivedBy, archivedAt: archiveDate }); }; + +const save = async function (organization) { + const data = _.pick(organization, ['name', 'type', 'documentationUrl', 'credit', 'createdBy']); + const [organizationCreated] = await knex(ORGANIZATIONS_TABLE_NAME).returning('*').insert(data); + return _toDomain(organizationCreated); +}; + +export { get, update, archive, save }; diff --git a/api/lib/infrastructure/repositories/organization-invitation-repository.js b/api/lib/infrastructure/repositories/organization-invitation-repository.js index a1e9fdac05b..f19b7ea086c 100644 --- a/api/lib/infrastructure/repositories/organization-invitation-repository.js +++ b/api/lib/infrastructure/repositories/organization-invitation-repository.js @@ -1,9 +1,9 @@ -const BookshelfOrganizationInvitation = require('../orm-models/OrganizationInvitation.js'); -const bookshelfToDomainConverter = require('../utils/bookshelf-to-domain-converter.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const OrganizationInvitation = require('../../domain/models/OrganizationInvitation.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const _ = require('lodash'); +import { BookshelfOrganizationInvitation } from '../orm-models/OrganizationInvitation.js'; +import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js'; +import { NotFoundError } from '../../domain/errors.js'; +import { OrganizationInvitation } from '../../domain/models/OrganizationInvitation.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import _ from 'lodash'; function _toDomain(bookshelfInvitation) { if (bookshelfInvitation) { @@ -26,78 +26,87 @@ function _checkNotFoundErrorWithCode({ error, id, code }) { throw error; } -module.exports = { - create({ organizationId, email, code, role }) { - const status = OrganizationInvitation.StatusType.PENDING; - return new BookshelfOrganizationInvitation({ organizationId, email, status, code, role }).save().then(_toDomain); - }, +const create = function ({ organizationId, email, code, role }) { + const status = OrganizationInvitation.StatusType.PENDING; + return new BookshelfOrganizationInvitation({ organizationId, email, status, code, role }).save().then(_toDomain); +}; - get(id) { - return BookshelfOrganizationInvitation.where({ id }) - .fetch() - .then(_toDomain) - .catch((err) => _checkNotFoundError(err, id)); - }, +const get = function (id) { + return BookshelfOrganizationInvitation.where({ id }) + .fetch() + .then(_toDomain) + .catch((err) => _checkNotFoundError(err, id)); +}; - getByIdAndCode({ id, code }) { - return BookshelfOrganizationInvitation.where({ id, code }) - .fetch() - .then(_toDomain) - .catch((error) => _checkNotFoundErrorWithCode({ error, id, code })); - }, +const getByIdAndCode = function ({ id, code }) { + return BookshelfOrganizationInvitation.where({ id, code }) + .fetch() + .then(_toDomain) + .catch((error) => _checkNotFoundErrorWithCode({ error, id, code })); +}; - markAsAccepted(id) { - const status = OrganizationInvitation.StatusType.ACCEPTED; +const markAsAccepted = function (id) { + const status = OrganizationInvitation.StatusType.ACCEPTED; - return new BookshelfOrganizationInvitation({ id }) - .save({ status }, { patch: true, require: true }) - .then((model) => model.refresh()) - .then(_toDomain) - .catch((err) => _checkNotFoundError(err, id)); - }, + return new BookshelfOrganizationInvitation({ id }) + .save({ status }, { patch: true, require: true }) + .then((model) => model.refresh()) + .then(_toDomain) + .catch((err) => _checkNotFoundError(err, id)); +}; - async markAsCancelled({ id }) { - const [organizationInvitation] = await knex('organization-invitations') - .where({ id }) - .update({ - status: OrganizationInvitation.StatusType.CANCELLED, - updatedAt: new Date(), - }) - .returning('*'); +const markAsCancelled = async function ({ id }) { + const [organizationInvitation] = await knex('organization-invitations') + .where({ id }) + .update({ + status: OrganizationInvitation.StatusType.CANCELLED, + updatedAt: new Date(), + }) + .returning('*'); - if (!organizationInvitation) { - throw new NotFoundError(`Organization invitation of id ${id} is not found.`); - } - return new OrganizationInvitation(organizationInvitation); - }, + if (!organizationInvitation) { + throw new NotFoundError(`Organization invitation of id ${id} is not found.`); + } + return new OrganizationInvitation(organizationInvitation); +}; - findPendingByOrganizationId({ organizationId }) { - return BookshelfOrganizationInvitation.where({ organizationId, status: OrganizationInvitation.StatusType.PENDING }) - .orderBy('updatedAt', 'desc') - .fetchAll() - .then((results) => bookshelfToDomainConverter.buildDomainObjects(BookshelfOrganizationInvitation, results)); - }, +const findPendingByOrganizationId = function ({ organizationId }) { + return BookshelfOrganizationInvitation.where({ organizationId, status: OrganizationInvitation.StatusType.PENDING }) + .orderBy('updatedAt', 'desc') + .fetchAll() + .then((results) => bookshelfToDomainConverter.buildDomainObjects(BookshelfOrganizationInvitation, results)); +}; + +const findOnePendingByOrganizationIdAndEmail = function ({ organizationId, email }) { + return BookshelfOrganizationInvitation.query((qb) => + qb + .where({ organizationId, status: OrganizationInvitation.StatusType.PENDING }) + .whereRaw('LOWER("email") = ?', `${email.toLowerCase()}`) + ) + .fetch({ require: false }) + .then(_toDomain); +}; - findOnePendingByOrganizationIdAndEmail({ organizationId, email }) { - return BookshelfOrganizationInvitation.query((qb) => - qb - .where({ organizationId, status: OrganizationInvitation.StatusType.PENDING }) - .whereRaw('LOWER("email") = ?', `${email.toLowerCase()}`) - ) - .fetch({ require: false }) - .then(_toDomain); - }, +const updateModificationDate = async function (id) { + const organizationInvitation = await knex('organization-invitations') + .where({ id }) + .update({ updatedAt: new Date() }) + .returning('*') + .then(_.first); - async updateModificationDate(id) { - const organizationInvitation = await knex('organization-invitations') - .where({ id }) - .update({ updatedAt: new Date() }) - .returning('*') - .then(_.first); + if (!organizationInvitation) { + throw new NotFoundError(`Organization invitation of id ${id} is not found.`); + } + return new OrganizationInvitation(organizationInvitation); +}; - if (!organizationInvitation) { - throw new NotFoundError(`Organization invitation of id ${id} is not found.`); - } - return new OrganizationInvitation(organizationInvitation); - }, +export { + create, + get, + getByIdAndCode, + markAsAccepted, + markAsCancelled, + findPendingByOrganizationId, + findOnePendingByOrganizationIdAndEmail, + updateModificationDate, }; diff --git a/api/lib/infrastructure/repositories/organization-invited-user-repository.js b/api/lib/infrastructure/repositories/organization-invited-user-repository.js index 969947c1d94..c5d9e197d00 100644 --- a/api/lib/infrastructure/repositories/organization-invited-user-repository.js +++ b/api/lib/infrastructure/repositories/organization-invited-user-repository.js @@ -1,75 +1,75 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const OrganizationInvitedUser = require('../../domain/models/OrganizationInvitedUser.js'); -const { NotFoundError } = require('../../domain/errors.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { OrganizationInvitedUser } from '../../domain/models/OrganizationInvitedUser.js'; +import { NotFoundError } from '../../domain/errors.js'; -module.exports = { - async get({ organizationInvitationId, email }) { - const invitation = await knex('organization-invitations') - .select('id', 'organizationId', 'code', 'role', 'status') - .where({ id: organizationInvitationId }) - .first(); - if (!invitation) { - throw new NotFoundError(`Not found organization-invitation for ID ${organizationInvitationId}`); - } +const get = async function ({ organizationInvitationId, email }) { + const invitation = await knex('organization-invitations') + .select('id', 'organizationId', 'code', 'role', 'status') + .where({ id: organizationInvitationId }) + .first(); + if (!invitation) { + throw new NotFoundError(`Not found organization-invitation for ID ${organizationInvitationId}`); + } - const user = await knex('users').select('id').where({ email }).first(); - if (!user) { - throw new NotFoundError(`Not found user for email ${email}`); - } + const user = await knex('users').select('id').where({ email }).first(); + if (!user) { + throw new NotFoundError(`Not found user for email ${email}`); + } - const memberships = await knex('memberships') - .select('id', 'userId', 'organizationRole') - .where({ - organizationId: invitation.organizationId, - disabledAt: null, - }) - .orderBy('id', 'ASC'); - - const existingMembership = memberships.find((membership) => membership.userId === user.id); + const memberships = await knex('memberships') + .select('id', 'userId', 'organizationRole') + .where({ + organizationId: invitation.organizationId, + disabledAt: null, + }) + .orderBy('id', 'ASC'); - return new OrganizationInvitedUser({ - userId: user.id, - invitation, - currentMembershipId: existingMembership?.id, - currentRole: existingMembership?.organizationRole, - organizationHasMemberships: memberships.length, - status: invitation.status, - }); - }, + const existingMembership = memberships.find((membership) => membership.userId === user.id); - async save({ organizationInvitedUser }) { - const date = new Date(); - - if (organizationInvitedUser.isAlreadyMemberOfOrganization) { - await knex('memberships') - .update({ - organizationRole: organizationInvitedUser.currentRole, - updatedAt: date, - }) - .where({ id: organizationInvitedUser.currentMembershipId }); - } else { - const [{ id: membershipId }] = await knex('memberships') - .insert({ - organizationRole: organizationInvitedUser.currentRole, - organizationId: organizationInvitedUser.invitation.organizationId, - userId: organizationInvitedUser.userId, - }) - .returning('id'); + return new OrganizationInvitedUser({ + userId: user.id, + invitation, + currentMembershipId: existingMembership?.id, + currentRole: existingMembership?.organizationRole, + organizationHasMemberships: memberships.length, + status: invitation.status, + }); +}; - organizationInvitedUser.currentMembershipId = membershipId; - } +const save = async function ({ organizationInvitedUser }) { + const date = new Date(); - await knex('user-orga-settings') + if (organizationInvitedUser.isAlreadyMemberOfOrganization) { + await knex('memberships') + .update({ + organizationRole: organizationInvitedUser.currentRole, + updatedAt: date, + }) + .where({ id: organizationInvitedUser.currentMembershipId }); + } else { + const [{ id: membershipId }] = await knex('memberships') .insert({ + organizationRole: organizationInvitedUser.currentRole, + organizationId: organizationInvitedUser.invitation.organizationId, userId: organizationInvitedUser.userId, - currentOrganizationId: organizationInvitedUser.invitation.organizationId, - updatedAt: new Date(), }) - .onConflict('userId') - .merge(); + .returning('id'); + + organizationInvitedUser.currentMembershipId = membershipId; + } - await knex('organization-invitations') - .update({ status: organizationInvitedUser.status, updatedAt: date }) - .where({ id: organizationInvitedUser.invitation.id }); - }, + await knex('user-orga-settings') + .insert({ + userId: organizationInvitedUser.userId, + currentOrganizationId: organizationInvitedUser.invitation.organizationId, + updatedAt: new Date(), + }) + .onConflict('userId') + .merge(); + + await knex('organization-invitations') + .update({ status: organizationInvitedUser.status, updatedAt: date }) + .where({ id: organizationInvitedUser.invitation.id }); }; + +export { get, save }; diff --git a/api/lib/infrastructure/repositories/organization-learner-activity-repository.js b/api/lib/infrastructure/repositories/organization-learner-activity-repository.js index de3867195f0..7f0bc556d4a 100644 --- a/api/lib/infrastructure/repositories/organization-learner-activity-repository.js +++ b/api/lib/infrastructure/repositories/organization-learner-activity-repository.js @@ -1,6 +1,6 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const OrganizationLearnerParticipation = require('../../domain/read-models/OrganizationLearnerParticipation.js'); -const OrganizationLearnerActivity = require('../../domain/read-models/OrganizationLearnerActivity.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { OrganizationLearnerParticipation } from '../../domain/read-models/OrganizationLearnerParticipation.js'; +import { OrganizationLearnerActivity } from '../../domain/read-models/OrganizationLearnerActivity.js'; async function get(organizationLearnerId) { const organizationLearnerParticipations = await knex('campaign-participations') @@ -34,4 +34,4 @@ async function get(organizationLearnerId) { return new OrganizationLearnerActivity({ organizationLearnerId, participations }); } -module.exports = { get }; +export { get }; diff --git a/api/lib/infrastructure/repositories/organization-learner-follow-up/organization-learner-repository.js b/api/lib/infrastructure/repositories/organization-learner-follow-up/organization-learner-repository.js index 4334f0911e8..f2bb2cd147a 100644 --- a/api/lib/infrastructure/repositories/organization-learner-follow-up/organization-learner-repository.js +++ b/api/lib/infrastructure/repositories/organization-learner-follow-up/organization-learner-repository.js @@ -1,8 +1,8 @@ -const { knex } = require('../../../../db/knex-database-connection.js'); -const { NotFoundError } = require('../../../domain/errors.js'); -const OrganizationLearner = require('../../../domain/read-models/organization-learner-follow-up/OrganizationLearner.js'); -const CampaignTypes = require('../../../domain/models/CampaignTypes.js'); -const CampaignParticipationStatuses = require('../../../domain/models/CampaignParticipationStatuses.js'); +import { knex } from '../../../../db/knex-database-connection.js'; +import { NotFoundError } from '../../../domain/errors.js'; +import { OrganizationLearner } from '../../../domain/read-models/organization-learner-follow-up/OrganizationLearner.js'; +import { CampaignTypes } from '../../../domain/models/CampaignTypes.js'; +import { CampaignParticipationStatuses } from '../../../domain/models/CampaignParticipationStatuses.js'; function _buildIsCertifiable(queryBuilder, organizationLearnerId) { queryBuilder @@ -66,4 +66,4 @@ async function get(organizationLearnerId) { throw new NotFoundError(`Student not found for ID ${organizationLearnerId}`); } -module.exports = { get }; +export { get }; diff --git a/api/lib/infrastructure/repositories/organization-learner-repository.js b/api/lib/infrastructure/repositories/organization-learner-repository.js index 9320c3064cf..c9c567605d4 100644 --- a/api/lib/infrastructure/repositories/organization-learner-repository.js +++ b/api/lib/infrastructure/repositories/organization-learner-repository.js @@ -1,21 +1,20 @@ -const _ = require('lodash'); +import _ from 'lodash'; -const { +import { NotFoundError, OrganizationLearnerNotFound, OrganizationLearnersCouldNotBeSavedError, UserCouldNotBeReconciledError, UserNotFoundError, -} = require('../../domain/errors.js'); +} from '../../domain/errors.js'; -const OrganizationLearner = require('../../domain/models/OrganizationLearner.js'); -const OrganizationLearnerForAdmin = require('../../domain/read-models/OrganizationLearnerForAdmin.js'); -const studentRepository = require('./student-repository.js'); +import { OrganizationLearner } from '../../domain/models/OrganizationLearner.js'; +import { OrganizationLearnerForAdmin } from '../../domain/read-models/OrganizationLearnerForAdmin.js'; +import * as studentRepository from './student-repository.js'; -const { knex } = require('../../../db/knex-database-connection.js'); -const { fetchPage } = require('../utils/knex-utils.js'); - -const DomainTransaction = require('../DomainTransaction.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { fetchPage } from '../utils/knex-utils.js'; +import { DomainTransaction } from '../DomainTransaction.js'; function _shouldStudentToImportBeReconciled( allOrganizationLearnersInSameOrganization, @@ -41,293 +40,328 @@ function _shouldStudentToImportBeReconciled( return isFromSameOrganization || isFromDifferentOrganizationWithSameBirthday; } -module.exports = { - async findByIds({ ids }) { - const rawOrganizationLearners = await knex - .select('*') - .from('view-active-organization-learners') - .whereIn('id', ids) - .orderBy('id'); - - return rawOrganizationLearners.map((rawOrganizationLearner) => new OrganizationLearner(rawOrganizationLearner)); - }, - - findByOrganizationId({ organizationId }, transaction = DomainTransaction.emptyTransaction()) { - const knexConn = transaction.knexTransaction || knex; - return knexConn('view-active-organization-learners') - .where({ organizationId }) - .orderByRaw('LOWER("lastName") ASC, LOWER("firstName") ASC') - .then((organizationLearners) => - organizationLearners.map((organizationLearner) => new OrganizationLearner(organizationLearner)) - ); - }, - - async findByOrganizationIdAndUpdatedAtOrderByDivision({ organizationId, page, filter }) { - const BEGINNING_OF_THE_2020_SCHOOL_YEAR = '2020-08-15'; - const query = knex('view-active-organization-learners') - .where({ - organizationId, - isDisabled: false, - }) - .where('updatedAt', '>', BEGINNING_OF_THE_2020_SCHOOL_YEAR) - .orderByRaw('LOWER("division") ASC, LOWER("lastName") ASC, LOWER("firstName") ASC'); +const findByIds = async function ({ ids }) { + const rawOrganizationLearners = await knex + .select('*') + .from('view-active-organization-learners') + .whereIn('id', ids) + .orderBy('id'); - if (filter.divisions) { - query.whereIn('division', filter.divisions); - } + return rawOrganizationLearners.map((rawOrganizationLearner) => new OrganizationLearner(rawOrganizationLearner)); +}; + +const findByOrganizationId = function ({ organizationId }, transaction = DomainTransaction.emptyTransaction()) { + const knexConn = transaction.knexTransaction || knex; + return knexConn('view-active-organization-learners') + .where({ organizationId }) + .orderByRaw('LOWER("lastName") ASC, LOWER("firstName") ASC') + .then((organizationLearners) => + organizationLearners.map((organizationLearner) => new OrganizationLearner(organizationLearner)) + ); +}; - const { results, pagination } = await fetchPage(query, page); +const findByOrganizationIdAndUpdatedAtOrderByDivision = async function ({ organizationId, page, filter }) { + const BEGINNING_OF_THE_2020_SCHOOL_YEAR = '2020-08-15'; + const query = knex('view-active-organization-learners') + .where({ + organizationId, + isDisabled: false, + }) + .where('updatedAt', '>', BEGINNING_OF_THE_2020_SCHOOL_YEAR) + .orderByRaw('LOWER("division") ASC, LOWER("lastName") ASC, LOWER("firstName") ASC'); + + if (filter.divisions) { + query.whereIn('division', filter.divisions); + } + + const { results, pagination } = await fetchPage(query, page); + + return { + data: results.map((result) => new OrganizationLearner(result)), + pagination, + }; +}; + +const findByUserId = async function ({ userId }) { + const rawOrganizationLearners = await knex + .select('*') + .from('view-active-organization-learners') + .where({ userId }) + .orderBy('id'); - return { - data: results.map((result) => new OrganizationLearner(result)), - pagination, - }; - }, + return rawOrganizationLearners.map((rawOrganizationLearner) => new OrganizationLearner(rawOrganizationLearner)); +}; - async findByUserId({ userId }) { - const rawOrganizationLearners = await knex - .select('*') - .from('view-active-organization-learners') - .where({ userId }) - .orderBy('id'); +const isOrganizationLearnerIdLinkedToUserAndSCOOrganization = async function ({ userId, organizationLearnerId }) { + const exist = await knex('view-active-organization-learners') + .select('view-active-organization-learners.id') + .join('organizations', 'view-active-organization-learners.organizationId', 'organizations.id') + .where({ userId, type: 'SCO', 'view-active-organization-learners.id': organizationLearnerId }) + .first(); - return rawOrganizationLearners.map((rawOrganizationLearner) => new OrganizationLearner(rawOrganizationLearner)); - }, + return Boolean(exist); +}; - async isOrganizationLearnerIdLinkedToUserAndSCOOrganization({ userId, organizationLearnerId }) { - const exist = await knex('view-active-organization-learners') - .select('view-active-organization-learners.id') - .join('organizations', 'view-active-organization-learners.organizationId', 'organizations.id') - .where({ userId, type: 'SCO', 'view-active-organization-learners.id': organizationLearnerId }) - .first(); +const disableAllOrganizationLearnersInOrganization = async function ({ domainTransaction, organizationId }) { + const knexConn = domainTransaction.knexTransaction; + await knexConn('organization-learners') + .where({ organizationId, isDisabled: false }) + .update({ isDisabled: true, updatedAt: knexConn.raw('CURRENT_TIMESTAMP') }); +}; + +const addOrUpdateOrganizationOfOrganizationLearners = async function ( + organizationLearnerDatas, + organizationId, + domainTransaction +) { + const knexConn = domainTransaction.knexTransaction; + const organizationLearnersFromFile = organizationLearnerDatas.map( + (organizationLearnerData) => + new OrganizationLearner({ + ...organizationLearnerData, + organizationId, + }) + ); + const existingOrganizationLearners = await this.findByOrganizationId({ organizationId }, domainTransaction); - return Boolean(exist); - }, + const reconciledOrganizationLearnersToImport = await this._reconcileOrganizationLearners( + organizationLearnersFromFile, + existingOrganizationLearners, + domainTransaction + ); - async disableAllOrganizationLearnersInOrganization({ domainTransaction, organizationId }) { - const knexConn = domainTransaction.knexTransaction; + try { + const organizationLearnersToSave = reconciledOrganizationLearnersToImport.map((organizationLearner) => ({ + ..._.omit(organizationLearner, ['id', 'createdAt']), + updatedAt: knexConn.raw('CURRENT_TIMESTAMP'), + isDisabled: false, + })); await knexConn('organization-learners') - .where({ organizationId, isDisabled: false }) - .update({ isDisabled: true, updatedAt: knexConn.raw('CURRENT_TIMESTAMP') }); - }, - - async addOrUpdateOrganizationOfOrganizationLearners(organizationLearnerDatas, organizationId, domainTransaction) { - const knexConn = domainTransaction.knexTransaction; - const organizationLearnersFromFile = organizationLearnerDatas.map( - (organizationLearnerData) => - new OrganizationLearner({ - ...organizationLearnerData, - organizationId, - }) - ); - const existingOrganizationLearners = await this.findByOrganizationId({ organizationId }, domainTransaction); + .insert(organizationLearnersToSave) + .onConflict(['organizationId', 'nationalStudentId']) + .merge(); + } catch (err) { + throw new OrganizationLearnersCouldNotBeSavedError(); + } +}; - const reconciledOrganizationLearnersToImport = await this._reconcileOrganizationLearners( - organizationLearnersFromFile, - existingOrganizationLearners, - domainTransaction +const _reconcileOrganizationLearners = async function ( + studentsToImport, + allOrganizationLearnersInSameOrganization, + domainTransaction +) { + const nationalStudentIdsFromFile = studentsToImport + .map((organizationLearnerData) => organizationLearnerData.nationalStudentId) + .filter(Boolean); + const organizationLearnersWithSameNationalStudentIdsAsImported = + await studentRepository.findReconciledStudentsByNationalStudentId(nationalStudentIdsFromFile, domainTransaction); + + organizationLearnersWithSameNationalStudentIdsAsImported.forEach((organizationLearner) => { + const alreadyReconciledStudentToImport = studentsToImport.find( + (studentToImport) => studentToImport.userId === organizationLearner.account.userId ); - try { - const organizationLearnersToSave = reconciledOrganizationLearnersToImport.map((organizationLearner) => ({ - ..._.omit(organizationLearner, ['id', 'createdAt']), - updatedAt: knexConn.raw('CURRENT_TIMESTAMP'), - isDisabled: false, - })); - await knexConn('organization-learners') - .insert(organizationLearnersToSave) - .onConflict(['organizationId', 'nationalStudentId']) - .merge(); - } catch (err) { - throw new OrganizationLearnersCouldNotBeSavedError(); + if (alreadyReconciledStudentToImport) { + alreadyReconciledStudentToImport.userId = null; + return; } - }, - - async _reconcileOrganizationLearners(studentsToImport, allOrganizationLearnersInSameOrganization, domainTransaction) { - const nationalStudentIdsFromFile = studentsToImport - .map((organizationLearnerData) => organizationLearnerData.nationalStudentId) - .filter(Boolean); - const organizationLearnersWithSameNationalStudentIdsAsImported = - await studentRepository.findReconciledStudentsByNationalStudentId(nationalStudentIdsFromFile, domainTransaction); - - organizationLearnersWithSameNationalStudentIdsAsImported.forEach((organizationLearner) => { - const alreadyReconciledStudentToImport = studentsToImport.find( - (studentToImport) => studentToImport.userId === organizationLearner.account.userId - ); - - if (alreadyReconciledStudentToImport) { - alreadyReconciledStudentToImport.userId = null; - return; - } - - const studentToImport = studentsToImport.find( - (studentToImport) => studentToImport.nationalStudentId === organizationLearner.nationalStudentId - ); - - if ( - _shouldStudentToImportBeReconciled( - allOrganizationLearnersInSameOrganization, - organizationLearner, - studentToImport - ) - ) { - studentToImport.userId = organizationLearner.account.userId; - } - }); - return studentsToImport; - }, - - async findByOrganizationIdAndBirthdate({ organizationId, birthdate }) { - const rawOrganizationLearners = await knex - .select('*') - .from('view-active-organization-learners') - .where({ organizationId, birthdate, isDisabled: false }) - .orderBy('id'); - - return rawOrganizationLearners.map((rawOrganizationLearner) => new OrganizationLearner(rawOrganizationLearner)); - }, - - async reconcileUserToOrganizationLearner({ userId, organizationLearnerId }) { - try { - const [rawOrganizationLearner] = await knex('organization-learners') - .where({ id: organizationLearnerId }) - .where('isDisabled', false) - .update({ userId, updatedAt: knex.fn.now() }) - .returning('*'); - if (!rawOrganizationLearner) throw new Error(); - return new OrganizationLearner(rawOrganizationLearner); - } catch (error) { - throw new UserCouldNotBeReconciledError(); - } - }, - - async reconcileUserByNationalStudentIdAndOrganizationId({ nationalStudentId, userId, organizationId }) { - try { - const [rawOrganizationLearner] = await knex('organization-learners') - .where({ - organizationId, - nationalStudentId, - isDisabled: false, - }) - .update({ userId, updatedAt: knex.fn.now() }) - .returning('*'); - if (!rawOrganizationLearner) throw new Error(); - return new OrganizationLearner(rawOrganizationLearner); - } catch (error) { - throw new UserCouldNotBeReconciledError(); - } - }, - - async getOrganizationLearnerForAdmin(organizationLearnerId) { - const organizationLearner = await knex('view-active-organization-learners') - .select( - 'view-active-organization-learners.id as id', - 'firstName', - 'lastName', - 'birthdate', - 'division', - 'group', - 'organizationId', - 'organizations.name as organizationName', - 'view-active-organization-learners.createdAt as createdAt', - 'view-active-organization-learners.updatedAt as updatedAt', - 'isDisabled', - 'organizations.isManagingStudents as organizationIsManagingStudents' - ) - .innerJoin('organizations', 'organizations.id', 'view-active-organization-learners.organizationId') - .where({ 'view-active-organization-learners.id': organizationLearnerId }) - .first(); - if (!organizationLearner) { - throw new NotFoundError(`Organization Learner not found for ID ${organizationLearnerId}`); + const studentToImport = studentsToImport.find( + (studentToImport) => studentToImport.nationalStudentId === organizationLearner.nationalStudentId + ); + + if ( + _shouldStudentToImportBeReconciled( + allOrganizationLearnersInSameOrganization, + organizationLearner, + studentToImport + ) + ) { + studentToImport.userId = organizationLearner.account.userId; } - return new OrganizationLearnerForAdmin(organizationLearner); - }, + }); + return studentsToImport; +}; - async dissociateUserFromOrganizationLearner(organizationLearnerId) { - await knex('organization-learners').where({ id: organizationLearnerId }).update({ userId: null }); - }, +const findByOrganizationIdAndBirthdate = async function ({ organizationId, birthdate }) { + const rawOrganizationLearners = await knex + .select('*') + .from('view-active-organization-learners') + .where({ organizationId, birthdate, isDisabled: false }) + .orderBy('id'); - async dissociateAllStudentsByUserId({ userId, domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConn = domainTransaction.knexTransaction ?? knex; - await knexConn('organization-learners') - .update({ userId: null, updatedAt: knex.fn.now() }) - .where({ userId }) - .whereIn( - 'organization-learners.organizationId', - knex.select('id').from('organizations').where({ isManagingStudents: true }) - ); - }, - - async findOneByUserIdAndOrganizationId({ - userId, - organizationId, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - const organizationLearner = await knex('view-active-organization-learners') - .transacting(domainTransaction) - .where({ userId, organizationId }) - .first('*'); - if (!organizationLearner) return null; - return new OrganizationLearner(organizationLearner); - }, - - async get(organizationLearnerId) { - const organizationLearner = await knex - .select('*') - .from('view-active-organization-learners') - .where({ id: organizationLearnerId }) - .first(); + return rawOrganizationLearners.map((rawOrganizationLearner) => new OrganizationLearner(rawOrganizationLearner)); +}; - if (!organizationLearner) { - throw new NotFoundError(`Student not found for ID ${organizationLearnerId}`); - } - return new OrganizationLearner(organizationLearner); - }, - - async getLatestOrganizationLearner({ nationalStudentId, birthdate }) { - const organizationLearner = await knex - .where({ nationalStudentId, birthdate }) - .whereNotNull('userId') - .select() - .from('view-active-organization-learners') - .orderBy('updatedAt', 'desc') - .first(); - - if (!organizationLearner) { - throw new UserNotFoundError(); - } +const reconcileUserToOrganizationLearner = async function ({ userId, organizationLearnerId }) { + try { + const [rawOrganizationLearner] = await knex('organization-learners') + .where({ id: organizationLearnerId }) + .where('isDisabled', false) + .update({ userId, updatedAt: knex.fn.now() }) + .returning('*'); + if (!rawOrganizationLearner) throw new Error(); + return new OrganizationLearner(rawOrganizationLearner); + } catch (error) { + throw new UserCouldNotBeReconciledError(); + } +}; - return organizationLearner; - }, - - async updateUserIdWhereNull({ - organizationLearnerId, - userId, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - const knexConn = domainTransaction.knexTransaction || knex; - const [rawOrganizationLearner] = await knexConn('organization-learners') - .where({ id: organizationLearnerId, userId: null }) +const reconcileUserByNationalStudentIdAndOrganizationId = async function ({ + nationalStudentId, + userId, + organizationId, +}) { + try { + const [rawOrganizationLearner] = await knex('organization-learners') + .where({ + organizationId, + nationalStudentId, + isDisabled: false, + }) .update({ userId, updatedAt: knex.fn.now() }) .returning('*'); + if (!rawOrganizationLearner) throw new Error(); + return new OrganizationLearner(rawOrganizationLearner); + } catch (error) { + throw new UserCouldNotBeReconciledError(); + } +}; - if (!rawOrganizationLearner) - throw new OrganizationLearnerNotFound( - `OrganizationLearner not found for ID ${organizationLearnerId} and user ID null.` - ); +const getOrganizationLearnerForAdmin = async function (organizationLearnerId) { + const organizationLearner = await knex('view-active-organization-learners') + .select( + 'view-active-organization-learners.id as id', + 'firstName', + 'lastName', + 'birthdate', + 'division', + 'group', + 'organizationId', + 'organizations.name as organizationName', + 'view-active-organization-learners.createdAt as createdAt', + 'view-active-organization-learners.updatedAt as updatedAt', + 'isDisabled', + 'organizations.isManagingStudents as organizationIsManagingStudents' + ) + .innerJoin('organizations', 'organizations.id', 'view-active-organization-learners.organizationId') + .where({ 'view-active-organization-learners.id': organizationLearnerId }) + .first(); + + if (!organizationLearner) { + throw new NotFoundError(`Organization Learner not found for ID ${organizationLearnerId}`); + } + return new OrganizationLearnerForAdmin(organizationLearner); +}; - return new OrganizationLearner(rawOrganizationLearner); - }, - - async isActive({ userId, campaignId }) { - const learner = await knex('view-active-organization-learners') - .select('view-active-organization-learners.isDisabled') - .join('organizations', 'organizations.id', 'view-active-organization-learners.organizationId') - .join('campaigns', 'campaigns.organizationId', 'organizations.id') - .where({ 'campaigns.id': campaignId }) - .andWhere({ 'view-active-organization-learners.userId': userId }) - .first(); - return !learner?.isDisabled; - }, +const dissociateUserFromOrganizationLearner = async function (organizationLearnerId) { + await knex('organization-learners').where({ id: organizationLearnerId }).update({ userId: null }); +}; + +const dissociateAllStudentsByUserId = async function ({ + userId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction.knexTransaction ?? knex; + await knexConn('organization-learners') + .update({ userId: null, updatedAt: knex.fn.now() }) + .where({ userId }) + .whereIn( + 'organization-learners.organizationId', + knex.select('id').from('organizations').where({ isManagingStudents: true }) + ); +}; + +const findOneByUserIdAndOrganizationId = async function ({ + userId, + organizationId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const organizationLearner = await knex('view-active-organization-learners') + .transacting(domainTransaction) + .where({ userId, organizationId }) + .first('*'); + if (!organizationLearner) return null; + return new OrganizationLearner(organizationLearner); +}; + +const get = async function (organizationLearnerId) { + const organizationLearner = await knex + .select('*') + .from('view-active-organization-learners') + .where({ id: organizationLearnerId }) + .first(); + + if (!organizationLearner) { + throw new NotFoundError(`Student not found for ID ${organizationLearnerId}`); + } + return new OrganizationLearner(organizationLearner); +}; + +const getLatestOrganizationLearner = async function ({ nationalStudentId, birthdate }) { + const organizationLearner = await knex + .where({ nationalStudentId, birthdate }) + .whereNotNull('userId') + .select() + .from('view-active-organization-learners') + .orderBy('updatedAt', 'desc') + .first(); + + if (!organizationLearner) { + throw new UserNotFoundError(); + } + + return organizationLearner; +}; + +const updateUserIdWhereNull = async function ({ + organizationLearnerId, + userId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction.knexTransaction || knex; + const [rawOrganizationLearner] = await knexConn('organization-learners') + .where({ id: organizationLearnerId, userId: null }) + .update({ userId, updatedAt: knex.fn.now() }) + .returning('*'); + + if (!rawOrganizationLearner) + throw new OrganizationLearnerNotFound( + `OrganizationLearner not found for ID ${organizationLearnerId} and user ID null.` + ); + + return new OrganizationLearner(rawOrganizationLearner); +}; + +const isActive = async function ({ userId, campaignId }) { + const learner = await knex('view-active-organization-learners') + .select('view-active-organization-learners.isDisabled') + .join('organizations', 'organizations.id', 'view-active-organization-learners.organizationId') + .join('campaigns', 'campaigns.organizationId', 'organizations.id') + .where({ 'campaigns.id': campaignId }) + .andWhere({ 'view-active-organization-learners.userId': userId }) + .first(); + return !learner?.isDisabled; +}; + +export { + findByIds, + findByOrganizationId, + findByOrganizationIdAndUpdatedAtOrderByDivision, + findByUserId, + isOrganizationLearnerIdLinkedToUserAndSCOOrganization, + disableAllOrganizationLearnersInOrganization, + addOrUpdateOrganizationOfOrganizationLearners, + _reconcileOrganizationLearners, + findByOrganizationIdAndBirthdate, + reconcileUserToOrganizationLearner, + reconcileUserByNationalStudentIdAndOrganizationId, + getOrganizationLearnerForAdmin, + dissociateUserFromOrganizationLearner, + dissociateAllStudentsByUserId, + findOneByUserIdAndOrganizationId, + get, + getLatestOrganizationLearner, + updateUserIdWhereNull, + isActive, }; diff --git a/api/lib/infrastructure/repositories/organization-member-identity-repository.js b/api/lib/infrastructure/repositories/organization-member-identity-repository.js index a5109a7d17f..a1835c00834 100644 --- a/api/lib/infrastructure/repositories/organization-member-identity-repository.js +++ b/api/lib/infrastructure/repositories/organization-member-identity-repository.js @@ -1,15 +1,15 @@ -const OrganizationMemberIdentity = require('../../domain/models/OrganizationMemberIdentity.js'); -const { knex } = require('../../../db/knex-database-connection.js'); +import { OrganizationMemberIdentity } from '../../domain/models/OrganizationMemberIdentity.js'; +import { knex } from '../../../db/knex-database-connection.js'; -module.exports = { - async findAllByOrganizationId({ organizationId }) { - const sortedMembers = await knex('users') - .select('users.id', 'users.firstName', 'users.lastName') - .join('memberships', 'memberships.userId', 'users.id') - .where({ disabledAt: null, organizationId }) - .orderByRaw('LOWER("firstName") asc') - .orderByRaw('LOWER("lastName") asc'); +const findAllByOrganizationId = async function ({ organizationId }) { + const sortedMembers = await knex('users') + .select('users.id', 'users.firstName', 'users.lastName') + .join('memberships', 'memberships.userId', 'users.id') + .where({ disabledAt: null, organizationId }) + .orderByRaw('LOWER("firstName") asc') + .orderByRaw('LOWER("lastName") asc'); - return sortedMembers.map((sortedMember) => new OrganizationMemberIdentity({ ...sortedMember })); - }, + return sortedMembers.map((sortedMember) => new OrganizationMemberIdentity({ ...sortedMember })); }; + +export { findAllByOrganizationId }; diff --git a/api/lib/infrastructure/repositories/organization-participant-repository.js b/api/lib/infrastructure/repositories/organization-participant-repository.js index 12292f2e532..404f3337718 100644 --- a/api/lib/infrastructure/repositories/organization-participant-repository.js +++ b/api/lib/infrastructure/repositories/organization-participant-repository.js @@ -1,9 +1,9 @@ -const OrganizationParticipant = require('../../domain/read-models/OrganizationParticipant.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { fetchPage } = require('../utils/knex-utils.js'); -const { filterByFullName } = require('../utils/filter-utils.js'); -const CampaignTypes = require('../../domain/models/CampaignTypes.js'); -const CampaignParticipationStatuses = require('../../domain/models/CampaignParticipationStatuses.js'); +import { OrganizationParticipant } from '../../domain/read-models/OrganizationParticipant.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { fetchPage } from '../utils/knex-utils.js'; +import { filterByFullName } from '../utils/filter-utils.js'; +import { CampaignTypes } from '../../domain/models/CampaignTypes.js'; +import { CampaignParticipationStatuses } from '../../domain/models/CampaignParticipationStatuses.js'; async function getParticipantsByOrganizationId({ organizationId, page, filters = {}, sort = {} }) { const { count } = await knex @@ -142,6 +142,4 @@ function _buildIsCertifiable(queryBuilder, organizationId) { .where('campaign-participations.deletedAt', null); } -module.exports = { - getParticipantsByOrganizationId, -}; +export { getParticipantsByOrganizationId }; diff --git a/api/lib/infrastructure/repositories/organization-places-capacity-repository.js b/api/lib/infrastructure/repositories/organization-places-capacity-repository.js index e5c0b3586c7..2571ffa811b 100644 --- a/api/lib/infrastructure/repositories/organization-places-capacity-repository.js +++ b/api/lib/infrastructure/repositories/organization-places-capacity-repository.js @@ -1,5 +1,5 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const OrganizationPlacesCapacity = require('../../domain/read-models/OrganizationPlacesCapacity.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { OrganizationPlacesCapacity } from '../../domain/read-models/OrganizationPlacesCapacity.js'; async function findByOrganizationId(organizationId) { const now = new Date(); @@ -15,6 +15,4 @@ async function findByOrganizationId(organizationId) { return new OrganizationPlacesCapacity({ placesLots: organizationPlacesLots, organizationId }); } -module.exports = { - findByOrganizationId, -}; +export { findByOrganizationId }; diff --git a/api/lib/infrastructure/repositories/organization-repository.js b/api/lib/infrastructure/repositories/organization-repository.js index 3c20270a75e..f2c03319ba1 100644 --- a/api/lib/infrastructure/repositories/organization-repository.js +++ b/api/lib/infrastructure/repositories/organization-repository.js @@ -1,10 +1,10 @@ -const _ = require('lodash'); -const { NotFoundError } = require('../../domain/errors.js'); -const Organization = require('../../domain/models/Organization.js'); -const DomainTransaction = require('../DomainTransaction.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const Tag = require('../../domain/models/Tag.js'); -const { fetchPage } = require('../utils/knex-utils.js'); +import _ from 'lodash'; +import { NotFoundError } from '../../domain/errors.js'; +import { Organization } from '../../domain/models/Organization.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { Tag } from '../../domain/models/Tag.js'; +import { fetchPage } from '../utils/knex-utils.js'; function _toDomain(rawOrganization) { const organization = new Organization({ @@ -48,153 +48,167 @@ function _setSearchFiltersForQueryBuilder(qb, filter) { } } -module.exports = { - create(organization) { - const organizationRawData = _.pick(organization, [ +const create = function (organization) { + const organizationRawData = _.pick(organization, [ + 'name', + 'type', + 'logoUrl', + 'externalId', + 'provinceCode', + 'email', + 'isManagingStudents', + 'createdBy', + 'documentationUrl', + ]); + + return knex('organizations') + .insert(organizationRawData) + .returning('*') + .then(([organization]) => _toDomain(organization)); +}; + +const batchCreateOrganizations = async function ( + organizations, + domainTransaction = DomainTransaction.emptyTransaction() +) { + const organizationsRawData = organizations.map((organization) => + _.pick(organization, [ 'name', 'type', - 'logoUrl', - 'externalId', - 'provinceCode', 'email', - 'isManagingStudents', - 'createdBy', - 'documentationUrl', - ]); - - return knex('organizations') - .insert(organizationRawData) - .returning('*') - .then(([organization]) => _toDomain(organization)); - }, - - async batchCreateOrganizations(organizations, domainTransaction = DomainTransaction.emptyTransaction()) { - const organizationsRawData = organizations.map((organization) => - _.pick(organization, [ - 'name', - 'type', - 'email', - 'externalId', - 'provinceCode', - 'isManagingStudents', - 'identityProviderForCampaigns', - 'credit', - 'createdBy', - 'documentationUrl', - ]) - ); - return knex - .batchInsert('organizations', organizationsRawData) - .transacting(domainTransaction.knexTransaction) - .returning(['id', 'externalId', 'name']); - }, - - async update(organization) { - const organizationRawData = _.pick(organization, [ - 'name', - 'type', - 'logoUrl', 'externalId', 'provinceCode', 'isManagingStudents', - 'email', + 'identityProviderForCampaigns', 'credit', + 'createdBy', 'documentationUrl', - 'showSkills', - ]); - - const [organizationDB] = await knex('organizations') - .update(organizationRawData) - .where({ id: organization.id }) - .returning('*'); - - const tagsDB = await knex('tags') - .select(['tags.id', 'tags.name']) - .join('organization-tags', 'organization-tags.tagId', 'tags.id') - .where('organization-tags.organizationId', organizationDB.id); - - const tags = tagsDB.map((tagDB) => new Tag(tagDB)); - - return _toDomain({ ...organizationDB, tags }); - }, - - async get(id) { - const organizationDB = await knex('organizations').where({ id }).first(); - if (!organizationDB) { - throw new NotFoundError(`Not found organization for ID ${id}`); - } - - const tagsDB = await knex('tags') - .select(['tags.id', 'tags.name']) - .join('organization-tags', 'organization-tags.tagId', 'tags.id') - .where('organization-tags.organizationId', id); - - const tags = tagsDB.map((tagDB) => new Tag(tagDB)); - return _toDomain({ ...organizationDB, tags }); - }, - - async getIdByCertificationCenterId(certificationCenterId) { - const organizationIds = await knex - .pluck('organizations.id') - .from('organizations') - .innerJoin('certification-centers', function () { - this.on('certification-centers.externalId', 'organizations.externalId').andOn( - 'certification-centers.type', - 'organizations.type' - ); - }) - .where('certification-centers.id', certificationCenterId); - - if (organizationIds.length !== 1) - throw new NotFoundError(`Not found organization for certification center id ${certificationCenterId}`); - return organizationIds[0]; - }, - - async getScoOrganizationByExternalId(externalId) { - const organizationDB = await knex('organizations') - .where({ type: Organization.types.SCO }) - .whereRaw('LOWER("externalId") = ?', externalId.toLowerCase()) - .first(); - - if (!organizationDB) { - throw new NotFoundError(`Could not find organization for externalId ${externalId}.`); - } - return _toDomain(organizationDB); - }, - - async findByExternalIdsFetchingIdsOnly(externalIds) { - const organizationsDB = await knex('organizations') - .whereInArray('externalId', externalIds) - .select(['id', 'externalId']); - - return organizationsDB.map((model) => _toDomain(model)); - }, - - async findScoOrganizationsByUai({ uai }) { - const organizationsDB = await knex('organizations') - .where({ type: Organization.types.SCO }) - .whereRaw('LOWER("externalId") = ? ', `${uai.toLowerCase()}`); - - return organizationsDB.map((model) => _toDomain(model)); - }, - - async findPaginatedFiltered({ filter, page }) { - const query = knex('organizations').modify(_setSearchFiltersForQueryBuilder, filter).orderBy('name', 'ASC'); - - const { results, pagination } = await fetchPage(query, page); - const organizations = results.map((model) => _toDomain(model)); - return { models: organizations, pagination }; - }, - - async findPaginatedFilteredByTargetProfile({ targetProfileId, filter, page }) { - const query = knex('organizations') - .select('organizations.*') - .innerJoin('target-profile-shares', 'organizations.id', 'target-profile-shares.organizationId') - .where({ 'target-profile-shares.targetProfileId': targetProfileId }) - .modify(_setSearchFiltersForQueryBuilder, filter); - - const { results, pagination } = await fetchPage(query, page); - const organizations = results.map((model) => _toDomain(model)); - return { models: organizations, pagination }; - }, + ]) + ); + return knex + .batchInsert('organizations', organizationsRawData) + .transacting(domainTransaction.knexTransaction) + .returning(['id', 'externalId', 'name']); +}; + +const update = async function (organization) { + const organizationRawData = _.pick(organization, [ + 'name', + 'type', + 'logoUrl', + 'externalId', + 'provinceCode', + 'isManagingStudents', + 'email', + 'credit', + 'documentationUrl', + 'showSkills', + ]); + + const [organizationDB] = await knex('organizations') + .update(organizationRawData) + .where({ id: organization.id }) + .returning('*'); + + const tagsDB = await knex('tags') + .select(['tags.id', 'tags.name']) + .join('organization-tags', 'organization-tags.tagId', 'tags.id') + .where('organization-tags.organizationId', organizationDB.id); + + const tags = tagsDB.map((tagDB) => new Tag(tagDB)); + + return _toDomain({ ...organizationDB, tags }); +}; + +const get = async function (id) { + const organizationDB = await knex('organizations').where({ id }).first(); + if (!organizationDB) { + throw new NotFoundError(`Not found organization for ID ${id}`); + } + + const tagsDB = await knex('tags') + .select(['tags.id', 'tags.name']) + .join('organization-tags', 'organization-tags.tagId', 'tags.id') + .where('organization-tags.organizationId', id); + + const tags = tagsDB.map((tagDB) => new Tag(tagDB)); + return _toDomain({ ...organizationDB, tags }); +}; + +const getIdByCertificationCenterId = async function (certificationCenterId) { + const organizationIds = await knex + .pluck('organizations.id') + .from('organizations') + .innerJoin('certification-centers', function () { + this.on('certification-centers.externalId', 'organizations.externalId').andOn( + 'certification-centers.type', + 'organizations.type' + ); + }) + .where('certification-centers.id', certificationCenterId); + + if (organizationIds.length !== 1) + throw new NotFoundError(`Not found organization for certification center id ${certificationCenterId}`); + return organizationIds[0]; +}; + +const getScoOrganizationByExternalId = async function (externalId) { + const organizationDB = await knex('organizations') + .where({ type: Organization.types.SCO }) + .whereRaw('LOWER("externalId") = ?', externalId.toLowerCase()) + .first(); + + if (!organizationDB) { + throw new NotFoundError(`Could not find organization for externalId ${externalId}.`); + } + return _toDomain(organizationDB); +}; + +const findByExternalIdsFetchingIdsOnly = async function (externalIds) { + const organizationsDB = await knex('organizations') + .whereInArray('externalId', externalIds) + .select(['id', 'externalId']); + + return organizationsDB.map((model) => _toDomain(model)); +}; + +const findScoOrganizationsByUai = async function ({ uai }) { + const organizationsDB = await knex('organizations') + .where({ type: Organization.types.SCO }) + .whereRaw('LOWER("externalId") = ? ', `${uai.toLowerCase()}`); + + return organizationsDB.map((model) => _toDomain(model)); +}; + +const findPaginatedFiltered = async function ({ filter, page }) { + const query = knex('organizations').modify(_setSearchFiltersForQueryBuilder, filter).orderBy('name', 'ASC'); + + const { results, pagination } = await fetchPage(query, page); + const organizations = results.map((model) => _toDomain(model)); + return { models: organizations, pagination }; +}; + +const findPaginatedFilteredByTargetProfile = async function ({ targetProfileId, filter, page }) { + const query = knex('organizations') + .select('organizations.*') + .innerJoin('target-profile-shares', 'organizations.id', 'target-profile-shares.organizationId') + .where({ 'target-profile-shares.targetProfileId': targetProfileId }) + .modify(_setSearchFiltersForQueryBuilder, filter); + + const { results, pagination } = await fetchPage(query, page); + const organizations = results.map((model) => _toDomain(model)); + return { models: organizations, pagination }; +}; + +export { + create, + batchCreateOrganizations, + update, + get, + getIdByCertificationCenterId, + getScoOrganizationByExternalId, + findByExternalIdsFetchingIdsOnly, + findScoOrganizationsByUai, + findPaginatedFiltered, + findPaginatedFilteredByTargetProfile, }; diff --git a/api/lib/infrastructure/repositories/organization-tag-repository.js b/api/lib/infrastructure/repositories/organization-tag-repository.js index 5f3019527ea..169ac1d9d2b 100644 --- a/api/lib/infrastructure/repositories/organization-tag-repository.js +++ b/api/lib/infrastructure/repositories/organization-tag-repository.js @@ -1,74 +1,83 @@ -const BookshelfOrganizationTag = require('../orm-models/OrganizationTag.js'); -const Bookshelf = require('../bookshelf.js'); -const bookshelfUtils = require('../utils/knex-utils.js'); -const bookshelfToDomainConverter = require('../utils/bookshelf-to-domain-converter.js'); -const { AlreadyExistingEntityError, OrganizationTagNotFound } = require('../../domain/errors.js'); -const { omit } = require('lodash'); -const DomainTransaction = require('../DomainTransaction.js'); -const OrganizationTagBookshelf = require('../orm-models/OrganizationTag.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const Tag = require('../../domain/models/Tag.js'); +import { BookshelfOrganizationTag } from '../orm-models/OrganizationTag.js'; +import { Bookshelf } from '../bookshelf.js'; +import * as knexUtils from '../utils/knex-utils.js'; +import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js'; +import { AlreadyExistingEntityError, OrganizationTagNotFound } from '../../domain/errors.js'; +import lodash from 'lodash'; -module.exports = { - async create(organizationTag) { - try { - const organizationTagToCreate = omit(organizationTag, 'id'); - const bookshelfOrganizationTag = await new BookshelfOrganizationTag(organizationTagToCreate).save(); - return bookshelfToDomainConverter.buildDomainObject(BookshelfOrganizationTag, bookshelfOrganizationTag); - } catch (err) { - if (bookshelfUtils.isUniqConstraintViolated(err)) { - throw new AlreadyExistingEntityError( - `The tag ${organizationTag.tagId} already exists for the organization ${organizationTag.organizationId}.` - ); - } - throw err; - } - }, +const { omit } = lodash; + +import { DomainTransaction } from '../DomainTransaction.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { Tag } from '../../domain/models/Tag.js'; - async delete({ organizationTagId }) { - try { - await BookshelfOrganizationTag.where({ id: organizationTagId }).destroy({ require: true }); - } catch (err) { - throw new OrganizationTagNotFound('An error occurred while deleting the organization tag'); +const create = async function (organizationTag) { + try { + const organizationTagToCreate = omit(organizationTag, 'id'); + const bookshelfOrganizationTag = await new BookshelfOrganizationTag(organizationTagToCreate).save(); + return bookshelfToDomainConverter.buildDomainObject(BookshelfOrganizationTag, bookshelfOrganizationTag); + } catch (err) { + if (knexUtils.isUniqConstraintViolated(err)) { + throw new AlreadyExistingEntityError( + `The tag ${organizationTag.tagId} already exists for the organization ${organizationTag.organizationId}.` + ); } - }, + throw err; + } +}; + +const remove = async function ({ organizationTagId }) { + try { + await BookshelfOrganizationTag.where({ id: organizationTagId }).destroy({ require: true }); + } catch (err) { + throw new OrganizationTagNotFound('An error occurred while deleting the organization tag'); + } +}; - async findOneByOrganizationIdAndTagId({ organizationId, tagId }) { - const bookshelfOrganizationTags = await BookshelfOrganizationTag.query((qb) => { - qb.where('organizationId', organizationId); - qb.where('tagId', tagId); - }).fetchAll(); +const findOneByOrganizationIdAndTagId = async function ({ organizationId, tagId }) { + const bookshelfOrganizationTags = await BookshelfOrganizationTag.query((qb) => { + qb.where('organizationId', organizationId); + qb.where('tagId', tagId); + }).fetchAll(); - return bookshelfOrganizationTags.length > 0 - ? bookshelfToDomainConverter.buildDomainObjects(OrganizationTagBookshelf, bookshelfOrganizationTags)[0] - : []; - }, + return bookshelfOrganizationTags.length > 0 + ? bookshelfToDomainConverter.buildDomainObjects(BookshelfOrganizationTag, bookshelfOrganizationTags)[0] + : []; +}; - async batchCreate(organizationsTags, domainTransaction = DomainTransaction.emptyTransaction()) { - return Bookshelf.knex - .batchInsert('organization-tags', organizationsTags) - .transacting(domainTransaction.knexTransaction); - }, +const batchCreate = async function (organizationsTags, domainTransaction = DomainTransaction.emptyTransaction()) { + return Bookshelf.knex + .batchInsert('organization-tags', organizationsTags) + .transacting(domainTransaction.knexTransaction); +}; - async isExistingByOrganizationIdAndTagId({ organizationId, tagId }) { - const organizationTag = await BookshelfOrganizationTag.where({ organizationId, tagId }).fetch({ require: false }); +const isExistingByOrganizationIdAndTagId = async function ({ organizationId, tagId }) { + const organizationTag = await BookshelfOrganizationTag.where({ organizationId, tagId }).fetch({ require: false }); - return !!organizationTag; - }, + return !!organizationTag; +}; + +const getRecentlyUsedTags = async function ({ tagId, numberOfRecentTags }) { + const organizationIds = ( + await knex.select('organizationId').from('organization-tags').where('tagId', '=', tagId) + ).map(({ organizationId }) => organizationId); + const tags = await knex + .select(knex.raw('"organization-tags"."tagId", "tags"."name", COUNT("organization-tags"."tagId") AS "usedCount"')) + .from('organization-tags') + .join('tags', 'tags.id', '=', 'organization-tags.tagId') + .whereIn('organization-tags.organizationId', organizationIds) + .andWhere('organization-tags.tagId', '!=', tagId) + .groupByRaw('"organization-tags"."tagId", "tags"."name"') + .orderByRaw('"usedCount" DESC, "tags"."name" ASC') + .limit(numberOfRecentTags); + return tags.map(({ tagId: id, name }) => new Tag({ id, name })); +}; - async getRecentlyUsedTags({ tagId, numberOfRecentTags }) { - const organizationIds = ( - await knex.select('organizationId').from('organization-tags').where('tagId', '=', tagId) - ).map(({ organizationId }) => organizationId); - const tags = await knex - .select(knex.raw('"organization-tags"."tagId", "tags"."name", COUNT("organization-tags"."tagId") AS "usedCount"')) - .from('organization-tags') - .join('tags', 'tags.id', '=', 'organization-tags.tagId') - .whereIn('organization-tags.organizationId', organizationIds) - .andWhere('organization-tags.tagId', '!=', tagId) - .groupByRaw('"organization-tags"."tagId", "tags"."name"') - .orderByRaw('"usedCount" DESC, "tags"."name" ASC') - .limit(numberOfRecentTags); - return tags.map(({ tagId: id, name }) => new Tag({ id, name })); - }, +export { + create, + remove, + findOneByOrganizationIdAndTagId, + batchCreate, + isExistingByOrganizationIdAndTagId, + getRecentlyUsedTags, }; diff --git a/api/lib/infrastructure/repositories/organizations-administration/organization-feature-repository.js b/api/lib/infrastructure/repositories/organizations-administration/organization-feature-repository.js index cbfbc111893..acc2cae288a 100644 --- a/api/lib/infrastructure/repositories/organizations-administration/organization-feature-repository.js +++ b/api/lib/infrastructure/repositories/organizations-administration/organization-feature-repository.js @@ -1,34 +1,35 @@ -const { knex } = require('../../../../db/knex-database-connection.js'); -module.exports = { - addFeatureToOrganization({ organizationId, featureKey }) { - return knex('organization-features') - .insert({ - organizationId, - featureId: function () { - return this.select('id').from('features').where({ key: featureKey }); - }, - }) - .onConflict() - .ignore(); - }, +import { knex } from '../../../../db/knex-database-connection.js'; - removeFeatureToOrganization({ organizationId, featureKey }) { - return knex('organization-features') - .where({ - organizationId, - featureId: function () { - return this.select('id').from('features').where({ key: featureKey }); - }, - }) - .delete(); - }, +const addFeatureToOrganization = function ({ organizationId, featureKey }) { + return knex('organization-features') + .insert({ + organizationId, + featureId: function () { + return this.select('id').from('features').where({ key: featureKey }); + }, + }) + .onConflict() + .ignore(); +}; + +const removeFeatureToOrganization = function ({ organizationId, featureKey }) { + return knex('organization-features') + .where({ + organizationId, + featureId: function () { + return this.select('id').from('features').where({ key: featureKey }); + }, + }) + .delete(); +}; - async getFeaturesListFromOrganization(organizationId) { - return knex('features') - .select('key') - .join('organization-features', function () { - this.on('featureId', 'features.id').andOn('organization-features.organizationId', organizationId); - }) - .pluck('key'); - }, +const getFeaturesListFromOrganization = async function (organizationId) { + return knex('features') + .select('key') + .join('organization-features', function () { + this.on('featureId', 'features.id').andOn('organization-features.organizationId', organizationId); + }) + .pluck('key'); }; + +export { addFeatureToOrganization, removeFeatureToOrganization, getFeaturesListFromOrganization }; diff --git a/api/lib/infrastructure/repositories/organizations-to-attach-to-target-profile-repository.js b/api/lib/infrastructure/repositories/organizations-to-attach-to-target-profile-repository.js index dbede587ebe..07bd1db5aa0 100644 --- a/api/lib/infrastructure/repositories/organizations-to-attach-to-target-profile-repository.js +++ b/api/lib/infrastructure/repositories/organizations-to-attach-to-target-profile-repository.js @@ -1,26 +1,25 @@ -const { knex } = require('../../../db/knex-database-connection.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { foreignKeyConstraintViolated } from '../utils/knex-utils.js'; +import { NotFoundError } from '../../domain/errors.js'; -const { foreignKeyConstraintViolated } = require('../utils/knex-utils.js'); -const { NotFoundError } = require('../../domain/errors.js'); +const attachOrganizations = async function (targetProfile) { + const rows = targetProfile.organizations.map((organizationId) => { + return { + organizationId, + targetProfileId: targetProfile.id, + }; + }); + const attachedOrganizationIds = await _createTargetProfileShares(rows); -module.exports = { - async attachOrganizations(targetProfile) { - const rows = targetProfile.organizations.map((organizationId) => { - return { - organizationId, - targetProfileId: targetProfile.id, - }; - }); - const attachedOrganizationIds = await _createTargetProfileShares(rows); + const duplicatedOrganizationIds = targetProfile.organizations.filter( + (organizationId) => !attachedOrganizationIds.includes(organizationId) + ); - const duplicatedOrganizationIds = targetProfile.organizations.filter( - (organizationId) => !attachedOrganizationIds.includes(organizationId) - ); - - return { duplicatedIds: duplicatedOrganizationIds, attachedIds: attachedOrganizationIds }; - }, + return { duplicatedIds: duplicatedOrganizationIds, attachedIds: attachedOrganizationIds }; }; +export { attachOrganizations }; + async function _createTargetProfileShares(targetProfileShares) { try { const insertedTargetProfileShares = await knex('target-profile-shares') diff --git a/api/lib/infrastructure/repositories/organizations/organization-places-lot-repository.js b/api/lib/infrastructure/repositories/organizations/organization-places-lot-repository.js index 198d0ef02e6..a2dc19c616f 100644 --- a/api/lib/infrastructure/repositories/organizations/organization-places-lot-repository.js +++ b/api/lib/infrastructure/repositories/organizations/organization-places-lot-repository.js @@ -1,66 +1,67 @@ -const { knex } = require('../../../../db/knex-database-connection.js'); -const OrganizationPlacesLotManagement = require('../../../domain/read-models/OrganizationPlacesLotManagement.js'); -const { NotFoundError, DeletedError } = require('../../../domain/errors.js'); -module.exports = { - async findByOrganizationId(organizationId) { - const results = await knex('organization-places') - .select( - 'organization-places.id AS id', - 'count', - 'activationDate', - 'expirationDate', - 'reference', - 'category', - 'users.firstName AS creatorFirstName', - 'users.lastName AS creatorLastName' - ) - .join('users', 'users.id', 'createdBy') - .where({ organizationId }) - .whereNull('deletedAt') - .orderBy('activationDate', 'desc') - .orderBy('expirationDate', 'desc') - .orderBy('organization-places.createdAt', 'desc'); +import { knex } from '../../../../db/knex-database-connection.js'; +import { OrganizationPlacesLotManagement } from '../../../domain/read-models/OrganizationPlacesLotManagement.js'; +import { NotFoundError, DeletedError } from '../../../domain/errors.js'; - return results.map((result) => { - return new OrganizationPlacesLotManagement(result); - }); - }, +const findByOrganizationId = async function (organizationId) { + const results = await knex('organization-places') + .select( + 'organization-places.id AS id', + 'count', + 'activationDate', + 'expirationDate', + 'reference', + 'category', + 'users.firstName AS creatorFirstName', + 'users.lastName AS creatorLastName' + ) + .join('users', 'users.id', 'createdBy') + .where({ organizationId }) + .whereNull('deletedAt') + .orderBy('activationDate', 'desc') + .orderBy('expirationDate', 'desc') + .orderBy('organization-places.createdAt', 'desc'); - async get(id) { - const result = await knex('organization-places') - .select( - 'organization-places.id AS id', - 'count', - 'activationDate', - 'expirationDate', - 'reference', - 'category', - 'users.firstName AS creatorFirstName', - 'users.lastName AS creatorLastName' - ) - .join('users', 'users.id', 'createdBy') - .where({ 'organization-places.id': id }) - .first(); + return results.map((result) => { + return new OrganizationPlacesLotManagement(result); + }); +}; - if (!result) { - throw new NotFoundError(); - } +const get = async function (id) { + const result = await knex('organization-places') + .select( + 'organization-places.id AS id', + 'count', + 'activationDate', + 'expirationDate', + 'reference', + 'category', + 'users.firstName AS creatorFirstName', + 'users.lastName AS creatorLastName' + ) + .join('users', 'users.id', 'createdBy') + .where({ 'organization-places.id': id }) + .first(); - return new OrganizationPlacesLotManagement(result); - }, + if (!result) { + throw new NotFoundError(); + } - async create(places) { - const [{ id }] = await knex('organization-places').insert(places).returning('id'); - return id; - }, + return new OrganizationPlacesLotManagement(result); +}; - async delete({ id, deletedBy }) { - const result = await knex('organization-places') - .update({ deletedAt: new Date(), deletedBy }) - .where({ id, deletedBy: null }); +const create = async function (places) { + const [{ id }] = await knex('organization-places').insert(places).returning('id'); + return id; +}; + +const remove = async function ({ id, deletedBy }) { + const result = await knex('organization-places') + .update({ deletedAt: new Date(), deletedBy }) + .where({ id, deletedBy: null }); - if (!result) { - throw new DeletedError('Organization places lot already deleted'); - } - }, + if (!result) { + throw new DeletedError('Organization places lot already deleted'); + } }; + +export { findByOrganizationId, get, create, remove }; diff --git a/api/lib/infrastructure/repositories/participant-result-repository.js b/api/lib/infrastructure/repositories/participant-result-repository.js index 80940f48e12..78e9f8a7f93 100644 --- a/api/lib/infrastructure/repositories/participant-result-repository.js +++ b/api/lib/infrastructure/repositories/participant-result-repository.js @@ -1,44 +1,42 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const _ = require('lodash'); -const Assessment = require('../../domain/models/Assessment.js'); -const AssessmentResult = require('../../domain/read-models/participant-results/AssessmentResult.js'); -const competenceRepository = require('./competence-repository.js'); -const answerRepository = require('./answer-repository.js'); -const challengeRepository = require('./challenge-repository.js'); -const areaRepository = require('./area-repository.js'); -const knowledgeElementRepository = require('./knowledge-element-repository.js'); -const flashAssessmentResultRepository = require('./flash-assessment-result-repository.js'); -const campaignRepository = require('./campaign-repository.js'); -const stageCollectionRepository = require('./user-campaign-results/stage-collection-repository.js'); -const flash = require('../../domain/services/algorithm-methods/flash.js'); -const dataFetcher = require('../../domain/services/algorithm-methods/data-fetcher.js'); -const { NotFoundError } = require('../../domain/errors.js'); - -const ParticipantResultRepository = { - async getByUserIdAndCampaignId({ userId, campaignId, badges, locale }) { - const participationResults = await _getParticipationResults(userId, campaignId, locale); - let flashScoringResults; - if (participationResults.isFlash) { - flashScoringResults = await _getFlashScoringResults(participationResults.assessmentId, locale); - } - const isCampaignMultipleSendings = await _isCampaignMultipleSendings(campaignId); - const isOrganizationLearnerActive = await _isOrganizationLearnerActive(userId, campaignId); - const isCampaignArchived = await _isCampaignArchived(campaignId); - const competences = await _findTargetedCompetences(campaignId, locale); - const badgeResultsDTO = await _getBadgeResults(badges); - const stageCollection = await _getStageCollection(campaignId); - - return new AssessmentResult({ - participationResults, - competences, - badgeResultsDTO, - stageCollection, - isCampaignMultipleSendings, - isOrganizationLearnerActive, - isCampaignArchived, - flashScoringResults, - }); - }, +import { knex } from '../../../db/knex-database-connection.js'; +import _ from 'lodash'; +import { Assessment } from '../../domain/models/Assessment.js'; +import { AssessmentResult } from '../../domain/read-models/participant-results/AssessmentResult.js'; +import * as competenceRepository from './competence-repository.js'; +import * as answerRepository from './answer-repository.js'; +import * as challengeRepository from './challenge-repository.js'; +import * as areaRepository from './area-repository.js'; +import * as knowledgeElementRepository from './knowledge-element-repository.js'; +import * as flashAssessmentResultRepository from './flash-assessment-result-repository.js'; +import * as campaignRepository from './campaign-repository.js'; +import * as stageCollectionRepository from './user-campaign-results/stage-collection-repository.js'; +import * as flash from '../../domain/services/algorithm-methods/flash.js'; +import * as dataFetcher from '../../domain/services/algorithm-methods/data-fetcher.js'; +import { NotFoundError } from '../../domain/errors.js'; + +const getByUserIdAndCampaignId = async function ({ userId, campaignId, badges, locale }) { + const participationResults = await _getParticipationResults(userId, campaignId, locale); + let flashScoringResults; + if (participationResults.isFlash) { + flashScoringResults = await _getFlashScoringResults(participationResults.assessmentId, locale); + } + const isCampaignMultipleSendings = await _isCampaignMultipleSendings(campaignId); + const isOrganizationLearnerActive = await _isOrganizationLearnerActive(userId, campaignId); + const isCampaignArchived = await _isCampaignArchived(campaignId); + const competences = await _findTargetedCompetences(campaignId, locale); + const badgeResultsDTO = await _getBadgeResults(badges); + const stageCollection = await _getStageCollection(campaignId); + + return new AssessmentResult({ + participationResults, + competences, + badgeResultsDTO, + stageCollection, + isCampaignMultipleSendings, + isOrganizationLearnerActive, + isCampaignArchived, + flashScoringResults, + }); }; async function _getParticipationResults(userId, campaignId) { @@ -235,4 +233,4 @@ async function _isOrganizationLearnerActive(userId, campaignId) { return !organizationLearner?.isDisabled; } -module.exports = ParticipantResultRepository; +export { getByUserIdAndCampaignId }; diff --git a/api/lib/infrastructure/repositories/participant-results-shared-repository.js b/api/lib/infrastructure/repositories/participant-results-shared-repository.js index dac52a64f17..a70315a7aca 100644 --- a/api/lib/infrastructure/repositories/participant-results-shared-repository.js +++ b/api/lib/infrastructure/repositories/participant-results-shared-repository.js @@ -1,8 +1,8 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const ParticipantResultsShared = require('../../../lib/domain/models/ParticipantResultsShared.js'); -const placementProfileService = require('../../domain/services/placement-profile-service.js'); -const competenceRepository = require('./competence-repository.js'); -const campaignRepository = require('./campaign-repository.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { ParticipantResultsShared } from '../../../lib/domain/models/ParticipantResultsShared.js'; +import * as placementProfileService from '../../domain/services/placement-profile-service.js'; +import * as competenceRepository from './competence-repository.js'; +import * as campaignRepository from './campaign-repository.js'; async function _fetchKnowledgeElements(campaignParticipationId) { const { snapshot: knowledgeElements } = await knex('campaign-participations') @@ -55,4 +55,4 @@ const participantResultsSharedRepository = { }, }; -module.exports = participantResultsSharedRepository; +export { participantResultsSharedRepository }; diff --git a/api/lib/infrastructure/repositories/participations-for-campaign-management-repository.js b/api/lib/infrastructure/repositories/participations-for-campaign-management-repository.js index e51ff24b9dd..ff863a8ae88 100644 --- a/api/lib/infrastructure/repositories/participations-for-campaign-management-repository.js +++ b/api/lib/infrastructure/repositories/participations-for-campaign-management-repository.js @@ -1,52 +1,52 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const ParticipationForCampaignManagement = require('../../domain/models/ParticipationForCampaignManagement.js'); -const { fetchPage } = require('../utils/knex-utils.js'); -const { NotFoundError } = require('../../domain/errors.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { ParticipationForCampaignManagement } from '../../domain/models/ParticipationForCampaignManagement.js'; +import { fetchPage } from '../utils/knex-utils.js'; +import { NotFoundError } from '../../domain/errors.js'; -module.exports = { - async findPaginatedParticipationsForCampaignManagement({ campaignId, page }) { - const query = knex('campaign-participations') - .select({ - id: 'campaign-participations.id', - lastName: 'view-active-organization-learners.lastName', - firstName: 'view-active-organization-learners.firstName', - userId: 'users.id', - userFirstName: 'users.firstName', - userLastName: 'users.lastName', - participantExternalId: 'campaign-participations.participantExternalId', - status: 'campaign-participations.status', - createdAt: 'campaign-participations.createdAt', - sharedAt: 'campaign-participations.sharedAt', - deletedAt: 'campaign-participations.deletedAt', - deletedBy: 'deletedByUsers.id', - deletedByFirstName: 'deletedByUsers.firstName', - deletedByLastName: 'deletedByUsers.lastName', - }) - .join( - 'view-active-organization-learners', - 'view-active-organization-learners.id', - 'campaign-participations.organizationLearnerId' - ) - .leftJoin('users as deletedByUsers', 'deletedByUsers.id', 'campaign-participations.deletedBy') - .innerJoin('users', 'users.id', 'campaign-participations.userId') - .where('campaignId', campaignId) - .orderBy(['lastName', 'firstName'], ['asc', 'asc']); +const findPaginatedParticipationsForCampaignManagement = async function ({ campaignId, page }) { + const query = knex('campaign-participations') + .select({ + id: 'campaign-participations.id', + lastName: 'view-active-organization-learners.lastName', + firstName: 'view-active-organization-learners.firstName', + userId: 'users.id', + userFirstName: 'users.firstName', + userLastName: 'users.lastName', + participantExternalId: 'campaign-participations.participantExternalId', + status: 'campaign-participations.status', + createdAt: 'campaign-participations.createdAt', + sharedAt: 'campaign-participations.sharedAt', + deletedAt: 'campaign-participations.deletedAt', + deletedBy: 'deletedByUsers.id', + deletedByFirstName: 'deletedByUsers.firstName', + deletedByLastName: 'deletedByUsers.lastName', + }) + .join( + 'view-active-organization-learners', + 'view-active-organization-learners.id', + 'campaign-participations.organizationLearnerId' + ) + .leftJoin('users as deletedByUsers', 'deletedByUsers.id', 'campaign-participations.deletedBy') + .innerJoin('users', 'users.id', 'campaign-participations.userId') + .where('campaignId', campaignId) + .orderBy(['lastName', 'firstName'], ['asc', 'asc']); - const { results, pagination } = await fetchPage(query, page); + const { results, pagination } = await fetchPage(query, page); - const participationsForCampaignManagement = results.map( - (attributes) => new ParticipationForCampaignManagement(attributes) - ); - return { models: participationsForCampaignManagement, meta: { ...pagination } }; - }, + const participationsForCampaignManagement = results.map( + (attributes) => new ParticipationForCampaignManagement(attributes) + ); + return { models: participationsForCampaignManagement, meta: { ...pagination } }; +}; - async updateParticipantExternalId({ campaignParticipationId, participantExternalId }) { - const updatedRows = await knex('campaign-participations') - .where('id', campaignParticipationId) - .update({ participantExternalId }); +const updateParticipantExternalId = async function ({ campaignParticipationId, participantExternalId }) { + const updatedRows = await knex('campaign-participations') + .where('id', campaignParticipationId) + .update({ participantExternalId }); - if (!updatedRows) { - throw new NotFoundError(`La participation avec l'id ${campaignParticipationId} n'existe pas.`); - } - }, + if (!updatedRows) { + throw new NotFoundError(`La participation avec l'id ${campaignParticipationId} n'existe pas.`); + } }; + +export { findPaginatedParticipationsForCampaignManagement, updateParticipantExternalId }; diff --git a/api/lib/infrastructure/repositories/participations-for-user-management-repository.js b/api/lib/infrastructure/repositories/participations-for-user-management-repository.js index 85114ce2ff7..5cf72de4910 100644 --- a/api/lib/infrastructure/repositories/participations-for-user-management-repository.js +++ b/api/lib/infrastructure/repositories/participations-for-user-management-repository.js @@ -1,35 +1,35 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const CampaignParticipationForUserManagement = require('../../domain/read-models/CampaignParticipationForUserManagement.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { CampaignParticipationForUserManagement } from '../../domain/read-models/CampaignParticipationForUserManagement.js'; -module.exports = { - async findByUserId(userId) { - const campaignParticipations = await knex('campaign-participations') - .select({ - id: 'campaign-participations.id', - participantExternalId: 'campaign-participations.participantExternalId', - status: 'campaign-participations.status', - campaignId: 'campaigns.id', - campaignCode: 'campaigns.code', - createdAt: 'campaign-participations.createdAt', - sharedAt: 'campaign-participations.sharedAt', - deletedAt: 'campaign-participations.deletedAt', - deletedBy: 'deletedByUsers.id', - deletedByFirstName: 'deletedByUsers.firstName', - deletedByLastName: 'deletedByUsers.lastName', - organizationLearnerFirstName: 'view-active-organization-learners.firstName', - organizationLearnerLastName: 'view-active-organization-learners.lastName', - }) - .innerJoin('campaigns', 'campaigns.id', 'campaign-participations.campaignId') - .innerJoin( - 'view-active-organization-learners', - 'view-active-organization-learners.id', - 'campaign-participations.organizationLearnerId' - ) - .leftJoin('users as deletedByUsers', 'deletedByUsers.id', 'campaign-participations.deletedBy') - .where('campaign-participations.userId', userId) - .orderBy('campaignCode', 'asc') - .orderBy('sharedAt', 'desc'); +const findByUserId = async function (userId) { + const campaignParticipations = await knex('campaign-participations') + .select({ + id: 'campaign-participations.id', + participantExternalId: 'campaign-participations.participantExternalId', + status: 'campaign-participations.status', + campaignId: 'campaigns.id', + campaignCode: 'campaigns.code', + createdAt: 'campaign-participations.createdAt', + sharedAt: 'campaign-participations.sharedAt', + deletedAt: 'campaign-participations.deletedAt', + deletedBy: 'deletedByUsers.id', + deletedByFirstName: 'deletedByUsers.firstName', + deletedByLastName: 'deletedByUsers.lastName', + organizationLearnerFirstName: 'view-active-organization-learners.firstName', + organizationLearnerLastName: 'view-active-organization-learners.lastName', + }) + .innerJoin('campaigns', 'campaigns.id', 'campaign-participations.campaignId') + .innerJoin( + 'view-active-organization-learners', + 'view-active-organization-learners.id', + 'campaign-participations.organizationLearnerId' + ) + .leftJoin('users as deletedByUsers', 'deletedByUsers.id', 'campaign-participations.deletedBy') + .where('campaign-participations.userId', userId) + .orderBy('campaignCode', 'asc') + .orderBy('sharedAt', 'desc'); - return campaignParticipations.map((attributes) => new CampaignParticipationForUserManagement(attributes)); - }, + return campaignParticipations.map((attributes) => new CampaignParticipationForUserManagement(attributes)); }; + +export { findByUserId }; diff --git a/api/lib/infrastructure/repositories/partner-certification-scoring-repository.js b/api/lib/infrastructure/repositories/partner-certification-scoring-repository.js index 827f90ec09f..d96fc765fc3 100644 --- a/api/lib/infrastructure/repositories/partner-certification-scoring-repository.js +++ b/api/lib/infrastructure/repositories/partner-certification-scoring-repository.js @@ -1,43 +1,46 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const DomainTransaction = require('../DomainTransaction.js'); -const ComplementaryCertificationCourseResultBookshelf = require('../orm-models/ComplementaryCertificationCourseResult.js'); -const ComplementaryCertificationCourseResult = require('../../domain/models/ComplementaryCertificationCourseResult.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { BookshelfComplementaryCertificationCourseResult } from '../orm-models/ComplementaryCertificationCourseResult.js'; +import { ComplementaryCertificationCourseResult } from '../../domain/models/ComplementaryCertificationCourseResult.js'; -module.exports = { - async save({ partnerCertificationScoring, domainTransaction = DomainTransaction.emptyTransaction() }) { - const partnerCertificationToSave = new ComplementaryCertificationCourseResultBookshelf( - _adaptModelToDB({ - ...partnerCertificationScoring, - source: ComplementaryCertificationCourseResult.sources.PIX, - complementaryCertificationCourseId: partnerCertificationScoring.complementaryCertificationCourseId, - acquired: partnerCertificationScoring.isAcquired(), - }) - ); +const save = async function ({ + partnerCertificationScoring, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const partnerCertificationToSave = new BookshelfComplementaryCertificationCourseResult( + _adaptModelToDB({ + ...partnerCertificationScoring, + source: ComplementaryCertificationCourseResult.sources.PIX, + complementaryCertificationCourseId: partnerCertificationScoring.complementaryCertificationCourseId, + acquired: partnerCertificationScoring.isAcquired(), + }) + ); - const complementaryCertificationCourseResult = await knex - .select('id') - .from('complementary-certification-course-results') - .where({ - complementaryCertificationCourseId: partnerCertificationScoring.complementaryCertificationCourseId, - partnerKey: partnerCertificationScoring.partnerKey, - source: partnerCertificationScoring.source, - }) - .first(); + const complementaryCertificationCourseResult = await knex + .select('id') + .from('complementary-certification-course-results') + .where({ + complementaryCertificationCourseId: partnerCertificationScoring.complementaryCertificationCourseId, + partnerKey: partnerCertificationScoring.partnerKey, + source: partnerCertificationScoring.source, + }) + .first(); - if (complementaryCertificationCourseResult) { - return partnerCertificationToSave - .query(function (qb) { - qb.where({ - id: complementaryCertificationCourseResult.id, - }); - }) - .save(null, { transacting: domainTransaction.knexTransaction, method: 'update' }); - } + if (complementaryCertificationCourseResult) { + return partnerCertificationToSave + .query(function (qb) { + qb.where({ + id: complementaryCertificationCourseResult.id, + }); + }) + .save(null, { transacting: domainTransaction.knexTransaction, method: 'update' }); + } - return partnerCertificationToSave.save(null, { transacting: domainTransaction.knexTransaction, method: 'insert' }); - }, + return partnerCertificationToSave.save(null, { transacting: domainTransaction.knexTransaction, method: 'insert' }); }; +export { save }; + function _adaptModelToDB({ complementaryCertificationCourseId, partnerKey, source, acquired }) { return { complementaryCertificationCourseId, partnerKey, source, acquired }; } diff --git a/api/lib/infrastructure/repositories/pole-emploi-sending-repository.js b/api/lib/infrastructure/repositories/pole-emploi-sending-repository.js index 882465fb15d..7bbd17a4a0c 100644 --- a/api/lib/infrastructure/repositories/pole-emploi-sending-repository.js +++ b/api/lib/infrastructure/repositories/pole-emploi-sending-repository.js @@ -1,43 +1,43 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const settings = require('../../../lib/config.js'); -const OidcIdentityProviders = require('../../domain/constants/oidc-identity-providers.js'); - -module.exports = { - create({ poleEmploiSending }) { - return knex('pole-emploi-sendings').insert({ ...poleEmploiSending }); - }, - - async find(sending, filters) { - const POLE_EMPLOI_SENDINGS_LIMIT = settings.poleEmploi.poleEmploiSendingsLimit; - - const rawSendings = await knex('pole-emploi-sendings') - .select( - 'pole-emploi-sendings.id AS idEnvoi', - 'pole-emploi-sendings.createdAt AS dateEnvoi', - 'pole-emploi-sendings.payload AS resultat', - 'authentication-methods.externalIdentifier AS idPoleEmploi' - ) - .join('campaign-participations', 'campaign-participations.id', 'pole-emploi-sendings.campaignParticipationId') - .join('authentication-methods', 'authentication-methods.userId', 'campaign-participations.userId') - .where('authentication-methods.identityProvider', OidcIdentityProviders.POLE_EMPLOI.service.code) - .modify(_olderThan, sending) - .modify(_filterByStatus, filters) - .orderBy([ - { column: 'pole-emploi-sendings.createdAt', order: 'desc' }, - { column: 'pole-emploi-sendings.id', order: 'desc' }, - ]) - .limit(POLE_EMPLOI_SENDINGS_LIMIT); - - const sendings = rawSendings.map((rawSending) => { - const { idPoleEmploi, ...sending } = rawSending; - sending.resultat.individu['idPoleEmploi'] = idPoleEmploi; - return sending; - }); - - return sendings; - }, +import { knex } from '../../../db/knex-database-connection.js'; +import { config } from '../../../lib/config.js'; +import * as OidcIdentityProviders from '../../domain/constants/oidc-identity-providers.js'; + +const create = function ({ poleEmploiSending }) { + return knex('pole-emploi-sendings').insert({ ...poleEmploiSending }); }; +const find = async function (sending, filters) { + const POLE_EMPLOI_SENDINGS_LIMIT = config.poleEmploi.poleEmploiSendingsLimit; + + const rawSendings = await knex('pole-emploi-sendings') + .select( + 'pole-emploi-sendings.id AS idEnvoi', + 'pole-emploi-sendings.createdAt AS dateEnvoi', + 'pole-emploi-sendings.payload AS resultat', + 'authentication-methods.externalIdentifier AS idPoleEmploi' + ) + .join('campaign-participations', 'campaign-participations.id', 'pole-emploi-sendings.campaignParticipationId') + .join('authentication-methods', 'authentication-methods.userId', 'campaign-participations.userId') + .where('authentication-methods.identityProvider', OidcIdentityProviders.POLE_EMPLOI.service.code) + .modify(_olderThan, sending) + .modify(_filterByStatus, filters) + .orderBy([ + { column: 'pole-emploi-sendings.createdAt', order: 'desc' }, + { column: 'pole-emploi-sendings.id', order: 'desc' }, + ]) + .limit(POLE_EMPLOI_SENDINGS_LIMIT); + + const sendings = rawSendings.map((rawSending) => { + const { idPoleEmploi, ...sending } = rawSending; + sending.resultat.individu['idPoleEmploi'] = idPoleEmploi; + return sending; + }); + + return sendings; +}; + +export { create, find }; + function _olderThan(qb, sending) { if (sending) { qb.where('pole-emploi-sendings.createdAt', '<', sending.dateEnvoi).where( diff --git a/api/lib/infrastructure/repositories/prescriber-repository.js b/api/lib/infrastructure/repositories/prescriber-repository.js index 0ab9050193f..a95cc4ad90b 100644 --- a/api/lib/infrastructure/repositories/prescriber-repository.js +++ b/api/lib/infrastructure/repositories/prescriber-repository.js @@ -1,13 +1,13 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const settings = require('../../config.js'); -const BookshelfUser = require('../orm-models/User.js'); -const BookshelfMembership = require('../orm-models/Membership.js'); -const BookshelfUserOrgaSettings = require('../orm-models/UserOrgaSettings.js'); -const bookshelfToDomainConverter = require('../utils/bookshelf-to-domain-converter.js'); -const { ForbiddenAccess, UserNotFoundError } = require('../../domain/errors.js'); -const Prescriber = require('../../domain/read-models/Prescriber.js'); -const apps = require('../../domain/constants.js'); +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; +import { config } from '../../config.js'; +import { BookshelfUser } from '../orm-models/User.js'; +import { BookshelfMembership } from '../orm-models/Membership.js'; +import { BookshelfUserOrgaSettings } from '../orm-models/UserOrgaSettings.js'; +import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js'; +import { ForbiddenAccess, UserNotFoundError } from '../../domain/errors.js'; +import { Prescriber } from '../../domain/read-models/Prescriber.js'; +import * as apps from '../../domain/constants.js'; function _toPrescriberDomain(bookshelfUser) { const { id, firstName, lastName, pixOrgaTermsOfServiceAccepted, lang } = bookshelfUser.toJSON(); @@ -35,11 +35,11 @@ async function _areNewYearOrganizationLearnersImportedForPrescriber(prescriber) .join('view-active-organization-learners', 'view-active-organization-learners.organizationId', 'organizations.id') .where((qb) => { qb.where('organizations.id', currentOrganizationId); - if (settings.features.newYearOrganizationLearnersImportDate) { + if (config.features.newYearOrganizationLearnersImportDate) { qb.where( 'view-active-organization-learners.createdAt', '>=', - settings.features.newYearOrganizationLearnersImportDate + config.features.newYearOrganizationLearnersImportDate ); } }) @@ -80,35 +80,35 @@ async function _isMultipleSendingAssessmentEnabled(prescriber) { ); } -module.exports = { - async getPrescriber(userId) { - try { - const prescriberFromDB = await BookshelfUser.where({ id: userId }).fetch({ - columns: ['id', 'firstName', 'lastName', 'pixOrgaTermsOfServiceAccepted', 'lang'], - withRelated: [ - { memberships: (qb) => qb.where({ disabledAt: null }).orderBy('id') }, - 'memberships.organization', - 'userOrgaSettings', - 'userOrgaSettings.currentOrganization', - 'userOrgaSettings.currentOrganization.tags', - ], - }); - const prescriber = _toPrescriberDomain(prescriberFromDB); +const getPrescriber = async function (userId) { + try { + const prescriberFromDB = await BookshelfUser.where({ id: userId }).fetch({ + columns: ['id', 'firstName', 'lastName', 'pixOrgaTermsOfServiceAccepted', 'lang'], + withRelated: [ + { memberships: (qb) => qb.where({ disabledAt: null }).orderBy('id') }, + 'memberships.organization', + 'userOrgaSettings', + 'userOrgaSettings.currentOrganization', + 'userOrgaSettings.currentOrganization.tags', + ], + }); + const prescriber = _toPrescriberDomain(prescriberFromDB); - if (_.isEmpty(prescriber.memberships)) { - throw new ForbiddenAccess(`User of ID ${userId} is not a prescriber`); - } + if (_.isEmpty(prescriber.memberships)) { + throw new ForbiddenAccess(`User of ID ${userId} is not a prescriber`); + } - await _areNewYearOrganizationLearnersImportedForPrescriber(prescriber); - await _getParticipantCount(prescriber); - await _isMultipleSendingAssessmentEnabled(prescriber); + await _areNewYearOrganizationLearnersImportedForPrescriber(prescriber); + await _getParticipantCount(prescriber); + await _isMultipleSendingAssessmentEnabled(prescriber); - return prescriber; - } catch (err) { - if (err instanceof BookshelfUser.NotFoundError) { - throw new UserNotFoundError(`User not found for ID ${userId}`); - } - throw err; + return prescriber; + } catch (err) { + if (err instanceof BookshelfUser.NotFoundError) { + throw new UserNotFoundError(`User not found for ID ${userId}`); } - }, + throw err; + } }; + +export { getPrescriber }; diff --git a/api/lib/infrastructure/repositories/prescriber-role-repository.js b/api/lib/infrastructure/repositories/prescriber-role-repository.js index dce4acd54c1..de31307f389 100644 --- a/api/lib/infrastructure/repositories/prescriber-role-repository.js +++ b/api/lib/infrastructure/repositories/prescriber-role-repository.js @@ -1,20 +1,20 @@ -const { NotFoundError } = require('../../domain/errors.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const CampaignAuthorization = require('../../application/preHandlers/models/CampaignAuthorization.js'); +import { NotFoundError } from '../../domain/errors.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { prescriberRoles } from '../../application/preHandlers/models/CampaignAuthorization.js'; -module.exports = { - async getForCampaign({ userId, campaignId }) { - const { organizationId, ownerId } = await _getOrganizationIdAndOwnerId({ campaignId }); - const organizationRole = await _getOrganizationRole({ userId, organizationId }); +const getForCampaign = async function ({ userId, campaignId }) { + const { organizationId, ownerId } = await _getOrganizationIdAndOwnerId({ campaignId }); + const organizationRole = await _getOrganizationRole({ userId, organizationId }); - let prescriberRole = organizationRole; - if (userId === ownerId) { - prescriberRole = CampaignAuthorization.prescriberRoles.OWNER; - } - return prescriberRole; - }, + let prescriberRole = organizationRole; + if (userId === ownerId) { + prescriberRole = prescriberRoles.OWNER; + } + return prescriberRole; }; +export { getForCampaign }; + async function _getOrganizationIdAndOwnerId({ campaignId }) { const result = await knex('campaigns').select('organizationId', 'ownerId').where({ id: campaignId }).first(); if (!result) { diff --git a/api/lib/infrastructure/repositories/reset-password-demands-repository.js b/api/lib/infrastructure/repositories/reset-password-demands-repository.js index 1dbba64cfa3..cafc28f4e4e 100644 --- a/api/lib/infrastructure/repositories/reset-password-demands-repository.js +++ b/api/lib/infrastructure/repositories/reset-password-demands-repository.js @@ -1,44 +1,44 @@ -const ResetPasswordDemand = require('../orm-models/ResetPasswordDemand.js'); -const { PasswordResetDemandNotFoundError } = require('../../../lib/domain/errors.js'); +import { ResetPasswordDemand } from '../orm-models/ResetPasswordDemand.js'; +import { PasswordResetDemandNotFoundError } from '../../../lib/domain/errors.js'; -module.exports = { - create(demand) { - return new ResetPasswordDemand(demand).save(); - }, +const create = function (demand) { + return new ResetPasswordDemand(demand).save(); +}; - markAsBeingUsed(email) { - return ResetPasswordDemand.query((qb) => qb.whereRaw('LOWER("email") = ?', email.toLowerCase())).save( - { used: true }, - { - patch: true, - require: false, - } - ); - }, +const markAsBeingUsed = function (email) { + return ResetPasswordDemand.query((qb) => qb.whereRaw('LOWER("email") = ?', email.toLowerCase())).save( + { used: true }, + { + patch: true, + require: false, + } + ); +}; - findByTemporaryKey(temporaryKey) { - return ResetPasswordDemand.where({ temporaryKey, used: false }) - .fetch() - .catch((err) => { - if (err instanceof ResetPasswordDemand.NotFoundError) { - throw new PasswordResetDemandNotFoundError(); - } - throw err; - }); - }, +const findByTemporaryKey = function (temporaryKey) { + return ResetPasswordDemand.where({ temporaryKey, used: false }) + .fetch() + .catch((err) => { + if (err instanceof ResetPasswordDemand.NotFoundError) { + throw new PasswordResetDemandNotFoundError(); + } + throw err; + }); +}; - findByUserEmail(email, temporaryKey) { - return ResetPasswordDemand.query((qb) => { - qb.whereRaw('LOWER("email") = ?', email.toLowerCase()); - qb.where({ used: false }); - qb.where({ temporaryKey }); - }) - .fetch() - .catch((err) => { - if (err instanceof ResetPasswordDemand.NotFoundError) { - throw new PasswordResetDemandNotFoundError(); - } - throw err; - }); - }, +const findByUserEmail = function (email, temporaryKey) { + return ResetPasswordDemand.query((qb) => { + qb.whereRaw('LOWER("email") = ?', email.toLowerCase()); + qb.where({ used: false }); + qb.where({ temporaryKey }); + }) + .fetch() + .catch((err) => { + if (err instanceof ResetPasswordDemand.NotFoundError) { + throw new PasswordResetDemandNotFoundError(); + } + throw err; + }); }; + +export { create, markAsBeingUsed, findByTemporaryKey, findByUserEmail }; diff --git a/api/lib/infrastructure/repositories/sco-certification-candidate-repository.js b/api/lib/infrastructure/repositories/sco-certification-candidate-repository.js index a449bf93a10..a7efc5b71bb 100644 --- a/api/lib/infrastructure/repositories/sco-certification-candidate-repository.js +++ b/api/lib/infrastructure/repositories/sco-certification-candidate-repository.js @@ -1,48 +1,48 @@ -const { knex } = require('../../../db/knex-database-connection.js'); - -module.exports = { - async addNonEnrolledCandidatesToSession({ sessionId, scoCertificationCandidates }) { - const organizationLearnerIds = scoCertificationCandidates.map((candidate) => candidate.organizationLearnerId); - - const alreadyEnrolledCandidate = await knex - .select(['organizationLearnerId']) - .from('certification-candidates') - .whereIn('organizationLearnerId', organizationLearnerIds) - .where({ sessionId }); - - const alreadyEnrolledCandidateOrganizationLearnerIds = alreadyEnrolledCandidate.map( - (candidate) => candidate.organizationLearnerId - ); - - const scoCandidateToDTO = _scoCandidateToDTOForSession(sessionId); - const candidatesToBeEnrolledDTOs = scoCertificationCandidates - .filter((candidate) => !alreadyEnrolledCandidateOrganizationLearnerIds.includes(candidate.organizationLearnerId)) - .map(scoCandidateToDTO); - - await knex.batchInsert('certification-candidates', candidatesToBeEnrolledDTOs); - }, - - async findIdsByOrganizationIdAndDivision({ organizationId, division }) { - const rows = await knex - .select(['certification-candidates.id']) - .from('certification-candidates') - .join( - 'view-active-organization-learners', - 'view-active-organization-learners.id', - 'certification-candidates.organizationLearnerId' - ) - .where({ - 'view-active-organization-learners.organizationId': organizationId, - 'view-active-organization-learners.isDisabled': false, - }) - .whereRaw('LOWER("view-active-organization-learners"."division") = ?', division.toLowerCase()) - .orderBy('certification-candidates.lastName', 'ASC') - .orderBy('certification-candidates.firstName', 'ASC'); - - return rows.map((row) => row.id); - }, +import { knex } from '../../../db/knex-database-connection.js'; + +const addNonEnrolledCandidatesToSession = async function ({ sessionId, scoCertificationCandidates }) { + const organizationLearnerIds = scoCertificationCandidates.map((candidate) => candidate.organizationLearnerId); + + const alreadyEnrolledCandidate = await knex + .select(['organizationLearnerId']) + .from('certification-candidates') + .whereIn('organizationLearnerId', organizationLearnerIds) + .where({ sessionId }); + + const alreadyEnrolledCandidateOrganizationLearnerIds = alreadyEnrolledCandidate.map( + (candidate) => candidate.organizationLearnerId + ); + + const scoCandidateToDTO = _scoCandidateToDTOForSession(sessionId); + const candidatesToBeEnrolledDTOs = scoCertificationCandidates + .filter((candidate) => !alreadyEnrolledCandidateOrganizationLearnerIds.includes(candidate.organizationLearnerId)) + .map(scoCandidateToDTO); + + await knex.batchInsert('certification-candidates', candidatesToBeEnrolledDTOs); +}; + +const findIdsByOrganizationIdAndDivision = async function ({ organizationId, division }) { + const rows = await knex + .select(['certification-candidates.id']) + .from('certification-candidates') + .join( + 'view-active-organization-learners', + 'view-active-organization-learners.id', + 'certification-candidates.organizationLearnerId' + ) + .where({ + 'view-active-organization-learners.organizationId': organizationId, + 'view-active-organization-learners.isDisabled': false, + }) + .whereRaw('LOWER("view-active-organization-learners"."division") = ?', division.toLowerCase()) + .orderBy('certification-candidates.lastName', 'ASC') + .orderBy('certification-candidates.firstName', 'ASC'); + + return rows.map((row) => row.id); }; +export { addNonEnrolledCandidatesToSession, findIdsByOrganizationIdAndDivision }; + function _scoCandidateToDTOForSession(sessionId) { return (scoCandidate) => { return { diff --git a/api/lib/infrastructure/repositories/sco-organization-participant-repository.js b/api/lib/infrastructure/repositories/sco-organization-participant-repository.js index 508e73598dc..6e14e1bdeaf 100644 --- a/api/lib/infrastructure/repositories/sco-organization-participant-repository.js +++ b/api/lib/infrastructure/repositories/sco-organization-participant-repository.js @@ -1,12 +1,11 @@ -const _ = require('lodash'); -const { filterByFullName } = require('../utils/filter-utils.js'); - -const AuthenticationMethod = require('../../domain/models/AuthenticationMethod.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { fetchPage } = require('../utils/knex-utils.js'); -const ScoOrganizationParticipant = require('../../domain/read-models/ScoOrganizationParticipant.js'); -const CampaignTypes = require('../../domain/models/CampaignTypes.js'); -const CampaignParticipationStatuses = require('../../domain/models/CampaignParticipationStatuses.js'); +import _ from 'lodash'; +import { filterByFullName } from '../utils/filter-utils.js'; +import { AuthenticationMethod } from '../../domain/models/AuthenticationMethod.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { fetchPage } from '../utils/knex-utils.js'; +import { ScoOrganizationParticipant } from '../../domain/read-models/ScoOrganizationParticipant.js'; +import { CampaignTypes } from '../../domain/models/CampaignTypes.js'; +import { CampaignParticipationStatuses } from '../../domain/models/CampaignParticipationStatuses.js'; function _setFilters(qb, { search, divisions, connectionTypes, certificability } = {}) { if (search) { @@ -78,102 +77,102 @@ function _buildIsCertifiable(queryBuilder, organizationId) { .where('campaign-participations.deletedAt', null); } -module.exports = { - async findPaginatedFilteredScoParticipants({ organizationId, filter, page = {}, sort = {} }) { - const { totalScoParticipants } = await knex - .count('id', { as: 'totalScoParticipants' }) - .from('view-active-organization-learners') - .where({ organizationId: organizationId, isDisabled: false }) - .first(); +const findPaginatedFilteredScoParticipants = async function ({ organizationId, filter, page = {}, sort = {} }) { + const { totalScoParticipants } = await knex + .count('id', { as: 'totalScoParticipants' }) + .from('view-active-organization-learners') + .where({ organizationId: organizationId, isDisabled: false }) + .first(); - const orderByClause = [ - 'view-active-organization-learners.lastName', - 'view-active-organization-learners.firstName', - 'view-active-organization-learners.id', - ]; - if (sort?.participationCount) { - orderByClause.unshift({ - column: 'participationCount', - order: sort.participationCount == 'desc' ? 'desc' : 'asc', - }); - } - if (sort?.lastnameSort) { - orderByClause.unshift({ - column: 'view-active-organization-learners.lastName', - order: sort.lastnameSort == 'desc' ? 'desc' : 'asc', - }); - } + const orderByClause = [ + 'view-active-organization-learners.lastName', + 'view-active-organization-learners.firstName', + 'view-active-organization-learners.id', + ]; + if (sort?.participationCount) { + orderByClause.unshift({ + column: 'participationCount', + order: sort.participationCount == 'desc' ? 'desc' : 'asc', + }); + } + if (sort?.lastnameSort) { + orderByClause.unshift({ + column: 'view-active-organization-learners.lastName', + order: sort.lastnameSort == 'desc' ? 'desc' : 'asc', + }); + } - const query = knex - .with('subquery', (qb) => _buildIsCertifiable(qb, organizationId)) - .distinct('view-active-organization-learners.id') - .select([ - 'view-active-organization-learners.id', - 'view-active-organization-learners.firstName', - 'view-active-organization-learners.lastName', - knex.raw('LOWER("view-active-organization-learners"."firstName") AS "lowerFirstName"'), - knex.raw('LOWER("view-active-organization-learners"."lastName") AS "lowerLastName"'), - 'view-active-organization-learners.birthdate', - 'view-active-organization-learners.division', - 'view-active-organization-learners.userId', - 'view-active-organization-learners.organizationId', - 'users.username', - 'users.email', - 'authentication-methods.externalIdentifier as samlId', - 'subquery.isCertifiable', - 'subquery.certifiableAt', - knex.raw( - 'FIRST_VALUE("name") OVER(PARTITION BY "view-active-organization-learners"."id" ORDER BY "campaign-participations"."createdAt" DESC) AS "campaignName"' - ), - knex.raw( - 'FIRST_VALUE("campaign-participations"."status") OVER(PARTITION BY "view-active-organization-learners"."id" ORDER BY "campaign-participations"."createdAt" DESC) AS "participationStatus"' - ), - knex.raw( - 'FIRST_VALUE("type") OVER(PARTITION BY "view-active-organization-learners"."id" ORDER BY "campaign-participations"."createdAt" DESC) AS "campaignType"' - ), - knex.raw( - 'COUNT(*) FILTER (WHERE "campaign-participations"."id" IS NOT NULL) OVER(PARTITION BY "view-active-organization-learners"."id") AS "participationCount"' - ), - knex.raw( - 'max("campaign-participations"."createdAt") OVER(PARTITION BY "view-active-organization-learners"."id") AS "lastParticipationDate"' - ), - ]) - .from('view-active-organization-learners') - .leftJoin('subquery', 'subquery.organizationLearnerId', 'view-active-organization-learners.id') - .leftJoin('campaign-participations', function () { - this.on('campaign-participations.organizationLearnerId', 'view-active-organization-learners.id') - .andOn('campaign-participations.isImproved', '=', knex.raw('false')) - .andOn('campaign-participations.deletedAt', knex.raw('is'), knex.raw('null')); - }) - .leftJoin('users', 'users.id', 'view-active-organization-learners.userId') - .leftJoin('authentication-methods', function () { - this.on('users.id', 'authentication-methods.userId').andOnVal( - 'authentication-methods.identityProvider', - AuthenticationMethod.identityProviders.GAR - ); - }) - .leftJoin('campaigns', function () { - this.on('campaigns.id', 'campaign-participations.campaignId').andOn( - 'campaigns.organizationId', - 'view-active-organization-learners.organizationId' - ); - }) - .where('view-active-organization-learners.isDisabled', false) - .where('view-active-organization-learners.organizationId', organizationId) - .modify(_setFilters, filter) - .orderBy(orderByClause); + const query = knex + .with('subquery', (qb) => _buildIsCertifiable(qb, organizationId)) + .distinct('view-active-organization-learners.id') + .select([ + 'view-active-organization-learners.id', + 'view-active-organization-learners.firstName', + 'view-active-organization-learners.lastName', + knex.raw('LOWER("view-active-organization-learners"."firstName") AS "lowerFirstName"'), + knex.raw('LOWER("view-active-organization-learners"."lastName") AS "lowerLastName"'), + 'view-active-organization-learners.birthdate', + 'view-active-organization-learners.division', + 'view-active-organization-learners.userId', + 'view-active-organization-learners.organizationId', + 'users.username', + 'users.email', + 'authentication-methods.externalIdentifier as samlId', + 'subquery.isCertifiable', + 'subquery.certifiableAt', + knex.raw( + 'FIRST_VALUE("name") OVER(PARTITION BY "view-active-organization-learners"."id" ORDER BY "campaign-participations"."createdAt" DESC) AS "campaignName"' + ), + knex.raw( + 'FIRST_VALUE("campaign-participations"."status") OVER(PARTITION BY "view-active-organization-learners"."id" ORDER BY "campaign-participations"."createdAt" DESC) AS "participationStatus"' + ), + knex.raw( + 'FIRST_VALUE("type") OVER(PARTITION BY "view-active-organization-learners"."id" ORDER BY "campaign-participations"."createdAt" DESC) AS "campaignType"' + ), + knex.raw( + 'COUNT(*) FILTER (WHERE "campaign-participations"."id" IS NOT NULL) OVER(PARTITION BY "view-active-organization-learners"."id") AS "participationCount"' + ), + knex.raw( + 'max("campaign-participations"."createdAt") OVER(PARTITION BY "view-active-organization-learners"."id") AS "lastParticipationDate"' + ), + ]) + .from('view-active-organization-learners') + .leftJoin('subquery', 'subquery.organizationLearnerId', 'view-active-organization-learners.id') + .leftJoin('campaign-participations', function () { + this.on('campaign-participations.organizationLearnerId', 'view-active-organization-learners.id') + .andOn('campaign-participations.isImproved', '=', knex.raw('false')) + .andOn('campaign-participations.deletedAt', knex.raw('is'), knex.raw('null')); + }) + .leftJoin('users', 'users.id', 'view-active-organization-learners.userId') + .leftJoin('authentication-methods', function () { + this.on('users.id', 'authentication-methods.userId').andOnVal( + 'authentication-methods.identityProvider', + AuthenticationMethod.identityProviders.GAR + ); + }) + .leftJoin('campaigns', function () { + this.on('campaigns.id', 'campaign-participations.campaignId').andOn( + 'campaigns.organizationId', + 'view-active-organization-learners.organizationId' + ); + }) + .where('view-active-organization-learners.isDisabled', false) + .where('view-active-organization-learners.organizationId', organizationId) + .modify(_setFilters, filter) + .orderBy(orderByClause); - const { results, pagination } = await fetchPage(query, page); + const { results, pagination } = await fetchPage(query, page); - const scoOrganizationParticipants = results.map((result) => { - return new ScoOrganizationParticipant({ - ...result, - isAuthenticatedFromGAR: !!result.samlId, - }); + const scoOrganizationParticipants = results.map((result) => { + return new ScoOrganizationParticipant({ + ...result, + isAuthenticatedFromGAR: !!result.samlId, }); - return { - data: scoOrganizationParticipants, - meta: { ...pagination, participantCount: totalScoParticipants }, - }; - }, + }); + return { + data: scoOrganizationParticipants, + meta: { ...pagination, participantCount: totalScoParticipants }, + }; }; + +export { findPaginatedFilteredScoParticipants }; diff --git a/api/lib/infrastructure/repositories/sessions/finalized-session-repository.js b/api/lib/infrastructure/repositories/sessions/finalized-session-repository.js index d61f8dfc4a2..2d77ab94e6a 100644 --- a/api/lib/infrastructure/repositories/sessions/finalized-session-repository.js +++ b/api/lib/infrastructure/repositories/sessions/finalized-session-repository.js @@ -1,51 +1,50 @@ -const _ = require('lodash'); -const { NotFoundError } = require('../../../domain/errors.js'); -const { knex } = require('../../bookshelf.js'); - -const FinalizedSessionBookshelf = require('../../orm-models/FinalizedSession.js'); - -const bookshelfToDomainConverter = require('../../utils/bookshelf-to-domain-converter.js'); - -module.exports = { - async save(finalizedSession) { - await knex('finalized-sessions').insert(_toDTO(finalizedSession)).onConflict('sessionId').merge(); - return finalizedSession; - }, - - async get({ sessionId }) { - const bookshelfFinalizedSession = await FinalizedSessionBookshelf.where({ sessionId }).fetch({ require: false }); - - if (bookshelfFinalizedSession) { - return bookshelfToDomainConverter.buildDomainObject(FinalizedSessionBookshelf, bookshelfFinalizedSession); - } - - throw new NotFoundError(`Session of id ${sessionId} does not exist.`); - }, - - async findFinalizedSessionsToPublish() { - const publishableFinalizedSessions = await FinalizedSessionBookshelf.where({ - isPublishable: true, - publishedAt: null, - assignedCertificationOfficerName: null, - }) - .orderBy('finalizedAt') - .fetchAll(); - - return bookshelfToDomainConverter.buildDomainObjects(FinalizedSessionBookshelf, publishableFinalizedSessions); - }, - - async findFinalizedSessionsWithRequiredAction() { - const publishableFinalizedSessions = await FinalizedSessionBookshelf.where({ - isPublishable: false, - publishedAt: null, - }) - .orderBy('finalizedAt') - .fetchAll(); - - return bookshelfToDomainConverter.buildDomainObjects(FinalizedSessionBookshelf, publishableFinalizedSessions); - }, +import _ from 'lodash'; +import { NotFoundError } from '../../../domain/errors.js'; +import { knex } from '../../bookshelf.js'; +import { BookshelfFinalizedSession } from '../../orm-models/FinalizedSession.js'; + +import * as bookshelfToDomainConverter from '../../utils/bookshelf-to-domain-converter.js'; + +const save = async function (finalizedSession) { + await knex('finalized-sessions').insert(_toDTO(finalizedSession)).onConflict('sessionId').merge(); + return finalizedSession; }; +const get = async function ({ sessionId }) { + const bookshelfFinalizedSession = await BookshelfFinalizedSession.where({ sessionId }).fetch({ require: false }); + + if (bookshelfFinalizedSession) { + return bookshelfToDomainConverter.buildDomainObject(BookshelfFinalizedSession, bookshelfFinalizedSession); + } + + throw new NotFoundError(`Session of id ${sessionId} does not exist.`); +}; + +const findFinalizedSessionsToPublish = async function () { + const publishableFinalizedSessions = await BookshelfFinalizedSession.where({ + isPublishable: true, + publishedAt: null, + assignedCertificationOfficerName: null, + }) + .orderBy('finalizedAt') + .fetchAll(); + + return bookshelfToDomainConverter.buildDomainObjects(BookshelfFinalizedSession, publishableFinalizedSessions); +}; + +const findFinalizedSessionsWithRequiredAction = async function () { + const publishableFinalizedSessions = await BookshelfFinalizedSession.where({ + isPublishable: false, + publishedAt: null, + }) + .orderBy('finalizedAt') + .fetchAll(); + + return bookshelfToDomainConverter.buildDomainObjects(BookshelfFinalizedSession, publishableFinalizedSessions); +}; + +export { save, get, findFinalizedSessionsToPublish, findFinalizedSessionsWithRequiredAction }; + function _toDTO(finalizedSession) { return _.omit( { diff --git a/api/lib/infrastructure/repositories/sessions/jury-session-repository.js b/api/lib/infrastructure/repositories/sessions/jury-session-repository.js index b05a3af0ba0..b90976dc501 100644 --- a/api/lib/infrastructure/repositories/sessions/jury-session-repository.js +++ b/api/lib/infrastructure/repositories/sessions/jury-session-repository.js @@ -1,10 +1,9 @@ -const { knex } = require('../../bookshelf.js'); -const { fetchPage } = require('../../utils/knex-utils.js'); -const { NotFoundError } = require('../../../domain/errors.js'); -const JurySession = require('../../../domain/models/JurySession.js'); -const { statuses } = require('../../../domain/models/JurySession.js'); -const CertificationOfficer = require('../../../domain/models/CertificationOfficer.js'); -const { PGSQL_UNIQUE_CONSTRAINT_VIOLATION_ERROR } = require('../../../../db/pgsql-errors.js'); +import { knex } from '../../bookshelf.js'; +import { fetchPage } from '../../utils/knex-utils.js'; +import { NotFoundError } from '../../../domain/errors.js'; +import { JurySession, statuses } from '../../../domain/models/JurySession.js'; +import { CertificationOfficer } from '../../../domain/models/CertificationOfficer.js'; +import { PGSQL_UNIQUE_CONSTRAINT_VIOLATION_ERROR } from '../../../../db/pgsql-errors.js'; const COLUMNS = Object.freeze([ 'sessions.*', @@ -18,58 +17,58 @@ const ALIASED_COLUMNS = Object.freeze({ juryCommentAuthorLastName: 'jury-comment-authors.lastName', }); -module.exports = { - async get(id) { - const jurySessionDTO = await knex - .select(COLUMNS) - .select(ALIASED_COLUMNS) - .from('sessions') - .leftJoin('certification-centers', 'certification-centers.id', 'sessions.certificationCenterId') - .leftJoin('users', 'users.id', 'sessions.assignedCertificationOfficerId') - .leftJoin({ 'jury-comment-authors': 'users' }, 'jury-comment-authors.id', 'sessions.juryCommentAuthorId') - .where('sessions.id', '=', id) - .first(); - if (!jurySessionDTO) { - throw new NotFoundError("La session n'existe pas ou son accès est restreint"); - } - return _toDomain(jurySessionDTO); - }, - - async findPaginatedFiltered({ filters, page }) { - const query = knex - .select(COLUMNS) - .select(ALIASED_COLUMNS) - .from('sessions') - .leftJoin('certification-centers', 'certification-centers.id', 'sessions.certificationCenterId') - .leftJoin('users', 'users.id', 'sessions.assignedCertificationOfficerId') - .leftJoin({ 'jury-comment-authors': 'users' }, 'jury-comment-authors.id', 'sessions.juryCommentAuthorId') - .modify(_setupFilters, filters) - .orderByRaw('?? ASC NULLS FIRST', 'publishedAt') - .orderByRaw('?? ASC', 'finalizedAt') - .orderBy('id'); - - const { results, pagination } = await fetchPage(query, page); - const jurySessions = results.map(_toDomain); - - return { - jurySessions, - pagination, - }; - }, - - async assignCertificationOfficer({ id, assignedCertificationOfficerId }) { - try { - await knex('sessions').where({ id }).update({ assignedCertificationOfficerId }).returning('*'); - return this.get(id); - } catch (error) { - if (error.code === PGSQL_UNIQUE_CONSTRAINT_VIOLATION_ERROR) { - throw new NotFoundError(`L'utilisateur d'id ${assignedCertificationOfficerId} n'existe pas`); - } - throw new NotFoundError(`La session d'id ${id} n'existe pas.`); +const get = async function (id) { + const jurySessionDTO = await knex + .select(COLUMNS) + .select(ALIASED_COLUMNS) + .from('sessions') + .leftJoin('certification-centers', 'certification-centers.id', 'sessions.certificationCenterId') + .leftJoin('users', 'users.id', 'sessions.assignedCertificationOfficerId') + .leftJoin({ 'jury-comment-authors': 'users' }, 'jury-comment-authors.id', 'sessions.juryCommentAuthorId') + .where('sessions.id', '=', id) + .first(); + if (!jurySessionDTO) { + throw new NotFoundError("La session n'existe pas ou son accès est restreint"); + } + return _toDomain(jurySessionDTO); +}; + +const findPaginatedFiltered = async function ({ filters, page }) { + const query = knex + .select(COLUMNS) + .select(ALIASED_COLUMNS) + .from('sessions') + .leftJoin('certification-centers', 'certification-centers.id', 'sessions.certificationCenterId') + .leftJoin('users', 'users.id', 'sessions.assignedCertificationOfficerId') + .leftJoin({ 'jury-comment-authors': 'users' }, 'jury-comment-authors.id', 'sessions.juryCommentAuthorId') + .modify(_setupFilters, filters) + .orderByRaw('?? ASC NULLS FIRST', 'publishedAt') + .orderByRaw('?? ASC', 'finalizedAt') + .orderBy('id'); + + const { results, pagination } = await fetchPage(query, page); + const jurySessions = results.map(_toDomain); + + return { + jurySessions, + pagination, + }; +}; + +const assignCertificationOfficer = async function ({ id, assignedCertificationOfficerId }) { + try { + await knex('sessions').where({ id }).update({ assignedCertificationOfficerId }).returning('*'); + return this.get(id); + } catch (error) { + if (error.code === PGSQL_UNIQUE_CONSTRAINT_VIOLATION_ERROR) { + throw new NotFoundError(`L'utilisateur d'id ${assignedCertificationOfficerId} n'existe pas`); } - }, + throw new NotFoundError(`La session d'id ${id} n'existe pas.`); + } }; +export { get, findPaginatedFiltered, assignCertificationOfficer }; + function _toDomain(jurySessionFromDB) { let assignedCertificationOfficer = null; if (jurySessionFromDB.assignedCertificationOfficerId) { diff --git a/api/lib/infrastructure/repositories/sessions/session-for-attendance-sheet-repository.js b/api/lib/infrastructure/repositories/sessions/session-for-attendance-sheet-repository.js index 90a44c4eea2..06effdb22f4 100644 --- a/api/lib/infrastructure/repositories/sessions/session-for-attendance-sheet-repository.js +++ b/api/lib/infrastructure/repositories/sessions/session-for-attendance-sheet-repository.js @@ -1,60 +1,60 @@ -const { knex } = require('../../../../db/knex-database-connection.js'); -const { NotFoundError } = require('../../../domain/errors.js'); -const SessionForAttendanceSheet = require('../../../domain/read-models/SessionForAttendanceSheet.js'); -const CertificationCandidateForAttendanceSheet = require('../../../domain/read-models/CertificationCandidateForAttendanceSheet.js'); +import { knex } from '../../../../db/knex-database-connection.js'; +import { NotFoundError } from '../../../domain/errors.js'; +import { SessionForAttendanceSheet } from '../../../domain/read-models/SessionForAttendanceSheet.js'; +import { CertificationCandidateForAttendanceSheet } from '../../../domain/read-models/CertificationCandidateForAttendanceSheet.js'; -module.exports = { - async getWithCertificationCandidates(idSession) { - const results = await knex - .select( - 'sessions.id', - 'sessions.date', - 'sessions.time', - 'sessions.address', - 'sessions.room', - 'sessions.examiner', - 'certification-centers.name as certificationCenterName', - 'certification-centers.type as certificationCenterType', - 'organizations.isManagingStudents' - ) - .select({ - certificationCandidates: knex.raw(` - json_agg(json_build_object( - 'firstName', "certification-candidates"."firstName", - 'lastName', "certification-candidates"."lastName", - 'birthdate', "certification-candidates"."birthdate", - 'externalId', "certification-candidates"."externalId", - 'extraTimePercentage', "certification-candidates"."extraTimePercentage", - 'division', "view-active-organization-learners".division) - order by lower("certification-candidates"."lastName"), lower("certification-candidates"."firstName")) - `), - }) - .from('sessions') - .join('certification-centers', 'certification-centers.id', 'sessions.certificationCenterId') - .leftJoin('organizations', function () { - this.on('organizations.externalId', 'certification-centers.externalId').andOn( - 'organizations.type', - 'certification-centers.type' - ); - }) - .leftJoin('certification-candidates', 'certification-candidates.sessionId', 'sessions.id') - .leftJoin( - 'view-active-organization-learners', - 'view-active-organization-learners.id', - 'certification-candidates.organizationLearnerId' - ) - .groupBy('sessions.id', 'certification-centers.id', 'organizations.id') - .where({ 'sessions.id': idSession }) - .first(); +const getWithCertificationCandidates = async function (idSession) { + const results = await knex + .select( + 'sessions.id', + 'sessions.date', + 'sessions.time', + 'sessions.address', + 'sessions.room', + 'sessions.examiner', + 'certification-centers.name as certificationCenterName', + 'certification-centers.type as certificationCenterType', + 'organizations.isManagingStudents' + ) + .select({ + certificationCandidates: knex.raw(` + json_agg(json_build_object( + 'firstName', "certification-candidates"."firstName", + 'lastName', "certification-candidates"."lastName", + 'birthdate', "certification-candidates"."birthdate", + 'externalId', "certification-candidates"."externalId", + 'extraTimePercentage', "certification-candidates"."extraTimePercentage", + 'division', "view-active-organization-learners".division) + order by lower("certification-candidates"."lastName"), lower("certification-candidates"."firstName")) + `), + }) + .from('sessions') + .join('certification-centers', 'certification-centers.id', 'sessions.certificationCenterId') + .leftJoin('organizations', function () { + this.on('organizations.externalId', 'certification-centers.externalId').andOn( + 'organizations.type', + 'certification-centers.type' + ); + }) + .leftJoin('certification-candidates', 'certification-candidates.sessionId', 'sessions.id') + .leftJoin( + 'view-active-organization-learners', + 'view-active-organization-learners.id', + 'certification-candidates.organizationLearnerId' + ) + .groupBy('sessions.id', 'certification-centers.id', 'organizations.id') + .where({ 'sessions.id': idSession }) + .first(); - if (!results) { - throw new NotFoundError("La session n'existe pas"); - } + if (!results) { + throw new NotFoundError("La session n'existe pas"); + } - return _toDomain(results); - }, + return _toDomain(results); }; +export { getWithCertificationCandidates }; + function _toDomain(results) { const toDomainCertificationCandidates = results.certificationCandidates.map((candidate) => { return new CertificationCandidateForAttendanceSheet({ ...candidate }); diff --git a/api/lib/infrastructure/repositories/sessions/session-for-supervising-repository.js b/api/lib/infrastructure/repositories/sessions/session-for-supervising-repository.js index f8b7ac9b2cc..712c7ff7239 100644 --- a/api/lib/infrastructure/repositories/sessions/session-for-supervising-repository.js +++ b/api/lib/infrastructure/repositories/sessions/session-for-supervising-repository.js @@ -1,67 +1,67 @@ -const { knex } = require('../../../../db/knex-database-connection.js'); -const { NotFoundError } = require('../../../domain/errors.js'); -const CertificationCandidateForSupervising = require('../../../domain/models/CertificationCandidateForSupervising.js'); -const ComplementaryCertificationForSupervising = require('../../../domain/models/ComplementaryCertificationForSupervising.js'); -const SessionForSupervising = require('../../../domain/read-models/SessionForSupervising.js'); +import { knex } from '../../../../db/knex-database-connection.js'; +import { NotFoundError } from '../../../domain/errors.js'; +import { CertificationCandidateForSupervising } from '../../../domain/models/CertificationCandidateForSupervising.js'; +import { ComplementaryCertificationForSupervising } from '../../../domain/models/ComplementaryCertificationForSupervising.js'; +import { SessionForSupervising } from '../../../domain/read-models/SessionForSupervising.js'; -module.exports = { - async get(idSession) { - const results = await knex - .select({ - id: 'sessions.id', - date: 'sessions.date', - time: 'sessions.time', - room: 'sessions.room', - examiner: 'sessions.examiner', - accessCode: 'sessions.accessCode', - certificationCenterName: 'certification-centers.name', - certificationCandidates: knex.raw(` - json_agg(json_build_object( - 'userId', "certification-candidates"."userId", - 'firstName', "certification-candidates"."firstName", - 'lastName', "certification-candidates"."lastName", - 'birthdate', "certification-candidates"."birthdate", - 'id', "certification-candidates"."id", - 'extraTimePercentage', "certification-candidates"."extraTimePercentage", - 'authorizedToStart', "certification-candidates"."authorizedToStart", - 'assessmentStatus', "assessments"."state", - 'startDateTime', "certification-courses"."createdAt", - 'complementaryCertification', json_build_object( - 'key', "complementary-certifications"."key", - 'label', "complementary-certifications"."label", - 'certificationExtraTime', "complementary-certifications"."certificationExtraTime" - ) - ) order by lower("certification-candidates"."lastName"), lower("certification-candidates"."firstName")) - `), - }) - .from('sessions') - .leftJoin('certification-candidates', 'certification-candidates.sessionId', 'sessions.id') - .leftJoin('certification-courses', function () { - this.on('certification-courses.sessionId', '=', 'sessions.id'); - this.on('certification-courses.userId', '=', 'certification-candidates.userId'); - }) - .leftJoin('assessments', 'assessments.certificationCourseId', 'certification-courses.id') - .innerJoin('certification-centers', 'certification-centers.id', 'sessions.certificationCenterId') - .leftJoin( - 'complementary-certification-subscriptions', - 'complementary-certification-subscriptions.certificationCandidateId', - 'certification-candidates.id' - ) - .leftJoin( - 'complementary-certifications', - 'complementary-certifications.id', - 'complementary-certification-subscriptions.complementaryCertificationId' - ) - .groupBy('sessions.id', 'certification-centers.id') - .where({ 'sessions.id': idSession }) - .first(); - if (!results) { - throw new NotFoundError("La session n'existe pas"); - } - return _toDomain(results); - }, +const get = async function (idSession) { + const results = await knex + .select({ + id: 'sessions.id', + date: 'sessions.date', + time: 'sessions.time', + room: 'sessions.room', + examiner: 'sessions.examiner', + accessCode: 'sessions.accessCode', + certificationCenterName: 'certification-centers.name', + certificationCandidates: knex.raw(` + json_agg(json_build_object( + 'userId', "certification-candidates"."userId", + 'firstName', "certification-candidates"."firstName", + 'lastName', "certification-candidates"."lastName", + 'birthdate', "certification-candidates"."birthdate", + 'id', "certification-candidates"."id", + 'extraTimePercentage', "certification-candidates"."extraTimePercentage", + 'authorizedToStart', "certification-candidates"."authorizedToStart", + 'assessmentStatus', "assessments"."state", + 'startDateTime', "certification-courses"."createdAt", + 'complementaryCertification', json_build_object( + 'key', "complementary-certifications"."key", + 'label', "complementary-certifications"."label", + 'certificationExtraTime', "complementary-certifications"."certificationExtraTime" + ) + ) order by lower("certification-candidates"."lastName"), lower("certification-candidates"."firstName")) + `), + }) + .from('sessions') + .leftJoin('certification-candidates', 'certification-candidates.sessionId', 'sessions.id') + .leftJoin('certification-courses', function () { + this.on('certification-courses.sessionId', '=', 'sessions.id'); + this.on('certification-courses.userId', '=', 'certification-candidates.userId'); + }) + .leftJoin('assessments', 'assessments.certificationCourseId', 'certification-courses.id') + .innerJoin('certification-centers', 'certification-centers.id', 'sessions.certificationCenterId') + .leftJoin( + 'complementary-certification-subscriptions', + 'complementary-certification-subscriptions.certificationCandidateId', + 'certification-candidates.id' + ) + .leftJoin( + 'complementary-certifications', + 'complementary-certifications.id', + 'complementary-certification-subscriptions.complementaryCertificationId' + ) + .groupBy('sessions.id', 'certification-centers.id') + .where({ 'sessions.id': idSession }) + .first(); + if (!results) { + throw new NotFoundError("La session n'existe pas"); + } + return _toDomain(results); }; +export { get }; + function _toDomainComplementaryCertification(complementaryCertification) { if (complementaryCertification?.key) { return new ComplementaryCertificationForSupervising(complementaryCertification); diff --git a/api/lib/infrastructure/repositories/sessions/session-for-supervisor-kit-repository.js b/api/lib/infrastructure/repositories/sessions/session-for-supervisor-kit-repository.js index 6e5b10d9c5a..16c3ca361a7 100644 --- a/api/lib/infrastructure/repositories/sessions/session-for-supervisor-kit-repository.js +++ b/api/lib/infrastructure/repositories/sessions/session-for-supervisor-kit-repository.js @@ -1,27 +1,27 @@ -const { knex } = require('../../../../db/knex-database-connection.js'); -const SessionForSupervisorKit = require('../../../domain/read-models/SessionForSupervisorKit.js'); +import { knex } from '../../../../db/knex-database-connection.js'; +import { SessionForSupervisorKit } from '../../../domain/read-models/SessionForSupervisorKit.js'; -module.exports = { - async get(idSession) { - const results = await knex - .select( - 'sessions.id', - 'sessions.date', - 'sessions.time', - 'sessions.address', - 'sessions.room', - 'sessions.examiner', - 'sessions.accessCode', - 'sessions.supervisorPassword' - ) - .from('sessions') - .where({ 'sessions.id': idSession }) - .first(); +const get = async function (idSession) { + const results = await knex + .select( + 'sessions.id', + 'sessions.date', + 'sessions.time', + 'sessions.address', + 'sessions.room', + 'sessions.examiner', + 'sessions.accessCode', + 'sessions.supervisorPassword' + ) + .from('sessions') + .where({ 'sessions.id': idSession }) + .first(); - return _toDomain(results); - }, + return _toDomain(results); }; +export { get }; + function _toDomain(results) { return new SessionForSupervisorKit({ ...results, diff --git a/api/lib/infrastructure/repositories/sessions/session-jury-comment-repository.js b/api/lib/infrastructure/repositories/sessions/session-jury-comment-repository.js index 5062c79c0ee..b278bb54a33 100644 --- a/api/lib/infrastructure/repositories/sessions/session-jury-comment-repository.js +++ b/api/lib/infrastructure/repositories/sessions/session-jury-comment-repository.js @@ -1,46 +1,46 @@ -const { knex } = require('../../../../db/knex-database-connection.js'); -const { NotFoundError } = require('../../../domain/errors.js'); -const SessionJuryComment = require('../../../domain/models/SessionJuryComment.js'); - -module.exports = { - async get(sessionId) { - const result = await knex - .select({ - id: 'id', - comment: 'juryComment', - authorId: 'juryCommentAuthorId', - updatedAt: 'juryCommentedAt', - }) - .from('sessions') - .where({ id: sessionId }) - .first(); - - if (!result) { - throw new NotFoundError(`La session ${sessionId} n'existe pas ou son accès est restreint.`); - } - - return new SessionJuryComment(result); - }, - - async save(sessionJuryComment) { - const columnsToSave = { - juryComment: sessionJuryComment.comment, - juryCommentAuthorId: sessionJuryComment.authorId, - juryCommentedAt: sessionJuryComment.updatedAt, - }; - await _persist(sessionJuryComment.id, columnsToSave); - }, - - async delete(sessionJuryCommentId) { - const columnsToSave = { - juryComment: null, - juryCommentAuthorId: null, - juryCommentedAt: null, - }; - await _persist(sessionJuryCommentId, columnsToSave); - }, +import { knex } from '../../../../db/knex-database-connection.js'; +import { NotFoundError } from '../../../domain/errors.js'; +import { SessionJuryComment } from '../../../domain/models/SessionJuryComment.js'; + +const get = async function (sessionId) { + const result = await knex + .select({ + id: 'id', + comment: 'juryComment', + authorId: 'juryCommentAuthorId', + updatedAt: 'juryCommentedAt', + }) + .from('sessions') + .where({ id: sessionId }) + .first(); + + if (!result) { + throw new NotFoundError(`La session ${sessionId} n'existe pas ou son accès est restreint.`); + } + + return new SessionJuryComment(result); }; +const save = async function (sessionJuryComment) { + const columnsToSave = { + juryComment: sessionJuryComment.comment, + juryCommentAuthorId: sessionJuryComment.authorId, + juryCommentedAt: sessionJuryComment.updatedAt, + }; + await _persist(sessionJuryComment.id, columnsToSave); +}; + +const remove = async function (sessionJuryCommentId) { + const columnsToSave = { + juryComment: null, + juryCommentAuthorId: null, + juryCommentedAt: null, + }; + await _persist(sessionJuryCommentId, columnsToSave); +}; + +export { get, save, remove }; + async function _persist(sessionId, columnsToSave) { const updatedSessionIds = await knex('sessions').update(columnsToSave).where({ id: sessionId }).returning('id'); diff --git a/api/lib/infrastructure/repositories/sessions/session-repository.js b/api/lib/infrastructure/repositories/sessions/session-repository.js index bb5b99a8bdc..9554617e995 100644 --- a/api/lib/infrastructure/repositories/sessions/session-repository.js +++ b/api/lib/infrastructure/repositories/sessions/session-repository.js @@ -1,214 +1,227 @@ -const _ = require('lodash'); - -const { knex } = require('../../../../db/knex-database-connection.js'); -const { NotFoundError } = require('../../../domain/errors.js'); -const Session = require('../../../domain/models/Session.js'); -const CertificationCenter = require('../../../domain/models/CertificationCenter.js'); -const CertificationCandidate = require('../../../domain/models/CertificationCandidate.js'); -const ComplementaryCertification = require('../../../domain/models/ComplementaryCertification.js'); -const DomainTransaction = require('../../DomainTransaction.js'); - -module.exports = { - async save(sessionData, { knexTransaction } = DomainTransaction.emptyTransaction()) { - const knexConn = knexTransaction ?? knex; - sessionData = _.omit(sessionData, ['certificationCandidates']); - const [savedSession] = await knexConn('sessions').insert(sessionData).returning('*'); - - return new Session(savedSession); - }, - - async saveSessions(sessionsData) { - const sessions = sessionsData.map((session) => { - return _.omit(session, ['certificationCandidates']); - }); - return knex.batchInsert('sessions', sessions); - }, - - async isFinalized(id) { - const session = await knex.select('id').from('sessions').where({ id }).whereNotNull('finalizedAt').first(); - return Boolean(session); - }, - - async get(sessionId) { - const foundSession = await knex.select('*').from('sessions').where({ id: sessionId }).first(); - if (!foundSession) { - throw new NotFoundError("La session n'existe pas ou son accès est restreint"); - } - return new Session({ ...foundSession }); - }, +import _ from 'lodash'; + +import { knex } from '../../../../db/knex-database-connection.js'; +import { NotFoundError } from '../../../domain/errors.js'; +import { Session } from '../../../domain/models/Session.js'; +import { CertificationCenter } from '../../../domain/models/CertificationCenter.js'; +import { CertificationCandidate } from '../../../domain/models/CertificationCandidate.js'; +import { ComplementaryCertification } from '../../../domain/models/ComplementaryCertification.js'; +import { DomainTransaction } from '../../DomainTransaction.js'; + +const save = async function (sessionData, { knexTransaction } = DomainTransaction.emptyTransaction()) { + const knexConn = knexTransaction ?? knex; + sessionData = _.omit(sessionData, ['certificationCandidates']); + const [savedSession] = await knexConn('sessions').insert(sessionData).returning('*'); + + return new Session(savedSession); +}; + +const saveSessions = async function (sessionsData) { + const sessions = sessionsData.map((session) => { + return _.omit(session, ['certificationCandidates']); + }); + return knex.batchInsert('sessions', sessions); +}; + +const isFinalized = async function (id) { + const session = await knex.select('id').from('sessions').where({ id }).whereNotNull('finalizedAt').first(); + return Boolean(session); +}; + +const get = async function (sessionId) { + const foundSession = await knex.select('*').from('sessions').where({ id: sessionId }).first(); + if (!foundSession) { + throw new NotFoundError("La session n'existe pas ou son accès est restreint"); + } + return new Session({ ...foundSession }); +}; + +const isSessionExisting = async function ({ address, room, date, time }) { + const sessions = await knex('sessions').where({ address, room, date, time }); + return sessions.length > 0; +}; + +const isSessionExistingBySessionAndCertificationCenterIds = async function ({ sessionId, certificationCenterId }) { + const [session] = await knex('sessions').where({ id: sessionId, certificationCenterId }); + return Boolean(session); +}; + +const getWithCertificationCandidates = async function (sessionId) { + const session = await knex.from('sessions').where({ 'sessions.id': sessionId }).first(); + + if (!session) { + throw new NotFoundError("La session n'existe pas ou son accès est restreint"); + } + + const certificationCandidates = await knex + .select('certification-candidates.*') + .select({ + complementaryCertifications: knex.raw(` + json_agg(json_build_object('id', "complementary-certifications"."id", 'label', "complementary-certifications"."label", 'key', "complementary-certifications"."key")) + `), + }) + .from('certification-candidates') + .leftJoin( + 'complementary-certification-subscriptions', + 'complementary-certification-subscriptions.certificationCandidateId', + 'certification-candidates.id' + ) + .leftJoin( + 'complementary-certifications', + 'complementary-certifications.id', + 'complementary-certification-subscriptions.complementaryCertificationId' + ) + .groupBy('certification-candidates.id') + .where({ sessionId }) + .orderByRaw('LOWER(??) ASC, LOWER(??) ASC', ['lastName', 'firstName']); + + return _toDomain({ ...session, certificationCandidates }); +}; + +const updateSessionInfo = async function (session) { + const sessionDataToUpdate = _.pick(session, [ + 'address', + 'room', + 'accessCode', + 'examiner', + 'date', + 'time', + 'description', + ]); + + const [updatedSession] = await knex('sessions').where({ id: session.id }).update(sessionDataToUpdate).returning('*'); + return new Session(updatedSession); +}; + +const doesUserHaveCertificationCenterMembershipForSession = async function (userId, sessionId) { + const sessions = await knex + .select('sessions.id') + .from('sessions') + .where({ + 'sessions.id': sessionId, + 'certification-center-memberships.userId': userId, + 'certification-center-memberships.disabledAt': null, + }) + .innerJoin('certification-centers', 'certification-centers.id', 'sessions.certificationCenterId') + .innerJoin( + 'certification-center-memberships', + 'certification-center-memberships.certificationCenterId', + 'certification-centers.id' + ); + return Boolean(sessions.length); +}; + +const finalize = async function ({ id, examinerGlobalComment, hasIncident, hasJoiningIssue, finalizedAt }) { + const [finalizedSession] = await knex('sessions') + .where({ id }) + .update({ examinerGlobalComment, hasIncident, hasJoiningIssue, finalizedAt }) + .returning('*'); + return new Session(finalizedSession); +}; + +const flagResultsAsSentToPrescriber = async function ({ id, resultsSentToPrescriberAt }) { + const [flaggedSession] = await knex('sessions').where({ id }).update({ resultsSentToPrescriberAt }).returning('*'); + return new Session(flaggedSession); +}; - async isSessionExisting({ address, room, date, time }) { - const sessions = await knex('sessions').where({ address, room, date, time }); - return sessions.length > 0; - }, +const updatePublishedAt = async function ({ id, publishedAt }) { + const [publishedSession] = await knex('sessions').where({ id }).update({ publishedAt }).returning('*'); + return new Session(publishedSession); +}; + +const isSco = async function ({ sessionId }) { + const result = await knex + .select('certification-centers.type') + .from('sessions') + .where('sessions.id', '=', sessionId) + .innerJoin('certification-centers', 'certification-centers.id', 'sessions.certificationCenterId') + .first(); - async isSessionExistingBySessionAndCertificationCenterIds({ sessionId, certificationCenterId }) { - const [session] = await knex('sessions').where({ id: sessionId, certificationCenterId }); - return Boolean(session); - }, + return result.type === CertificationCenter.types.SCO; +}; - async getWithCertificationCandidates(sessionId) { - const session = await knex.from('sessions').where({ 'sessions.id': sessionId }).first(); +const remove = async function (sessionId) { + await knex.transaction(async (trx) => { + const certificationCandidateIdsInSession = await knex('certification-candidates').where({ sessionId }).pluck('id'); + const supervisorAccessIds = await knex('supervisor-accesses').where({ sessionId }).pluck('id'); + + if (supervisorAccessIds) { + await trx('supervisor-accesses').whereIn('id', supervisorAccessIds).del(); + } - if (!session) { - throw new NotFoundError("La session n'existe pas ou son accès est restreint"); + if (certificationCandidateIdsInSession.length) { + await trx('complementary-certification-subscriptions') + .whereIn('certificationCandidateId', certificationCandidateIdsInSession) + .del(); + await trx('certification-candidates').whereIn('id', certificationCandidateIdsInSession).del(); } + const nbSessionsDeleted = await trx('sessions').where('id', sessionId).del(); + if (nbSessionsDeleted === 0) throw new NotFoundError(); + }); + + return; +}; + +const hasSomeCleaAcquired = async function (sessionId) { + const result = await knex + .select(1) + .from('sessions') + .innerJoin('certification-courses', 'certification-courses.sessionId', 'sessions.id') + .innerJoin( + 'complementary-certification-courses', + 'complementary-certification-courses.certificationCourseId', + 'certification-courses.id' + ) + .innerJoin( + 'complementary-certifications', + 'complementary-certifications.id', + 'complementary-certification-courses.complementaryCertificationId' + ) + .innerJoin( + 'complementary-certification-course-results', + 'complementary-certification-course-results.complementaryCertificationCourseId', + 'complementary-certification-courses.id' + ) + .where('sessions.id', sessionId) + .whereNotNull('sessions.publishedAt') + .where('complementary-certification-course-results.acquired', true) + .where('complementary-certifications.key', ComplementaryCertification.CLEA) + .first(); + return Boolean(result); +}; + +const hasNoStartedCertification = async function (sessionId) { + const result = await knex.select(1).from('certification-courses').where('sessionId', sessionId).first(); + return !result; +}; + +const countUncompletedCertifications = async function (sessionId) { + const { count } = await knex + .count('id') + .from('certification-courses') + .where({ sessionId, completedAt: null }) + .first(); + return count; +}; - const certificationCandidates = await knex - .select('certification-candidates.*') - .select({ - complementaryCertifications: knex.raw(` - json_agg(json_build_object('id', "complementary-certifications"."id", 'label', "complementary-certifications"."label", 'key', "complementary-certifications"."key")) - `), - }) - .from('certification-candidates') - .leftJoin( - 'complementary-certification-subscriptions', - 'complementary-certification-subscriptions.certificationCandidateId', - 'certification-candidates.id' - ) - .leftJoin( - 'complementary-certifications', - 'complementary-certifications.id', - 'complementary-certification-subscriptions.complementaryCertificationId' - ) - .groupBy('certification-candidates.id') - .where({ sessionId }) - .orderByRaw('LOWER(??) ASC, LOWER(??) ASC', ['lastName', 'firstName']); - - return _toDomain({ ...session, certificationCandidates }); - }, - - async updateSessionInfo(session) { - const sessionDataToUpdate = _.pick(session, [ - 'address', - 'room', - 'accessCode', - 'examiner', - 'date', - 'time', - 'description', - ]); - - const [updatedSession] = await knex('sessions') - .where({ id: session.id }) - .update(sessionDataToUpdate) - .returning('*'); - return new Session(updatedSession); - }, - - async doesUserHaveCertificationCenterMembershipForSession(userId, sessionId) { - const sessions = await knex - .select('sessions.id') - .from('sessions') - .where({ - 'sessions.id': sessionId, - 'certification-center-memberships.userId': userId, - 'certification-center-memberships.disabledAt': null, - }) - .innerJoin('certification-centers', 'certification-centers.id', 'sessions.certificationCenterId') - .innerJoin( - 'certification-center-memberships', - 'certification-center-memberships.certificationCenterId', - 'certification-centers.id' - ); - return Boolean(sessions.length); - }, - - async finalize({ id, examinerGlobalComment, hasIncident, hasJoiningIssue, finalizedAt }) { - const [finalizedSession] = await knex('sessions') - .where({ id }) - .update({ examinerGlobalComment, hasIncident, hasJoiningIssue, finalizedAt }) - .returning('*'); - return new Session(finalizedSession); - }, - - async flagResultsAsSentToPrescriber({ id, resultsSentToPrescriberAt }) { - const [flaggedSession] = await knex('sessions').where({ id }).update({ resultsSentToPrescriberAt }).returning('*'); - return new Session(flaggedSession); - }, - - async updatePublishedAt({ id, publishedAt }) { - const [publishedSession] = await knex('sessions').where({ id }).update({ publishedAt }).returning('*'); - return new Session(publishedSession); - }, - - async isSco({ sessionId }) { - const result = await knex - .select('certification-centers.type') - .from('sessions') - .where('sessions.id', '=', sessionId) - .innerJoin('certification-centers', 'certification-centers.id', 'sessions.certificationCenterId') - .first(); - - return result.type === CertificationCenter.types.SCO; - }, - - async delete(sessionId) { - await knex.transaction(async (trx) => { - const certificationCandidateIdsInSession = await knex('certification-candidates') - .where({ sessionId }) - .pluck('id'); - const supervisorAccessIds = await knex('supervisor-accesses').where({ sessionId }).pluck('id'); - - if (supervisorAccessIds) { - await trx('supervisor-accesses').whereIn('id', supervisorAccessIds).del(); - } - - if (certificationCandidateIdsInSession.length) { - await trx('complementary-certification-subscriptions') - .whereIn('certificationCandidateId', certificationCandidateIdsInSession) - .del(); - await trx('certification-candidates').whereIn('id', certificationCandidateIdsInSession).del(); - } - const nbSessionsDeleted = await trx('sessions').where('id', sessionId).del(); - if (nbSessionsDeleted === 0) throw new NotFoundError(); - }); - - return; - }, - - async hasSomeCleaAcquired(sessionId) { - const result = await knex - .select(1) - .from('sessions') - .innerJoin('certification-courses', 'certification-courses.sessionId', 'sessions.id') - .innerJoin( - 'complementary-certification-courses', - 'complementary-certification-courses.certificationCourseId', - 'certification-courses.id' - ) - .innerJoin( - 'complementary-certifications', - 'complementary-certifications.id', - 'complementary-certification-courses.complementaryCertificationId' - ) - .innerJoin( - 'complementary-certification-course-results', - 'complementary-certification-course-results.complementaryCertificationCourseId', - 'complementary-certification-courses.id' - ) - .where('sessions.id', sessionId) - .whereNotNull('sessions.publishedAt') - .where('complementary-certification-course-results.acquired', true) - .where('complementary-certifications.key', ComplementaryCertification.CLEA) - .first(); - return Boolean(result); - }, - - async hasNoStartedCertification(sessionId) { - const result = await knex.select(1).from('certification-courses').where('sessionId', sessionId).first(); - return !result; - }, - - async countUncompletedCertifications(sessionId) { - const { count } = await knex - .count('id') - .from('certification-courses') - .where({ sessionId, completedAt: null }) - .first(); - return count; - }, +export { + save, + saveSessions, + isFinalized, + get, + isSessionExisting, + isSessionExistingBySessionAndCertificationCenterIds, + getWithCertificationCandidates, + updateSessionInfo, + doesUserHaveCertificationCenterMembershipForSession, + finalize, + flagResultsAsSentToPrescriber, + updatePublishedAt, + isSco, + remove, + hasSomeCleaAcquired, + hasNoStartedCertification, + countUncompletedCertifications, }; function _toDomain(results) { diff --git a/api/lib/infrastructure/repositories/sessions/session-summary-repository.js b/api/lib/infrastructure/repositories/sessions/session-summary-repository.js index 1b9fe2025b1..70ee0ad98ee 100644 --- a/api/lib/infrastructure/repositories/sessions/session-summary-repository.js +++ b/api/lib/infrastructure/repositories/sessions/session-summary-repository.js @@ -1,47 +1,47 @@ -const { knex } = require('../../bookshelf.js'); -const { fetchPage } = require('../../utils/knex-utils.js'); -const SessionSummary = require('../../../domain/read-models/SessionSummary.js'); +import { knex } from '../../bookshelf.js'; +import { fetchPage } from '../../utils/knex-utils.js'; +import { SessionSummary } from '../../../domain/read-models/SessionSummary.js'; -module.exports = { - async findPaginatedByCertificationCenterId({ certificationCenterId, page }) { - const query = knex('sessions') - .distinct('sessions.id') - .select({ - id: 'sessions.id', - address: 'sessions.address', - room: 'sessions.room', - date: 'sessions.date', - time: 'sessions.time', - examiner: 'sessions.examiner', - finalizedAt: 'sessions.finalizedAt', - publishedAt: 'sessions.publishedAt', - createdAt: 'sessions.createdAt', - }) - .select( - knex.raw( - 'COUNT(*) FILTER (WHERE "certification-candidates"."id" IS NOT NULL) OVER (partition by "sessions"."id") AS "enrolledCandidatesCount"' - ), - knex.raw( - 'COUNT(*) FILTER (WHERE "certification-courses"."id" IS NOT NULL) OVER (partition by "sessions"."id") AS "effectiveCandidatesCount"' - ) +const findPaginatedByCertificationCenterId = async function ({ certificationCenterId, page }) { + const query = knex('sessions') + .distinct('sessions.id') + .select({ + id: 'sessions.id', + address: 'sessions.address', + room: 'sessions.room', + date: 'sessions.date', + time: 'sessions.time', + examiner: 'sessions.examiner', + finalizedAt: 'sessions.finalizedAt', + publishedAt: 'sessions.publishedAt', + createdAt: 'sessions.createdAt', + }) + .select( + knex.raw( + 'COUNT(*) FILTER (WHERE "certification-candidates"."id" IS NOT NULL) OVER (partition by "sessions"."id") AS "enrolledCandidatesCount"' + ), + knex.raw( + 'COUNT(*) FILTER (WHERE "certification-courses"."id" IS NOT NULL) OVER (partition by "sessions"."id") AS "effectiveCandidatesCount"' ) - .leftJoin('certification-candidates', 'certification-candidates.sessionId', 'sessions.id') - .leftJoin('certification-courses', function () { - this.on('certification-courses.userId', 'certification-candidates.userId').andOn( - 'certification-courses.sessionId', - 'certification-candidates.sessionId' - ); - }) - .where({ certificationCenterId }) - .orderBy('sessions.date', 'DESC') - .orderBy('sessions.time', 'DESC') - .orderBy('sessions.id', 'ASC'); + ) + .leftJoin('certification-candidates', 'certification-candidates.sessionId', 'sessions.id') + .leftJoin('certification-courses', function () { + this.on('certification-courses.userId', 'certification-candidates.userId').andOn( + 'certification-courses.sessionId', + 'certification-candidates.sessionId' + ); + }) + .where({ certificationCenterId }) + .orderBy('sessions.date', 'DESC') + .orderBy('sessions.time', 'DESC') + .orderBy('sessions.id', 'ASC'); - const { results, pagination } = await fetchPage(query, page); - const atLeastOneSession = await knex('sessions').select('id').where({ certificationCenterId }).first(); - const hasSessions = Boolean(atLeastOneSession); + const { results, pagination } = await fetchPage(query, page); + const atLeastOneSession = await knex('sessions').select('id').where({ certificationCenterId }).first(); + const hasSessions = Boolean(atLeastOneSession); - const sessionSummaries = results.map((result) => SessionSummary.from(result)); - return { models: sessionSummaries, meta: { ...pagination, hasSessions } }; - }, + const sessionSummaries = results.map((result) => SessionSummary.from(result)); + return { models: sessionSummaries, meta: { ...pagination, hasSessions } }; }; + +export { findPaginatedByCertificationCenterId }; diff --git a/api/lib/infrastructure/repositories/skill-repository.js b/api/lib/infrastructure/repositories/skill-repository.js index 1f72b92ed2b..215435e6cb8 100644 --- a/api/lib/infrastructure/repositories/skill-repository.js +++ b/api/lib/infrastructure/repositories/skill-repository.js @@ -1,6 +1,6 @@ -const { NotFoundError } = require('../../domain/errors.js'); -const Skill = require('../../domain/models/Skill.js'); -const { skillDatasource } = require('../datasources/learning-content/skill-datasource.js'); +import { NotFoundError } from '../../domain/errors.js'; +import { Skill } from '../../domain/models/Skill.js'; +import { skillDatasource } from '../datasources/learning-content/skill-datasource.js'; function _toDomain(skillData) { return new Skill({ @@ -16,52 +16,62 @@ function _toDomain(skillData) { }); } -module.exports = { - async get(id) { - try { - return _toDomain(await skillDatasource.get(id)); - } catch (e) { - throw new NotFoundError('Erreur, compétence introuvable'); - } - }, +const get = async function (id) { + try { + return _toDomain(await skillDatasource.get(id)); + } catch (e) { + throw new NotFoundError('Erreur, compétence introuvable'); + } +}; - async list() { - const skillDatas = await skillDatasource.list(); - return skillDatas.map(_toDomain); - }, +const list = async function () { + const skillDatas = await skillDatasource.list(); + return skillDatas.map(_toDomain); +}; - async findActiveByTubeId(tubeId) { - const skillDatas = await skillDatasource.findActiveByTubeId(tubeId); - return skillDatas.map(_toDomain); - }, +const findActiveByTubeId = async function (tubeId) { + const skillDatas = await skillDatasource.findActiveByTubeId(tubeId); + return skillDatas.map(_toDomain); +}; + +const findOperativeByTubeId = async function (tubeId) { + const skillDatas = await skillDatasource.findOperativeByTubeId(tubeId); + return skillDatas.map(_toDomain); +}; - async findOperativeByTubeId(tubeId) { - const skillDatas = await skillDatasource.findOperativeByTubeId(tubeId); - return skillDatas.map(_toDomain); - }, +const findActiveByCompetenceId = async function (competenceId) { + const skillDatas = await skillDatasource.findActiveByCompetenceId(competenceId); + return skillDatas.map(_toDomain); +}; - async findActiveByCompetenceId(competenceId) { - const skillDatas = await skillDatasource.findActiveByCompetenceId(competenceId); - return skillDatas.map(_toDomain); - }, +const findOperativeByCompetenceId = async function (competenceId) { + const skillDatas = await skillDatasource.findOperativeByCompetenceId(competenceId); + return skillDatas.map(_toDomain); +}; - async findOperativeByCompetenceId(competenceId) { - const skillDatas = await skillDatasource.findOperativeByCompetenceId(competenceId); - return skillDatas.map(_toDomain); - }, +const findOperativeByCompetenceIds = async function (competenceIds) { + const skillDatas = await skillDatasource.findOperativeByCompetenceIds(competenceIds); + return skillDatas.map(_toDomain); +}; - async findOperativeByCompetenceIds(competenceIds) { - const skillDatas = await skillDatasource.findOperativeByCompetenceIds(competenceIds); - return skillDatas.map(_toDomain); - }, +const findOperativeByIds = async function (skillIds) { + const skillDatas = await skillDatasource.findOperativeByRecordIds(skillIds); + return skillDatas.map(_toDomain); +}; - async findOperativeByIds(skillIds) { - const skillDatas = await skillDatasource.findOperativeByRecordIds(skillIds); - return skillDatas.map(_toDomain); - }, +const findByRecordIds = async function (skillIds) { + const skillDatas = await skillDatasource.findByRecordIds(skillIds); + return skillDatas.map(_toDomain); +}; - async findByRecordIds(skillIds) { - const skillDatas = await skillDatasource.findByRecordIds(skillIds); - return skillDatas.map(_toDomain); - }, +export { + get, + list, + findActiveByTubeId, + findOperativeByTubeId, + findActiveByCompetenceId, + findOperativeByCompetenceId, + findOperativeByCompetenceIds, + findOperativeByIds, + findByRecordIds, }; diff --git a/api/lib/infrastructure/repositories/skill-set-repository.js b/api/lib/infrastructure/repositories/skill-set-repository.js index 97d0c138500..a1b1928d14a 100644 --- a/api/lib/infrastructure/repositories/skill-set-repository.js +++ b/api/lib/infrastructure/repositories/skill-set-repository.js @@ -1,12 +1,12 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); -const SkillSet = require('../../../lib/domain/models/SkillSet.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; +import { SkillSet } from '../../../lib/domain/models/SkillSet.js'; const TABLE_NAME = 'skill-sets'; -module.exports = { - async save({ skillSet }, { knexTransaction } = DomainTransaction.emptyTransaction()) { - const savedSkillSet = await (knexTransaction ?? knex)(TABLE_NAME).insert(skillSet).returning('*'); - return new SkillSet(savedSkillSet[0]); - }, +const save = async function ({ skillSet }, { knexTransaction } = DomainTransaction.emptyTransaction()) { + const savedSkillSet = await (knexTransaction ?? knex)(TABLE_NAME).insert(skillSet).returning('*'); + return new SkillSet(savedSkillSet[0]); }; + +export { save }; diff --git a/api/lib/infrastructure/repositories/student-repository.js b/api/lib/infrastructure/repositories/student-repository.js index 6cccd41a73a..c62a97985fa 100644 --- a/api/lib/infrastructure/repositories/student-repository.js +++ b/api/lib/infrastructure/repositories/student-repository.js @@ -1,63 +1,63 @@ -const _ = require('lodash'); -const Student = require('../../domain/models/Student.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const DomainTransaction = require('../DomainTransaction.js'); +import _ from 'lodash'; +import { Student } from '../../domain/models/Student.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { DomainTransaction } from '../DomainTransaction.js'; -module.exports = { - _toStudents(results) { - const students = []; - const resultsGroupedByNatId = _.groupBy(results, 'nationalStudentId'); - for (const [nationalStudentId, accounts] of Object.entries(resultsGroupedByNatId)) { - const mostRelevantAccount = _.orderBy(accounts, ['certificationCount', 'updatedAt'], ['desc', 'desc'])[0]; - students.push( - new Student({ - nationalStudentId, - account: _.pick(mostRelevantAccount, [ - 'userId', - 'certificationCount', - 'organizationId', - 'birthdate', - 'updatedAt', - ]), - }) - ); - } - return students; - }, - - async findReconciledStudentsByNationalStudentId( - nationalStudentIds, - domainTransaction = DomainTransaction.emptyTransaction() - ) { - const knexConn = domainTransaction.knexTransaction || knex; - const results = await knexConn - .select({ - nationalStudentId: 'view-active-organization-learners.nationalStudentId', - userId: 'users.id', - birthdate: 'view-active-organization-learners.birthdate', - organizationId: 'view-active-organization-learners.organizationId', - updatedAt: 'users.updatedAt', +const _toStudents = function (results) { + const students = []; + const resultsGroupedByNatId = _.groupBy(results, 'nationalStudentId'); + for (const [nationalStudentId, accounts] of Object.entries(resultsGroupedByNatId)) { + const mostRelevantAccount = _.orderBy(accounts, ['certificationCount', 'updatedAt'], ['desc', 'desc'])[0]; + students.push( + new Student({ + nationalStudentId, + account: _.pick(mostRelevantAccount, [ + 'userId', + 'certificationCount', + 'organizationId', + 'birthdate', + 'updatedAt', + ]), }) - .count('certification-courses.id as certificationCount') - .from('view-active-organization-learners') - .join('users', 'users.id', 'view-active-organization-learners.userId') - .leftJoin('certification-courses', 'certification-courses.userId', 'users.id') - .whereIn('nationalStudentId', nationalStudentIds) - .groupBy( - 'view-active-organization-learners.nationalStudentId', - 'users.id', - 'view-active-organization-learners.organizationId', - 'view-active-organization-learners.birthdate', - 'users.updatedAt' - ) - .orderBy('users.id'); + ); + } + return students; +}; - return this._toStudents(results); - }, +const findReconciledStudentsByNationalStudentId = async function ( + nationalStudentIds, + domainTransaction = DomainTransaction.emptyTransaction() +) { + const knexConn = domainTransaction.knexTransaction || knex; + const results = await knexConn + .select({ + nationalStudentId: 'view-active-organization-learners.nationalStudentId', + userId: 'users.id', + birthdate: 'view-active-organization-learners.birthdate', + organizationId: 'view-active-organization-learners.organizationId', + updatedAt: 'users.updatedAt', + }) + .count('certification-courses.id as certificationCount') + .from('view-active-organization-learners') + .join('users', 'users.id', 'view-active-organization-learners.userId') + .leftJoin('certification-courses', 'certification-courses.userId', 'users.id') + .whereIn('nationalStudentId', nationalStudentIds) + .groupBy( + 'view-active-organization-learners.nationalStudentId', + 'users.id', + 'view-active-organization-learners.organizationId', + 'view-active-organization-learners.birthdate', + 'users.updatedAt' + ) + .orderBy('users.id'); - async getReconciledStudentByNationalStudentId(nationalStudentId) { - const [result] = await this.findReconciledStudentsByNationalStudentId([nationalStudentId]); + return this._toStudents(results); +}; - return result ?? null; - }, +const getReconciledStudentByNationalStudentId = async function (nationalStudentId) { + const [result] = await this.findReconciledStudentsByNationalStudentId([nationalStudentId]); + + return result ?? null; }; + +export { _toStudents, findReconciledStudentsByNationalStudentId, getReconciledStudentByNationalStudentId }; diff --git a/api/lib/infrastructure/repositories/sup-organization-learner-repository.js b/api/lib/infrastructure/repositories/sup-organization-learner-repository.js index 5e716bcca77..52da7964b28 100644 --- a/api/lib/infrastructure/repositories/sup-organization-learner-repository.js +++ b/api/lib/infrastructure/repositories/sup-organization-learner-repository.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const { OrganizationLearnersCouldNotBeSavedError } = require('../../domain/errors.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const BookshelfOrganizationLearner = require('../orm-models/OrganizationLearner.js'); -const bookshelfToDomainConverter = require('../utils/bookshelf-to-domain-converter.js'); +import _ from 'lodash'; +import { OrganizationLearnersCouldNotBeSavedError } from '../../domain/errors.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { BookshelfOrganizationLearner } from '../orm-models/OrganizationLearner.js'; +import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js'; const ATTRIBUTES_TO_SAVE = [ 'firstName', @@ -21,46 +21,52 @@ const ATTRIBUTES_TO_SAVE = [ 'organizationId', ]; -module.exports = { - async updateStudentNumber(studentId, studentNumber) { - await BookshelfOrganizationLearner.where('id', studentId).save( - { studentNumber }, - { - patch: true, - } - ); - }, +const updateStudentNumber = async function (studentId, studentNumber) { + await BookshelfOrganizationLearner.where('id', studentId).save( + { studentNumber }, + { + patch: true, + } + ); +}; + +const findOneByStudentNumberAndBirthdate = async function ({ organizationId, studentNumber, birthdate }) { + const organizationLearner = await BookshelfOrganizationLearner.query((qb) => { + qb.where('organizationId', organizationId); + qb.where('birthdate', birthdate); + qb.where('isDisabled', false); + qb.whereRaw('LOWER(?)=LOWER(??)', [studentNumber, 'studentNumber']); + }).fetch({ require: false }); - async findOneByStudentNumberAndBirthdate({ organizationId, studentNumber, birthdate }) { - const organizationLearner = await BookshelfOrganizationLearner.query((qb) => { - qb.where('organizationId', organizationId); - qb.where('birthdate', birthdate); - qb.where('isDisabled', false); - qb.whereRaw('LOWER(?)=LOWER(??)', [studentNumber, 'studentNumber']); - }).fetch({ require: false }); + return bookshelfToDomainConverter.buildDomainObject(BookshelfOrganizationLearner, organizationLearner); +}; - return bookshelfToDomainConverter.buildDomainObject(BookshelfOrganizationLearner, organizationLearner); - }, +const findOneByStudentNumber = async function ({ organizationId, studentNumber }) { + const organizationLearner = await BookshelfOrganizationLearner.query((qb) => { + qb.where('organizationId', organizationId); + qb.whereRaw('LOWER(?)=LOWER(??)', [studentNumber, 'studentNumber']); + }).fetch({ require: false }); - async findOneByStudentNumber({ organizationId, studentNumber }) { - const organizationLearner = await BookshelfOrganizationLearner.query((qb) => { - qb.where('organizationId', organizationId); - qb.whereRaw('LOWER(?)=LOWER(??)', [studentNumber, 'studentNumber']); - }).fetch({ require: false }); + return bookshelfToDomainConverter.buildDomainObject(BookshelfOrganizationLearner, organizationLearner); +}; - return bookshelfToDomainConverter.buildDomainObject(BookshelfOrganizationLearner, organizationLearner); - }, +const addStudents = async function (supOrganizationLearners) { + await _upsertStudents(knex, supOrganizationLearners); +}; - async addStudents(supOrganizationLearners) { - await _upsertStudents(knex, supOrganizationLearners); - }, +const replaceStudents = async function (organizationId, supOrganizationLearners) { + await knex.transaction(async (transaction) => { + await _disableAllOrganizationLearners(transaction, organizationId); + await _upsertStudents(transaction, supOrganizationLearners); + }); +}; - async replaceStudents(organizationId, supOrganizationLearners) { - await knex.transaction(async (transaction) => { - await _disableAllOrganizationLearners(transaction, organizationId); - await _upsertStudents(transaction, supOrganizationLearners); - }); - }, +export { + updateStudentNumber, + findOneByStudentNumberAndBirthdate, + findOneByStudentNumber, + addStudents, + replaceStudents, }; async function _disableAllOrganizationLearners(queryBuilder, organizationId) { diff --git a/api/lib/infrastructure/repositories/sup-organization-participant-repository.js b/api/lib/infrastructure/repositories/sup-organization-participant-repository.js index 018823edf9b..f31e1104cd7 100644 --- a/api/lib/infrastructure/repositories/sup-organization-participant-repository.js +++ b/api/lib/infrastructure/repositories/sup-organization-participant-repository.js @@ -1,9 +1,9 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const { fetchPage } = require('../utils/knex-utils.js'); -const SupOrganizationParticipant = require('../../domain/read-models/SupOrganizationParticipant.js'); -const CampaignTypes = require('../../domain/models/CampaignTypes.js'); -const CampaignParticipationStatuses = require('../../domain/models/CampaignParticipationStatuses.js'); -const { filterByFullName } = require('../utils/filter-utils.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { fetchPage } from '../utils/knex-utils.js'; +import { SupOrganizationParticipant } from '../../domain/read-models/SupOrganizationParticipant.js'; +import { CampaignTypes } from '../../domain/models/CampaignTypes.js'; +import { CampaignParticipationStatuses } from '../../domain/models/CampaignParticipationStatuses.js'; +import { filterByFullName } from '../utils/filter-utils.js'; function _setFilters(qb, { search, studentNumber, groups, certificability } = {}) { if (search) { @@ -59,89 +59,89 @@ function _buildIsCertifiable(queryBuilder, organizationId) { .where('campaign-participations.deletedAt', null); } -module.exports = { - async findPaginatedFilteredSupParticipants({ organizationId, filter, page = {}, sort = {} }) { - const { totalSupParticipants } = await knex - .count('id', { as: 'totalSupParticipants' }) - .from('view-active-organization-learners') - .where({ organizationId: organizationId, isDisabled: false }) - .first(); +const findPaginatedFilteredSupParticipants = async function ({ organizationId, filter, page = {}, sort = {} }) { + const { totalSupParticipants } = await knex + .count('id', { as: 'totalSupParticipants' }) + .from('view-active-organization-learners') + .where({ organizationId: organizationId, isDisabled: false }) + .first(); - const orderByClause = [ - 'view-active-organization-learners.lastName', - 'view-active-organization-learners.firstName', - 'view-active-organization-learners.id', - ]; - if (sort?.participationCount) { - orderByClause.unshift({ - column: 'participationCount', - order: sort.participationCount == 'desc' ? 'desc' : 'asc', - }); - } - if (sort?.lastnameSort) { - orderByClause.unshift({ - column: 'view-active-organization-learners.lastName', - order: sort.lastnameSort == 'desc' ? 'desc' : 'asc', - }); - } + const orderByClause = [ + 'view-active-organization-learners.lastName', + 'view-active-organization-learners.firstName', + 'view-active-organization-learners.id', + ]; + if (sort?.participationCount) { + orderByClause.unshift({ + column: 'participationCount', + order: sort.participationCount == 'desc' ? 'desc' : 'asc', + }); + } + if (sort?.lastnameSort) { + orderByClause.unshift({ + column: 'view-active-organization-learners.lastName', + order: sort.lastnameSort == 'desc' ? 'desc' : 'asc', + }); + } - const query = knex - .with('subquery', (qb) => _buildIsCertifiable(qb, organizationId)) - .distinct('view-active-organization-learners.id') - .select([ - 'view-active-organization-learners.id', - 'view-active-organization-learners.firstName', - 'view-active-organization-learners.lastName', - knex.raw('LOWER("view-active-organization-learners"."firstName") AS "lowerFirstName"'), - knex.raw('LOWER("view-active-organization-learners"."lastName") AS "lowerLastName"'), - 'view-active-organization-learners.birthdate', - 'view-active-organization-learners.group', - 'view-active-organization-learners.studentNumber', - 'view-active-organization-learners.organizationId', - 'subquery.isCertifiable', - 'subquery.certifiableAt', - knex.raw( - 'FIRST_VALUE("name") OVER(PARTITION BY "view-active-organization-learners"."id" ORDER BY "campaign-participations"."createdAt" DESC) AS "campaignName"' - ), - knex.raw( - 'FIRST_VALUE("campaign-participations"."status") OVER(PARTITION BY "view-active-organization-learners"."id" ORDER BY "campaign-participations"."createdAt" DESC) AS "participationStatus"' - ), - knex.raw( - 'FIRST_VALUE("type") OVER(PARTITION BY "view-active-organization-learners"."id" ORDER BY "campaign-participations"."createdAt" DESC) AS "campaignType"' - ), - knex.raw( - 'COUNT(*) FILTER (WHERE "campaign-participations"."id" IS NOT NULL) OVER(PARTITION BY "view-active-organization-learners"."id") AS "participationCount"' - ), - knex.raw( - 'max("campaign-participations"."createdAt") OVER(PARTITION BY "view-active-organization-learners"."id") AS "lastParticipationDate"' - ), - ]) - .from('view-active-organization-learners') - .leftJoin('subquery', 'subquery.organizationLearnerId', 'view-active-organization-learners.id') - .leftJoin('campaign-participations', function () { - this.on('campaign-participations.organizationLearnerId', 'view-active-organization-learners.id') - .andOn('campaign-participations.isImproved', '=', knex.raw('false')) - .andOn('campaign-participations.deletedAt', knex.raw('is'), knex.raw('null')); - }) - .leftJoin('campaigns', function () { - this.on('campaigns.id', 'campaign-participations.campaignId').andOn( - 'campaigns.organizationId', - 'view-active-organization-learners.organizationId' - ); - }) - .where('view-active-organization-learners.isDisabled', false) - .where('view-active-organization-learners.organizationId', organizationId) - .modify(_setFilters, filter) - .orderBy(orderByClause); + const query = knex + .with('subquery', (qb) => _buildIsCertifiable(qb, organizationId)) + .distinct('view-active-organization-learners.id') + .select([ + 'view-active-organization-learners.id', + 'view-active-organization-learners.firstName', + 'view-active-organization-learners.lastName', + knex.raw('LOWER("view-active-organization-learners"."firstName") AS "lowerFirstName"'), + knex.raw('LOWER("view-active-organization-learners"."lastName") AS "lowerLastName"'), + 'view-active-organization-learners.birthdate', + 'view-active-organization-learners.group', + 'view-active-organization-learners.studentNumber', + 'view-active-organization-learners.organizationId', + 'subquery.isCertifiable', + 'subquery.certifiableAt', + knex.raw( + 'FIRST_VALUE("name") OVER(PARTITION BY "view-active-organization-learners"."id" ORDER BY "campaign-participations"."createdAt" DESC) AS "campaignName"' + ), + knex.raw( + 'FIRST_VALUE("campaign-participations"."status") OVER(PARTITION BY "view-active-organization-learners"."id" ORDER BY "campaign-participations"."createdAt" DESC) AS "participationStatus"' + ), + knex.raw( + 'FIRST_VALUE("type") OVER(PARTITION BY "view-active-organization-learners"."id" ORDER BY "campaign-participations"."createdAt" DESC) AS "campaignType"' + ), + knex.raw( + 'COUNT(*) FILTER (WHERE "campaign-participations"."id" IS NOT NULL) OVER(PARTITION BY "view-active-organization-learners"."id") AS "participationCount"' + ), + knex.raw( + 'max("campaign-participations"."createdAt") OVER(PARTITION BY "view-active-organization-learners"."id") AS "lastParticipationDate"' + ), + ]) + .from('view-active-organization-learners') + .leftJoin('subquery', 'subquery.organizationLearnerId', 'view-active-organization-learners.id') + .leftJoin('campaign-participations', function () { + this.on('campaign-participations.organizationLearnerId', 'view-active-organization-learners.id') + .andOn('campaign-participations.isImproved', '=', knex.raw('false')) + .andOn('campaign-participations.deletedAt', knex.raw('is'), knex.raw('null')); + }) + .leftJoin('campaigns', function () { + this.on('campaigns.id', 'campaign-participations.campaignId').andOn( + 'campaigns.organizationId', + 'view-active-organization-learners.organizationId' + ); + }) + .where('view-active-organization-learners.isDisabled', false) + .where('view-active-organization-learners.organizationId', organizationId) + .modify(_setFilters, filter) + .orderBy(orderByClause); - const { results, pagination } = await fetchPage(query, page); + const { results, pagination } = await fetchPage(query, page); - const supOrganizationParticipants = results.map((result) => { - return new SupOrganizationParticipant({ ...result }); - }); - return { - data: supOrganizationParticipants, - meta: { ...pagination, participantCount: totalSupParticipants }, - }; - }, + const supOrganizationParticipants = results.map((result) => { + return new SupOrganizationParticipant({ ...result }); + }); + return { + data: supOrganizationParticipants, + meta: { ...pagination, participantCount: totalSupParticipants }, + }; }; + +export { findPaginatedFilteredSupParticipants }; diff --git a/api/lib/infrastructure/repositories/supervisor-access-repository.js b/api/lib/infrastructure/repositories/supervisor-access-repository.js index abc93069749..d8e0e32a77b 100644 --- a/api/lib/infrastructure/repositories/supervisor-access-repository.js +++ b/api/lib/infrastructure/repositories/supervisor-access-repository.js @@ -1,27 +1,27 @@ -const { knex } = require('../../../db/knex-database-connection.js'); +import { knex } from '../../../db/knex-database-connection.js'; -module.exports = { - async create({ sessionId, userId }) { - await knex('supervisor-accesses').insert({ sessionId, userId }); - }, +const create = async function ({ sessionId, userId }) { + await knex('supervisor-accesses').insert({ sessionId, userId }); +}; - async isUserSupervisorForSession({ sessionId, userId }) { - const result = await knex.select(1).from('supervisor-accesses').where({ sessionId, userId }).first(); - return Boolean(result); - }, +const isUserSupervisorForSession = async function ({ sessionId, userId }) { + const result = await knex.select(1).from('supervisor-accesses').where({ sessionId, userId }).first(); + return Boolean(result); +}; - async sessionHasSupervisorAccess({ sessionId }) { - const result = await knex.select(1).from('supervisor-accesses').where({ sessionId }).first(); - return Boolean(result); - }, +const sessionHasSupervisorAccess = async function ({ sessionId }) { + const result = await knex.select(1).from('supervisor-accesses').where({ sessionId }).first(); + return Boolean(result); +}; - async isUserSupervisorForSessionCandidate({ supervisorId, certificationCandidateId }) { - const result = await knex - .select(1) - .from('supervisor-accesses') - .innerJoin('certification-candidates', 'supervisor-accesses.sessionId', 'certification-candidates.sessionId') - .where({ 'certification-candidates.id': certificationCandidateId, 'supervisor-accesses.userId': supervisorId }) - .first(); - return Boolean(result); - }, +const isUserSupervisorForSessionCandidate = async function ({ supervisorId, certificationCandidateId }) { + const result = await knex + .select(1) + .from('supervisor-accesses') + .innerJoin('certification-candidates', 'supervisor-accesses.sessionId', 'certification-candidates.sessionId') + .where({ 'certification-candidates.id': certificationCandidateId, 'supervisor-accesses.userId': supervisorId }) + .first(); + return Boolean(result); }; + +export { create, isUserSupervisorForSession, sessionHasSupervisorAccess, isUserSupervisorForSessionCandidate }; diff --git a/api/lib/infrastructure/repositories/tag-repository.js b/api/lib/infrastructure/repositories/tag-repository.js index 98941870b8f..842ed839a6c 100644 --- a/api/lib/infrastructure/repositories/tag-repository.js +++ b/api/lib/infrastructure/repositories/tag-repository.js @@ -1,40 +1,44 @@ -const knexUtils = require('../utils/knex-utils.js'); -const { AlreadyExistingEntityError, NotFoundError } = require('../../domain/errors.js'); -const omit = require('lodash/omit'); -const { knex } = require('../../../db/knex-database-connection.js'); -const Tag = require('../../domain/models/Tag.js'); -module.exports = { - async create(tag) { - try { - const tagToCreate = omit(tag, 'id'); - const [row] = await knex('tags').insert(tagToCreate).returning('*'); - return new Tag(row); - } catch (error) { - if (knexUtils.isUniqConstraintViolated(error)) { - throw new AlreadyExistingEntityError(`A tag with name ${tag.name} already exists.`); - } - throw error; - } - }, +import * as knexUtils from '../utils/knex-utils.js'; +import { AlreadyExistingEntityError, NotFoundError } from '../../domain/errors.js'; +import lodash from 'lodash'; - async findByName({ name }) { - const row = await knex('tags').where({ name }).first(); - if (!row) { - return null; - } - return new Tag(row); - }, +const { omit } = lodash; - async findAll() { - const rows = await knex('tags'); - return rows.map((row) => new Tag(row)); - }, +import { knex } from '../../../db/knex-database-connection.js'; +import { Tag } from '../../domain/models/Tag.js'; - async get(id) { - const row = await knex('tags').where({ id }).first(); - if (!row) { - throw new NotFoundError("Le tag n'existe pas"); - } +const create = async function (tag) { + try { + const tagToCreate = omit(tag, 'id'); + const [row] = await knex('tags').insert(tagToCreate).returning('*'); return new Tag(row); - }, + } catch (error) { + if (knexUtils.isUniqConstraintViolated(error)) { + throw new AlreadyExistingEntityError(`A tag with name ${tag.name} already exists.`); + } + throw error; + } +}; + +const findByName = async function ({ name }) { + const row = await knex('tags').where({ name }).first(); + if (!row) { + return null; + } + return new Tag(row); +}; + +const findAll = async function () { + const rows = await knex('tags'); + return rows.map((row) => new Tag(row)); }; + +const get = async function (id) { + const row = await knex('tags').where({ id }).first(); + if (!row) { + throw new NotFoundError("Le tag n'existe pas"); + } + return new Tag(row); +}; + +export { create, findByName, findAll, get }; diff --git a/api/lib/infrastructure/repositories/target-profile-for-admin-repository.js b/api/lib/infrastructure/repositories/target-profile-for-admin-repository.js index 22255b80812..5c4e0ff299d 100644 --- a/api/lib/infrastructure/repositories/target-profile-for-admin-repository.js +++ b/api/lib/infrastructure/repositories/target-profile-for-admin-repository.js @@ -1,45 +1,48 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const { FRENCH_FRANCE } = require('../../domain/constants.js').LOCALE; -const areaRepository = require('./area-repository.js'); -const competenceRepository = require('./competence-repository.js'); -const thematicRepository = require('./thematic-repository.js'); -const tubeRepository = require('./tube-repository.js'); -const TargetProfileForAdmin = require('../../domain/models/TargetProfileForAdmin.js'); -const StageCollection = require('../../domain/models/target-profile-management/StageCollection'); -const { BadgeDetails, BadgeCriterion, CappedTube, SCOPES } = require('../../domain/models/BadgeDetails.js'); - -module.exports = { - async get({ id, locale = FRENCH_FRANCE }) { - const targetProfileDTO = await knex('target-profiles') - .select( - 'target-profiles.id', - 'target-profiles.name', - 'target-profiles.outdated', - 'target-profiles.isPublic', - 'target-profiles.imageUrl', - 'target-profiles.createdAt', - 'target-profiles.description', - 'target-profiles.comment', - 'target-profiles.ownerOrganizationId', - 'target-profiles.category', - 'target-profiles.isSimplifiedAccess' - ) - .where('id', id) - .first(); - - if (targetProfileDTO == null) { - throw new NotFoundError("Le profil cible n'existe pas"); - } +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; +import { NotFoundError } from '../../domain/errors.js'; +import { LOCALE } from '../../domain/constants.js'; + +const { FRENCH_FRANCE } = LOCALE; + +import * as areaRepository from './area-repository.js'; +import * as competenceRepository from './competence-repository.js'; +import * as thematicRepository from './thematic-repository.js'; +import * as tubeRepository from './tube-repository.js'; +import { TargetProfileForAdmin } from '../../domain/models/TargetProfileForAdmin.js'; +import { StageCollection } from '../../domain/models/target-profile-management/StageCollection.js'; +import { BadgeDetails, BadgeCriterion, CappedTube, SCOPES } from '../../domain/models/BadgeDetails.js'; + +const get = async function ({ id, locale = FRENCH_FRANCE }) { + const targetProfileDTO = await knex('target-profiles') + .select( + 'target-profiles.id', + 'target-profiles.name', + 'target-profiles.outdated', + 'target-profiles.isPublic', + 'target-profiles.imageUrl', + 'target-profiles.createdAt', + 'target-profiles.description', + 'target-profiles.comment', + 'target-profiles.ownerOrganizationId', + 'target-profiles.category', + 'target-profiles.isSimplifiedAccess' + ) + .where('id', id) + .first(); + + if (targetProfileDTO == null) { + throw new NotFoundError("Le profil cible n'existe pas"); + } - const tubesData = await knex('target-profile_tubes') - .select('tubeId', 'level') - .where('targetProfileId', targetProfileDTO.id); - return _toDomain(targetProfileDTO, tubesData, locale); - }, + const tubesData = await knex('target-profile_tubes') + .select('tubeId', 'level') + .where('targetProfileId', targetProfileDTO.id); + return _toDomain(targetProfileDTO, tubesData, locale); }; +export { get }; + async function _toDomain(targetProfileDTO, tubesData, locale) { const { areas, competences, thematics, tubes } = await _getLearningContent(targetProfileDTO.id, tubesData, locale); const badges = await _findBadges(targetProfileDTO.id); diff --git a/api/lib/infrastructure/repositories/target-profile-for-update-repository.js b/api/lib/infrastructure/repositories/target-profile-for-update-repository.js index 30be580b0dc..eb2475e3500 100644 --- a/api/lib/infrastructure/repositories/target-profile-for-update-repository.js +++ b/api/lib/infrastructure/repositories/target-profile-for-update-repository.js @@ -1,14 +1,14 @@ -const { knex } = require('../../../db/knex-database-connection.js'); +import { knex } from '../../../db/knex-database-connection.js'; -module.exports = { - async update({ targetProfileId, name, imageUrl, description, comment, category }) { - const targetProfileToUpdate = { - name, - imageUrl, - description, - comment, - category, - }; - return knex('target-profiles').where({ id: targetProfileId }).update(targetProfileToUpdate); - }, +const update = async function ({ targetProfileId, name, imageUrl, description, comment, category }) { + const targetProfileToUpdate = { + name, + imageUrl, + description, + comment, + category, + }; + return knex('target-profiles').where({ id: targetProfileId }).update(targetProfileToUpdate); }; + +export { update }; diff --git a/api/lib/infrastructure/repositories/target-profile-management/stage-collection-repository.js b/api/lib/infrastructure/repositories/target-profile-management/stage-collection-repository.js index be771c64972..1ef63d68e11 100644 --- a/api/lib/infrastructure/repositories/target-profile-management/stage-collection-repository.js +++ b/api/lib/infrastructure/repositories/target-profile-management/stage-collection-repository.js @@ -1,46 +1,46 @@ -const { knex } = require('../../../../db/knex-database-connection.js'); -const StageCollection = require('../../../domain/models/target-profile-management/StageCollection.js'); +import { knex } from '../../../../db/knex-database-connection.js'; +import { StageCollection } from '../../../domain/models/target-profile-management/StageCollection.js'; -module.exports = { - async getByTargetProfileId(targetProfileId) { - const stages = await knex('stages').where({ targetProfileId }).orderBy('id', 'asc'); - const { max: maxLevel } = await knex('target-profile_tubes') - .max('level') - .where('targetProfileId', targetProfileId) - .first(); +const getByTargetProfileId = async function (targetProfileId) { + const stages = await knex('stages').where({ targetProfileId }).orderBy('id', 'asc'); + const { max: maxLevel } = await knex('target-profile_tubes') + .max('level') + .where('targetProfileId', targetProfileId) + .first(); - return new StageCollection({ id: targetProfileId, stages, maxLevel }); - }, + return new StageCollection({ id: targetProfileId, stages, maxLevel }); +}; - async update(stageCollectionUpdate) { - const stageIdsToDelete = stageCollectionUpdate.stageIdsToDelete; - const stagesToUpdate = stageCollectionUpdate.stagesToUpdate.map((stage) => ({ - id: stage.id, - level: stage.level, - threshold: stage.threshold, - isFirstSkill: stage.isFirstSkill, - title: stage.title, - message: stage.message, - prescriberTitle: stage.prescriberTitle, - prescriberDescription: stage.prescriberDescription, - targetProfileId: stage.targetProfileId, - })); - const stagesToCreate = stageCollectionUpdate.stagesToCreate.map((stage) => ({ - level: stage.level, - threshold: stage.threshold, - isFirstSkill: stage.isFirstSkill, - title: stage.title, - message: stage.message, - prescriberTitle: stage.prescriberTitle, - prescriberDescription: stage.prescriberDescription, - targetProfileId: stage.targetProfileId, - })); - await knex.transaction(async (trx) => { - await trx('stages').whereIn('id', stageIdsToDelete).del(); - await trx('stages') - .insert([...stagesToCreate, ...stagesToUpdate]) - .onConflict('id') - .merge(); - }); - }, +const update = async function (stageCollectionUpdate) { + const stageIdsToDelete = stageCollectionUpdate.stageIdsToDelete; + const stagesToUpdate = stageCollectionUpdate.stagesToUpdate.map((stage) => ({ + id: stage.id, + level: stage.level, + threshold: stage.threshold, + isFirstSkill: stage.isFirstSkill, + title: stage.title, + message: stage.message, + prescriberTitle: stage.prescriberTitle, + prescriberDescription: stage.prescriberDescription, + targetProfileId: stage.targetProfileId, + })); + const stagesToCreate = stageCollectionUpdate.stagesToCreate.map((stage) => ({ + level: stage.level, + threshold: stage.threshold, + isFirstSkill: stage.isFirstSkill, + title: stage.title, + message: stage.message, + prescriberTitle: stage.prescriberTitle, + prescriberDescription: stage.prescriberDescription, + targetProfileId: stage.targetProfileId, + })); + await knex.transaction(async (trx) => { + await trx('stages').whereIn('id', stageIdsToDelete).del(); + await trx('stages') + .insert([...stagesToCreate, ...stagesToUpdate]) + .onConflict('id') + .merge(); + }); }; + +export { getByTargetProfileId, update }; diff --git a/api/lib/infrastructure/repositories/target-profile-repository.js b/api/lib/infrastructure/repositories/target-profile-repository.js index 30c11a3352b..fdb5d1ed142 100644 --- a/api/lib/infrastructure/repositories/target-profile-repository.js +++ b/api/lib/infrastructure/repositories/target-profile-repository.js @@ -1,148 +1,144 @@ -const _ = require('lodash'); -const BookshelfTargetProfile = require('../orm-models/TargetProfile.js'); -const targetProfileAdapter = require('../adapters/target-profile-adapter.js'); -const bookshelfToDomainConverter = require('../utils/bookshelf-to-domain-converter.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { NotFoundError, ObjectValidationError, InvalidSkillSetError } = require('../../domain/errors.js'); -const DomainTransaction = require('../../infrastructure/DomainTransaction.js'); -const TargetProfile = require('../../domain/models/TargetProfile.js'); +import _ from 'lodash'; +import { BookshelfTargetProfile } from '../orm-models/TargetProfile.js'; +import * as targetProfileAdapter from '../adapters/target-profile-adapter.js'; +import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { NotFoundError, ObjectValidationError, InvalidSkillSetError } from '../../domain/errors.js'; +import { DomainTransaction } from '../../infrastructure/DomainTransaction.js'; +import { TargetProfile } from '../../domain/models/TargetProfile.js'; const TARGET_PROFILE_TABLE = 'target-profiles'; -module.exports = { - async create({ targetProfileForCreation, domainTransaction }) { - const knexConn = domainTransaction.knexTransaction; - const targetProfileRawData = _.pick(targetProfileForCreation, [ - 'name', - 'category', - 'description', - 'comment', - 'isPublic', - 'imageUrl', - 'ownerOrganizationId', - ]); - const [{ id: targetProfileId }] = await knexConn(TARGET_PROFILE_TABLE).insert(targetProfileRawData).returning('id'); - - const tubesData = targetProfileForCreation.tubes.map((tube) => ({ - targetProfileId, - tubeId: tube.id, - level: tube.level, - })); - await knexConn.batchInsert('target-profile_tubes', tubesData); - - return targetProfileId; - }, - - async get(id, domainTransaction = DomainTransaction.emptyTransaction()) { - const bookshelfTargetProfile = await BookshelfTargetProfile.where({ id }).fetch({ - require: false, - transacting: domainTransaction.knexTransaction, - }); +const create = async function ({ targetProfileForCreation, domainTransaction }) { + const knexConn = domainTransaction.knexTransaction; + const targetProfileRawData = _.pick(targetProfileForCreation, [ + 'name', + 'category', + 'description', + 'comment', + 'isPublic', + 'imageUrl', + 'ownerOrganizationId', + ]); + const [{ id: targetProfileId }] = await knexConn(TARGET_PROFILE_TABLE).insert(targetProfileRawData).returning('id'); + + const tubesData = targetProfileForCreation.tubes.map((tube) => ({ + targetProfileId, + tubeId: tube.id, + level: tube.level, + })); + await knexConn.batchInsert('target-profile_tubes', tubesData); + + return targetProfileId; +}; - if (!bookshelfTargetProfile) { - throw new NotFoundError(`Le profil cible avec l'id ${id} n'existe pas`); - } +const get = async function (id, domainTransaction = DomainTransaction.emptyTransaction()) { + const bookshelfTargetProfile = await BookshelfTargetProfile.where({ id }).fetch({ + require: false, + transacting: domainTransaction.knexTransaction, + }); - return targetProfileAdapter.fromDatasourceObjects({ - bookshelfTargetProfile, - }); - }, - - async getByCampaignId(campaignId) { - const bookshelfTargetProfile = await BookshelfTargetProfile.query((qb) => { - qb.innerJoin('campaigns', 'campaigns.targetProfileId', 'target-profiles.id'); - }) - .where({ 'campaigns.id': campaignId }) - .fetch({ - withRelated: ['badges'], - }); - return targetProfileAdapter.fromDatasourceObjects({ - bookshelfTargetProfile, + if (!bookshelfTargetProfile) { + throw new NotFoundError(`Le profil cible avec l'id ${id} n'existe pas`); + } + + return targetProfileAdapter.fromDatasourceObjects({ + bookshelfTargetProfile, + }); +}; + +const getByCampaignId = async function (campaignId) { + const bookshelfTargetProfile = await BookshelfTargetProfile.query((qb) => { + qb.innerJoin('campaigns', 'campaigns.targetProfileId', 'target-profiles.id'); + }) + .where({ 'campaigns.id': campaignId }) + .fetch({ + withRelated: ['badges'], }); - }, - - async findByIds(targetProfileIds) { - const targetProfilesBookshelf = await BookshelfTargetProfile.query((qb) => { - qb.whereIn('id', targetProfileIds); - }).fetchAll(); - - return bookshelfToDomainConverter.buildDomainObjects(BookshelfTargetProfile, targetProfilesBookshelf); - }, - - async update(targetProfile) { - let results; - const editedAttributes = _.pick(targetProfile, [ - 'name', - 'outdated', - 'description', - 'comment', - 'isSimplifiedAccess', - ]); - - try { - results = await knex(TARGET_PROFILE_TABLE) - .where({ id: targetProfile.id }) - .update(editedAttributes) - .returning(['id', 'isSimplifiedAccess']); - } catch (error) { - throw new ObjectValidationError(); - } + return targetProfileAdapter.fromDatasourceObjects({ + bookshelfTargetProfile, + }); +}; - if (!results.length) { - throw new NotFoundError(`Le profil cible avec l'id ${targetProfile.id} n'existe pas`); - } +const findByIds = async function (targetProfileIds) { + const targetProfilesBookshelf = await BookshelfTargetProfile.query((qb) => { + qb.whereIn('id', targetProfileIds); + }).fetchAll(); - return new TargetProfile(results[0]); - }, + return bookshelfToDomainConverter.buildDomainObjects(BookshelfTargetProfile, targetProfilesBookshelf); +}; - async findOrganizationIds(targetProfileId) { - const targetProfile = await knex(TARGET_PROFILE_TABLE).select('id').where({ id: targetProfileId }).first(); - if (!targetProfile) { - throw new NotFoundError(`No target profile for ID ${targetProfileId}`); - } +const update = async function (targetProfile) { + let results; + const editedAttributes = _.pick(targetProfile, ['name', 'outdated', 'description', 'comment', 'isSimplifiedAccess']); - const targetProfileShares = await knex('target-profile-shares') - .select('organizationId') - .where({ 'target-profile-shares.targetProfileId': targetProfileId }); - return targetProfileShares.map((targetProfileShare) => targetProfileShare.organizationId); - }, - - // TODO remove me with badge skill set - async hasSkills({ targetProfileId, skillIds }, { knexTransaction } = DomainTransaction.emptyTransaction()) { - const result = await (knexTransaction ?? knex)('target-profiles_skills') - .select('skillId') - .whereIn('skillId', skillIds) - .andWhere('targetProfileId', targetProfileId); - - const unknownSkillIds = _.difference(skillIds, _.map(result, 'skillId')); - if (unknownSkillIds.length) { - throw new InvalidSkillSetError(`Les acquis suivants ne font pas partie du profil cible : ${unknownSkillIds}`); + try { + results = await knex(TARGET_PROFILE_TABLE) + .where({ id: targetProfile.id }) + .update(editedAttributes) + .returning(['id', 'isSimplifiedAccess']); + } catch (error) { + throw new ObjectValidationError(); + } + + if (!results.length) { + throw new NotFoundError(`Le profil cible avec l'id ${targetProfile.id} n'existe pas`); + } + + return new TargetProfile(results[0]); +}; + +const findOrganizationIds = async function (targetProfileId) { + const targetProfile = await knex(TARGET_PROFILE_TABLE).select('id').where({ id: targetProfileId }).first(); + if (!targetProfile) { + throw new NotFoundError(`No target profile for ID ${targetProfileId}`); + } + + const targetProfileShares = await knex('target-profile-shares') + .select('organizationId') + .where({ 'target-profile-shares.targetProfileId': targetProfileId }); + return targetProfileShares.map((targetProfileShare) => targetProfileShare.organizationId); +}; + +const hasSkills = async function ( + { targetProfileId, skillIds }, + { knexTransaction } = DomainTransaction.emptyTransaction() +) { + const result = await (knexTransaction ?? knex)('target-profiles_skills') + .select('skillId') + .whereIn('skillId', skillIds) + .andWhere('targetProfileId', targetProfileId); + + const unknownSkillIds = _.difference(skillIds, _.map(result, 'skillId')); + if (unknownSkillIds.length) { + throw new InvalidSkillSetError(`Les acquis suivants ne font pas partie du profil cible : ${unknownSkillIds}`); + } + + return true; +}; + +const hasTubesWithLevels = async function ( + { targetProfileId, tubesWithLevels }, + { knexTransaction } = DomainTransaction.emptyTransaction() +) { + const tubeIds = tubesWithLevels.map(({ id }) => id); + + const result = await (knexTransaction ?? knex)('target-profile_tubes') + .whereIn('tubeId', tubeIds) + .andWhere('targetProfileId', targetProfileId); + + for (const tubeWithLevel of tubesWithLevels) { + const targetProfileTube = result.find(({ tubeId }) => tubeId === tubeWithLevel.id); + if (!targetProfileTube) { + throw new ObjectValidationError(`Le sujet ${tubeWithLevel.id} ne fait pas partie du profil cible`); } - return true; - }, - - async hasTubesWithLevels( - { targetProfileId, tubesWithLevels }, - { knexTransaction } = DomainTransaction.emptyTransaction() - ) { - const tubeIds = tubesWithLevels.map(({ id }) => id); - - const result = await (knexTransaction ?? knex)('target-profile_tubes') - .whereIn('tubeId', tubeIds) - .andWhere('targetProfileId', targetProfileId); - - for (const tubeWithLevel of tubesWithLevels) { - const targetProfileTube = result.find(({ tubeId }) => tubeId === tubeWithLevel.id); - if (!targetProfileTube) { - throw new ObjectValidationError(`Le sujet ${tubeWithLevel.id} ne fait pas partie du profil cible`); - } - - if (tubeWithLevel.level > targetProfileTube.level) { - throw new ObjectValidationError( - `Le niveau ${tubeWithLevel.level} dépasse le niveau max du sujet ${tubeWithLevel.id}` - ); - } + if (tubeWithLevel.level > targetProfileTube.level) { + throw new ObjectValidationError( + `Le niveau ${tubeWithLevel.level} dépasse le niveau max du sujet ${tubeWithLevel.id}` + ); } - }, + } }; + +export { create, get, getByCampaignId, findByIds, update, findOrganizationIds, hasSkills, hasTubesWithLevels }; diff --git a/api/lib/infrastructure/repositories/target-profile-share-repository.js b/api/lib/infrastructure/repositories/target-profile-share-repository.js index b63e85a7f8c..4f35e1c4266 100644 --- a/api/lib/infrastructure/repositories/target-profile-share-repository.js +++ b/api/lib/infrastructure/repositories/target-profile-share-repository.js @@ -1,23 +1,23 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const DomainTransaction = require('../DomainTransaction.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { DomainTransaction } from '../DomainTransaction.js'; -module.exports = { - async addTargetProfilesToOrganization({ organizationId, targetProfileIdList }) { - const targetProfileShareToAdd = targetProfileIdList.map((targetProfileId) => { - return { organizationId, targetProfileId }; - }); - await knex('target-profile-shares') - .insert(targetProfileShareToAdd) - .onConflict(['targetProfileId', 'organizationId']) - .ignore(); - }, +const addTargetProfilesToOrganization = async function ({ organizationId, targetProfileIdList }) { + const targetProfileShareToAdd = targetProfileIdList.map((targetProfileId) => { + return { organizationId, targetProfileId }; + }); + await knex('target-profile-shares') + .insert(targetProfileShareToAdd) + .onConflict(['targetProfileId', 'organizationId']) + .ignore(); +}; - async batchAddTargetProfilesToOrganization( - organizationTargetProfiles, - domainTransaction = DomainTransaction.emptyTransaction() - ) { - await knex - .batchInsert('target-profile-shares', organizationTargetProfiles) - .transacting(domainTransaction.knexTransaction); - }, +const batchAddTargetProfilesToOrganization = async function ( + organizationTargetProfiles, + domainTransaction = DomainTransaction.emptyTransaction() +) { + await knex + .batchInsert('target-profile-shares', organizationTargetProfiles) + .transacting(domainTransaction.knexTransaction); }; + +export { addTargetProfilesToOrganization, batchAddTargetProfilesToOrganization }; diff --git a/api/lib/infrastructure/repositories/target-profile-summary-for-admin-repository.js b/api/lib/infrastructure/repositories/target-profile-summary-for-admin-repository.js index 783c893169f..426ffd5b87d 100644 --- a/api/lib/infrastructure/repositories/target-profile-summary-for-admin-repository.js +++ b/api/lib/infrastructure/repositories/target-profile-summary-for-admin-repository.js @@ -1,61 +1,61 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const { fetchPage } = require('../utils/knex-utils.js'); -const TargetProfileSummaryForAdmin = require('../../domain/models/TargetProfileSummaryForAdmin.js'); -const DomainTransaction = require('../DomainTransaction.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { fetchPage } from '../utils/knex-utils.js'; +import { TargetProfileSummaryForAdmin } from '../../domain/models/TargetProfileSummaryForAdmin.js'; +import { DomainTransaction } from '../DomainTransaction.js'; -module.exports = { - async findPaginatedFiltered({ filter, page }) { - const query = knex('target-profiles') - .select('id', 'name', 'outdated', 'createdAt') - .orderBy('outdated', 'ASC') - .orderBy('name', 'ASC') - .modify(_applyFilters, filter); +const findPaginatedFiltered = async function ({ filter, page }) { + const query = knex('target-profiles') + .select('id', 'name', 'outdated', 'createdAt') + .orderBy('outdated', 'ASC') + .orderBy('name', 'ASC') + .modify(_applyFilters, filter); - const { results, pagination } = await fetchPage(query, page); + const { results, pagination } = await fetchPage(query, page); - const targetProfileSummaries = results.map((attributes) => new TargetProfileSummaryForAdmin(attributes)); - return { models: targetProfileSummaries, meta: { ...pagination } }; - }, + const targetProfileSummaries = results.map((attributes) => new TargetProfileSummaryForAdmin(attributes)); + return { models: targetProfileSummaries, meta: { ...pagination } }; +}; - async findByOrganization({ organizationId }) { - const results = await knex('target-profiles') - .select({ - id: 'target-profiles.id', - name: 'target-profiles.name', - outdated: 'target-profiles.outdated', - }) - .leftJoin('target-profile-shares', function () { - this.on('target-profile-shares.targetProfileId', 'target-profiles.id').on( - 'target-profile-shares.organizationId', - organizationId - ); - }) - .where({ outdated: false }) - .where((qb) => { - qb.orWhere({ isPublic: true }); - qb.orWhere({ ownerOrganizationId: organizationId }); - qb.orWhere((subQb) => { - subQb.whereNotNull('target-profile-shares.id'); - }); - }) - .orderBy('id', 'ASC'); +const findByOrganization = async function ({ organizationId }) { + const results = await knex('target-profiles') + .select({ + id: 'target-profiles.id', + name: 'target-profiles.name', + outdated: 'target-profiles.outdated', + }) + .leftJoin('target-profile-shares', function () { + this.on('target-profile-shares.targetProfileId', 'target-profiles.id').on( + 'target-profile-shares.organizationId', + organizationId + ); + }) + .where({ outdated: false }) + .where((qb) => { + qb.orWhere({ isPublic: true }); + qb.orWhere({ ownerOrganizationId: organizationId }); + qb.orWhere((subQb) => { + subQb.whereNotNull('target-profile-shares.id'); + }); + }) + .orderBy('id', 'ASC'); - return results.map((attributes) => new TargetProfileSummaryForAdmin(attributes)); - }, + return results.map((attributes) => new TargetProfileSummaryForAdmin(attributes)); +}; - async findByTraining({ trainingId, domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConn = domainTransaction?.knexTransaction || knex; +const findByTraining = async function ({ trainingId, domainTransaction = DomainTransaction.emptyTransaction() }) { + const knexConn = domainTransaction?.knexTransaction || knex; - const results = await knexConn('target-profiles') - .select({ id: 'target-profiles.id', name: 'target-profiles.name', outdated: 'target-profiles.outdated' }) - .innerJoin('target-profile-trainings', 'target-profiles.id', 'target-profile-trainings.targetProfileId') - .where({ trainingId }) - .orderBy('id', 'ASC'); + const results = await knexConn('target-profiles') + .select({ id: 'target-profiles.id', name: 'target-profiles.name', outdated: 'target-profiles.outdated' }) + .innerJoin('target-profile-trainings', 'target-profiles.id', 'target-profile-trainings.targetProfileId') + .where({ trainingId }) + .orderBy('id', 'ASC'); - return results.map((attributes) => new TargetProfileSummaryForAdmin(attributes)); - }, + return results.map((attributes) => new TargetProfileSummaryForAdmin(attributes)); }; +export { findPaginatedFiltered, findByOrganization, findByTraining }; + function _applyFilters(qb, filter) { const { name, id } = filter; if (name) { diff --git a/api/lib/infrastructure/repositories/target-profile-training-repository.js b/api/lib/infrastructure/repositories/target-profile-training-repository.js index 4cae49ca03b..7d2bf958724 100644 --- a/api/lib/infrastructure/repositories/target-profile-training-repository.js +++ b/api/lib/infrastructure/repositories/target-profile-training-repository.js @@ -1,19 +1,23 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const DomainTransaction = require('../DomainTransaction.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { DomainTransaction } from '../DomainTransaction.js'; const TABLE_NAME = 'target-profile-trainings'; -module.exports = { - async create({ trainingId, targetProfileIds, domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConn = domainTransaction?.knexTransaction || knex; - const targetProfileTrainingsToInsert = targetProfileIds.map((targetProfileId) => { - return { trainingId, targetProfileId }; - }); - const attachedTargetProfileIds = await knexConn(TABLE_NAME) - .insert(targetProfileTrainingsToInsert) - .onConflict(['targetProfileId', 'trainingId']) - .merge({ updatedAt: new Date() }) - .returning('targetProfileId') - .orderBy('targetProfileId', 'asc'); - return attachedTargetProfileIds.map(({ targetProfileId }) => targetProfileId); - }, +const create = async function ({ + trainingId, + targetProfileIds, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction?.knexTransaction || knex; + const targetProfileTrainingsToInsert = targetProfileIds.map((targetProfileId) => { + return { trainingId, targetProfileId }; + }); + const attachedTargetProfileIds = await knexConn(TABLE_NAME) + .insert(targetProfileTrainingsToInsert) + .onConflict(['targetProfileId', 'trainingId']) + .merge({ updatedAt: new Date() }) + .returning('targetProfileId') + .orderBy('targetProfileId', 'asc'); + return attachedTargetProfileIds.map(({ targetProfileId }) => targetProfileId); }; + +export { create }; diff --git a/api/lib/infrastructure/repositories/thematic-repository.js b/api/lib/infrastructure/repositories/thematic-repository.js index abfdb18ee83..ea59a6b5e5f 100644 --- a/api/lib/infrastructure/repositories/thematic-repository.js +++ b/api/lib/infrastructure/repositories/thematic-repository.js @@ -1,8 +1,10 @@ -const _ = require('lodash'); -const Thematic = require('../../domain/models/Thematic.js'); -const { thematicDatasource } = require('../datasources/learning-content/thematic-datasource.js'); -const { getTranslatedKey } = require('../../domain/services/get-translated-text.js'); -const { FRENCH_FRANCE } = require('../../domain/constants.js').LOCALE; +import _ from 'lodash'; +import { Thematic } from '../../domain/models/Thematic.js'; +import { thematicDatasource } from '../datasources/learning-content/thematic-datasource.js'; +import { getTranslatedKey } from '../../domain/services/get-translated-text.js'; +import { LOCALE } from '../../domain/constants.js'; + +const { FRENCH_FRANCE } = LOCALE; function _toDomain(thematicData, locale) { const translatedName = getTranslatedKey(thematicData.name_i18n, locale); @@ -15,20 +17,20 @@ function _toDomain(thematicData, locale) { }); } -module.exports = { - async list({ locale } = { locale: FRENCH_FRANCE }) { - const thematicDatas = await thematicDatasource.list(); - return thematicDatas.map((thematicData) => _toDomain(thematicData, locale)); - }, +const list = async function ({ locale } = { locale: FRENCH_FRANCE }) { + const thematicDatas = await thematicDatasource.list(); + return thematicDatas.map((thematicData) => _toDomain(thematicData, locale)); +}; - async findByCompetenceIds(competenceIds, locale) { - const thematicDatas = await thematicDatasource.findByCompetenceIds(competenceIds); - return thematicDatas.map((thematicData) => _toDomain(thematicData, locale)); - }, +const findByCompetenceIds = async function (competenceIds, locale) { + const thematicDatas = await thematicDatasource.findByCompetenceIds(competenceIds); + return thematicDatas.map((thematicData) => _toDomain(thematicData, locale)); +}; - async findByRecordIds(thematicIds, locale) { - const thematicDatas = await thematicDatasource.findByRecordIds(thematicIds); - const thematics = thematicDatas.map((thematicData) => _toDomain(thematicData, locale)); - return _.orderBy(thematics, (thematic) => thematic.name.toLowerCase()); - }, +const findByRecordIds = async function (thematicIds, locale) { + const thematicDatas = await thematicDatasource.findByRecordIds(thematicIds); + const thematics = thematicDatas.map((thematicData) => _toDomain(thematicData, locale)); + return _.orderBy(thematics, (thematic) => thematic.name.toLowerCase()); }; + +export { list, findByCompetenceIds, findByRecordIds }; diff --git a/api/lib/infrastructure/repositories/training-repository.js b/api/lib/infrastructure/repositories/training-repository.js index 43c5a8cd1c9..ea28b8d11ac 100644 --- a/api/lib/infrastructure/repositories/training-repository.js +++ b/api/lib/infrastructure/repositories/training-repository.js @@ -1,13 +1,16 @@ -const Training = require('../../domain/models/Training.js'); -const TrainingSummary = require('../../domain/read-models/TrainingSummary.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const DomainTransaction = require('../DomainTransaction.js'); -const UserRecommendedTraining = require('../../domain/read-models/UserRecommendedTraining.js'); -const { fetchPage } = require('../utils/knex-utils.js'); -const pick = require('lodash/pick'); -const trainingTriggerRepository = require('./training-trigger-repository.js'); -const TrainingForAdmin = require('../../domain/read-models/TrainingForAdmin'); +import { Training } from '../../domain/models/Training.js'; +import { TrainingSummary } from '../../domain/read-models/TrainingSummary.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { NotFoundError } from '../../domain/errors.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { UserRecommendedTraining } from '../../domain/read-models/UserRecommendedTraining.js'; +import { fetchPage } from '../utils/knex-utils.js'; +import lodash from 'lodash'; + +const { pick } = lodash; + +import * as trainingTriggerRepository from './training-trigger-repository.js'; +import { TrainingForAdmin } from '../../domain/read-models/TrainingForAdmin.js'; const TABLE_NAME = 'trainings'; async function get({ trainingId, domainTransaction = DomainTransaction.emptyTransaction() }) { @@ -167,7 +170,7 @@ async function findPaginatedByUserId({ return { userRecommendedTrainings, pagination }; } -module.exports = { +export { get, getWithTriggersForAdmin, findPaginatedSummaries, diff --git a/api/lib/infrastructure/repositories/training-trigger-repository.js b/api/lib/infrastructure/repositories/training-trigger-repository.js index c9c14b8648a..cbc1a1b8013 100644 --- a/api/lib/infrastructure/repositories/training-trigger-repository.js +++ b/api/lib/infrastructure/repositories/training-trigger-repository.js @@ -1,97 +1,100 @@ -const _ = require('lodash'); -const { knex } = require('../../../db/knex-database-connection.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const DomainTransaction = require('../DomainTransaction.js'); -const TrainingTriggerForAdmin = require('../../domain/read-models/TrainingTriggerForAdmin.js'); -const TrainingTriggerTube = require('../../domain/models/TrainingTriggerTube.js'); -const areaRepository = require('./area-repository'); -const competenceRepository = require('./competence-repository'); -const thematicRepository = require('./thematic-repository'); -const tubeRepository = require('./tube-repository'); -const TrainingTrigger = require('../../domain/models/TrainingTrigger'); -const logger = require('../logger'); +import _ from 'lodash'; +import { knex } from '../../../db/knex-database-connection.js'; +import { NotFoundError } from '../../domain/errors.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { TrainingTriggerForAdmin } from '../../domain/read-models/TrainingTriggerForAdmin.js'; +import { TrainingTriggerTube } from '../../domain/models/TrainingTriggerTube.js'; +import * as areaRepository from './area-repository.js'; +import * as competenceRepository from './competence-repository.js'; +import * as thematicRepository from './thematic-repository.js'; +import * as tubeRepository from './tube-repository.js'; +import { TrainingTrigger } from '../../domain/models/TrainingTrigger.js'; +import { logger } from '../logger.js'; const TABLE_NAME = 'training-triggers'; -module.exports = { - async createOrUpdate({ - trainingId, - triggerTubesForCreation, - type, - threshold, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - const knexConn = domainTransaction?.knexTransaction || (await knex.transaction()); - - const [trainingTrigger] = await knexConn(TABLE_NAME) - .insert({ trainingId, type, threshold, updatedAt: new Date() }) - .onConflict(['trainingId', 'type']) - .merge(['threshold', 'updatedAt']) - .returning('*'); - - await knexConn('training-trigger-tubes').where({ trainingTriggerId: trainingTrigger.id }).delete(); - - const trainingTriggerTubesToCreate = triggerTubesForCreation.map(({ tubeId, level }) => { - return { - trainingTriggerId: trainingTrigger.id, - tubeId, - level, - }; - }); +const createOrUpdate = async function ({ + trainingId, + triggerTubesForCreation, + type, + threshold, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction?.knexTransaction || (await knex.transaction()); + + const [trainingTrigger] = await knexConn(TABLE_NAME) + .insert({ trainingId, type, threshold, updatedAt: new Date() }) + .onConflict(['trainingId', 'type']) + .merge(['threshold', 'updatedAt']) + .returning('*'); + + await knexConn('training-trigger-tubes').where({ trainingTriggerId: trainingTrigger.id }).delete(); + + const trainingTriggerTubesToCreate = triggerTubesForCreation.map(({ tubeId, level }) => { + return { + trainingTriggerId: trainingTrigger.id, + tubeId, + level, + }; + }); - const createdTrainingTriggerTubes = await knexConn('training-trigger-tubes') - .insert(trainingTriggerTubesToCreate) - .returning('*'); - - if (!domainTransaction?.knexTransaction) { - await knexConn.commit(); - } - - return _toDomainForAdmin({ trainingTrigger, triggerTubes: createdTrainingTriggerTubes }); - }, - - async findByTrainingIdForAdmin({ trainingId, domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConn = domainTransaction?.knexTransaction || knex; - const trainingTriggers = await knexConn(TABLE_NAME).select('*').where({ trainingId }).orderBy('id', 'asc'); - if (!trainingTriggers) { - return []; - } - const trainingTriggerIds = trainingTriggers.map(({ id }) => id); - const trainingTriggerTubes = await knexConn('training-trigger-tubes') - .whereIn('trainingTriggerId', trainingTriggerIds) - .select('*'); - - return Promise.all( - trainingTriggers.map(async (trainingTrigger) => { - const triggerTubes = trainingTriggerTubes.filter( - ({ trainingTriggerId }) => trainingTriggerId === trainingTrigger.id - ); - return await _toDomainForAdmin({ trainingTrigger, triggerTubes }); - }) - ); - }, - - async findByTrainingId({ trainingId, domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConn = domainTransaction?.knexTransaction || knex; - const trainingTriggers = await knexConn(TABLE_NAME).select('*').where({ trainingId }).orderBy('id', 'asc'); - if (!trainingTriggers) { - return []; - } - const trainingTriggerIds = trainingTriggers.map(({ id }) => id); - const trainingTriggerTubes = await knexConn('training-trigger-tubes') - .whereIn('trainingTriggerId', trainingTriggerIds) - .select('*'); - - return Promise.all( - trainingTriggers.map(async (trainingTrigger) => { - const triggerTubes = trainingTriggerTubes.filter( - ({ trainingTriggerId }) => trainingTriggerId === trainingTrigger.id - ); - return _toDomain({ trainingTrigger, triggerTubes }); - }) - ); - }, + const createdTrainingTriggerTubes = await knexConn('training-trigger-tubes') + .insert(trainingTriggerTubesToCreate) + .returning('*'); + + if (!domainTransaction?.knexTransaction) { + await knexConn.commit(); + } + + return _toDomainForAdmin({ trainingTrigger, triggerTubes: createdTrainingTriggerTubes }); }; +const findByTrainingIdForAdmin = async function ({ + trainingId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction?.knexTransaction || knex; + const trainingTriggers = await knexConn(TABLE_NAME).select('*').where({ trainingId }).orderBy('id', 'asc'); + if (!trainingTriggers) { + return []; + } + const trainingTriggerIds = trainingTriggers.map(({ id }) => id); + const trainingTriggerTubes = await knexConn('training-trigger-tubes') + .whereIn('trainingTriggerId', trainingTriggerIds) + .select('*'); + + return Promise.all( + trainingTriggers.map(async (trainingTrigger) => { + const triggerTubes = trainingTriggerTubes.filter( + ({ trainingTriggerId }) => trainingTriggerId === trainingTrigger.id + ); + return await _toDomainForAdmin({ trainingTrigger, triggerTubes }); + }) + ); +}; + +const findByTrainingId = async function ({ trainingId, domainTransaction = DomainTransaction.emptyTransaction() }) { + const knexConn = domainTransaction?.knexTransaction || knex; + const trainingTriggers = await knexConn(TABLE_NAME).select('*').where({ trainingId }).orderBy('id', 'asc'); + if (!trainingTriggers) { + return []; + } + const trainingTriggerIds = trainingTriggers.map(({ id }) => id); + const trainingTriggerTubes = await knexConn('training-trigger-tubes') + .whereIn('trainingTriggerId', trainingTriggerIds) + .select('*'); + + return Promise.all( + trainingTriggers.map(async (trainingTrigger) => { + const triggerTubes = trainingTriggerTubes.filter( + ({ trainingTriggerId }) => trainingTriggerId === trainingTrigger.id + ); + return _toDomain({ trainingTrigger, triggerTubes }); + }) + ); +}; + +export { createOrUpdate, findByTrainingIdForAdmin, findByTrainingId }; + async function _toDomain({ trainingTrigger, triggerTubes }) { const triggerTubeIds = triggerTubes.map(({ tubeId }) => tubeId); diff --git a/api/lib/infrastructure/repositories/tube-repository.js b/api/lib/infrastructure/repositories/tube-repository.js index b9bfaa3a040..f67bf931cd6 100644 --- a/api/lib/infrastructure/repositories/tube-repository.js +++ b/api/lib/infrastructure/repositories/tube-repository.js @@ -1,10 +1,9 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); -const Tube = require('../../domain/models/Tube.js'); -const { tubeDatasource } = require('../datasources/learning-content/tube-datasource.js'); -const { skillDatasource } = require('../datasources/learning-content/skill-datasource.js'); - -const { getTranslatedKey } = require('../../domain/services/get-translated-text.js'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import { Tube } from '../../domain/models/Tube.js'; +import { tubeDatasource } from '../datasources/learning-content/tube-datasource.js'; +import { skillDatasource } from '../datasources/learning-content/skill-datasource.js'; +import { getTranslatedKey } from '../../domain/services/get-translated-text.js'; function _toDomain({ tubeData, locale }) { const translatedPracticalTitle = getTranslatedKey(tubeData.practicalTitle_i18n, locale); @@ -32,34 +31,34 @@ async function _findActive(tubes) { }); } -module.exports = { - async get(id) { - const tubeData = await tubeDatasource.get(id); - return _toDomain({ tubeData }); - }, +const get = async function (id) { + const tubeData = await tubeDatasource.get(id); + return _toDomain({ tubeData }); +}; - async list() { - const tubeDatas = await tubeDatasource.list(); - const tubes = _.map(tubeDatas, (tubeData) => _toDomain({ tubeData })); - return _.orderBy(tubes, (tube) => tube.name.toLowerCase()); - }, +const list = async function () { + const tubeDatas = await tubeDatasource.list(); + const tubes = _.map(tubeDatas, (tubeData) => _toDomain({ tubeData })); + return _.orderBy(tubes, (tube) => tube.name.toLowerCase()); +}; - async findByNames({ tubeNames, locale }) { - const tubeDatas = await tubeDatasource.findByNames(tubeNames); - const tubes = _.map(tubeDatas, (tubeData) => _toDomain({ tubeData, locale })); - return _.orderBy(tubes, (tube) => tube.name.toLowerCase()); - }, +const findByNames = async function ({ tubeNames, locale }) { + const tubeDatas = await tubeDatasource.findByNames(tubeNames); + const tubes = _.map(tubeDatas, (tubeData) => _toDomain({ tubeData, locale })); + return _.orderBy(tubes, (tube) => tube.name.toLowerCase()); +}; - async findByRecordIds(tubeIds, locale) { - const tubeDatas = await tubeDatasource.findByRecordIds(tubeIds); - const tubes = _.map(tubeDatas, (tubeData) => _toDomain({ tubeData, locale })); - return _.orderBy(tubes, (tube) => tube.name.toLowerCase()); - }, +const findByRecordIds = async function (tubeIds, locale) { + const tubeDatas = await tubeDatasource.findByRecordIds(tubeIds); + const tubes = _.map(tubeDatas, (tubeData) => _toDomain({ tubeData, locale })); + return _.orderBy(tubes, (tube) => tube.name.toLowerCase()); +}; - async findActiveByRecordIds(tubeIds, locale) { - const tubeDatas = await tubeDatasource.findByRecordIds(tubeIds); - const activeTubes = await _findActive(tubeDatas); - const tubes = _.map(activeTubes, (tubeData) => _toDomain({ tubeData, locale })); - return _.orderBy(tubes, (tube) => tube.name.toLowerCase()); - }, +const findActiveByRecordIds = async function (tubeIds, locale) { + const tubeDatas = await tubeDatasource.findByRecordIds(tubeIds); + const activeTubes = await _findActive(tubeDatas); + const tubes = _.map(activeTubes, (tubeData) => _toDomain({ tubeData, locale })); + return _.orderBy(tubes, (tube) => tube.name.toLowerCase()); }; + +export { get, list, findByNames, findByRecordIds, findActiveByRecordIds }; diff --git a/api/lib/infrastructure/repositories/tutorial-evaluation-repository.js b/api/lib/infrastructure/repositories/tutorial-evaluation-repository.js index 8acaeb29338..b99a91e50f7 100644 --- a/api/lib/infrastructure/repositories/tutorial-evaluation-repository.js +++ b/api/lib/infrastructure/repositories/tutorial-evaluation-repository.js @@ -1,31 +1,31 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const TutorialEvaluation = require('../../domain/models/TutorialEvaluation.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { TutorialEvaluation } from '../../domain/models/TutorialEvaluation.js'; const TABLE_NAME = 'tutorial-evaluations'; -module.exports = { - async createOrUpdate({ userId, tutorialId, status }) { - const tutorialEvaluation = await knex(TABLE_NAME) - .insert({ - userId, - tutorialId, - status, - }) - .onConflict(['userId', 'tutorialId']) - .merge({ - status, - updatedAt: knex.fn.now(), - }) - .returning('*'); - return _toDomain(tutorialEvaluation[0]); - }, +const createOrUpdate = async function ({ userId, tutorialId, status }) { + const tutorialEvaluation = await knex(TABLE_NAME) + .insert({ + userId, + tutorialId, + status, + }) + .onConflict(['userId', 'tutorialId']) + .merge({ + status, + updatedAt: knex.fn.now(), + }) + .returning('*'); + return _toDomain(tutorialEvaluation[0]); +}; - async find({ userId }) { - const tutorialEvaluation = await knex(TABLE_NAME).where({ userId }); - return tutorialEvaluation.map(_toDomain); - }, +const find = async function ({ userId }) { + const tutorialEvaluation = await knex(TABLE_NAME).where({ userId }); + return tutorialEvaluation.map(_toDomain); }; +export { createOrUpdate, find }; + function _toDomain(tutorialEvaluationData) { return new TutorialEvaluation({ id: tutorialEvaluationData.id, diff --git a/api/lib/infrastructure/repositories/tutorial-repository.js b/api/lib/infrastructure/repositories/tutorial-repository.js index 27396a1ac25..9931264ffb2 100644 --- a/api/lib/infrastructure/repositories/tutorial-repository.js +++ b/api/lib/infrastructure/repositories/tutorial-repository.js @@ -1,102 +1,117 @@ -const _ = require('lodash'); -const Tutorial = require('../../domain/models/Tutorial.js'); -const userSavedTutorialRepository = require('./user-saved-tutorial-repository.js'); -const tutorialEvaluationRepository = require('./tutorial-evaluation-repository.js'); -const { tutorialDatasource } = require('../datasources/learning-content/tutorial-datasource.js'); -const { NotFoundError } = require('../../domain/errors.js'); -const TutorialForUser = require('../../domain/read-models/TutorialForUser.js'); -const { FRENCH_FRANCE } = require('../../domain/constants.js').LOCALE; -const knowledgeElementRepository = require('./knowledge-element-repository.js'); -const skillRepository = require('./skill-repository.js'); -const paginateModule = require('../utils/paginate.js'); - -module.exports = { - async findByRecordIdsForCurrentUser({ ids, userId, locale }) { - const tutorials = await _findByRecordIds({ ids, locale }); - const userSavedTutorials = await userSavedTutorialRepository.find({ userId }); - const tutorialEvaluations = await tutorialEvaluationRepository.find({ userId }); - return _toTutorialsForUser({ tutorials, tutorialEvaluations, userSavedTutorials }); - }, - - async findByRecordIds(ids) { - return _findByRecordIds({ ids }); - }, - - async findPaginatedFilteredForCurrentUser({ userId, filters = {}, page }) { - const userSavedTutorials = await userSavedTutorialRepository.find({ userId }); - const [tutorials, tutorialEvaluations] = await Promise.all([ - tutorialDatasource.findByRecordIds(userSavedTutorials.map(({ tutorialId }) => tutorialId)), - tutorialEvaluationRepository.find({ userId }), - ]); - - let filteredTutorials = [...tutorials]; - if (filters.competences?.length) { - const filteredSkills = await skillRepository.findOperativeByCompetenceIds(filters.competences); - - const filteredTutorialIds = filteredSkills.flatMap(({ tutorialIds }) => tutorialIds); - - filteredTutorials = tutorials.filter(({ id }) => filteredTutorialIds.includes(id)); - } - - const tutorialsForUser = _toTutorialsForUser({ - tutorials: filteredTutorials, - tutorialEvaluations, - userSavedTutorials, - }); +import _ from 'lodash'; +import { Tutorial } from '../../domain/models/Tutorial.js'; +import * as userSavedTutorialRepository from './user-saved-tutorial-repository.js'; +import * as tutorialEvaluationRepository from './tutorial-evaluation-repository.js'; +import { tutorialDatasource } from '../datasources/learning-content/tutorial-datasource.js'; +import { NotFoundError } from '../../domain/errors.js'; +import { TutorialForUser } from '../../domain/read-models/TutorialForUser.js'; +import { LOCALE } from '../../domain/constants.js'; + +const { FRENCH_FRANCE } = LOCALE; + +import * as knowledgeElementRepository from './knowledge-element-repository.js'; +import * as skillRepository from './skill-repository.js'; +import * as paginateModule from '../utils/paginate.js'; + +const findByRecordIdsForCurrentUser = async function ({ ids, userId, locale }) { + const tutorials = await _findByRecordIds({ ids, locale }); + const userSavedTutorials = await userSavedTutorialRepository.find({ userId }); + const tutorialEvaluations = await tutorialEvaluationRepository.find({ userId }); + return _toTutorialsForUser({ tutorials, tutorialEvaluations, userSavedTutorials }); +}; - const sortedTutorialsForUser = _.orderBy(tutorialsForUser, ['userSavedTutorial.createdAt'], ['desc']); - const { results: models, pagination: meta } = paginateModule.paginate(sortedTutorialsForUser, page); +const findByRecordIds = async function (ids) { + return _findByRecordIds({ ids }); +}; - return { models, meta }; - }, +const findPaginatedFilteredForCurrentUser = async function ({ userId, filters = {}, page }) { + const userSavedTutorials = await userSavedTutorialRepository.find({ userId }); + const [tutorials, tutorialEvaluations] = await Promise.all([ + tutorialDatasource.findByRecordIds(userSavedTutorials.map(({ tutorialId }) => tutorialId)), + tutorialEvaluationRepository.find({ userId }), + ]); - async get(id) { - try { - const tutorialData = await tutorialDatasource.get(id); - return _toDomain(tutorialData); - } catch (error) { - throw new NotFoundError('Tutorial not found'); - } - }, + let filteredTutorials = [...tutorials]; + if (filters.competences?.length) { + const filteredSkills = await skillRepository.findOperativeByCompetenceIds(filters.competences); - async list({ locale = FRENCH_FRANCE }) { - let tutorialData = await tutorialDatasource.list(); - const lang = _extractLangFromLocale(locale); - tutorialData = tutorialData.filter((tutorial) => _extractLangFromLocale(tutorial.locale) === lang); - return _.map(tutorialData, _toDomain); - }, - - async findPaginatedFilteredRecommendedByUserId({ userId, filters = {}, page, locale = FRENCH_FRANCE } = {}) { - const invalidatedKnowledgeElements = await knowledgeElementRepository.findInvalidatedAndDirectByUserId(userId); - - const [userSavedTutorials, tutorialEvaluations, skills] = await Promise.all([ - userSavedTutorialRepository.find({ userId }), - tutorialEvaluationRepository.find({ userId }), - skillRepository.findOperativeByIds(invalidatedKnowledgeElements.map(({ skillId }) => skillId)), - ]); - - let filteredSkills = [...skills]; - if (filters.competences?.length) { - filteredSkills = skills.filter(({ competenceId }) => filters.competences.includes(competenceId)); - } - - const tutorialsForUser = []; - - for (const skill of filteredSkills) { - const tutorials = await _findByRecordIds({ ids: skill.tutorialIds, locale }); - - tutorialsForUser.push( - ..._toTutorialsForUserForRecommandation({ - tutorials, - tutorialEvaluations, - userSavedTutorials, - skillId: skill.id, - }) - ); - } - - return paginateModule.paginate(tutorialsForUser, page); - }, + const filteredTutorialIds = filteredSkills.flatMap(({ tutorialIds }) => tutorialIds); + + filteredTutorials = tutorials.filter(({ id }) => filteredTutorialIds.includes(id)); + } + + const tutorialsForUser = _toTutorialsForUser({ + tutorials: filteredTutorials, + tutorialEvaluations, + userSavedTutorials, + }); + + const sortedTutorialsForUser = _.orderBy(tutorialsForUser, ['userSavedTutorial.createdAt'], ['desc']); + const { results: models, pagination: meta } = paginateModule.paginate(sortedTutorialsForUser, page); + + return { models, meta }; +}; + +const get = async function (id) { + try { + const tutorialData = await tutorialDatasource.get(id); + return _toDomain(tutorialData); + } catch (error) { + throw new NotFoundError('Tutorial not found'); + } +}; + +const list = async function ({ locale = FRENCH_FRANCE }) { + let tutorialData = await tutorialDatasource.list(); + const lang = _extractLangFromLocale(locale); + tutorialData = tutorialData.filter((tutorial) => _extractLangFromLocale(tutorial.locale) === lang); + return _.map(tutorialData, _toDomain); +}; + +const findPaginatedFilteredRecommendedByUserId = async function ({ + userId, + filters = {}, + page, + locale = FRENCH_FRANCE, +} = {}) { + const invalidatedKnowledgeElements = await knowledgeElementRepository.findInvalidatedAndDirectByUserId(userId); + + const [userSavedTutorials, tutorialEvaluations, skills] = await Promise.all([ + userSavedTutorialRepository.find({ userId }), + tutorialEvaluationRepository.find({ userId }), + skillRepository.findOperativeByIds(invalidatedKnowledgeElements.map(({ skillId }) => skillId)), + ]); + + let filteredSkills = [...skills]; + if (filters.competences?.length) { + filteredSkills = skills.filter(({ competenceId }) => filters.competences.includes(competenceId)); + } + + const tutorialsForUser = []; + + for (const skill of filteredSkills) { + const tutorials = await _findByRecordIds({ ids: skill.tutorialIds, locale }); + + tutorialsForUser.push( + ..._toTutorialsForUserForRecommandation({ + tutorials, + tutorialEvaluations, + userSavedTutorials, + skillId: skill.id, + }) + ); + } + + return paginateModule.paginate(tutorialsForUser, page); +}; + +export { + findByRecordIdsForCurrentUser, + findByRecordIds, + findPaginatedFilteredForCurrentUser, + get, + list, + findPaginatedFilteredRecommendedByUserId, }; function _toDomain(tutorialData) { diff --git a/api/lib/infrastructure/repositories/user-campaign-results/stage-collection-repository.js b/api/lib/infrastructure/repositories/user-campaign-results/stage-collection-repository.js index 8d8e9020bad..d189a1e1fa1 100644 --- a/api/lib/infrastructure/repositories/user-campaign-results/stage-collection-repository.js +++ b/api/lib/infrastructure/repositories/user-campaign-results/stage-collection-repository.js @@ -1,22 +1,22 @@ -const { knex } = require('../../../../db/knex-database-connection.js'); -const StageCollection = require('../../../domain/models/user-campaign-results/StageCollection.js'); -const skillRepository = require('./../skill-repository.js'); +import { knex } from '../../../../db/knex-database-connection.js'; +import { StageCollection } from '../../../domain/models/user-campaign-results/StageCollection.js'; +import * as skillRepository from './../skill-repository.js'; const MAX_STAGE_THRESHOLD = 100; -module.exports = { - async findStageCollection({ campaignId }) { - const stages = await knex('stages') - .select('stages.*') - .join('campaigns', 'campaigns.targetProfileId', 'stages.targetProfileId') - .where('campaigns.id', campaignId) - .orderBy(['stages.threshold', 'stages.level']); +const findStageCollection = async function ({ campaignId }) { + const stages = await knex('stages') + .select('stages.*') + .join('campaigns', 'campaigns.targetProfileId', 'stages.targetProfileId') + .where('campaigns.id', campaignId) + .orderBy(['stages.threshold', 'stages.level']); - await _computeStagesThresholdForCampaign(stages, campaignId); + await _computeStagesThresholdForCampaign(stages, campaignId); - return new StageCollection({ campaignId, stages }); - }, + return new StageCollection({ campaignId, stages }); }; +export { findStageCollection }; + async function _computeStagesThresholdForCampaign(stages, campaignId) { const stagesWithLevel = stages.filter((stage) => stage.level || stage.level === 0); diff --git a/api/lib/infrastructure/repositories/user-email-repository.js b/api/lib/infrastructure/repositories/user-email-repository.js index f87398b2891..2c563c94e0a 100644 --- a/api/lib/infrastructure/repositories/user-email-repository.js +++ b/api/lib/infrastructure/repositories/user-email-repository.js @@ -1,29 +1,29 @@ -const settings = require('../../config.js'); -const EXPIRATION_DELAY_SECONDS = settings.temporaryStorage.expirationDelaySeconds; -const EmailModificationDemand = require('../../domain/models/EmailModificationDemand.js'); -const { temporaryStorage } = require('../temporary-storage/index.js'); +import { config } from '../../config.js'; +const EXPIRATION_DELAY_SECONDS = config.temporaryStorage.expirationDelaySeconds; +import { EmailModificationDemand } from '../../domain/models/EmailModificationDemand.js'; +import { temporaryStorage } from '../temporary-storage/index.js'; const verifyEmailTemporaryStorage = temporaryStorage.withPrefix('verify-email:'); -module.exports = { - saveEmailModificationDemand({ userId, code, newEmail }) { - const key = userId; +const saveEmailModificationDemand = function ({ userId, code, newEmail }) { + const key = userId; - return verifyEmailTemporaryStorage.save({ - key, - value: { code, newEmail }, - expirationDelaySeconds: EXPIRATION_DELAY_SECONDS, - }); - }, + return verifyEmailTemporaryStorage.save({ + key, + value: { code, newEmail }, + expirationDelaySeconds: EXPIRATION_DELAY_SECONDS, + }); +}; - async getEmailModificationDemandByUserId(userId) { - const key = userId; - const emailModificationDemand = await verifyEmailTemporaryStorage.get(key); +const getEmailModificationDemandByUserId = async function (userId) { + const key = userId; + const emailModificationDemand = await verifyEmailTemporaryStorage.get(key); - if (!emailModificationDemand) return; + if (!emailModificationDemand) return; - return new EmailModificationDemand({ - newEmail: emailModificationDemand.newEmail, - code: emailModificationDemand.code, - }); - }, + return new EmailModificationDemand({ + newEmail: emailModificationDemand.newEmail, + code: emailModificationDemand.code, + }); }; + +export { saveEmailModificationDemand, getEmailModificationDemandByUserId }; diff --git a/api/lib/infrastructure/repositories/user-login-repository.js b/api/lib/infrastructure/repositories/user-login-repository.js index 81477df596d..7bc3081d03f 100644 --- a/api/lib/infrastructure/repositories/user-login-repository.js +++ b/api/lib/infrastructure/repositories/user-login-repository.js @@ -1,5 +1,5 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const UserLogin = require('../../domain/models/UserLogin.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { UserLogin } from '../../domain/models/UserLogin.js'; function _toDomain(userLoginDTO) { return new UserLogin({ @@ -13,32 +13,32 @@ function _toDomain(userLoginDTO) { }); } -module.exports = { - async findByUserId(userId) { - const foundUserLogin = await knex.from('user-logins').where({ userId }).first(); - return foundUserLogin ? _toDomain(foundUserLogin) : null; - }, +const findByUserId = async function (userId) { + const foundUserLogin = await knex.from('user-logins').where({ userId }).first(); + return foundUserLogin ? _toDomain(foundUserLogin) : null; +}; - async create(userLogin) { - const [userLoginDTO] = await knex('user-logins').insert(userLogin).returning('*'); - return _toDomain(userLoginDTO); - }, +const create = async function (userLogin) { + const [userLoginDTO] = await knex('user-logins').insert(userLogin).returning('*'); + return _toDomain(userLoginDTO); +}; - async update(userLogin) { - userLogin.updatedAt = new Date(); - const [userLoginDTO] = await knex('user-logins').where({ id: userLogin.id }).update(userLogin).returning('*'); - return _toDomain(userLoginDTO); - }, +const update = async function (userLogin) { + userLogin.updatedAt = new Date(); + const [userLoginDTO] = await knex('user-logins').where({ id: userLogin.id }).update(userLogin).returning('*'); + return _toDomain(userLoginDTO); +}; - async findByUsername(username) { - const foundUserLogin = await knex - .select('user-logins.*') - .from('user-logins') - .where('users.email', username.toLowerCase()) - .orWhere('users.username', username.toLowerCase()) - .join('users', 'users.id', 'user-logins.userId') - .first(); +const findByUsername = async function (username) { + const foundUserLogin = await knex + .select('user-logins.*') + .from('user-logins') + .where('users.email', username.toLowerCase()) + .orWhere('users.username', username.toLowerCase()) + .join('users', 'users.id', 'user-logins.userId') + .first(); - return foundUserLogin ? _toDomain(foundUserLogin) : null; - }, + return foundUserLogin ? _toDomain(foundUserLogin) : null; }; + +export { findByUserId, create, update, findByUsername }; diff --git a/api/lib/infrastructure/repositories/user-orga-settings-repository.js b/api/lib/infrastructure/repositories/user-orga-settings-repository.js index 31a8855e21b..4b1f5310175 100644 --- a/api/lib/infrastructure/repositories/user-orga-settings-repository.js +++ b/api/lib/infrastructure/repositories/user-orga-settings-repository.js @@ -1,67 +1,67 @@ -const bookshelfToDomainConverter = require('../utils/bookshelf-to-domain-converter.js'); -const BookshelfUserOrgaSettings = require('../orm-models/UserOrgaSettings.js'); -const bookshelfUtils = require('../utils/knex-utils.js'); -const { UserOrgaSettingsCreationError } = require('../../domain/errors.js'); -const { knex } = require('../../../db/knex-database-connection.js'); -const UserOrgaSettings = require('../../domain/models/UserOrgaSettings.js'); +import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js'; +import { BookshelfUserOrgaSettings } from '../orm-models/UserOrgaSettings.js'; +import * as knexUtils from '../utils/knex-utils.js'; +import { UserOrgaSettingsCreationError } from '../../domain/errors.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { UserOrgaSettings } from '../../domain/models/UserOrgaSettings.js'; -module.exports = { - findOneByUserId(userId) { - return BookshelfUserOrgaSettings.where({ userId }) - .fetch({ require: true, withRelated: ['user', 'currentOrganization'] }) - .then((userOrgaSettings) => - bookshelfToDomainConverter.buildDomainObject(BookshelfUserOrgaSettings, userOrgaSettings) - ) - .catch((err) => { - if (err instanceof BookshelfUserOrgaSettings.NotFoundError) { - return {}; - } - throw err; - }); - }, +const findOneByUserId = function (userId) { + return BookshelfUserOrgaSettings.where({ userId }) + .fetch({ require: true, withRelated: ['user', 'currentOrganization'] }) + .then((userOrgaSettings) => + bookshelfToDomainConverter.buildDomainObject(BookshelfUserOrgaSettings, userOrgaSettings) + ) + .catch((err) => { + if (err instanceof BookshelfUserOrgaSettings.NotFoundError) { + return {}; + } + throw err; + }); +}; - create(userId, currentOrganizationId) { - return new BookshelfUserOrgaSettings({ userId, currentOrganizationId }) - .save() - .then((bookshelfUserOrgaSettings) => bookshelfUserOrgaSettings.load(['user', 'currentOrganization'])) - .then((userOrgaSettings) => - bookshelfToDomainConverter.buildDomainObject(BookshelfUserOrgaSettings, userOrgaSettings) - ) - .catch((err) => { - if (bookshelfUtils.isUniqConstraintViolated(err)) { - throw new UserOrgaSettingsCreationError(err.message); - } - throw err; - }); - }, +const create = function (userId, currentOrganizationId) { + return new BookshelfUserOrgaSettings({ userId, currentOrganizationId }) + .save() + .then((bookshelfUserOrgaSettings) => bookshelfUserOrgaSettings.load(['user', 'currentOrganization'])) + .then((userOrgaSettings) => + bookshelfToDomainConverter.buildDomainObject(BookshelfUserOrgaSettings, userOrgaSettings) + ) + .catch((err) => { + if (knexUtils.isUniqConstraintViolated(err)) { + throw new UserOrgaSettingsCreationError(err.message); + } + throw err; + }); +}; - async update(userId, organizationId) { - const bookshelfUserOrgaSettings = await BookshelfUserOrgaSettings.where({ userId }).save( - { currentOrganizationId: organizationId }, - { patch: true, method: 'update' } - ); - await bookshelfUserOrgaSettings.related('user').fetch(); - await bookshelfUserOrgaSettings.related('currentOrganization').fetch(); - return bookshelfToDomainConverter.buildDomainObject(BookshelfUserOrgaSettings, bookshelfUserOrgaSettings); - }, +const update = async function (userId, organizationId) { + const bookshelfUserOrgaSettings = await BookshelfUserOrgaSettings.where({ userId }).save( + { currentOrganizationId: organizationId }, + { patch: true, method: 'update' } + ); + await bookshelfUserOrgaSettings.related('user').fetch(); + await bookshelfUserOrgaSettings.related('currentOrganization').fetch(); + return bookshelfToDomainConverter.buildDomainObject(BookshelfUserOrgaSettings, bookshelfUserOrgaSettings); +}; - async createOrUpdate({ userId, organizationId }) { - const knexUserOrgaSetting = ( - await knex('user-orga-settings') - .insert({ userId, currentOrganizationId: organizationId }) - .onConflict('userId') - .merge() - .returning('*') - )[0]; +const createOrUpdate = async function ({ userId, organizationId }) { + const knexUserOrgaSetting = ( + await knex('user-orga-settings') + .insert({ userId, currentOrganizationId: organizationId }) + .onConflict('userId') + .merge() + .returning('*') + )[0]; - const user = await knex('users').where({ id: knexUserOrgaSetting.userId }).first(); + const user = await knex('users').where({ id: knexUserOrgaSetting.userId }).first(); - const organization = await knex('organizations').where({ id: knexUserOrgaSetting.currentOrganizationId }).first(); + const organization = await knex('organizations').where({ id: knexUserOrgaSetting.currentOrganizationId }).first(); - return new UserOrgaSettings({ - id: knexUserOrgaSetting.id, - user, - currentOrganization: organization, - }); - }, + return new UserOrgaSettings({ + id: knexUserOrgaSetting.id, + user, + currentOrganization: organization, + }); }; + +export { findOneByUserId, create, update, createOrUpdate }; diff --git a/api/lib/infrastructure/repositories/user-organizations-for-admin-repository.js b/api/lib/infrastructure/repositories/user-organizations-for-admin-repository.js index df35dbc9550..1d6a249eef9 100644 --- a/api/lib/infrastructure/repositories/user-organizations-for-admin-repository.js +++ b/api/lib/infrastructure/repositories/user-organizations-for-admin-repository.js @@ -1,22 +1,22 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const UserOrganizationForAdmin = require('../../domain/read-models/UserOrganizationForAdmin.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { UserOrganizationForAdmin } from '../../domain/read-models/UserOrganizationForAdmin.js'; -module.exports = { - async findByUserId(userId) { - const organizations = await knex('memberships') - .select({ - id: 'memberships.id', - updatedAt: 'memberships.updatedAt', - organizationRole: 'memberships.organizationRole', - organizationId: 'memberships.organizationId', - organizationName: 'organizations.name', - organizationType: 'organizations.type', - organizationExternalId: 'organizations.externalId', - }) - .innerJoin('organizations', 'organizations.id', 'memberships.organizationId') - .where('memberships.userId', userId) - .whereNull('memberships.disabledAt'); +const findByUserId = async function (userId) { + const organizations = await knex('memberships') + .select({ + id: 'memberships.id', + updatedAt: 'memberships.updatedAt', + organizationRole: 'memberships.organizationRole', + organizationId: 'memberships.organizationId', + organizationName: 'organizations.name', + organizationType: 'organizations.type', + organizationExternalId: 'organizations.externalId', + }) + .innerJoin('organizations', 'organizations.id', 'memberships.organizationId') + .where('memberships.userId', userId) + .whereNull('memberships.disabledAt'); - return organizations.map((attributes) => new UserOrganizationForAdmin(attributes)); - }, + return organizations.map((attributes) => new UserOrganizationForAdmin(attributes)); }; + +export { findByUserId }; diff --git a/api/lib/infrastructure/repositories/user-recommended-training-repository.js b/api/lib/infrastructure/repositories/user-recommended-training-repository.js index 12a133479b2..121c3f8e043 100644 --- a/api/lib/infrastructure/repositories/user-recommended-training-repository.js +++ b/api/lib/infrastructure/repositories/user-recommended-training-repository.js @@ -1,39 +1,44 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const DomainTransaction = require('../DomainTransaction.js'); -const UserRecommendedTraining = require('../../domain/read-models/UserRecommendedTraining.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { UserRecommendedTraining } from '../../domain/read-models/UserRecommendedTraining.js'; const TABLE_NAME = 'user-recommended-trainings'; -module.exports = { - save({ userId, trainingId, campaignParticipationId, domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConn = domainTransaction?.knexTransaction || knex; - return knexConn(TABLE_NAME) - .insert({ userId, trainingId, campaignParticipationId }) - .onConflict(['userId', 'trainingId', 'campaignParticipationId']) - .merge({ updatedAt: knexConn.fn.now() }); - }, +const save = function ({ + userId, + trainingId, + campaignParticipationId, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction?.knexTransaction || knex; + return knexConn(TABLE_NAME) + .insert({ userId, trainingId, campaignParticipationId }) + .onConflict(['userId', 'trainingId', 'campaignParticipationId']) + .merge({ updatedAt: knexConn.fn.now() }); +}; - async findByCampaignParticipationId({ - campaignParticipationId, - locale, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - const knexConn = domainTransaction?.knexTransaction || knex; - const trainings = await knexConn(TABLE_NAME) - .select('trainings.*') - .innerJoin('trainings', 'trainings.id', `${TABLE_NAME}.trainingId`) - .where({ campaignParticipationId, locale }) - .orderBy('id', 'asc'); - return trainings.map(_toDomain); - }, +const findByCampaignParticipationId = async function ({ + campaignParticipationId, + locale, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + const knexConn = domainTransaction?.knexTransaction || knex; + const trainings = await knexConn(TABLE_NAME) + .select('trainings.*') + .innerJoin('trainings', 'trainings.id', `${TABLE_NAME}.trainingId`) + .where({ campaignParticipationId, locale }) + .orderBy('id', 'asc'); + return trainings.map(_toDomain); +}; - async hasRecommendedTrainings(userId, domainTransaction = DomainTransaction.emptyTransaction()) { - const knexConn = domainTransaction?.knexTransaction || knex; - const result = await knexConn(TABLE_NAME).select(1).where({ userId }).first(); - return Boolean(result); - }, +const hasRecommendedTrainings = async function (userId, domainTransaction = DomainTransaction.emptyTransaction()) { + const knexConn = domainTransaction?.knexTransaction || knex; + const result = await knexConn(TABLE_NAME).select(1).where({ userId }).first(); + return Boolean(result); }; +export { save, findByCampaignParticipationId, hasRecommendedTrainings }; + function _toDomain(training) { return new UserRecommendedTraining({ ...training }); } diff --git a/api/lib/infrastructure/repositories/user-repository.js b/api/lib/infrastructure/repositories/user-repository.js index 3c13b8063b8..a29b9239956 100644 --- a/api/lib/infrastructure/repositories/user-repository.js +++ b/api/lib/infrastructure/repositories/user-repository.js @@ -1,429 +1,460 @@ -const moment = require('moment'); - -const { knex } = require('../../../db/knex-database-connection.js'); -const DomainTransaction = require('../DomainTransaction.js'); -const BookshelfUser = require('../orm-models/User.js'); -const { isUniqConstraintViolated } = require('../utils/knex-utils.js'); -const bookshelfToDomainConverter = require('../utils/bookshelf-to-domain-converter.js'); -const { +import moment from 'moment'; + +import { knex } from '../../../db/knex-database-connection.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { BookshelfUser } from '../orm-models/User.js'; +import { isUniqConstraintViolated, fetchPage } from '../utils/knex-utils.js'; +import * as bookshelfToDomainConverter from '../utils/bookshelf-to-domain-converter.js'; + +import { AlreadyExistingEntityError, AlreadyRegisteredEmailError, AlreadyRegisteredUsernameError, UserNotFoundError, -} = require('../../domain/errors.js'); -const User = require('../../domain/models/User.js'); -const UserDetailsForAdmin = require('../../domain/models/UserDetailsForAdmin.js'); -const Membership = require('../../domain/models/Membership.js'); -const CertificationCenter = require('../../domain/models/CertificationCenter.js'); -const CertificationCenterMembership = require('../../domain/models/CertificationCenterMembership.js'); -const Organization = require('../../domain/models/Organization.js'); -const OrganizationLearnerForAdmin = require('../../domain/read-models/OrganizationLearnerForAdmin.js'); -const AuthenticationMethod = require('../../domain/models/AuthenticationMethod.js'); -const OidcIdentityProviders = require('../../domain/constants/oidc-identity-providers.js'); -const UserLogin = require('../../domain/models/UserLogin.js'); -const { fetchPage } = require('../utils/knex-utils.js'); - -module.exports = { - async getByEmail(email) { - const foundUser = await knex.from('users').whereRaw('LOWER("email") = ?', email.toLowerCase()).first(); - if (!foundUser) { - throw new UserNotFoundError(`User not found for email ${email}`); - } - return new User(foundUser); - }, +} from '../../domain/errors.js'; + +import { User } from '../../domain/models/User.js'; +import { UserDetailsForAdmin } from '../../domain/models/UserDetailsForAdmin.js'; +import { Membership } from '../../domain/models/Membership.js'; +import { CertificationCenter } from '../../domain/models/CertificationCenter.js'; +import { CertificationCenterMembership } from '../../domain/models/CertificationCenterMembership.js'; +import { Organization } from '../../domain/models/Organization.js'; +import { OrganizationLearnerForAdmin } from '../../domain/read-models/OrganizationLearnerForAdmin.js'; +import { AuthenticationMethod } from '../../domain/models/AuthenticationMethod.js'; +import * as OidcIdentityProviders from '../../domain/constants/oidc-identity-providers.js'; +import { UserLogin } from '../../domain/models/UserLogin.js'; + +const getByEmail = async function (email) { + const foundUser = await knex.from('users').whereRaw('LOWER("email") = ?', email.toLowerCase()).first(); + if (!foundUser) { + throw new UserNotFoundError(`User not found for email ${email}`); + } + return new User(foundUser); +}; - async getFullById(userId) { - const userDTO = await knex('users').where({ id: userId }).first(); - if (!userDTO) { - throw new UserNotFoundError(); - } +const getFullById = async function (userId) { + const userDTO = await knex('users').where({ id: userId }).first(); + if (!userDTO) { + throw new UserNotFoundError(); + } - const membershipsDTO = await knex('memberships').where({ userId: userDTO.id, disabledAt: null }); - const certificationCenterMembershipsDTO = await knex('certification-center-memberships').where({ - userId: userDTO.id, - disabledAt: null, - }); - const authenticationMethodsDTO = await knex('authentication-methods').where({ - userId: userDTO.id, - identityProvider: 'PIX', - }); + const membershipsDTO = await knex('memberships').where({ userId: userDTO.id, disabledAt: null }); + const certificationCenterMembershipsDTO = await knex('certification-center-memberships').where({ + userId: userDTO.id, + disabledAt: null, + }); + const authenticationMethodsDTO = await knex('authentication-methods').where({ + userId: userDTO.id, + identityProvider: 'PIX', + }); - return _toDomainFromDTO({ userDTO, membershipsDTO, certificationCenterMembershipsDTO, authenticationMethodsDTO }); - }, + return _toDomainFromDTO({ userDTO, membershipsDTO, certificationCenterMembershipsDTO, authenticationMethodsDTO }); +}; - async getByUsernameOrEmailWithRolesAndPassword(username) { - const userDTO = await knex('users') - .where({ email: username.toLowerCase() }) - .orWhere({ username: username.toLowerCase() }) - .first(); +const getByUsernameOrEmailWithRolesAndPassword = async function (username) { + const userDTO = await knex('users') + .where({ email: username.toLowerCase() }) + .orWhere({ username: username.toLowerCase() }) + .first(); - if (!userDTO) { - throw new UserNotFoundError(); - } + if (!userDTO) { + throw new UserNotFoundError(); + } - const membershipsDTO = await knex('memberships').where({ userId: userDTO.id, disabledAt: null }); - const certificationCenterMembershipsDTO = await knex('certification-center-memberships').where({ - userId: userDTO.id, - disabledAt: null, + const membershipsDTO = await knex('memberships').where({ userId: userDTO.id, disabledAt: null }); + const certificationCenterMembershipsDTO = await knex('certification-center-memberships').where({ + userId: userDTO.id, + disabledAt: null, + }); + const authenticationMethodsDTO = await knex('authentication-methods').where({ + userId: userDTO.id, + identityProvider: 'PIX', + }); + + return _toDomainFromDTO({ userDTO, membershipsDTO, certificationCenterMembershipsDTO, authenticationMethodsDTO }); +}; + +const get = function (userId) { + return BookshelfUser.where({ id: userId }) + .fetch() + .then((user) => bookshelfToDomainConverter.buildDomainObject(BookshelfUser, user)) + .catch((err) => { + if (err instanceof BookshelfUser.NotFoundError) { + throw new UserNotFoundError(`User not found for ID ${userId}`); + } + throw err; }); - const authenticationMethodsDTO = await knex('authentication-methods').where({ - userId: userDTO.id, - identityProvider: 'PIX', +}; + +const getById = async function (userId) { + const foundUser = await knex.from('users').where({ id: userId }).first(); + if (!foundUser) { + throw new UserNotFoundError(); + } + return new User(foundUser); +}; + +const getForObfuscation = async function (userId) { + const foundUser = await knex.select('id', 'email', 'username').from('users').where({ id: userId }).first(); + if (!foundUser) { + throw new UserNotFoundError(`User not found for ID ${userId}`); + } + return new User({ id: foundUser.id, email: foundUser.email, username: foundUser.username }); +}; + +const getUserDetailsForAdmin = async function (userId) { + const userDTO = await knex('users') + .leftJoin('user-logins', 'user-logins.userId', 'users.id') + .leftJoin('users AS anonymisedBy', 'anonymisedBy.id', 'users.hasBeenAnonymisedBy') + .select([ + 'users.*', + 'user-logins.id AS userLoginId', + 'user-logins.failureCount', + 'user-logins.temporaryBlockedUntil', + 'user-logins.blockedAt', + 'anonymisedBy.firstName AS anonymisedByFirstName', + 'anonymisedBy.lastName AS anonymisedByLastName', + ]) + .where({ 'users.id': userId }) + .first(); + + if (!userDTO) { + throw new UserNotFoundError(`User not found for ID ${userId}`); + } + + const authenticationMethodsDTO = await knex('authentication-methods') + .select([ + 'authentication-methods.id', + 'authentication-methods.identityProvider', + 'authentication-methods.authenticationComplement', + ]) + .join('users', 'users.id', 'authentication-methods.userId') + .where({ userId }); + + const organizationLearnersDTO = await knex('view-active-organization-learners') + .select([ + 'view-active-organization-learners.*', + 'organizations.name AS organizationName', + 'organizations.isManagingStudents AS organizationIsManagingStudents', + ]) + .join('organizations', 'organizations.id', 'view-active-organization-learners.organizationId') + .where({ userId }) + .orderBy('id'); + + return _fromKnexDTOToUserDetailsForAdmin({ userDTO, organizationLearnersDTO, authenticationMethodsDTO }); +}; + +const findPaginatedFiltered = async function ({ filter, page }) { + const query = knex('users') + .where((qb) => _setSearchFiltersForQueryBuilder(filter, qb)) + .orderBy([{ column: 'firstName', order: 'asc' }, { column: 'lastName', order: 'asc' }, { column: 'id' }]); + const { results, pagination } = await fetchPage(query, page); + + const users = results.map((userDTO) => new User(userDTO)); + return { models: users, pagination }; +}; + +const getWithMemberships = async function (userId) { + const userDTO = await knex('users').where({ id: userId }).first(); + + if (!userDTO) { + throw new UserNotFoundError(); + } + + const membershipsDTO = await knex('memberships') + .select( + 'memberships.*', + 'organizations.name AS organizationName', + 'organizations.type AS organizationType', + 'organizations.externalId AS organizationExternalId', + 'organizations.isManagingStudents AS organizationIsManagingStudents' + ) + .join('organizations', 'organizations.id', 'memberships.organizationId') + .where({ userId: userDTO.id, disabledAt: null }); + + return _toDomainFromDTO({ userDTO, membershipsDTO }); +}; + +const getWithCertificationCenterMemberships = function (userId) { + return BookshelfUser.where({ id: userId }) + .fetch({ + withRelated: [ + { certificationCenterMemberships: (qb) => qb.where({ disabledAt: null }) }, + 'certificationCenterMemberships.certificationCenter', + ], + }) + .then(_toDomain) + .catch((err) => { + if (err instanceof BookshelfUser.NotFoundError) { + throw new UserNotFoundError(`User not found for ID ${userId}`); + } + throw err; }); +}; - return _toDomainFromDTO({ userDTO, membershipsDTO, certificationCenterMembershipsDTO, authenticationMethodsDTO }); - }, - - /** - * @deprecated Use getById instead - */ - get(userId) { - return BookshelfUser.where({ id: userId }) - .fetch() - .then((user) => bookshelfToDomainConverter.buildDomainObject(BookshelfUser, user)) - .catch((err) => { - if (err instanceof BookshelfUser.NotFoundError) { - throw new UserNotFoundError(`User not found for ID ${userId}`); - } - throw err; - }); - }, +const getBySamlId = async function (samlId) { + const bookshelfUser = await BookshelfUser.query((qb) => { + qb.innerJoin('authentication-methods', function () { + this.on('users.id', 'authentication-methods.userId') + .andOnVal('authentication-methods.identityProvider', AuthenticationMethod.identityProviders.GAR) + .andOnVal('authentication-methods.externalIdentifier', samlId); + }); + }).fetch({ require: false, withRelated: 'authenticationMethods' }); + return bookshelfUser ? _toDomain(bookshelfUser) : null; +}; - async getById(userId) { - const foundUser = await knex.from('users').where({ id: userId }).first(); - if (!foundUser) { - throw new UserNotFoundError(); - } - return new User(foundUser); - }, +const update = async function (properties) { + const { id: userId, ...data } = properties; + data.updatedAt = new Date(); + await knex('users').where({ id: userId }).update(data); +}; - async getForObfuscation(userId) { - const foundUser = await knex.select('id', 'email', 'username').from('users').where({ id: userId }).first(); - if (!foundUser) { - throw new UserNotFoundError(`User not found for ID ${userId}`); - } - return new User({ id: foundUser.id, email: foundUser.email, username: foundUser.username }); - }, - - async getUserDetailsForAdmin(userId) { - const userDTO = await knex('users') - .leftJoin('user-logins', 'user-logins.userId', 'users.id') - .leftJoin('users AS anonymisedBy', 'anonymisedBy.id', 'users.hasBeenAnonymisedBy') - .select([ - 'users.*', - 'user-logins.id AS userLoginId', - 'user-logins.failureCount', - 'user-logins.temporaryBlockedUntil', - 'user-logins.blockedAt', - 'anonymisedBy.firstName AS anonymisedByFirstName', - 'anonymisedBy.lastName AS anonymisedByLastName', - ]) - .where({ 'users.id': userId }) - .first(); +const updateWithEmailConfirmed = function ({ + id, + userAttributes, + domainTransaction: { knexTransaction } = DomainTransaction.emptyTransaction(), +}) { + const query = knex('users').where({ id }).update(userAttributes); + if (knexTransaction) query.transacting(knexTransaction); + return query; +}; - if (!userDTO) { - throw new UserNotFoundError(`User not found for ID ${userId}`); - } +const checkIfEmailIsAvailable = function (email) { + return BookshelfUser.query((qb) => qb.whereRaw('LOWER("email") = ?', email.toLowerCase())) + .fetch({ require: false }) + .then((user) => { + if (user) { + return Promise.reject(new AlreadyRegisteredEmailError()); + } - const authenticationMethodsDTO = await knex('authentication-methods') - .select([ - 'authentication-methods.id', - 'authentication-methods.identityProvider', - 'authentication-methods.authenticationComplement', - ]) - .join('users', 'users.id', 'authentication-methods.userId') - .where({ userId }); - - const organizationLearnersDTO = await knex('view-active-organization-learners') - .select([ - 'view-active-organization-learners.*', - 'organizations.name AS organizationName', - 'organizations.isManagingStudents AS organizationIsManagingStudents', - ]) - .join('organizations', 'organizations.id', 'view-active-organization-learners.organizationId') - .where({ userId }) - .orderBy('id'); - - return _fromKnexDTOToUserDetailsForAdmin({ userDTO, organizationLearnersDTO, authenticationMethodsDTO }); - }, - - async findPaginatedFiltered({ filter, page }) { - const query = knex('users') - .where((qb) => _setSearchFiltersForQueryBuilder(filter, qb)) - .orderBy([{ column: 'firstName', order: 'asc' }, { column: 'lastName', order: 'asc' }, { column: 'id' }]); - const { results, pagination } = await fetchPage(query, page); - - const users = results.map((userDTO) => new User(userDTO)); - return { models: users, pagination }; - }, - - async getWithMemberships(userId) { - const userDTO = await knex('users').where({ id: userId }).first(); + return Promise.resolve(email); + }); +}; - if (!userDTO) { +const isUserExistingByEmail = function (email) { + return BookshelfUser.where({ email: email.toLowerCase() }) + .fetch() + .then(() => true) + .catch(() => { throw new UserNotFoundError(); - } + }); +}; - const membershipsDTO = await knex('memberships') - .select( - 'memberships.*', - 'organizations.name AS organizationName', - 'organizations.type AS organizationType', - 'organizations.externalId AS organizationExternalId', - 'organizations.isManagingStudents AS organizationIsManagingStudents' - ) - .join('organizations', 'organizations.id', 'memberships.organizationId') - .where({ userId: userDTO.id, disabledAt: null }); - - return _toDomainFromDTO({ userDTO, membershipsDTO }); - }, - - getWithCertificationCenterMemberships(userId) { - return BookshelfUser.where({ id: userId }) - .fetch({ - withRelated: [ - { certificationCenterMemberships: (qb) => qb.where({ disabledAt: null }) }, - 'certificationCenterMemberships.certificationCenter', - ], - }) - .then(_toDomain) - .catch((err) => { - if (err instanceof BookshelfUser.NotFoundError) { - throw new UserNotFoundError(`User not found for ID ${userId}`); - } - throw err; - }); - }, - - async getBySamlId(samlId) { - const bookshelfUser = await BookshelfUser.query((qb) => { - qb.innerJoin('authentication-methods', function () { - this.on('users.id', 'authentication-methods.userId') - .andOnVal('authentication-methods.identityProvider', AuthenticationMethod.identityProviders.GAR) - .andOnVal('authentication-methods.externalIdentifier', samlId); - }); - }).fetch({ require: false, withRelated: 'authenticationMethods' }); - return bookshelfUser ? _toDomain(bookshelfUser) : null; - }, - - async update(properties) { - const { id: userId, ...data } = properties; - data.updatedAt = new Date(); - await knex('users').where({ id: userId }).update(data); - }, - - updateWithEmailConfirmed({ - id, - userAttributes, - domainTransaction: { knexTransaction } = DomainTransaction.emptyTransaction(), - }) { - const query = knex('users').where({ id }).update(userAttributes); - if (knexTransaction) query.transacting(knexTransaction); - return query; - }, - - checkIfEmailIsAvailable(email) { - return BookshelfUser.query((qb) => qb.whereRaw('LOWER("email") = ?', email.toLowerCase())) - .fetch({ require: false }) - .then((user) => { - if (user) { - return Promise.reject(new AlreadyRegisteredEmailError()); - } - - return Promise.resolve(email); - }); - }, - - isUserExistingByEmail(email) { - return BookshelfUser.where({ email: email.toLowerCase() }) - .fetch() - .then(() => true) - .catch(() => { - throw new UserNotFoundError(); - }); - }, - - updatePassword(id, hashedPassword) { - return BookshelfUser.where({ id }) - .save({ password: hashedPassword }, { patch: true, method: 'update' }) - .then((bookshelfUser) => _toDomain(bookshelfUser)) - .catch((err) => { - if (err instanceof BookshelfUser.NoRowsUpdatedError) { - throw new UserNotFoundError(`User not found for ID ${id}`); - } - throw err; - }); - }, - - updateEmail({ id, email }) { - return BookshelfUser.where({ id }) - .save({ email }, { patch: true, method: 'update' }) - .then((bookshelfUser) => _toDomain(bookshelfUser)) - .catch((err) => { - if (err instanceof BookshelfUser.NoRowsUpdatedError) { - throw new UserNotFoundError(`User not found for ID ${id}`); - } - throw err; - }); - }, - - async updateUserDetailsForAdministration({ - id, - userAttributes, - domainTransaction = DomainTransaction.emptyTransaction(), - }) { - try { - const knexConn = domainTransaction.knexTransaction ?? knex; - const [userDTO] = await knexConn('users').where({ id }).update(userAttributes).returning('*'); - - if (!userDTO) { +const updatePassword = function (id, hashedPassword) { + return BookshelfUser.where({ id }) + .save({ password: hashedPassword }, { patch: true, method: 'update' }) + .then((bookshelfUser) => _toDomain(bookshelfUser)) + .catch((err) => { + if (err instanceof BookshelfUser.NoRowsUpdatedError) { throw new UserNotFoundError(`User not found for ID ${id}`); } - } catch (err) { - if (isUniqConstraintViolated(err)) { - throw new AlreadyExistingEntityError('Cette adresse e-mail ou cet identifiant est déjà utilisé(e).'); + throw err; + }); +}; + +const updateEmail = function ({ id, email }) { + return BookshelfUser.where({ id }) + .save({ email }, { patch: true, method: 'update' }) + .then((bookshelfUser) => _toDomain(bookshelfUser)) + .catch((err) => { + if (err instanceof BookshelfUser.NoRowsUpdatedError) { + throw new UserNotFoundError(`User not found for ID ${id}`); } throw err; + }); +}; + +const updateUserDetailsForAdministration = async function ({ + id, + userAttributes, + domainTransaction = DomainTransaction.emptyTransaction(), +}) { + try { + const knexConn = domainTransaction.knexTransaction ?? knex; + const [userDTO] = await knexConn('users').where({ id }).update(userAttributes).returning('*'); + + if (!userDTO) { + throw new UserNotFoundError(`User not found for ID ${id}`); } - }, - - async updateHasSeenAssessmentInstructionsToTrue(id) { - const user = await BookshelfUser.where({ id }).fetch({ require: false }); - await user.save({ hasSeenAssessmentInstructions: true }, { patch: true, method: 'update' }); - return bookshelfToDomainConverter.buildDomainObject(BookshelfUser, user); - }, - - async updateHasSeenNewDashboardInfoToTrue(id) { - const user = await BookshelfUser.where({ id }).fetch({ require: false }); - await user.save({ hasSeenNewDashboardInfo: true }, { patch: true, method: 'update' }); - return bookshelfToDomainConverter.buildDomainObject(BookshelfUser, user); - }, - - async updateHasSeenChallengeTooltip({ userId, challengeType }) { - const user = await BookshelfUser.where({ id: userId }).fetch({ require: false }); - if (challengeType === 'focused') { - await user.save({ hasSeenFocusedChallengeTooltip: true }, { patch: true, method: 'update' }); - } - if (challengeType === 'other') { - await user.save({ hasSeenOtherChallengesTooltip: true }, { patch: true, method: 'update' }); + } catch (err) { + if (isUniqConstraintViolated(err)) { + throw new AlreadyExistingEntityError('Cette adresse e-mail ou cet identifiant est déjà utilisé(e).'); } - return bookshelfToDomainConverter.buildDomainObject(BookshelfUser, user); - }, + throw err; + } +}; + +const updateHasSeenAssessmentInstructionsToTrue = async function (id) { + const user = await BookshelfUser.where({ id }).fetch({ require: false }); + await user.save({ hasSeenAssessmentInstructions: true }, { patch: true, method: 'update' }); + return bookshelfToDomainConverter.buildDomainObject(BookshelfUser, user); +}; + +const updateHasSeenNewDashboardInfoToTrue = async function (id) { + const user = await BookshelfUser.where({ id }).fetch({ require: false }); + await user.save({ hasSeenNewDashboardInfo: true }, { patch: true, method: 'update' }); + return bookshelfToDomainConverter.buildDomainObject(BookshelfUser, user); +}; + +const updateHasSeenChallengeTooltip = async function ({ userId, challengeType }) { + const user = await BookshelfUser.where({ id: userId }).fetch({ require: false }); + if (challengeType === 'focused') { + await user.save({ hasSeenFocusedChallengeTooltip: true }, { patch: true, method: 'update' }); + } + if (challengeType === 'other') { + await user.save({ hasSeenOtherChallengesTooltip: true }, { patch: true, method: 'update' }); + } + return bookshelfToDomainConverter.buildDomainObject(BookshelfUser, user); +}; + +const acceptPixLastTermsOfService = async function (id) { + const user = await BookshelfUser.where({ id }).fetch({ require: false }); + await user.save( + { + lastTermsOfServiceValidatedAt: moment().toDate(), + mustValidateTermsOfService: false, + }, + { patch: true, method: 'update' } + ); + return bookshelfToDomainConverter.buildDomainObject(BookshelfUser, user); +}; + +const updatePixOrgaTermsOfServiceAcceptedToTrue = async function (id) { + const now = new Date(); + + const [user] = await knex('users') + .where({ id }) + .update({ pixOrgaTermsOfServiceAccepted: true, lastPixOrgaTermsOfServiceValidatedAt: now, updatedAt: now }) + .returning('*'); + + return new User(user); +}; + +const updatePixCertifTermsOfServiceAcceptedToTrue = async function (id) { + const now = new Date(); + + const [user] = await knex('users') + .where({ id }) + .update({ pixCertifTermsOfServiceAccepted: true, lastPixCertifTermsOfServiceValidatedAt: now, updatedAt: now }) + .returning('*'); + + return new User(user); +}; - async acceptPixLastTermsOfService(id) { - const user = await BookshelfUser.where({ id }).fetch({ require: false }); - await user.save( +const isUsernameAvailable = async function (username) { + const foundUser = await BookshelfUser.where({ username }).fetch({ require: false }); + if (foundUser) { + throw new AlreadyRegisteredUsernameError(); + } + return username; +}; + +const updateUsername = function ({ id, username, domainTransaction = DomainTransaction.emptyTransaction() }) { + return BookshelfUser.where({ id }) + .save( + { username }, { - lastTermsOfServiceValidatedAt: moment().toDate(), - mustValidateTermsOfService: false, - }, - { patch: true, method: 'update' } - ); - return bookshelfToDomainConverter.buildDomainObject(BookshelfUser, user); - }, - - async updatePixOrgaTermsOfServiceAcceptedToTrue(id) { - const now = new Date(); - - const [user] = await knex('users') - .where({ id }) - .update({ pixOrgaTermsOfServiceAccepted: true, lastPixOrgaTermsOfServiceValidatedAt: now, updatedAt: now }) - .returning('*'); - - return new User(user); - }, - - async updatePixCertifTermsOfServiceAcceptedToTrue(id) { - const now = new Date(); - - const [user] = await knex('users') - .where({ id }) - .update({ pixCertifTermsOfServiceAccepted: true, lastPixCertifTermsOfServiceValidatedAt: now, updatedAt: now }) - .returning('*'); - - return new User(user); - }, - - async isUsernameAvailable(username) { - const foundUser = await BookshelfUser.where({ username }).fetch({ require: false }); - if (foundUser) { - throw new AlreadyRegisteredUsernameError(); - } - return username; - }, - - updateUsername({ id, username, domainTransaction = DomainTransaction.emptyTransaction() }) { - return BookshelfUser.where({ id }) - .save( - { username }, - { - transacting: domainTransaction.knexTransaction, - patch: true, - method: 'update', - } - ) - .then((bookshelfUser) => _toDomain(bookshelfUser)) - .catch((err) => { - if (err instanceof BookshelfUser.NoRowsUpdatedError) { - throw new UserNotFoundError(`User not found for ID ${id}`); - } - throw err; - }); - }, - - addUsername(id, username) { - return BookshelfUser.where({ id }) - .save({ username }, { patch: true, method: 'update' }) - .then((bookshelfUser) => _toDomain(bookshelfUser)) - .catch((err) => { - if (err instanceof BookshelfUser.NoRowsUpdatedError) { - throw new UserNotFoundError(`User not found for ID ${id}`); - } - throw err; - }); - }, - - async findByExternalIdentifier({ externalIdentityId, identityProvider }) { - const bookshelfUser = await BookshelfUser.query((qb) => { - qb.innerJoin('authentication-methods', function () { - this.on('users.id', 'authentication-methods.userId') - .andOnVal('authentication-methods.identityProvider', identityProvider) - .andOnVal('authentication-methods.externalIdentifier', externalIdentityId); - }); - }).fetch({ require: false, withRelated: 'authenticationMethods' }); - return bookshelfUser ? _toDomain(bookshelfUser) : null; - }, - - async findAnotherUserByEmail(userId, email) { - return BookshelfUser.where('id', '!=', userId) - .where({ email: email.toLowerCase() }) - .fetchAll() - .then((users) => bookshelfToDomainConverter.buildDomainObjects(BookshelfUser, users)); - }, - - async findAnotherUserByUsername(userId, username) { - return BookshelfUser.where('id', '!=', userId) - .where({ username }) - .fetchAll() - .then((users) => bookshelfToDomainConverter.buildDomainObjects(BookshelfUser, users)); - }, - - async updateLastLoggedAt({ userId }) { - const now = new Date(); - - await knex('users').where({ id: userId }).update({ lastLoggedAt: now }); - }, - - async updateLastDataProtectionPolicySeenAt({ userId }) { - const now = new Date(); - - const [user] = await knex('users') - .where({ id: userId }) - .update({ lastDataProtectionPolicySeenAt: now }) - .returning('*'); - - return new User(user); - }, + transacting: domainTransaction.knexTransaction, + patch: true, + method: 'update', + } + ) + .then((bookshelfUser) => _toDomain(bookshelfUser)) + .catch((err) => { + if (err instanceof BookshelfUser.NoRowsUpdatedError) { + throw new UserNotFoundError(`User not found for ID ${id}`); + } + throw err; + }); +}; + +const addUsername = function (id, username) { + return BookshelfUser.where({ id }) + .save({ username }, { patch: true, method: 'update' }) + .then((bookshelfUser) => _toDomain(bookshelfUser)) + .catch((err) => { + if (err instanceof BookshelfUser.NoRowsUpdatedError) { + throw new UserNotFoundError(`User not found for ID ${id}`); + } + throw err; + }); +}; + +const findByExternalIdentifier = async function ({ externalIdentityId, identityProvider }) { + const bookshelfUser = await BookshelfUser.query((qb) => { + qb.innerJoin('authentication-methods', function () { + this.on('users.id', 'authentication-methods.userId') + .andOnVal('authentication-methods.identityProvider', identityProvider) + .andOnVal('authentication-methods.externalIdentifier', externalIdentityId); + }); + }).fetch({ require: false, withRelated: 'authenticationMethods' }); + return bookshelfUser ? _toDomain(bookshelfUser) : null; +}; + +const findAnotherUserByEmail = async function (userId, email) { + return BookshelfUser.where('id', '!=', userId) + .where({ email: email.toLowerCase() }) + .fetchAll() + .then((users) => bookshelfToDomainConverter.buildDomainObjects(BookshelfUser, users)); +}; + +const findAnotherUserByUsername = async function (userId, username) { + return BookshelfUser.where('id', '!=', userId) + .where({ username }) + .fetchAll() + .then((users) => bookshelfToDomainConverter.buildDomainObjects(BookshelfUser, users)); +}; + +const updateLastLoggedAt = async function ({ userId }) { + const now = new Date(); + + await knex('users').where({ id: userId }).update({ lastLoggedAt: now }); +}; + +const updateLastDataProtectionPolicySeenAt = async function ({ userId }) { + const now = new Date(); + + const [user] = await knex('users') + .where({ id: userId }) + .update({ lastDataProtectionPolicySeenAt: now }) + .returning('*'); + + return new User(user); +}; + +export { + getByEmail, + getFullById, + getByUsernameOrEmailWithRolesAndPassword, + get, + getById, + getForObfuscation, + getUserDetailsForAdmin, + findPaginatedFiltered, + getWithMemberships, + getWithCertificationCenterMemberships, + getBySamlId, + update, + updateWithEmailConfirmed, + checkIfEmailIsAvailable, + isUserExistingByEmail, + updatePassword, + updateEmail, + updateUserDetailsForAdministration, + updateHasSeenAssessmentInstructionsToTrue, + updateHasSeenNewDashboardInfoToTrue, + updateHasSeenChallengeTooltip, + acceptPixLastTermsOfService, + updatePixOrgaTermsOfServiceAcceptedToTrue, + updatePixCertifTermsOfServiceAcceptedToTrue, + isUsernameAvailable, + updateUsername, + addUsername, + findByExternalIdentifier, + findAnotherUserByEmail, + findAnotherUserByUsername, + updateLastLoggedAt, + updateLastDataProtectionPolicySeenAt, }; function _fromKnexDTOToUserDetailsForAdmin({ userDTO, organizationLearnersDTO, authenticationMethodsDTO }) { diff --git a/api/lib/infrastructure/repositories/user-saved-tutorial-repository.js b/api/lib/infrastructure/repositories/user-saved-tutorial-repository.js index 738cc8fea71..0a3905ca52b 100644 --- a/api/lib/infrastructure/repositories/user-saved-tutorial-repository.js +++ b/api/lib/infrastructure/repositories/user-saved-tutorial-repository.js @@ -1,28 +1,28 @@ -const { knex } = require('../../../db/knex-database-connection.js'); -const UserSavedTutorial = require('../../domain/models/UserSavedTutorial.js'); +import { knex } from '../../../db/knex-database-connection.js'; +import { UserSavedTutorial } from '../../domain/models/UserSavedTutorial.js'; const TABLE_NAME = 'user-saved-tutorials'; -module.exports = { - async addTutorial({ userId, tutorialId, skillId }) { - const userSavedTutorials = await knex(TABLE_NAME).where({ userId, tutorialId }); - if (userSavedTutorials.length) { - return _toDomain(userSavedTutorials[0]); - } - const savedUserSavedTutorials = await knex(TABLE_NAME).insert({ userId, tutorialId, skillId }).returning('*'); - return _toDomain(savedUserSavedTutorials[0]); - }, +const addTutorial = async function ({ userId, tutorialId, skillId }) { + const userSavedTutorials = await knex(TABLE_NAME).where({ userId, tutorialId }); + if (userSavedTutorials.length) { + return _toDomain(userSavedTutorials[0]); + } + const savedUserSavedTutorials = await knex(TABLE_NAME).insert({ userId, tutorialId, skillId }).returning('*'); + return _toDomain(savedUserSavedTutorials[0]); +}; - async find({ userId }) { - const userSavedTutorials = await knex(TABLE_NAME).where({ userId }).orderBy('createdAt', 'desc'); - return userSavedTutorials.map(_toDomain); - }, +const find = async function ({ userId }) { + const userSavedTutorials = await knex(TABLE_NAME).where({ userId }).orderBy('createdAt', 'desc'); + return userSavedTutorials.map(_toDomain); +}; - async removeFromUser(userSavedTutorial) { - return knex(TABLE_NAME).where(userSavedTutorial).delete(); - }, +const removeFromUser = async function (userSavedTutorial) { + return knex(TABLE_NAME).where(userSavedTutorial).delete(); }; +export { addTutorial, find, removeFromUser }; + function _toDomain(userSavedTutorial) { return new UserSavedTutorial({ id: userSavedTutorial.id, diff --git a/api/lib/infrastructure/repositories/user-to-create-repository.js b/api/lib/infrastructure/repositories/user-to-create-repository.js index cc5c7ddb695..c4e23c4486b 100644 --- a/api/lib/infrastructure/repositories/user-to-create-repository.js +++ b/api/lib/infrastructure/repositories/user-to-create-repository.js @@ -1,25 +1,22 @@ -const { knex } = require('../../../db/knex-database-connection.js'); - -const DomainTransaction = require('../DomainTransaction.js'); - -const { OrganizationLearnerAlreadyLinkedToUserError } = require('../../domain/errors.js'); -const { STUDENT_RECONCILIATION_ERRORS } = require('../../domain/constants.js'); - -const User = require('../../domain/models/User.js'); -const { PGSQL_UNIQUE_CONSTRAINT_VIOLATION_ERROR } = require('../../../db/pgsql-errors.js'); - -module.exports = { - async create({ user, domainTransaction = DomainTransaction.emptyTransaction() }) { - const knexConnection = domainTransaction.knexTransaction || knex; - - if (user.username) { - return await _createWithUsername({ knexConnection, user }); - } else { - return await _createWithoutUsername({ knexConnection, user }); - } - }, +import { knex } from '../../../db/knex-database-connection.js'; +import { DomainTransaction } from '../DomainTransaction.js'; +import { OrganizationLearnerAlreadyLinkedToUserError } from '../../domain/errors.js'; +import { STUDENT_RECONCILIATION_ERRORS } from '../../domain/constants.js'; +import { User } from '../../domain/models/User.js'; +import { PGSQL_UNIQUE_CONSTRAINT_VIOLATION_ERROR } from '../../../db/pgsql-errors.js'; + +const create = async function ({ user, domainTransaction = DomainTransaction.emptyTransaction() }) { + const knexConnection = domainTransaction.knexTransaction || knex; + + if (user.username) { + return await _createWithUsername({ knexConnection, user }); + } else { + return await _createWithoutUsername({ knexConnection, user }); + } }; +export { create }; + async function _createWithUsername({ knexConnection, user }) { const detail = 'Un compte avec cet identifiant existe déjà.'; const error = STUDENT_RECONCILIATION_ERRORS.LOGIN_OR_REGISTER.IN_DB.username; diff --git a/api/lib/infrastructure/saml.js b/api/lib/infrastructure/saml.js index 12a5824849a..bff4b4b89f5 100644 --- a/api/lib/infrastructure/saml.js +++ b/api/lib/infrastructure/saml.js @@ -1,11 +1,13 @@ -const samlify = require('samlify'); +import samlify from 'samlify'; samlify.setSchemaValidator({ validate: () => { return true; }, }); -const logger = require('./logger.js'); -const samlSettings = require('../config.js').saml; +import { logger } from './logger.js'; +import { config } from '../config.js'; + +const samlSettings = config.saml; let _serviceProvider, _identityProvider; @@ -35,23 +37,23 @@ function _getIdentityProvider() { return _identityProvider; } -module.exports = { - getServiceProviderMetadata() { - return _getServiceProvider().getMetadata(); - }, +const getServiceProviderMetadata = function () { + return _getServiceProvider().getMetadata(); +}; - createLoginRequest() { - const { context } = _getServiceProvider().createLoginRequest(_getIdentityProvider(), 'redirect'); - logger.trace({ SAMLRequest: context }, 'Created SAML request'); - return context; - }, +const createLoginRequest = function () { + const { context } = _getServiceProvider().createLoginRequest(_getIdentityProvider(), 'redirect'); + logger.trace({ SAMLRequest: context }, 'Created SAML request'); + return context; +}; - async parsePostResponse(payload) { - logger.trace({ SAMLPayload: payload }, 'Parsing SAML response'); - const { extract } = await _getServiceProvider().parseLoginResponse(_getIdentityProvider(), 'post', { - body: payload, - }); - logger.trace({ parsedSAML: extract }, 'Parsed SAML response'); - return extract.attributes; - }, +const parsePostResponse = async function (payload) { + logger.trace({ SAMLPayload: payload }, 'Parsing SAML response'); + const { extract } = await _getServiceProvider().parseLoginResponse(_getIdentityProvider(), 'post', { + body: payload, + }); + logger.trace({ parsedSAML: extract }, 'Parsed SAML response'); + return extract.attributes; }; + +export { getServiceProviderMetadata, createLoginRequest, parsePostResponse }; diff --git a/api/lib/infrastructure/serializers/csv/campaign-profiles-collection-export.js b/api/lib/infrastructure/serializers/csv/campaign-profiles-collection-export.js index ab77ad22073..2373cb4d10a 100644 --- a/api/lib/infrastructure/serializers/csv/campaign-profiles-collection-export.js +++ b/api/lib/infrastructure/serializers/csv/campaign-profiles-collection-export.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const bluebird = require('bluebird'); -const csvSerializer = require('./csv-serializer.js'); -const { constants } = require('../../constants.js'); -const CampaignProfilesCollectionResultLine = require('../../exports/campaigns/campaign-profiles-collection-result-line.js'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import * as csvSerializer from './csv-serializer.js'; +import { CONCURRENCY_HEAVY_OPERATIONS, CHUNK_SIZE_CAMPAIGN_RESULT_PROCESSING } from '../../constants.js'; +import { CampaignProfilesCollectionResultLine } from '../../exports/campaigns/campaign-profiles-collection-result-line.js'; class CampaignProfilesCollectionExport { constructor(outputStream, organization, campaign, competences, translate) { this.stream = outputStream; @@ -21,7 +21,7 @@ class CampaignProfilesCollectionExport { const campaignParticipationResultDataChunks = _.chunk( campaignParticipationResultDatas, - constants.CHUNK_SIZE_CAMPAIGN_RESULT_PROCESSING + CHUNK_SIZE_CAMPAIGN_RESULT_PROCESSING ); return bluebird.map( @@ -35,7 +35,7 @@ class CampaignProfilesCollectionExport { this.stream.write(csvLines); }, - { concurrency: constants.CONCURRENCY_HEAVY_OPERATIONS } + { concurrency: CONCURRENCY_HEAVY_OPERATIONS } ); } @@ -106,4 +106,4 @@ class CampaignProfilesCollectionExport { } } -module.exports = CampaignProfilesCollectionExport; +export { CampaignProfilesCollectionExport }; diff --git a/api/lib/infrastructure/serializers/csv/campaigns-administration/campaign-ids-csv-header.js b/api/lib/infrastructure/serializers/csv/campaigns-administration/campaign-ids-csv-header.js index 4fad0dbb694..50ce114ea29 100644 --- a/api/lib/infrastructure/serializers/csv/campaigns-administration/campaign-ids-csv-header.js +++ b/api/lib/infrastructure/serializers/csv/campaigns-administration/campaign-ids-csv-header.js @@ -1,4 +1,4 @@ -const { CsvColumn } = require('../csv-column.js'); +import { CsvColumn } from '../csv-column.js'; class CampaignIdsCsvHeader { constructor() { @@ -16,4 +16,4 @@ class CampaignIdsCsvHeader { } } -module.exports = CampaignIdsCsvHeader; +export { CampaignIdsCsvHeader }; diff --git a/api/lib/infrastructure/serializers/csv/campaigns-administration/csv-campaigns-ids-parser.js b/api/lib/infrastructure/serializers/csv/campaigns-administration/csv-campaigns-ids-parser.js index 63564c8faa3..f7b663da692 100644 --- a/api/lib/infrastructure/serializers/csv/campaigns-administration/csv-campaigns-ids-parser.js +++ b/api/lib/infrastructure/serializers/csv/campaigns-administration/csv-campaigns-ids-parser.js @@ -1,6 +1,7 @@ -const fs = require('fs').promises; -const { CsvParser } = require('../csv-parser.js'); -const ArchiveCampaignColumn = require('./campaign-ids-csv-header.js'); +import * as fs from 'fs/promises'; + +import { CsvParser } from '../csv-parser.js'; +import { CampaignIdsCsvHeader } from './campaign-ids-csv-header.js'; async function extractCampaignsIds(file) { const buffer = await fs.readFile(file); @@ -16,10 +17,8 @@ async function extractCampaignsIds(file) { } function _extractIds(buffer) { - const columns = new ArchiveCampaignColumn(); + const columns = new CampaignIdsCsvHeader(); const campaignIdsCsv = new CsvParser(buffer, columns); return campaignIdsCsv.parse(); } -module.exports = { - extractCampaignsIds, -}; +export { extractCampaignsIds }; diff --git a/api/lib/infrastructure/serializers/csv/csv-column.js b/api/lib/infrastructure/serializers/csv/csv-column.js index b771df1a279..542f1571563 100644 --- a/api/lib/infrastructure/serializers/csv/csv-column.js +++ b/api/lib/infrastructure/serializers/csv/csv-column.js @@ -8,6 +8,4 @@ class CsvColumn { } } -module.exports = { - CsvColumn, -}; +export { CsvColumn }; diff --git a/api/lib/infrastructure/serializers/csv/csv-learner-parser.js b/api/lib/infrastructure/serializers/csv/csv-learner-parser.js index 48236df67a0..7c0f085c518 100644 --- a/api/lib/infrastructure/serializers/csv/csv-learner-parser.js +++ b/api/lib/infrastructure/serializers/csv/csv-learner-parser.js @@ -1,7 +1,7 @@ -const papa = require('papaparse'); -const iconv = require('iconv-lite'); -const { convertDateValue } = require('../../utils/date-utils.js'); -const { CsvImportError } = require('../../../domain/errors.js'); +import papa from 'papaparse'; +import iconv from 'iconv-lite'; +import { convertDateValue } from '../../utils/date-utils.js'; +import { CsvImportError } from '../../../domain/errors.js'; const ERRORS = { ENCODING_NOT_SUPPORTED: 'ENCODING_NOT_SUPPORTED', @@ -184,6 +184,4 @@ function _atLeastOneParsedColumnDoesNotMatchAcceptedColumns(parsedColumns, accep }); } -module.exports = { - CsvOrganizationLearnerParser, -}; +export { CsvOrganizationLearnerParser }; diff --git a/api/lib/infrastructure/serializers/csv/csv-parser.js b/api/lib/infrastructure/serializers/csv/csv-parser.js index 536ad75ec92..54e588f26b1 100644 --- a/api/lib/infrastructure/serializers/csv/csv-parser.js +++ b/api/lib/infrastructure/serializers/csv/csv-parser.js @@ -1,6 +1,6 @@ -const papa = require('papaparse'); -const iconv = require('iconv-lite'); -const { CsvImportError } = require('../../../domain/errors.js'); +import papa from 'papaparse'; +import iconv from 'iconv-lite'; +import { CsvImportError } from '../../../domain/errors.js'; const ERRORS = { ENCODING_NOT_SUPPORTED: 'ENCODING_NOT_SUPPORTED', BAD_CSV_FORMAT: 'BAD_CSV_FORMAT', @@ -119,6 +119,4 @@ function _atLeastOneParsedColumnDoesNotMatchAcceptedColumns(parsedColumns, accep }); } -module.exports = { - CsvParser, -}; +export { CsvParser }; diff --git a/api/lib/infrastructure/serializers/csv/csv-serializer.js b/api/lib/infrastructure/serializers/csv/csv-serializer.js index ebdd0bc01be..beb5eeb6bef 100644 --- a/api/lib/infrastructure/serializers/csv/csv-serializer.js +++ b/api/lib/infrastructure/serializers/csv/csv-serializer.js @@ -1,9 +1,12 @@ -const logger = require('../../logger.js'); -const { FileValidationError } = require('../../../../lib/domain/errors.js'); -const { convertDateValue } = require('../../utils/date-utils.js'); -const { headers, emptySession, COMPLEMENTARY_CERTIFICATION_SUFFIX } = require('../../utils/csv/sessions-import.js'); -const { isEmpty } = require('lodash'); -const { checkCsvHeader, parseCsvWithHeader } = require('../../helpers/csv.js'); +import { logger } from '../../logger.js'; +import { FileValidationError } from '../../../../lib/domain/errors.js'; +import { convertDateValue } from '../../utils/date-utils.js'; +import { headers, emptySession, COMPLEMENTARY_CERTIFICATION_SUFFIX } from '../../utils/csv/sessions-import.js'; +import lodash from 'lodash'; + +const { isEmpty } = lodash; + +import { checkCsvHeader, parseCsvWithHeader } from '../../helpers/csv.js'; function _csvFormulaEscapingPrefix(data) { const mayBeInterpretedAsFormula = /^[-@=+]/.test(data); @@ -337,8 +340,4 @@ function serializeLine(lineArray) { return lineArray.map(_csvSerializeValue).join(';') + '\n'; } -module.exports = { - serializeLine, - deserializeForSessionsImport, - deserializeForOrganizationsImport, -}; +export { serializeLine, deserializeForSessionsImport, deserializeForOrganizationsImport }; diff --git a/api/lib/infrastructure/serializers/csv/organization-learner-import-header.js b/api/lib/infrastructure/serializers/csv/organization-learner-import-header.js index 36a450c5796..aa9d458cc37 100644 --- a/api/lib/infrastructure/serializers/csv/organization-learner-import-header.js +++ b/api/lib/infrastructure/serializers/csv/organization-learner-import-header.js @@ -1,4 +1,4 @@ -const { CsvColumn } = require('./csv-column.js'); +import { CsvColumn } from './csv-column.js'; class OrganizationLearnerImportHeader { constructor(i18n) { @@ -75,4 +75,4 @@ class OrganizationLearnerImportHeader { } } -module.exports = OrganizationLearnerImportHeader; +export { OrganizationLearnerImportHeader }; diff --git a/api/lib/infrastructure/serializers/csv/organization-learner-parser.js b/api/lib/infrastructure/serializers/csv/organization-learner-parser.js index 182317f7527..feb4ffce125 100644 --- a/api/lib/infrastructure/serializers/csv/organization-learner-parser.js +++ b/api/lib/infrastructure/serializers/csv/organization-learner-parser.js @@ -1,9 +1,8 @@ -const OrganizationLearner = require('../../../domain/models/OrganizationLearner.js'); -const { checkValidation } = require('../../../domain/validators/organization-learner-validator.js'); - -const { CsvOrganizationLearnerParser } = require('./csv-learner-parser.js'); -const { CsvImportError, DomainError } = require('../../../domain/errors.js'); -const OrganizationLearnerImportHeader = require('./organization-learner-import-header.js'); +import { OrganizationLearner } from '../../../domain/models/OrganizationLearner.js'; +import { checkValidation } from '../../../domain/validators/organization-learner-validator.js'; +import { CsvOrganizationLearnerParser } from './csv-learner-parser.js'; +import { CsvImportError, DomainError } from '../../../domain/errors.js'; +import { OrganizationLearnerImportHeader } from './organization-learner-import-header.js'; const ERRORS = { IDENTIFIER_UNIQUE: 'IDENTIFIER_UNIQUE', @@ -91,4 +90,4 @@ class OrganizationLearnerParser extends CsvOrganizationLearnerParser { } } -module.exports = OrganizationLearnerParser; +export { OrganizationLearnerParser }; diff --git a/api/lib/infrastructure/serializers/csv/sup-organization-learner-import-header.js b/api/lib/infrastructure/serializers/csv/sup-organization-learner-import-header.js index 9346bacc59d..55965ffd16f 100644 --- a/api/lib/infrastructure/serializers/csv/sup-organization-learner-import-header.js +++ b/api/lib/infrastructure/serializers/csv/sup-organization-learner-import-header.js @@ -1,4 +1,4 @@ -const { CsvColumn } = require('./csv-column.js'); +import { CsvColumn } from './csv-column.js'; class SupOrganizationLearnerImportHeader { constructor(i18n) { @@ -62,4 +62,4 @@ class SupOrganizationLearnerImportHeader { } } -module.exports = SupOrganizationLearnerImportHeader; +export { SupOrganizationLearnerImportHeader }; diff --git a/api/lib/infrastructure/serializers/csv/sup-organization-learner-parser.js b/api/lib/infrastructure/serializers/csv/sup-organization-learner-parser.js index 2638a9962f6..8edb8656309 100644 --- a/api/lib/infrastructure/serializers/csv/sup-organization-learner-parser.js +++ b/api/lib/infrastructure/serializers/csv/sup-organization-learner-parser.js @@ -1,8 +1,7 @@ -const SupOrganizationLearnerSet = require('../../../domain/models/SupOrganizationLearnerSet.js'); -const { CsvImportError } = require('../../../domain/errors.js'); - -const { CsvOrganizationLearnerParser } = require('./csv-learner-parser.js'); -const SupOrganizationLearnerImportHeader = require('./sup-organization-learner-import-header.js'); +import { SupOrganizationLearnerSet } from '../../../domain/models/SupOrganizationLearnerSet.js'; +import { CsvImportError } from '../../../domain/errors.js'; +import { CsvOrganizationLearnerParser } from './csv-learner-parser.js'; +import { SupOrganizationLearnerImportHeader } from './sup-organization-learner-import-header.js'; const ERRORS = { STUDENT_NUMBER_UNIQUE: 'STUDENT_NUMBER_UNIQUE', @@ -32,4 +31,4 @@ class SupOrganizationLearnerParser extends CsvOrganizationLearnerParser { } } -module.exports = SupOrganizationLearnerParser; +export { SupOrganizationLearnerParser }; diff --git a/api/lib/infrastructure/serializers/json/scoring-simulator/scoring-simulation-context-serializer.js b/api/lib/infrastructure/serializers/json/scoring-simulator/scoring-simulation-context-serializer.js index 34c16cb1461..4d2e008ef60 100644 --- a/api/lib/infrastructure/serializers/json/scoring-simulator/scoring-simulation-context-serializer.js +++ b/api/lib/infrastructure/serializers/json/scoring-simulator/scoring-simulation-context-serializer.js @@ -1,7 +1,7 @@ -const ScoringSimulationContext = require('../../../../domain/models/ScoringSimulationContext.js'); +import { ScoringSimulationContext } from '../../../../domain/models/ScoringSimulationContext.js'; -module.exports = { - deserialize(request) { - return new ScoringSimulationContext(request.payload.context); - }, +const deserialize = function (request) { + return new ScoringSimulationContext(request.payload.context); }; + +export { deserialize }; diff --git a/api/lib/infrastructure/serializers/json/scoring-simulator/scoring-simulation-dataset-serializer.js b/api/lib/infrastructure/serializers/json/scoring-simulator/scoring-simulation-dataset-serializer.js index f26a3728719..55e064d8938 100644 --- a/api/lib/infrastructure/serializers/json/scoring-simulator/scoring-simulation-dataset-serializer.js +++ b/api/lib/infrastructure/serializers/json/scoring-simulator/scoring-simulation-dataset-serializer.js @@ -1,20 +1,20 @@ -const ScoringSimulation = require('../../../../domain/models/ScoringSimulation.js'); -const ScoringSimulationDataset = require('../../../../domain/models/ScoringSimulationDataset.js'); -const Answer = require('../../../../domain/models/Answer.js'); +import { ScoringSimulation } from '../../../../domain/models/ScoringSimulation.js'; +import { ScoringSimulationDataset } from '../../../../domain/models/ScoringSimulationDataset.js'; +import { Answer } from '../../../../domain/models/Answer.js'; -module.exports = { - deserialize(request) { - const simulations = request.payload.dataset.simulations.map( - (simulation) => - new ScoringSimulation({ - ...simulation, - answers: simulation.answers?.map((answer) => new Answer(answer)), - }) - ); +const deserialize = function (request) { + const simulations = request.payload.dataset.simulations.map( + (simulation) => + new ScoringSimulation({ + ...simulation, + answers: simulation.answers?.map((answer) => new Answer(answer)), + }) + ); - return new ScoringSimulationDataset({ - ...request.payload.dataset, - simulations, - }); - }, + return new ScoringSimulationDataset({ + ...request.payload.dataset, + simulations, + }); }; + +export { deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/admin-member-serializer.js b/api/lib/infrastructure/serializers/jsonapi/admin-member-serializer.js index 0c3f1dd5acb..a9b24fa2406 100644 --- a/api/lib/infrastructure/serializers/jsonapi/admin-member-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/admin-member-serializer.js @@ -1,25 +1,27 @@ -const { Serializer, Deserializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(adminMembers, meta) { - return new Serializer('admin-member', { - attributes: [ - 'firstName', - 'lastName', - 'email', - 'role', - 'userId', - 'isSuperAdmin', - 'isCertif', - 'isMetier', - 'isSupport', - ], - meta, - }).serialize(adminMembers); - }, +const { Serializer, Deserializer } = jsonapiSerializer; - async deserialize(jsonApiData) { - const deserializer = new Deserializer({ keyForAttribute: 'camelCase' }); - return await deserializer.deserialize(jsonApiData); - }, +const serialize = function (adminMembers, meta) { + return new Serializer('admin-member', { + attributes: [ + 'firstName', + 'lastName', + 'email', + 'role', + 'userId', + 'isSuperAdmin', + 'isCertif', + 'isMetier', + 'isSupport', + ], + meta, + }).serialize(adminMembers); }; + +const deserialize = async function (jsonApiData) { + const deserializer = new Deserializer({ keyForAttribute: 'camelCase' }); + return await deserializer.deserialize(jsonApiData); +}; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/answer-pix1d-serializer.js b/api/lib/infrastructure/serializers/jsonapi/answer-pix1d-serializer.js index 3fa7c1d1cd6..273372e6ab4 100644 --- a/api/lib/infrastructure/serializers/jsonapi/answer-pix1d-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/answer-pix1d-serializer.js @@ -1,55 +1,55 @@ -const Answer = require('../../../domain/models/Answer.js'); -const { Serializer } = require('jsonapi-serializer'); -const answerStatusJSONAPIAdapter = require('../../adapters/answer-status-json-api-adapter.js'); +import { Answer } from '../../../domain/models/Answer.js'; +import { Serializer } from 'jsonapi-serializer'; +import { AnswerStatusJsonApiAdapter as answerStatusJSONAPIAdapter } from '../../adapters/answer-status-json-api-adapter.js'; -module.exports = { - serialize(answer) { - return new Serializer('answer', { - transform: (untouchedAnswer) => { - const answer = Object.assign({}, untouchedAnswer); - answer.assessment = { id: answer.assessmentId }; - answer.challenge = { id: answer.challengeId }; - answer.result = answerStatusJSONAPIAdapter.adapt(untouchedAnswer.result); - return answer; - }, - attributes: ['value', 'timeout', 'result', 'resultDetails', 'assessment', 'challenge', 'correction', 'levelup'], - assessment: { - ref: 'id', - includes: false, - }, - challenge: { - ref: 'id', - includes: false, - }, - correction: { - ref: 'id', - nullIfMissing: true, - ignoreRelationshipData: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/answers/${parent.id}/correction`; - }, +const serialize = function (answer) { + return new Serializer('answer', { + transform: (untouchedAnswer) => { + const answer = Object.assign({}, untouchedAnswer); + answer.assessment = { id: answer.assessmentId }; + answer.challenge = { id: answer.challengeId }; + answer.result = answerStatusJSONAPIAdapter.adapt(untouchedAnswer.result); + return answer; + }, + attributes: ['value', 'timeout', 'result', 'resultDetails', 'assessment', 'challenge', 'correction', 'levelup'], + assessment: { + ref: 'id', + includes: false, + }, + challenge: { + ref: 'id', + includes: false, + }, + correction: { + ref: 'id', + nullIfMissing: true, + ignoreRelationshipData: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/answers/${parent.id}/correction`; }, }, - levelup: { - ref: 'id', - attributes: ['competenceName', 'level'], - }, - }).serialize(answer); - }, + }, + levelup: { + ref: 'id', + attributes: ['competenceName', 'level'], + }, + }).serialize(answer); +}; - deserialize(payload) { - return new Answer({ - value: _cleanValue(payload.data.attributes.value), - result: null, - resultDetails: null, - timeout: payload.data.attributes.timeout, - isFocusedOut: payload.data.attributes['focused-out'], - challengeId: payload.data.relationships.challenge.data.id, - }); - }, +const deserialize = function (payload) { + return new Answer({ + value: _cleanValue(payload.data.attributes.value), + result: null, + resultDetails: null, + timeout: payload.data.attributes.timeout, + isFocusedOut: payload.data.attributes['focused-out'], + challengeId: payload.data.relationships.challenge.data.id, + }); }; +export { serialize, deserialize }; + function _cleanValue(value) { return value.replaceAll('\u0000', ''); } diff --git a/api/lib/infrastructure/serializers/jsonapi/answer-serializer.js b/api/lib/infrastructure/serializers/jsonapi/answer-serializer.js index 86a8cecf27b..b1beca6ea6d 100644 --- a/api/lib/infrastructure/serializers/jsonapi/answer-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/answer-serializer.js @@ -1,56 +1,59 @@ -const Answer = require('../../../domain/models/Answer.js'); -const { Serializer } = require('jsonapi-serializer'); -const answerStatusJSONAPIAdapter = require('../../adapters/answer-status-json-api-adapter.js'); +import { Answer } from '../../../domain/models/Answer.js'; +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(answer) { - return new Serializer('answer', { - transform: (untouchedAnswer) => { - const answer = Object.assign({}, untouchedAnswer); - answer.assessment = { id: answer.assessmentId }; - answer.challenge = { id: answer.challengeId }; - answer.result = answerStatusJSONAPIAdapter.adapt(untouchedAnswer.result); - return answer; - }, - attributes: ['value', 'timeout', 'result', 'resultDetails', 'assessment', 'challenge', 'correction', 'levelup'], - assessment: { - ref: 'id', - includes: false, - }, - challenge: { - ref: 'id', - includes: false, - }, - correction: { - ref: 'id', - nullIfMissing: true, - ignoreRelationshipData: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/answers/${parent.id}/correction`; - }, +const { Serializer } = jsonapiSerializer; + +import { AnswerStatusJsonApiAdapter } from '../../adapters/answer-status-json-api-adapter.js'; + +const serialize = function (answer) { + return new Serializer('answer', { + transform: (untouchedAnswer) => { + const answer = Object.assign({}, untouchedAnswer); + answer.assessment = { id: answer.assessmentId }; + answer.challenge = { id: answer.challengeId }; + answer.result = AnswerStatusJsonApiAdapter.adapt(untouchedAnswer.result); + return answer; + }, + attributes: ['value', 'timeout', 'result', 'resultDetails', 'assessment', 'challenge', 'correction', 'levelup'], + assessment: { + ref: 'id', + includes: false, + }, + challenge: { + ref: 'id', + includes: false, + }, + correction: { + ref: 'id', + nullIfMissing: true, + ignoreRelationshipData: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/answers/${parent.id}/correction`; }, }, - levelup: { - ref: 'id', - attributes: ['competenceName', 'level'], - }, - }).serialize(answer); - }, + }, + levelup: { + ref: 'id', + attributes: ['competenceName', 'level'], + }, + }).serialize(answer); +}; - deserialize(payload) { - return new Answer({ - value: _cleanValue(payload.data.attributes.value), - result: null, - resultDetails: null, - timeout: payload.data.attributes.timeout, - isFocusedOut: payload.data.attributes['focused-out'], - assessmentId: payload.data.relationships.assessment.data.id, - challengeId: payload.data.relationships.challenge.data.id, - }); - }, +const deserialize = function (payload) { + return new Answer({ + value: _cleanValue(payload.data.attributes.value), + result: null, + resultDetails: null, + timeout: payload.data.attributes.timeout, + isFocusedOut: payload.data.attributes['focused-out'], + assessmentId: payload.data.relationships.assessment.data.id, + challengeId: payload.data.relationships.challenge.data.id, + }); }; +export { serialize, deserialize }; + function _cleanValue(value) { return value.replaceAll('\u0000', ''); } diff --git a/api/lib/infrastructure/serializers/jsonapi/assessment-serializer.js b/api/lib/infrastructure/serializers/jsonapi/assessment-serializer.js index b723e2e32e3..8bef05fe1e7 100644 --- a/api/lib/infrastructure/serializers/jsonapi/assessment-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/assessment-serializer.js @@ -1,103 +1,105 @@ -const Assessment = require('../../../domain/models/Assessment.js'); -const Progression = require('../../../domain/models/Progression.js'); -const { Serializer } = require('jsonapi-serializer'); +import { Assessment } from '../../../domain/models/Assessment.js'; +import { Progression } from '../../../domain/models/Progression.js'; +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(assessments) { - return new Serializer('assessment', { - transform(currentAssessment) { - const assessment = Object.assign({}, currentAssessment); +const { Serializer } = jsonapiSerializer; - // TODO: We can't use currentAssessment.isCertification() because - // this serializer is also used by model CampaignAssessment - assessment.certificationNumber = null; - if (currentAssessment.type === Assessment.types.CERTIFICATION) { - assessment.certificationNumber = currentAssessment.certificationCourseId; - assessment.certificationCourse = { id: currentAssessment.certificationCourseId }; - } +const serialize = function (assessments) { + return new Serializer('assessment', { + transform(currentAssessment) { + const assessment = Object.assign({}, currentAssessment); - // Same here for isForCampaign() and isCompetenceEvaluation() - if ([Assessment.types.CAMPAIGN, Assessment.types.COMPETENCE_EVALUATION].includes(currentAssessment.type)) { - assessment.progression = { - id: Progression.generateIdFromAssessmentId(currentAssessment.id), - }; - } + // TODO: We can't use currentAssessment.isCertification() because + // this serializer is also used by model CampaignAssessment + assessment.certificationNumber = null; + if (currentAssessment.type === Assessment.types.CERTIFICATION) { + assessment.certificationNumber = currentAssessment.certificationCourseId; + assessment.certificationCourse = { id: currentAssessment.certificationCourseId }; + } - if (currentAssessment.type === Assessment.types.CAMPAIGN) { - assessment.codeCampaign = currentAssessment.campaignCode; - } + // Same here for isForCampaign() and isCompetenceEvaluation() + if ([Assessment.types.CAMPAIGN, Assessment.types.COMPETENCE_EVALUATION].includes(currentAssessment.type)) { + assessment.progression = { + id: Progression.generateIdFromAssessmentId(currentAssessment.id), + }; + } - if (!currentAssessment.course) { - assessment.course = { id: currentAssessment.courseId }; - } + if (currentAssessment.type === Assessment.types.CAMPAIGN) { + assessment.codeCampaign = currentAssessment.campaignCode; + } - return assessment; - }, - attributes: [ - 'title', - 'type', - 'state', - 'answers', - 'codeCampaign', - 'certificationNumber', - 'course', - 'certificationCourse', - 'progression', - 'competenceId', - 'lastQuestionState', - 'method', - ], - answers: { - ref: 'id', - relationshipLinks: { - related(record) { - return `/api/answers?assessmentId=${record.id}`; - }, + if (!currentAssessment.course) { + assessment.course = { id: currentAssessment.courseId }; + } + + return assessment; + }, + attributes: [ + 'title', + 'type', + 'state', + 'answers', + 'codeCampaign', + 'certificationNumber', + 'course', + 'certificationCourse', + 'progression', + 'competenceId', + 'lastQuestionState', + 'method', + ], + answers: { + ref: 'id', + relationshipLinks: { + related(record) { + return `/api/answers?assessmentId=${record.id}`; }, }, - course: { - ref: 'id', - included: _includeCourse(assessments), - attributes: ['name', 'description', 'nbChallenges'], - }, - certificationCourse: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related(record, current) { - return `/api/certification-courses/${current.id}`; - }, + }, + course: { + ref: 'id', + included: _includeCourse(assessments), + attributes: ['name', 'description', 'nbChallenges'], + }, + certificationCourse: { + ref: 'id', + ignoreRelationshipData: true, + relationshipLinks: { + related(record, current) { + return `/api/certification-courses/${current.id}`; }, }, - progression: { - ref: 'id', - relationshipLinks: { - related(record, current) { - return `/api/progressions/${current.id}`; - }, + }, + progression: { + ref: 'id', + relationshipLinks: { + related(record, current) { + return `/api/progressions/${current.id}`; }, }, - }).serialize(assessments); - }, + }, + }).serialize(assessments); +}; - deserialize(json) { - const type = json.data.attributes.type; - const method = Assessment.computeMethodFromType(type); +const deserialize = function (json) { + const type = json.data.attributes.type; + const method = Assessment.computeMethodFromType(type); - let courseId = null; - if (type !== Assessment.types.CAMPAIGN && type !== Assessment.types.PREVIEW) { - courseId = json.data.relationships.course.data.id; - } + let courseId = null; + if (type !== Assessment.types.CAMPAIGN && type !== Assessment.types.PREVIEW) { + courseId = json.data.relationships.course.data.id; + } - return new Assessment({ - id: json.data.id, - type, - courseId, - method, - }); - }, + return new Assessment({ + id: json.data.id, + type, + courseId, + method, + }); }; +export { serialize, deserialize }; + function _includeCourse(assessments) { if (Array.isArray(assessments)) { return assessments.length && assessments[0].course; diff --git a/api/lib/infrastructure/serializers/jsonapi/authentication-methods-serializer.js b/api/lib/infrastructure/serializers/jsonapi/authentication-methods-serializer.js index e9c0e1c6b3a..323413c3353 100644 --- a/api/lib/infrastructure/serializers/jsonapi/authentication-methods-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/authentication-methods-serializer.js @@ -1,9 +1,11 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(authenticationMethods) { - return new Serializer('authentication-methods', { - attributes: ['identityProvider'], - }).serialize(authenticationMethods); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (authenticationMethods) { + return new Serializer('authentication-methods', { + attributes: ['identityProvider'], + }).serialize(authenticationMethods); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/authentication-serializer.js b/api/lib/infrastructure/serializers/jsonapi/authentication-serializer.js index 38b98f2684e..8e1464b2a1e 100644 --- a/api/lib/infrastructure/serializers/jsonapi/authentication-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/authentication-serializer.js @@ -1,16 +1,18 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(authentications) { - return new Serializer('authentication', { - attributes: ['token', 'user_id', 'password'], - transform(model) { - const authentication = Object.assign({}, model.toJSON()); - authentication.user_id = model.userId.toString(); - authentication.id = model.userId; - authentication.password = ''; - return authentication; - }, - }).serialize(authentications); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (authentications) { + return new Serializer('authentication', { + attributes: ['token', 'user_id', 'password'], + transform(model) { + const authentication = Object.assign({}, model.toJSON()); + authentication.user_id = model.userId.toString(); + authentication.id = model.userId; + authentication.password = ''; + return authentication; + }, + }).serialize(authentications); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/badge-creation-serializer.js b/api/lib/infrastructure/serializers/jsonapi/badge-creation-serializer.js index 81708ffbb2d..c6ec99dd06c 100644 --- a/api/lib/infrastructure/serializers/jsonapi/badge-creation-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/badge-creation-serializer.js @@ -1,7 +1,9 @@ -const { Deserializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; + +const { Deserializer } = jsonapiSerializer; const deserializer = new Deserializer({ keyForAttribute: 'camelCase', }); -module.exports = deserializer; +export { deserializer }; diff --git a/api/lib/infrastructure/serializers/jsonapi/badge-criteria-serializer.js b/api/lib/infrastructure/serializers/jsonapi/badge-criteria-serializer.js index 8567a73a4d6..1b4e31adbf6 100644 --- a/api/lib/infrastructure/serializers/jsonapi/badge-criteria-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/badge-criteria-serializer.js @@ -1,9 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); -module.exports = { - serialize(badgeCriterion = {}) { - return new Serializer('badge-criteria', { - ref: 'id', - attributes: ['scope', 'threshold'], - }).serialize(badgeCriterion); - }, +import jsonapiSerializer from 'jsonapi-serializer'; + +const { Serializer } = jsonapiSerializer; + +const serialize = function (badgeCriterion = {}) { + return new Serializer('badge-criteria', { + ref: 'id', + attributes: ['scope', 'threshold'], + }).serialize(badgeCriterion); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/badge-serializer.js b/api/lib/infrastructure/serializers/jsonapi/badge-serializer.js index 4c85006de32..df6c11a465a 100644 --- a/api/lib/infrastructure/serializers/jsonapi/badge-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/badge-serializer.js @@ -1,22 +1,24 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(badge = {}) { - return new Serializer('badge', { - ref: 'id', - attributes: ['altMessage', 'imageUrl', 'message', 'key', 'title', 'isCertifiable', 'isAlwaysVisible'], - }).serialize(badge); - }, +const { Serializer } = jsonapiSerializer; - deserialize(json) { - return { - key: json.data.attributes['key'], - altMessage: json.data.attributes['alt-message'], - message: json.data.attributes['message'], - title: json.data.attributes['title'], - isCertifiable: json.data.attributes['is-certifiable'], - isAlwaysVisible: json.data.attributes['is-always-visible'], - imageUrl: json.data.attributes['image-url'], - }; - }, +const serialize = function (badge = {}) { + return new Serializer('badge', { + ref: 'id', + attributes: ['altMessage', 'imageUrl', 'message', 'key', 'title', 'isCertifiable', 'isAlwaysVisible'], + }).serialize(badge); }; + +const deserialize = function (json) { + return { + key: json.data.attributes['key'], + altMessage: json.data.attributes['alt-message'], + message: json.data.attributes['message'], + title: json.data.attributes['title'], + isCertifiable: json.data.attributes['is-certifiable'], + isAlwaysVisible: json.data.attributes['is-always-visible'], + imageUrl: json.data.attributes['image-url'], + }; +}; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-analysis-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-analysis-serializer.js index 83ec76f4b43..51e560fb132 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-analysis-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-analysis-serializer.js @@ -1,25 +1,28 @@ -const { Serializer } = require('jsonapi-serializer'); -const tutorialAttributes = require('./tutorial-attributes.js'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(results) { - return new Serializer('campaign-analysis', { - attributes: ['campaignTubeRecommendations'], - campaignTubeRecommendations: { - ref: 'id', - includes: true, - attributes: [ - 'tubeId', - 'competenceId', - 'competenceName', - 'tubePracticalTitle', - 'areaColor', - 'averageScore', - 'tutorials', - 'tubeDescription', - ], - tutorials: tutorialAttributes, - }, - }).serialize(results); - }, +const { Serializer } = jsonapiSerializer; + +import { tutorialAttributes } from './tutorial-attributes.js'; + +const serialize = function (results) { + return new Serializer('campaign-analysis', { + attributes: ['campaignTubeRecommendations'], + campaignTubeRecommendations: { + ref: 'id', + includes: true, + attributes: [ + 'tubeId', + 'competenceId', + 'competenceName', + 'tubePracticalTitle', + 'areaColor', + 'averageScore', + 'tutorials', + 'tubeDescription', + ], + tutorials: tutorialAttributes, + }, + }).serialize(results); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-assessment-participation-result-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-assessment-participation-result-serializer.js index 168f04f641d..77e5911e1da 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-assessment-participation-result-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-assessment-participation-result-serializer.js @@ -1,17 +1,19 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(campaignAssessmentParticipationResult) { - return new Serializer('campaign-assessment-participation-results', { - id: 'campaignParticipationId', - attributes: ['campaignId', 'competenceResults'], - typeForAttribute: (attribute) => { - if (attribute === 'competenceResults') return 'campaign-assessment-participation-competence-results'; - }, - competenceResults: { - ref: 'id', - attributes: ['name', 'index', 'areaColor', 'competenceMasteryRate'], - }, - }).serialize(campaignAssessmentParticipationResult); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (campaignAssessmentParticipationResult) { + return new Serializer('campaign-assessment-participation-results', { + id: 'campaignParticipationId', + attributes: ['campaignId', 'competenceResults'], + typeForAttribute: (attribute) => { + if (attribute === 'competenceResults') return 'campaign-assessment-participation-competence-results'; + }, + competenceResults: { + ref: 'id', + attributes: ['name', 'index', 'areaColor', 'competenceMasteryRate'], + }, + }).serialize(campaignAssessmentParticipationResult); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-assessment-participation-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-assessment-participation-serializer.js index 8b3725e0b48..9c2f8597468 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-assessment-participation-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-assessment-participation-serializer.js @@ -1,55 +1,57 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(campaignAssessmentParticipation) { - return new Serializer('campaign-assessment-participations', { - id: 'campaignParticipationId', - attributes: [ - 'firstName', - 'lastName', - 'participantExternalId', - 'createdAt', - 'sharedAt', - 'isShared', - 'campaignId', - 'targetedSkillsCount', - 'validatedSkillsCount', - 'masteryRate', - 'progression', - 'badges', - 'campaignAssessmentParticipationResult', - 'campaignAnalysis', - 'reachedStage', - 'totalStage', - 'prescriberTitle', - 'prescriberDescription', - 'organizationLearnerId', - ], - badges: { - ref: 'id', - included: true, - attributes: ['title', 'altMessage', 'imageUrl'], - }, - campaignAssessmentParticipationResult: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record) { - return `/api/campaigns/${record.campaignId}/assessment-participations/${record.campaignParticipationId}/results`; - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (campaignAssessmentParticipation) { + return new Serializer('campaign-assessment-participations', { + id: 'campaignParticipationId', + attributes: [ + 'firstName', + 'lastName', + 'participantExternalId', + 'createdAt', + 'sharedAt', + 'isShared', + 'campaignId', + 'targetedSkillsCount', + 'validatedSkillsCount', + 'masteryRate', + 'progression', + 'badges', + 'campaignAssessmentParticipationResult', + 'campaignAnalysis', + 'reachedStage', + 'totalStage', + 'prescriberTitle', + 'prescriberDescription', + 'organizationLearnerId', + ], + badges: { + ref: 'id', + included: true, + attributes: ['title', 'altMessage', 'imageUrl'], + }, + campaignAssessmentParticipationResult: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record) { + return `/api/campaigns/${record.campaignId}/assessment-participations/${record.campaignParticipationId}/results`; }, }, - campaignAnalysis: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record) { - return `/api/campaign-participations/${record.campaignParticipationId}/analyses`; - }, + }, + campaignAnalysis: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record) { + return `/api/campaign-participations/${record.campaignParticipationId}/analyses`; }, }, - }).serialize(campaignAssessmentParticipation); - }, + }, + }).serialize(campaignAssessmentParticipation); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-assessment-result-minimal-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-assessment-result-minimal-serializer.js index 3309b290e83..88cb87f47a3 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-assessment-result-minimal-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-assessment-result-minimal-serializer.js @@ -1,26 +1,28 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize({ participations, pagination }) { - return new Serializer('campaign-assessment-result-minimals', { - id: 'campaignParticipationId', - attributes: [ - 'firstName', - 'lastName', - 'participantExternalId', - 'masteryRate', - 'reachedStage', - 'totalStage', - 'prescriberTitle', - 'prescriberDescription', - 'badges', - ], - badges: { - ref: 'id', - included: true, - attributes: ['title', 'altMessage', 'imageUrl'], - }, - meta: pagination, - }).serialize(participations); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function ({ participations, pagination }) { + return new Serializer('campaign-assessment-result-minimals', { + id: 'campaignParticipationId', + attributes: [ + 'firstName', + 'lastName', + 'participantExternalId', + 'masteryRate', + 'reachedStage', + 'totalStage', + 'prescriberTitle', + 'prescriberDescription', + 'badges', + ], + badges: { + ref: 'id', + included: true, + attributes: ['title', 'altMessage', 'imageUrl'], + }, + meta: pagination, + }).serialize(participations); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-collective-result-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-collective-result-serializer.js index 914e4bf2371..dbb574b2414 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-collective-result-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-collective-result-serializer.js @@ -1,21 +1,23 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(results) { - return new Serializer('campaign-collective-result', { - attributes: ['campaignCompetenceCollectiveResults'], - campaignCompetenceCollectiveResults: { - ref: 'id', - includes: true, - attributes: [ - 'competenceId', - 'competenceName', - 'areaCode', - 'areaColor', - 'targetedSkillsCount', - 'averageValidatedSkills', - ], - }, - }).serialize(results); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (results) { + return new Serializer('campaign-collective-result', { + attributes: ['campaignCompetenceCollectiveResults'], + campaignCompetenceCollectiveResults: { + ref: 'id', + includes: true, + attributes: [ + 'competenceId', + 'competenceName', + 'areaCode', + 'areaColor', + 'targetedSkillsCount', + 'averageValidatedSkills', + ], + }, + }).serialize(results); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-details-management-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-details-management-serializer.js index 89119122a57..555c60e6f0f 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-details-management-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-details-management-serializer.js @@ -1,34 +1,36 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(campaignManagement, meta) { - return new Serializer('campaign', { - attributes: [ - 'name', - 'code', - 'type', - 'title', - 'idPixLabel', - 'createdAt', - 'archivedAt', - 'creatorId', - 'creatorLastName', - 'creatorFirstName', - 'organizationId', - 'organizationName', - 'targetProfileId', - 'targetProfileName', - 'customLandingPageText', - 'customResultPageText', - 'customResultPageButtonText', - 'customResultPageButtonUrl', - 'sharedParticipationsCount', - 'totalParticipationsCount', - 'isTypeProfilesCollection', - 'isTypeAssessment', - 'multipleSendings', - ], - meta, - }).serialize(campaignManagement); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (campaignManagement, meta) { + return new Serializer('campaign', { + attributes: [ + 'name', + 'code', + 'type', + 'title', + 'idPixLabel', + 'createdAt', + 'archivedAt', + 'creatorId', + 'creatorLastName', + 'creatorFirstName', + 'organizationId', + 'organizationName', + 'targetProfileId', + 'targetProfileName', + 'customLandingPageText', + 'customResultPageText', + 'customResultPageButtonText', + 'customResultPageButtonUrl', + 'sharedParticipationsCount', + 'totalParticipationsCount', + 'isTypeProfilesCollection', + 'isTypeAssessment', + 'multipleSendings', + ], + meta, + }).serialize(campaignManagement); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-management-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-management-serializer.js index 5e9b1a2a8c8..166762a7c0a 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-management-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-management-serializer.js @@ -1,22 +1,24 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(campaignManagement, meta) { - return new Serializer('campaign', { - attributes: [ - 'name', - 'code', - 'type', - 'createdAt', - 'archivedAt', - 'creatorId', - 'creatorLastName', - 'creatorFirstName', - 'ownerId', - 'ownerLastName', - 'ownerFirstName', - ], - meta, - }).serialize(campaignManagement); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (campaignManagement, meta) { + return new Serializer('campaign', { + attributes: [ + 'name', + 'code', + 'type', + 'createdAt', + 'archivedAt', + 'creatorId', + 'creatorLastName', + 'creatorFirstName', + 'ownerId', + 'ownerLastName', + 'ownerFirstName', + ], + meta, + }).serialize(campaignManagement); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-participant-activity-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-participant-activity-serializer.js index a0e68bbfde0..cec00326381 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-participant-activity-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-participant-activity-serializer.js @@ -1,11 +1,13 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize({ campaignParticipantsActivities, pagination }) { - return new Serializer('campaign-participant-activity', { - id: 'campaignParticipationId', - attributes: ['firstName', 'lastName', 'participantExternalId', 'status', 'progression'], - meta: pagination, - }).serialize(campaignParticipantsActivities); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function ({ campaignParticipantsActivities, pagination }) { + return new Serializer('campaign-participant-activity', { + id: 'campaignParticipationId', + attributes: ['firstName', 'lastName', 'participantExternalId', 'status', 'progression'], + meta: pagination, + }).serialize(campaignParticipantsActivities); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-participation-for-user-management-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-participation-for-user-management-serializer.js index 588c02f0989..99b6d882af9 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-participation-for-user-management-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-participation-for-user-management-serializer.js @@ -1,20 +1,22 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(campaignParticipation) { - return new Serializer('user-participation', { - attributes: [ - 'participantExternalId', - 'status', - 'campaignId', - 'campaignCode', - 'createdAt', - 'sharedAt', - 'deletedAt', - 'deletedBy', - 'deletedByFullName', - 'organizationLearnerFullName', - ], - }).serialize(campaignParticipation); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (campaignParticipation) { + return new Serializer('user-participation', { + attributes: [ + 'participantExternalId', + 'status', + 'campaignId', + 'campaignCode', + 'createdAt', + 'sharedAt', + 'deletedAt', + 'deletedBy', + 'deletedByFullName', + 'organizationLearnerFullName', + ], + }).serialize(campaignParticipation); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-participation-overview-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-participation-overview-serializer.js index dae04c08b9e..8bc7f78699a 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-participation-overview-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-participation-overview-serializer.js @@ -1,27 +1,29 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serializeForPaginatedList(userCampaignParticipationOverviewsPaginatedList) { - const { campaignParticipationOverviews, pagination } = userCampaignParticipationOverviewsPaginatedList; - return this.serialize(campaignParticipationOverviews, pagination); - }, +const { Serializer } = jsonapiSerializer; - serialize(campaignParticipationOverview, meta) { - return new Serializer('campaign-participation-overview', { - attributes: [ - 'isShared', - 'sharedAt', - 'createdAt', - 'organizationName', - 'status', - 'campaignCode', - 'campaignTitle', - 'disabledAt', - 'masteryRate', - 'validatedStagesCount', - 'totalStagesCount', - ], - meta, - }).serialize(campaignParticipationOverview); - }, +const serializeForPaginatedList = function (userCampaignParticipationOverviewsPaginatedList) { + const { campaignParticipationOverviews, pagination } = userCampaignParticipationOverviewsPaginatedList; + return this.serialize(campaignParticipationOverviews, pagination); }; + +const serialize = function (campaignParticipationOverview, meta) { + return new Serializer('campaign-participation-overview', { + attributes: [ + 'isShared', + 'sharedAt', + 'createdAt', + 'organizationName', + 'status', + 'campaignCode', + 'campaignTitle', + 'disabledAt', + 'masteryRate', + 'validatedStagesCount', + 'totalStagesCount', + ], + meta, + }).serialize(campaignParticipationOverview); +}; + +export { serializeForPaginatedList, serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-participation-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-participation-serializer.js index b95b52f8226..45d42cb3ba6 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-participation-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-participation-serializer.js @@ -1,63 +1,65 @@ -const { Serializer, Deserializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -const Campaign = require('../../../domain/models/Campaign.js'); -const CampaignParticipation = require('../../../domain/models/CampaignParticipation.js'); +const { Serializer, Deserializer } = jsonapiSerializer; -module.exports = { - serialize(campaignParticipation) { - return new Serializer('campaign-participation', { - transform: (campaignParticipation) => { - const campaignParticipationForSerialization = new CampaignParticipation(campaignParticipation); - if (campaignParticipation.lastAssessment) { - campaignParticipationForSerialization.assessment = { id: campaignParticipation.lastAssessment.id }; - } - campaignParticipationForSerialization.trainings = null; - return campaignParticipationForSerialization; - }, +import { Campaign } from '../../../domain/models/Campaign.js'; +import { CampaignParticipation } from '../../../domain/models/CampaignParticipation.js'; - attributes: [ - 'isShared', - 'sharedAt', - 'createdAt', - 'participantExternalId', - 'campaign', - 'assessment', - 'deletedAt', - 'trainings', - ], - campaign: { - ref: 'id', - attributes: ['code', 'title', 'type'], - }, - assessment: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related(record) { - return `/api/assessments/${record.assessment.id}`; - }, +const serialize = function (campaignParticipation) { + return new Serializer('campaign-participation', { + transform: (campaignParticipation) => { + const campaignParticipationForSerialization = new CampaignParticipation(campaignParticipation); + if (campaignParticipation.lastAssessment) { + campaignParticipationForSerialization.assessment = { id: campaignParticipation.lastAssessment.id }; + } + campaignParticipationForSerialization.trainings = null; + return campaignParticipationForSerialization; + }, + + attributes: [ + 'isShared', + 'sharedAt', + 'createdAt', + 'participantExternalId', + 'campaign', + 'assessment', + 'deletedAt', + 'trainings', + ], + campaign: { + ref: 'id', + attributes: ['code', 'title', 'type'], + }, + assessment: { + ref: 'id', + ignoreRelationshipData: true, + relationshipLinks: { + related(record) { + return `/api/assessments/${record.assessment.id}`; }, }, - trainings: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/campaign-participations/${parent.id}/trainings`; - }, + }, + trainings: { + ref: 'id', + ignoreRelationshipData: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/campaign-participations/${parent.id}/trainings`; }, }, - }).serialize(campaignParticipation); - }, + }, + }).serialize(campaignParticipation); +}; - deserialize(json) { - return new Deserializer({ keyForAttribute: 'camelCase' }).deserialize(json).then((campaignParticipation) => { - let campaign; - if (json.data?.relationships?.campaign) { - campaign = new Campaign({ id: json.data.relationships.campaign.data.id }); - } +const deserialize = function (json) { + return new Deserializer({ keyForAttribute: 'camelCase' }).deserialize(json).then((campaignParticipation) => { + let campaign; + if (json.data?.relationships?.campaign) { + campaign = new Campaign({ id: json.data.relationships.campaign.data.id }); + } - return new CampaignParticipation({ ...campaignParticipation, campaign }); - }); - }, + return new CampaignParticipation({ ...campaignParticipation, campaign }); + }); }; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-participations-count-by-stage-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-participations-count-by-stage-serializer.js index 1203ff9d4b4..869dd234796 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-participations-count-by-stage-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-participations-count-by-stage-serializer.js @@ -1,13 +1,15 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(model) { - return new Serializer('campaign-participations-count-by-stage', { - id: 'campaignId', - attributes: ['data'], - data: { - attributes: ['id', 'value', 'title', 'description', 'reachedStage', 'totalStage'], - }, - }).serialize(model); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (model) { + return new Serializer('campaign-participations-count-by-stage', { + id: 'campaignId', + attributes: ['data'], + data: { + attributes: ['id', 'value', 'title', 'description', 'reachedStage', 'totalStage'], + }, + }).serialize(model); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-participations-counts-by-day-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-participations-counts-by-day-serializer.js index 1763a66353a..a94cb37618c 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-participations-counts-by-day-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-participations-counts-by-day-serializer.js @@ -1,16 +1,18 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(model) { - return new Serializer('campaign-participations-counts-by-day', { - id: 'campaignId', - attributes: ['startedParticipations', 'sharedParticipations'], - startedParticipations: { - attributes: ['day', 'count'], - }, - sharedParticipations: { - attributes: ['day', 'count'], - }, - }).serialize(model); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (model) { + return new Serializer('campaign-participations-counts-by-day', { + id: 'campaignId', + attributes: ['startedParticipations', 'sharedParticipations'], + startedParticipations: { + attributes: ['day', 'count'], + }, + sharedParticipations: { + attributes: ['day', 'count'], + }, + }).serialize(model); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-participations-counts-by-status-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-participations-counts-by-status-serializer.js index 15042889d41..0f0d5bb5d2c 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-participations-counts-by-status-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-participations-counts-by-status-serializer.js @@ -1,10 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(model) { - return new Serializer('campaign-participations-counts-by-status', { - id: 'campaignId', - attributes: ['started', 'completed', 'shared'], - }).serialize(model); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (model) { + return new Serializer('campaign-participations-counts-by-status', { + id: 'campaignId', + attributes: ['started', 'completed', 'shared'], + }).serialize(model); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-profile-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-profile-serializer.js index 09a47297624..65701e1e24c 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-profile-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-profile-serializer.js @@ -1,31 +1,33 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(campaignProfile) { - return new Serializer('campaign-profiles', { - id: 'campaignParticipationId', - attributes: [ - 'firstName', - 'lastName', - 'externalId', - 'createdAt', - 'sharedAt', - 'isShared', - 'campaignId', - 'pixScore', - 'competencesCount', - 'certifiableCompetencesCount', - 'isCertifiable', - 'competences', - 'organizationLearnerId', - ], - typeForAttribute: (attribute) => { - if (attribute === 'competences') return 'campaign-profile-competences'; - }, - competences: { - ref: 'id', - attributes: ['name', 'index', 'pixScore', 'estimatedLevel', 'areaColor'], - }, - }).serialize(campaignProfile); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (campaignProfile) { + return new Serializer('campaign-profiles', { + id: 'campaignParticipationId', + attributes: [ + 'firstName', + 'lastName', + 'externalId', + 'createdAt', + 'sharedAt', + 'isShared', + 'campaignId', + 'pixScore', + 'competencesCount', + 'certifiableCompetencesCount', + 'isCertifiable', + 'competences', + 'organizationLearnerId', + ], + typeForAttribute: (attribute) => { + if (attribute === 'competences') return 'campaign-profile-competences'; + }, + competences: { + ref: 'id', + attributes: ['name', 'index', 'pixScore', 'estimatedLevel', 'areaColor'], + }, + }).serialize(campaignProfile); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-profiles-collection-participation-summary-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-profiles-collection-participation-summary-serializer.js index c8af266d198..2ccde550087 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-profiles-collection-participation-summary-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-profiles-collection-participation-summary-serializer.js @@ -1,19 +1,21 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize({ data, pagination }) { - return new Serializer('CampaignProfilesCollectionParticipationSummary', { - ref: 'id', - attributes: [ - 'firstName', - 'lastName', - 'participantExternalId', - 'sharedAt', - 'pixScore', - 'certifiable', - 'certifiableCompetencesCount', - ], - meta: pagination, - }).serialize(data); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function ({ data, pagination }) { + return new Serializer('CampaignProfilesCollectionParticipationSummary', { + ref: 'id', + attributes: [ + 'firstName', + 'lastName', + 'participantExternalId', + 'sharedAt', + 'pixScore', + 'certifiable', + 'certifiableCompetencesCount', + ], + meta: pagination, + }).serialize(data); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-report-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-report-serializer.js index eb9546fce63..49070de5751 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-report-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-report-serializer.js @@ -1,97 +1,99 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(campaignReports, meta, { tokenForCampaignResults } = {}) { - return new Serializer('campaign', { - transform: (record) => { - const campaign = Object.assign({}, record); - campaign.tokenForCampaignResults = tokenForCampaignResults; - campaign.isArchived = record.isArchived; - return campaign; - }, - attributes: [ - 'name', - 'code', - 'title', - 'type', - 'createdAt', - 'customLandingPageText', - 'isArchived', - 'tokenForCampaignResults', - 'idPixLabel', - 'targetProfileId', - 'targetProfileDescription', - 'targetProfileName', - 'targetProfileTubesCount', - 'targetProfileThematicResultCount', - 'targetProfileHasStage', - 'ownerId', - 'ownerLastName', - 'ownerFirstName', - 'participationsCount', - 'sharedParticipationsCount', - 'averageResult', - 'campaignCollectiveResult', - 'campaignAnalysis', - 'divisions', - 'stages', - 'totalStage', - 'reachedStage', - 'badges', - 'groups', - 'multipleSendings', - ], - stages: { - ref: 'id', - included: true, - attributes: ['prescriberTitle', 'prescriberDescription', 'threshold'], - }, - badges: { - ref: 'id', - included: true, - attributes: ['title'], - }, - campaignCollectiveResult: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/campaigns/${parent.id}/collective-results`; - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (campaignReports, meta, { tokenForCampaignResults } = {}) { + return new Serializer('campaign', { + transform: (record) => { + const campaign = Object.assign({}, record); + campaign.tokenForCampaignResults = tokenForCampaignResults; + campaign.isArchived = record.isArchived; + return campaign; + }, + attributes: [ + 'name', + 'code', + 'title', + 'type', + 'createdAt', + 'customLandingPageText', + 'isArchived', + 'tokenForCampaignResults', + 'idPixLabel', + 'targetProfileId', + 'targetProfileDescription', + 'targetProfileName', + 'targetProfileTubesCount', + 'targetProfileThematicResultCount', + 'targetProfileHasStage', + 'ownerId', + 'ownerLastName', + 'ownerFirstName', + 'participationsCount', + 'sharedParticipationsCount', + 'averageResult', + 'campaignCollectiveResult', + 'campaignAnalysis', + 'divisions', + 'stages', + 'totalStage', + 'reachedStage', + 'badges', + 'groups', + 'multipleSendings', + ], + stages: { + ref: 'id', + included: true, + attributes: ['prescriberTitle', 'prescriberDescription', 'threshold'], + }, + badges: { + ref: 'id', + included: true, + attributes: ['title'], + }, + campaignCollectiveResult: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/campaigns/${parent.id}/collective-results`; }, }, - campaignAnalysis: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/campaigns/${parent.id}/analyses`; - }, + }, + campaignAnalysis: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/campaigns/${parent.id}/analyses`; }, }, - divisions: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/campaigns/${parent.id}/divisions`; - }, + }, + divisions: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/campaigns/${parent.id}/divisions`; }, }, - groups: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/campaigns/${parent.id}/groups`; - }, + }, + groups: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/campaigns/${parent.id}/groups`; }, }, - meta, - }).serialize(campaignReports); - }, + }, + meta, + }).serialize(campaignReports); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign-to-join-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign-to-join-serializer.js index a5c600dd623..8c92421ecae 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign-to-join-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign-to-join-serializer.js @@ -1,34 +1,36 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(campaignsToJoin) { - return new Serializer('campaign', { - attributes: [ - 'code', - 'title', - 'type', - 'idPixLabel', - 'customLandingPageText', - 'externalIdHelpImageUrl', - 'alternativeTextToExternalIdHelpImage', - 'isArchived', - 'isForAbsoluteNovice', - 'isRestricted', - 'isSimplifiedAccess', - 'organizationName', - 'organizationType', - 'organizationLogoUrl', - 'identityProvider', - 'organizationShowNPS', - 'organizationFormNPSUrl', - 'targetProfileName', - 'targetProfileImageUrl', - 'customResultPageText', - 'customResultPageButtonText', - 'customResultPageButtonUrl', - 'multipleSendings', - 'isFlash', - ], - }).serialize(campaignsToJoin); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (campaignsToJoin) { + return new Serializer('campaign', { + attributes: [ + 'code', + 'title', + 'type', + 'idPixLabel', + 'customLandingPageText', + 'externalIdHelpImageUrl', + 'alternativeTextToExternalIdHelpImage', + 'isArchived', + 'isForAbsoluteNovice', + 'isRestricted', + 'isSimplifiedAccess', + 'organizationName', + 'organizationType', + 'organizationLogoUrl', + 'identityProvider', + 'organizationShowNPS', + 'organizationFormNPSUrl', + 'targetProfileName', + 'targetProfileImageUrl', + 'customResultPageText', + 'customResultPageButtonText', + 'customResultPageButtonUrl', + 'multipleSendings', + 'isFlash', + ], + }).serialize(campaignsToJoin); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/campaign/target-profile-for-specifier-serializer.js b/api/lib/infrastructure/serializers/jsonapi/campaign/target-profile-for-specifier-serializer.js index 8f9e0f5e533..e2762a20e15 100644 --- a/api/lib/infrastructure/serializers/jsonapi/campaign/target-profile-for-specifier-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/campaign/target-profile-for-specifier-serializer.js @@ -1,10 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(targetProfiles, meta) { - return new Serializer('target-profile', { - attributes: ['name', 'tubeCount', 'thematicResultCount', 'hasStage', 'description', 'category'], - meta, - }).serialize(targetProfiles); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (targetProfiles, meta) { + return new Serializer('target-profile', { + attributes: ['name', 'tubeCount', 'thematicResultCount', 'hasStage', 'description', 'category'], + meta, + }).serialize(targetProfiles); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certification-candidate-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certification-candidate-serializer.js index e6262dfad0f..e9af02ae359 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certification-candidate-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certification-candidate-serializer.js @@ -1,55 +1,58 @@ -const { Serializer, Deserializer } = require('jsonapi-serializer'); -const CertificationCandidate = require('../../../domain/models/CertificationCandidate.js'); -const { WrongDateFormatError } = require('../../../domain/errors.js'); -const { isValidDate } = require('../../utils/date-utils.js'); -const _ = require('lodash'); - -module.exports = { - serialize(certificationCandidates) { - return new Serializer('certification-candidate', { - transform: function (certificationCandidate) { - return { - ...certificationCandidate, - isLinked: !_.isNil(certificationCandidate.userId), - }; - }, - attributes: [ - 'firstName', - 'lastName', - 'birthdate', - 'birthProvinceCode', - 'birthCity', - 'birthCountry', - 'email', - 'resultRecipientEmail', - 'externalId', - 'extraTimePercentage', - 'isLinked', - 'organizationLearnerId', - 'sex', - 'birthINSEECode', - 'birthPostalCode', - 'complementaryCertifications', - 'billingMode', - 'prepaymentCode', - ], - }).serialize(certificationCandidates); - }, - - async deserialize(json) { - if (json.data.attributes.birthdate && !isValidDate(json.data.attributes.birthdate, 'YYYY-MM-DD')) { - throw new WrongDateFormatError( - "La date de naissance du candidate à la certification n'a pas un format valide du type JJ/MM/AAAA" - ); - } - - delete json.data.attributes['is-linked']; - - const deserializer = new Deserializer({ keyForAttribute: 'camelCase' }); - const deserializedCandidate = await deserializer.deserialize(json); - deserializedCandidate.birthINSEECode = deserializedCandidate.birthInseeCode; - delete deserializedCandidate.birthInseeCode; - - return new CertificationCandidate(deserializedCandidate); - }, +import jsonapiSerializer from 'jsonapi-serializer'; + +const { Serializer, Deserializer } = jsonapiSerializer; + +import { CertificationCandidate } from '../../../domain/models/CertificationCandidate.js'; +import { WrongDateFormatError } from '../../../domain/errors.js'; +import { isValidDate } from '../../utils/date-utils.js'; +import _ from 'lodash'; + +const serialize = function (certificationCandidates) { + return new Serializer('certification-candidate', { + transform: function (certificationCandidate) { + return { + ...certificationCandidate, + isLinked: !_.isNil(certificationCandidate.userId), + }; + }, + attributes: [ + 'firstName', + 'lastName', + 'birthdate', + 'birthProvinceCode', + 'birthCity', + 'birthCountry', + 'email', + 'resultRecipientEmail', + 'externalId', + 'extraTimePercentage', + 'isLinked', + 'organizationLearnerId', + 'sex', + 'birthINSEECode', + 'birthPostalCode', + 'complementaryCertifications', + 'billingMode', + 'prepaymentCode', + ], + }).serialize(certificationCandidates); }; + +const deserialize = async function (json) { + if (json.data.attributes.birthdate && !isValidDate(json.data.attributes.birthdate, 'YYYY-MM-DD')) { + throw new WrongDateFormatError( + "La date de naissance du candidate à la certification n'a pas un format valide du type JJ/MM/AAAA" + ); + } + + delete json.data.attributes['is-linked']; + + const deserializer = new Deserializer({ keyForAttribute: 'camelCase' }); + const deserializedCandidate = await deserializer.deserialize(json); + deserializedCandidate.birthINSEECode = deserializedCandidate.birthInseeCode; + delete deserializedCandidate.birthInseeCode; + + return new CertificationCandidate(deserializedCandidate); +}; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certification-candidate-subscription-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certification-candidate-subscription-serializer.js index 69cf48e5718..2aa81fb5564 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certification-candidate-subscription-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certification-candidate-subscription-serializer.js @@ -1,9 +1,11 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(certificationCandidateSubscription) { - return new Serializer('certification-candidate-subscription', { - attributes: ['sessionId', 'eligibleSubscriptions', 'nonEligibleSubscriptions'], - }).serialize(certificationCandidateSubscription); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (certificationCandidateSubscription) { + return new Serializer('certification-candidate-subscription', { + attributes: ['sessionId', 'eligibleSubscriptions', 'nonEligibleSubscriptions'], + }).serialize(certificationCandidateSubscription); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certification-center-for-admin-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certification-center-for-admin-serializer.js index 7bf7b2599b7..354162afb0f 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certification-center-for-admin-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certification-center-for-admin-serializer.js @@ -1,49 +1,53 @@ -const { Serializer } = require('jsonapi-serializer'); -const CertificationCenterForAdmin = require('../../../domain/models/CertificationCenterForAdmin.js'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - deserialize({ data }) { - return new CertificationCenterForAdmin({ - createdAt: null, - dataProtectionOfficerFirstName: data.attributes['data-protection-officer-first-name'], - dataProtectionOfficerLastName: data.attributes['data-protection-officer-last-name'], - dataProtectionOfficerEmail: data.attributes['data-protection-officer-email'], - externalId: data.attributes['external-id'], - habilitations: [], - id: data.id, - name: data.attributes.name, - type: data.attributes.type, - }); - }, - serialize(certificationCenters, meta) { - return new Serializer('certification-centers', { - attributes: [ - 'name', - 'type', - 'externalId', - 'createdAt', - 'certificationCenterMemberships', - 'dataProtectionOfficerFirstName', - 'dataProtectionOfficerLastName', - 'dataProtectionOfficerEmail', - 'habilitations', - ], - certificationCenterMemberships: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/admin/certification-centers/${parent.id}/certification-center-memberships`; - }, +const { Serializer } = jsonapiSerializer; + +import { CertificationCenterForAdmin } from '../../../domain/models/CertificationCenterForAdmin.js'; + +const deserialize = function ({ data }) { + return new CertificationCenterForAdmin({ + createdAt: null, + dataProtectionOfficerFirstName: data.attributes['data-protection-officer-first-name'], + dataProtectionOfficerLastName: data.attributes['data-protection-officer-last-name'], + dataProtectionOfficerEmail: data.attributes['data-protection-officer-email'], + externalId: data.attributes['external-id'], + habilitations: [], + id: data.id, + name: data.attributes.name, + type: data.attributes.type, + }); +}; + +const serialize = function (certificationCenters, meta) { + return new Serializer('certification-centers', { + attributes: [ + 'name', + 'type', + 'externalId', + 'createdAt', + 'certificationCenterMemberships', + 'dataProtectionOfficerFirstName', + 'dataProtectionOfficerLastName', + 'dataProtectionOfficerEmail', + 'habilitations', + ], + certificationCenterMemberships: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/admin/certification-centers/${parent.id}/certification-center-memberships`; }, }, - habilitations: { - include: true, - ref: 'id', - attributes: ['key', 'label'], - }, - meta, - }).serialize(certificationCenters); - }, + }, + habilitations: { + include: true, + ref: 'id', + attributes: ['key', 'label'], + }, + meta, + }).serialize(certificationCenters); }; + +export { deserialize, serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certification-center-invitation-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certification-center-invitation-serializer.js index b6eac0c9585..109a0859afa 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certification-center-invitation-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certification-center-invitation-serializer.js @@ -1,24 +1,26 @@ -const { Serializer, Deserializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(invitations) { - return new Serializer('certification-center-invitations', { - attributes: ['certificationCenterId', 'certificationCenterName', 'status'], - }).serialize(invitations); - }, +const { Serializer, Deserializer } = jsonapiSerializer; - serializeForAdmin(invitations) { - return new Serializer('certification-center-invitations', { - attributes: ['email', 'updatedAt'], - }).serialize(invitations); - }, +const serialize = function (invitations) { + return new Serializer('certification-center-invitations', { + attributes: ['certificationCenterId', 'certificationCenterName', 'status'], + }).serialize(invitations); +}; + +const serializeForAdmin = function (invitations) { + return new Serializer('certification-center-invitations', { + attributes: ['email', 'updatedAt'], + }).serialize(invitations); +}; - deserializeForAdmin(payload) { - return new Deserializer().deserialize(payload).then((record) => { - return { - email: record.email, - language: record.language, - }; - }); - }, +const deserializeForAdmin = function (payload) { + return new Deserializer().deserialize(payload).then((record) => { + return { + email: record.email, + language: record.language, + }; + }); }; + +export { serialize, serializeForAdmin, deserializeForAdmin }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certification-center-membership-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certification-center-membership-serializer.js index b92a86cf60f..c4b3010665a 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certification-center-membership-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certification-center-membership-serializer.js @@ -1,59 +1,61 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(certificationCenterMemberships) { - return new Serializer('certificationCenterMemberships', { - transform: function (record) { - record.certificationCenter.sessions = []; - return record; - }, - attributes: ['createdAt', 'certificationCenter', 'user'], - certificationCenter: { +const { Serializer } = jsonapiSerializer; + +const serialize = function (certificationCenterMemberships) { + return new Serializer('certificationCenterMemberships', { + transform: function (record) { + record.certificationCenter.sessions = []; + return record; + }, + attributes: ['createdAt', 'certificationCenter', 'user'], + certificationCenter: { + ref: 'id', + included: true, + attributes: ['name', 'type', 'sessions'], + sessions: { ref: 'id', - included: true, - attributes: ['name', 'type', 'sessions'], - sessions: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/certification-centers/${parent.id}/sessions`; - }, + ignoreRelationshipData: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/certification-centers/${parent.id}/sessions`; }, }, }, - user: { - ref: 'id', - included: true, - attributes: ['firstName', 'lastName', 'email'], - }, - }).serialize(certificationCenterMemberships); - }, - - serializeMembers(certificationCenterMemberships) { - return new Serializer('members', { - transform: function (record) { - const { id, firstName, lastName } = record.user; - return { id, firstName, lastName, isReferer: record.isReferer }; - }, + }, + user: { ref: 'id', - attributes: ['firstName', 'lastName', 'isReferer'], - }).serialize(certificationCenterMemberships); - }, + included: true, + attributes: ['firstName', 'lastName', 'email'], + }, + }).serialize(certificationCenterMemberships); +}; - serializeForAdmin(certificationCenterMemberships) { - return new Serializer('certification-center-memberships', { - attributes: ['createdAt', 'certificationCenter', 'user'], - certificationCenter: { - ref: 'id', - included: true, - attributes: ['name', 'type', 'externalId'], - }, - user: { - ref: 'id', - included: true, - attributes: ['firstName', 'lastName', 'email'], - }, - }).serialize(certificationCenterMemberships); - }, +const serializeMembers = function (certificationCenterMemberships) { + return new Serializer('members', { + transform: function (record) { + const { id, firstName, lastName } = record.user; + return { id, firstName, lastName, isReferer: record.isReferer }; + }, + ref: 'id', + attributes: ['firstName', 'lastName', 'isReferer'], + }).serialize(certificationCenterMemberships); +}; + +const serializeForAdmin = function (certificationCenterMemberships) { + return new Serializer('certification-center-memberships', { + attributes: ['createdAt', 'certificationCenter', 'user'], + certificationCenter: { + ref: 'id', + included: true, + attributes: ['name', 'type', 'externalId'], + }, + user: { + ref: 'id', + included: true, + attributes: ['firstName', 'lastName', 'email'], + }, + }).serialize(certificationCenterMemberships); }; + +export { serialize, serializeMembers, serializeForAdmin }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certification-center-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certification-center-serializer.js index 2fa272eb3ed..dfb64561a8a 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certification-center-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certification-center-serializer.js @@ -1,38 +1,40 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -const CertificationCenter = require('../../../domain/models/CertificationCenter.js'); +const { Serializer } = jsonapiSerializer; -module.exports = { - serialize(certificationCenters, meta) { - return new Serializer('certification-center', { - attributes: ['name', 'type', 'externalId', 'createdAt', 'certificationCenterMemberships', 'habilitations'], - certificationCenterMemberships: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/certification-centers/${parent.id}/certification-center-memberships`; - }, +import { CertificationCenter } from '../../../domain/models/CertificationCenter.js'; + +const serialize = function (certificationCenters, meta) { + return new Serializer('certification-center', { + attributes: ['name', 'type', 'externalId', 'createdAt', 'certificationCenterMemberships', 'habilitations'], + certificationCenterMemberships: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/certification-centers/${parent.id}/certification-center-memberships`; }, }, - habilitations: { - include: true, - ref: 'id', - attributes: ['key', 'label'], - }, - meta, - }).serialize(certificationCenters); - }, + }, + habilitations: { + include: true, + ref: 'id', + attributes: ['key', 'label'], + }, + meta, + }).serialize(certificationCenters); +}; - deserialize(jsonAPI) { - return new CertificationCenter({ - id: jsonAPI.data.id, - name: jsonAPI.data.attributes.name, - type: jsonAPI.data.attributes.type, - externalId: jsonAPI.data.attributes['external-id'], - createdAt: null, - habilitations: [], - }); - }, +const deserialize = function (jsonAPI) { + return new CertificationCenter({ + id: jsonAPI.data.id, + name: jsonAPI.data.attributes.name, + type: jsonAPI.data.attributes.type, + externalId: jsonAPI.data.attributes['external-id'], + createdAt: null, + habilitations: [], + }); }; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certification-course-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certification-course-serializer.js index aa6336b393b..5bfbeaf0be0 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certification-course-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certification-course-serializer.js @@ -1,24 +1,26 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(certificationCourse) { - return new Serializer('certification-course', { - transform(currentCertificationCourse) { - const certificationCourseDTO = currentCertificationCourse.toDTO(); - certificationCourseDTO.nbChallenges = certificationCourseDTO?.challenges?.length ?? 0; - certificationCourseDTO.examinerComment = certificationCourseDTO.certificationIssueReports?.[0]?.description; - return certificationCourseDTO; - }, - attributes: ['assessment', 'nbChallenges', 'examinerComment', 'hasSeenEndTestScreen', 'firstName', 'lastName'], - assessment: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related(record, current) { - return `/api/assessments/${current.id}`; - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (certificationCourse) { + return new Serializer('certification-course', { + transform(currentCertificationCourse) { + const certificationCourseDTO = currentCertificationCourse.toDTO(); + certificationCourseDTO.nbChallenges = certificationCourseDTO?.challenges?.length ?? 0; + certificationCourseDTO.examinerComment = certificationCourseDTO.certificationIssueReports?.[0]?.description; + return certificationCourseDTO; + }, + attributes: ['assessment', 'nbChallenges', 'examinerComment', 'hasSeenEndTestScreen', 'firstName', 'lastName'], + assessment: { + ref: 'id', + ignoreRelationshipData: true, + relationshipLinks: { + related(record, current) { + return `/api/assessments/${current.id}`; }, }, - }).serialize(certificationCourse); - }, + }, + }).serialize(certificationCourse); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certification-details-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certification-details-serializer.js index 9f27525bf0c..ef16380229d 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certification-details-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certification-details-serializer.js @@ -1,18 +1,20 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(certificationDetails) { - return new Serializer('certification-details', { - attributes: [ - 'userId', - 'createdAt', - 'completedAt', - 'status', - 'totalScore', - 'percentageCorrectAnswers', - 'competencesWithMark', - 'listChallengesAndAnswers', - ], - }).serialize(certificationDetails); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (certificationDetails) { + return new Serializer('certification-details', { + attributes: [ + 'userId', + 'createdAt', + 'completedAt', + 'status', + 'totalScore', + 'percentageCorrectAnswers', + 'competencesWithMark', + 'listChallengesAndAnswers', + ], + }).serialize(certificationDetails); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certification-eligibility-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certification-eligibility-serializer.js index 967a51ca654..fb81bed7c50 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certification-eligibility-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certification-eligibility-serializer.js @@ -1,14 +1,16 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(certificationEligibility) { - return new Serializer('isCertifiables', { - transform(certificationEligibility) { - const clone = Object.assign({}, certificationEligibility); - clone.isCertifiable = clone.pixCertificationEligible; - return clone; - }, - attributes: ['isCertifiable', 'eligibleComplementaryCertifications'], - }).serialize(certificationEligibility); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (certificationEligibility) { + return new Serializer('isCertifiables', { + transform(certificationEligibility) { + const clone = Object.assign({}, certificationEligibility); + clone.isCertifiable = clone.pixCertificationEligible; + return clone; + }, + attributes: ['isCertifiable', 'eligibleComplementaryCertifications'], + }).serialize(certificationEligibility); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certification-issue-report-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certification-issue-report-serializer.js index e712c59f8de..f2ee9596321 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certification-issue-report-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certification-issue-report-serializer.js @@ -1,25 +1,27 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(certificationIssueReports) { - return new Serializer('certification-issue-report', { - attributes: ['category', 'description', 'subcategory', 'questionNumber'], - transform: function (certificationIssueReport) { - return Object.assign({}, certificationIssueReport); - }, - }).serialize(certificationIssueReports); - }, +const { Serializer } = jsonapiSerializer; - deserialize(request) { - const certificationCourseId = parseInt(request.params.id); - const attributes = request.payload.data.attributes; +const serialize = function (certificationIssueReports) { + return new Serializer('certification-issue-report', { + attributes: ['category', 'description', 'subcategory', 'questionNumber'], + transform: function (certificationIssueReport) { + return Object.assign({}, certificationIssueReport); + }, + }).serialize(certificationIssueReports); +}; + +const deserialize = function (request) { + const certificationCourseId = parseInt(request.params.id); + const attributes = request.payload.data.attributes; - return { - certificationCourseId, - category: attributes.category, - description: attributes.description, - subcategory: attributes.subcategory, - questionNumber: attributes['question-number'], - }; - }, + return { + certificationCourseId, + category: attributes.category, + description: attributes.description, + subcategory: attributes.subcategory, + questionNumber: attributes['question-number'], + }; }; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certification-point-of-contact-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certification-point-of-contact-serializer.js index 2bd3939a177..3144d209290 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certification-point-of-contact-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certification-point-of-contact-serializer.js @@ -1,61 +1,63 @@ -const _ = require('lodash'); -const { Serializer } = require('jsonapi-serializer'); +import _ from 'lodash'; +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(certificationPointOfContact) { - return new Serializer('certification-point-of-contact', { +const { Serializer } = jsonapiSerializer; + +const serialize = function (certificationPointOfContact) { + return new Serializer('certification-point-of-contact', { + attributes: [ + 'firstName', + 'lastName', + 'email', + 'lang', + 'pixCertifTermsOfServiceAccepted', + 'allowedCertificationCenterAccesses', + ], + allowedCertificationCenterAccesses: { + ref: 'id', + included: true, attributes: [ - 'firstName', - 'lastName', - 'email', - 'lang', - 'pixCertifTermsOfServiceAccepted', - 'allowedCertificationCenterAccesses', + 'name', + 'externalId', + 'type', + 'isRelatedToManagingStudentsOrganization', + 'isAccessBlockedCollege', + 'isAccessBlockedLycee', + 'isAccessBlockedAEFE', + 'isAccessBlockedAgri', + 'relatedOrganizationTags', + 'habilitations', + 'pixCertifScoBlockedAccessDateLycee', + 'pixCertifScoBlockedAccessDateCollege', ], - allowedCertificationCenterAccesses: { - ref: 'id', - included: true, - attributes: [ - 'name', - 'externalId', - 'type', - 'isRelatedToManagingStudentsOrganization', - 'isAccessBlockedCollege', - 'isAccessBlockedLycee', - 'isAccessBlockedAEFE', - 'isAccessBlockedAgri', - 'relatedOrganizationTags', - 'habilitations', - 'pixCertifScoBlockedAccessDateLycee', - 'pixCertifScoBlockedAccessDateCollege', - ], - }, - typeForAttribute: function (attribute) { - if (attribute === 'allowedCertificationCenterAccesses') { - return 'allowed-certification-center-access'; + }, + typeForAttribute: function (attribute) { + if (attribute === 'allowedCertificationCenterAccesses') { + return 'allowed-certification-center-access'; + } + return attribute; + }, + transform(certificationPointOfContact) { + const transformedCertificationPointOfContact = _.clone(certificationPointOfContact); + transformedCertificationPointOfContact.allowedCertificationCenterAccesses = _.map( + certificationPointOfContact.allowedCertificationCenterAccesses, + (access) => { + return { + ...access, + habilitations: access.habilitations, + isAccessBlockedCollege: access.isAccessBlockedCollege(), + isAccessBlockedLycee: access.isAccessBlockedLycee(), + isAccessBlockedAEFE: access.isAccessBlockedAEFE(), + isAccessBlockedAgri: access.isAccessBlockedAgri(), + pixCertifScoBlockedAccessDateCollege: access.pixCertifScoBlockedAccessDateCollege, + pixCertifScoBlockedAccessDateLycee: access.pixCertifScoBlockedAccessDateLycee, + }; } - return attribute; - }, - transform(certificationPointOfContact) { - const transformedCertificationPointOfContact = _.clone(certificationPointOfContact); - transformedCertificationPointOfContact.allowedCertificationCenterAccesses = _.map( - certificationPointOfContact.allowedCertificationCenterAccesses, - (access) => { - return { - ...access, - habilitations: access.habilitations, - isAccessBlockedCollege: access.isAccessBlockedCollege(), - isAccessBlockedLycee: access.isAccessBlockedLycee(), - isAccessBlockedAEFE: access.isAccessBlockedAEFE(), - isAccessBlockedAgri: access.isAccessBlockedAgri(), - pixCertifScoBlockedAccessDateCollege: access.pixCertifScoBlockedAccessDateCollege, - pixCertifScoBlockedAccessDateLycee: access.pixCertifScoBlockedAccessDateLycee, - }; - } - ); + ); - return transformedCertificationPointOfContact; - }, - }).serialize(certificationPointOfContact); - }, + return transformedCertificationPointOfContact; + }, + }).serialize(certificationPointOfContact); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certification-report-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certification-report-serializer.js index 8d56136d27d..0383ae93984 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certification-report-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certification-report-serializer.js @@ -1,30 +1,32 @@ -const { Serializer, Deserializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -const CertificationReport = require('../../../domain/models/CertificationReport.js'); +const { Serializer, Deserializer } = jsonapiSerializer; -module.exports = { - serialize(certificationReports) { - return new Serializer('certification-report', { - attributes: [ - 'certificationCourseId', - 'firstName', - 'lastName', - 'examinerComment', - 'hasSeenEndTestScreen', - 'certificationIssueReports', - 'isCompleted', - 'abortReason', - ], - certificationIssueReports: { - ref: 'id', - attributes: ['category', 'description', 'subcategory', 'questionNumber'], - }, - }).serialize(certificationReports); - }, +import { CertificationReport } from '../../../domain/models/CertificationReport.js'; - async deserialize(jsonApiData) { - const deserializer = new Deserializer({ keyForAttribute: 'camelCase' }); - const deserializedReport = await deserializer.deserialize(jsonApiData); - return new CertificationReport(deserializedReport); - }, +const serialize = function (certificationReports) { + return new Serializer('certification-report', { + attributes: [ + 'certificationCourseId', + 'firstName', + 'lastName', + 'examinerComment', + 'hasSeenEndTestScreen', + 'certificationIssueReports', + 'isCompleted', + 'abortReason', + ], + certificationIssueReports: { + ref: 'id', + attributes: ['category', 'description', 'subcategory', 'questionNumber'], + }, + }).serialize(certificationReports); }; + +const deserialize = async function (jsonApiData) { + const deserializer = new Deserializer({ keyForAttribute: 'camelCase' }); + const deserializedReport = await deserializer.deserialize(jsonApiData); + return new CertificationReport(deserializedReport); +}; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certification-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certification-serializer.js index 06e9d48978f..d329413836d 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certification-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certification-serializer.js @@ -1,77 +1,80 @@ -const _ = require('lodash'); +import _ from 'lodash'; +import jsonapiSerializer from 'jsonapi-serializer'; -const { Serializer, Deserializer } = require('jsonapi-serializer'); +const { Serializer, Deserializer } = jsonapiSerializer; -const { WrongDateFormatError } = require('../../../domain/errors.js'); -const { NO_EXAMINER_COMMENT } = require('../../../domain/models/CertificationReport.js'); -const { isValidDate } = require('../../utils/date-utils.js'); -const CertificationCourse = require('../../../domain/models/CertificationCourse.js'); +import { WrongDateFormatError } from '../../../domain/errors.js'; +import { NO_EXAMINER_COMMENT } from '../../../domain/models/CertificationReport.js'; +import { isValidDate } from '../../utils/date-utils.js'; +import { CertificationCourse } from '../../../domain/models/CertificationCourse.js'; -module.exports = { - serializeFromCertificationCourse(certificationCourse) { - return new Serializer('certifications', { - transform: (certificationCourse) => { - return { - ..._.omit(certificationCourse.toDTO(), 'maxReachableLevelOnCertificationDate'), - }; - }, - attributes: [ - 'firstName', - 'lastName', - 'birthplace', - 'birthdate', - 'sex', - 'externalId', - 'maxReachableLevelOnCertificationDate', - 'birthINSEECode', - 'birthPostalCode', - 'birthCountry', - ], - }).serialize(certificationCourse); - }, - async deserializeCertificationCandidateModificationCommand(json, certificationCourseId, userId) { - const deserializer = new Deserializer({ keyForAttribute: 'camelCase' }); - const deserializedRawCommand = await deserializer.deserialize(json); - if (deserializedRawCommand.birthdate) { - if (!isValidDate(deserializedRawCommand.birthdate, 'YYYY-MM-DD')) { - throw new WrongDateFormatError(); - } +const serializeFromCertificationCourse = function (certificationCourse) { + return new Serializer('certifications', { + transform: (certificationCourse) => { + return { + ..._.omit(certificationCourse.toDTO(), 'maxReachableLevelOnCertificationDate'), + }; + }, + attributes: [ + 'firstName', + 'lastName', + 'birthplace', + 'birthdate', + 'sex', + 'externalId', + 'maxReachableLevelOnCertificationDate', + 'birthINSEECode', + 'birthPostalCode', + 'birthCountry', + ], + }).serialize(certificationCourse); +}; + +const deserializeCertificationCandidateModificationCommand = async function (json, certificationCourseId, userId) { + const deserializer = new Deserializer({ keyForAttribute: 'camelCase' }); + const deserializedRawCommand = await deserializer.deserialize(json); + if (deserializedRawCommand.birthdate) { + if (!isValidDate(deserializedRawCommand.birthdate, 'YYYY-MM-DD')) { + throw new WrongDateFormatError(); } - return { - ..._.pick(deserializedRawCommand, [ - 'firstName', - 'lastName', - 'birthplace', - 'birthdate', - 'birthCountry', - 'birthPostalCode', - 'sex', - ]), - birthINSEECode: deserializedRawCommand.birthInseeCode, - userId, - certificationCourseId, - }; - }, - deserialize(json) { - const birthdate = json.data.attributes.birthdate; + } + return { + ..._.pick(deserializedRawCommand, [ + 'firstName', + 'lastName', + 'birthplace', + 'birthdate', + 'birthCountry', + 'birthPostalCode', + 'sex', + ]), + birthINSEECode: deserializedRawCommand.birthInseeCode, + userId, + certificationCourseId, + }; +}; + +const deserialize = function (json) { + const birthdate = json.data.attributes.birthdate; - return new Deserializer({ keyForAttribute: 'camelCase' }).deserialize(json).then((certification) => { - if (birthdate) { - if (!isValidDate(birthdate, 'YYYY-MM-DD')) { - return Promise.reject(new WrongDateFormatError()); - } + return new Deserializer({ keyForAttribute: 'camelCase' }).deserialize(json).then((certification) => { + if (birthdate) { + if (!isValidDate(birthdate, 'YYYY-MM-DD')) { + return Promise.reject(new WrongDateFormatError()); } + } - const certificationDomainModel = new CertificationCourse(certification); + const certificationDomainModel = new CertificationCourse(certification); - if (!_isOmitted(certification.examinerComment) && _hasNoExaminerComment(certification.examinerComment)) { - certificationDomainModel.examinerComment = NO_EXAMINER_COMMENT; - } - return certificationDomainModel; - }); - }, + if (!_isOmitted(certification.examinerComment) && _hasNoExaminerComment(certification.examinerComment)) { + certificationDomainModel.examinerComment = NO_EXAMINER_COMMENT; + } + return certificationDomainModel; + }); }; +export { serializeFromCertificationCourse, deserializeCertificationCandidateModificationCommand, deserialize }; + function _isOmitted(aString) { return _.isUndefined(aString); } diff --git a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/certification-ls-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/certification-ls-serializer.js index 603e683842d..5bd2a34ef99 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/certification-ls-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/certification-ls-serializer.js @@ -1,4 +1,6 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; + +const { Serializer } = jsonapiSerializer; const attributes = [ 'firstName', @@ -16,24 +18,24 @@ const attributes = [ 'certificationCenter', ]; -module.exports = { - serialize(certificate) { - return new Serializer('certificationsResults', { - attributes: ['certifications', 'competences'], - certifications: { - attributes: [...attributes], - competenceResults: { - attributes: ['competence-id', 'level'], - }, +const serialize = function (certificate) { + return new Serializer('certificationsResults', { + attributes: ['certifications', 'competences'], + certifications: { + attributes: [...attributes], + competenceResults: { + attributes: ['competence-id', 'level'], }, - competences: { + }, + competences: { + ref: 'id', + attributes: ['name', 'area'], + area: { ref: 'id', - attributes: ['name', 'area'], - area: { - ref: 'id', - attributes: ['name'], - }, + attributes: ['name'], }, - }).serialize(certificate); - }, + }, + }).serialize(certificate); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-area-for-ls.js b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-area-for-ls.js index ab7215b2d2e..aa4a3b645cb 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-area-for-ls.js +++ b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-area-for-ls.js @@ -1,6 +1,8 @@ -module.exports = function buildArea({ id, name } = {}) { +const buildArea = function ({ id, name } = {}) { return { id, name, }; }; + +export { buildArea }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-certification-result-for-ls.js b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-certification-result-for-ls.js index ff34fb34099..17f1e873edb 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-certification-result-for-ls.js +++ b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-certification-result-for-ls.js @@ -1,9 +1,8 @@ -const Certificate = require('../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Certificate.js'); -const CompetenceResults = require('../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/CompetenceResults.js'); -const CertificationsResults = require('../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/CertificationsResults.js'); - -const buildCompetenceForLS = require('./build-competences-for-ls.js'); -const buildAreaForLS = require('./build-area-for-ls.js'); +import { Certificate } from '../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Certificate.js'; +import { CompetenceResults } from '../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/CompetenceResults.js'; +import { CertificationsResults } from '../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/CertificationsResults.js'; +import { buildCompetenceForLS } from './build-competences-for-ls.js'; +import { buildArea as buildAreaForLS } from './build-area-for-ls.js'; function buildReferentialOfCompetences() { const area1 = buildAreaForLS({ @@ -99,4 +98,4 @@ function buildCertificationsResults(certifications, competences = buildReferenti return new CertificationsResults({ certifications, competences }); } -module.exports = { buildCertificateForLS, buildReferentialOfCompetences, buildCertificationsResults }; +export { buildCertificateForLS, buildReferentialOfCompetences, buildCertificationsResults }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-competences-for-ls.js b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-competences-for-ls.js index 553864bd6a8..1fcf01ef48f 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-competences-for-ls.js +++ b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-competences-for-ls.js @@ -1,12 +1,12 @@ -const Competence = require('../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Competence.js'); -const { - buildAreaForLS, -} = require('../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-area-for-ls.js'); +import { Competence } from '../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Competence.js'; +import { buildArea as buildAreaForLS } from '../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-area-for-ls.js'; -module.exports = function buildCompetenceForLS({ id, name, area = buildAreaForLS() } = {}) { +const buildCompetenceForLS = function ({ id, name, area = buildAreaForLS() } = {}) { return new Competence({ id, name, area, }); }; + +export { buildCompetenceForLS }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Area.js b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Area.js index 9afd76177e3..da1367e3348 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Area.js +++ b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Area.js @@ -5,4 +5,4 @@ class Area { } } -module.exports = Area; +export { Area }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Certificate.js b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Certificate.js index ba8cc64d32b..246f1d89739 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Certificate.js +++ b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Certificate.js @@ -32,4 +32,4 @@ class Certificate { } } -module.exports = Certificate; +export { Certificate }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/CertificationsResults.js b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/CertificationsResults.js index d23780ecc92..c237be0fdf8 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/CertificationsResults.js +++ b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/CertificationsResults.js @@ -5,4 +5,4 @@ class CertificationsResults { } } -module.exports = CertificationsResults; +export { CertificationsResults }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Competence.js b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Competence.js index 6f536548c2b..106332acfd3 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Competence.js +++ b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/Competence.js @@ -6,4 +6,4 @@ class Competence { } } -module.exports = Competence; +export { Competence }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/CompetenceResults.js b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/CompetenceResults.js index be66ab45cac..36df026e602 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/CompetenceResults.js +++ b/api/lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/response-objects/CompetenceResults.js @@ -4,4 +4,4 @@ class CompetenceResults { } } -module.exports = CompetenceResults; +export { CompetenceResults }; diff --git a/api/lib/infrastructure/serializers/jsonapi/certified-profile-serializer.js b/api/lib/infrastructure/serializers/jsonapi/certified-profile-serializer.js index 65e50753133..a082b6c0ce8 100644 --- a/api/lib/infrastructure/serializers/jsonapi/certified-profile-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/certified-profile-serializer.js @@ -1,35 +1,40 @@ -const { Serializer } = require('jsonapi-serializer'); -const kebabCase = require('lodash/kebabCase'); +import jsonapiSerializer from 'jsonapi-serializer'; + +const { kebabCase } = lodash; + +const { Serializer } = jsonapiSerializer; + +import lodash from 'lodash'; const typeForAttribute = (attribute) => { return kebabCase(attribute); }; -module.exports = { - serialize(certifiedProfile) { - return new Serializer('certified-profiles', { - typeForAttribute, - attributes: ['userId', 'certifiedSkills', 'certifiedTubes', 'certifiedCompetences', 'certifiedAreas'], - certifiedSkills: { - ref: 'id', - included: true, - attributes: ['name', 'tubeId', 'hasBeenAskedInCertif', 'difficulty'], - }, - certifiedTubes: { - ref: 'id', - included: true, - attributes: ['name', 'competenceId'], - }, - certifiedCompetences: { - ref: 'id', - included: true, - attributes: ['name', 'areaId', 'origin'], - }, - certifiedAreas: { - ref: 'id', - included: true, - attributes: ['name', 'color'], - }, - }).serialize(certifiedProfile); - }, +const serialize = function (certifiedProfile) { + return new Serializer('certified-profiles', { + typeForAttribute, + attributes: ['userId', 'certifiedSkills', 'certifiedTubes', 'certifiedCompetences', 'certifiedAreas'], + certifiedSkills: { + ref: 'id', + included: true, + attributes: ['name', 'tubeId', 'hasBeenAskedInCertif', 'difficulty'], + }, + certifiedTubes: { + ref: 'id', + included: true, + attributes: ['name', 'competenceId'], + }, + certifiedCompetences: { + ref: 'id', + included: true, + attributes: ['name', 'areaId', 'origin'], + }, + certifiedAreas: { + ref: 'id', + included: true, + attributes: ['name', 'color'], + }, + }).serialize(certifiedProfile); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/challenge-serializer.js b/api/lib/infrastructure/serializers/jsonapi/challenge-serializer.js index 830ae22909d..465bcd60654 100644 --- a/api/lib/infrastructure/serializers/jsonapi/challenge-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/challenge-serializer.js @@ -1,35 +1,38 @@ -const { Serializer } = require('jsonapi-serializer'); -const _ = require('lodash'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(challenges) { - return new Serializer('challenge', { - attributes: [ - 'type', - 'instruction', - 'competence', - 'proposals', - 'timer', - 'illustrationUrl', - 'attachments', - 'competence', - 'embedUrl', - 'embedTitle', - 'embedHeight', - 'illustrationAlt', - 'format', - 'autoReply', - 'alternativeInstruction', - 'focused', - 'shuffled', - ], - transform: (record) => { - const challenge = _.pickBy(record, (value) => !_.isUndefined(value)); +const { Serializer } = jsonapiSerializer; - challenge.competence = challenge.competenceId || 'N/A'; +import _ from 'lodash'; - return challenge; - }, - }).serialize(challenges); - }, +const serialize = function (challenges) { + return new Serializer('challenge', { + attributes: [ + 'type', + 'instruction', + 'competence', + 'proposals', + 'timer', + 'illustrationUrl', + 'attachments', + 'competence', + 'embedUrl', + 'embedTitle', + 'embedHeight', + 'illustrationAlt', + 'format', + 'autoReply', + 'alternativeInstruction', + 'focused', + 'shuffled', + ], + transform: (record) => { + const challenge = _.pickBy(record, (value) => !_.isUndefined(value)); + + challenge.competence = challenge.competenceId || 'N/A'; + + return challenge; + }, + }).serialize(challenges); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/competence-evaluation-serializer.js b/api/lib/infrastructure/serializers/jsonapi/competence-evaluation-serializer.js index 6d0aa204961..be2012b56b1 100644 --- a/api/lib/infrastructure/serializers/jsonapi/competence-evaluation-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/competence-evaluation-serializer.js @@ -1,27 +1,29 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(competenceEvaluations) { - return new Serializer('competence-evaluations', { - transform(current) { - const competenceEvaluation = Object.assign({}, current); - competenceEvaluation.assessment = { id: current.assessmentId }; - return competenceEvaluation; - }, - attributes: ['createdAt', 'updatedAt', 'userId', 'competenceId', 'assessment', 'scorecard', 'status'], - assessment: { - ref: 'id', - included: false, - }, - scorecard: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related: function (record) { - return `/api/scorecards/${record.userId}_${record.competenceId}`; - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (competenceEvaluations) { + return new Serializer('competence-evaluations', { + transform(current) { + const competenceEvaluation = Object.assign({}, current); + competenceEvaluation.assessment = { id: current.assessmentId }; + return competenceEvaluation; + }, + attributes: ['createdAt', 'updatedAt', 'userId', 'competenceId', 'assessment', 'scorecard', 'status'], + assessment: { + ref: 'id', + included: false, + }, + scorecard: { + ref: 'id', + ignoreRelationshipData: true, + relationshipLinks: { + related: function (record) { + return `/api/scorecards/${record.userId}_${record.competenceId}`; }, }, - }).serialize(competenceEvaluations); - }, + }, + }).serialize(competenceEvaluations); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/complementary-certification-serializer.js b/api/lib/infrastructure/serializers/jsonapi/complementary-certification-serializer.js index 25f58254984..3b8ccf2b691 100644 --- a/api/lib/infrastructure/serializers/jsonapi/complementary-certification-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/complementary-certification-serializer.js @@ -1,18 +1,21 @@ -const { Serializer } = require('jsonapi-serializer'); -const ComplementaryCertification = require('../../../domain/models/ComplementaryCertification.js'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(habilitation) { - return new Serializer('habilitation', { - attributes: ['label', 'key'], - }).serialize(habilitation); - }, +const { Serializer } = jsonapiSerializer; - deserialize(jsonAPI) { - return new ComplementaryCertification({ - id: jsonAPI.data.id, - label: jsonAPI.data.attributes.label, - key: jsonAPI.data.attributes.key, - }); - }, +import { ComplementaryCertification } from '../../../domain/models/ComplementaryCertification.js'; + +const serialize = function (habilitation) { + return new Serializer('habilitation', { + attributes: ['label', 'key'], + }).serialize(habilitation); +}; + +const deserialize = function (jsonAPI) { + return new ComplementaryCertification({ + id: jsonAPI.data.id, + label: jsonAPI.data.attributes.label, + key: jsonAPI.data.attributes.key, + }); }; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/correction-serializer.js b/api/lib/infrastructure/serializers/jsonapi/correction-serializer.js index 0877a37647c..99fb10e5c1c 100644 --- a/api/lib/infrastructure/serializers/jsonapi/correction-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/correction-serializer.js @@ -1,38 +1,41 @@ -const { Serializer } = require('jsonapi-serializer'); -const tutorialAttributes = require('./tutorial-attributes.js'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(correction) { - return new Serializer('corrections', { - transform: (record) => ({ - ...correction, - hint: record.hint?.value, - tutorials: correction.tutorials.map((tutorial) => ({ - ...tutorial, - userSavedTutorial: { ...tutorial.userSavedTutorial }, - tutorialEvaluation: { ...tutorial.tutorialEvaluation }, - })), - learningMoreTutorials: correction.learningMoreTutorials.map((tutorial) => ({ - ...tutorial, - userSavedTutorial: { ...tutorial.userSavedTutorial }, - tutorialEvaluation: { ...tutorial.tutorialEvaluation }, - })), - }), - attributes: ['solution', 'solutionToDisplay', 'hint', 'tutorials', 'learningMoreTutorials'], - tutorials: tutorialAttributes, - learningMoreTutorials: tutorialAttributes, - typeForAttribute(attribute) { - switch (attribute) { - case 'tutorialEvaluation': - return 'tutorial-evaluation'; - case 'userSavedTutorial': - return 'user-saved-tutorial'; - case 'learningMoreTutorials': - return 'tutorials'; - default: - return attribute; - } - }, - }).serialize(correction); - }, +const { Serializer } = jsonapiSerializer; + +import { tutorialAttributes } from './tutorial-attributes.js'; + +const serialize = function (correction) { + return new Serializer('corrections', { + transform: (record) => ({ + ...correction, + hint: record.hint?.value, + tutorials: correction.tutorials.map((tutorial) => ({ + ...tutorial, + userSavedTutorial: { ...tutorial.userSavedTutorial }, + tutorialEvaluation: { ...tutorial.tutorialEvaluation }, + })), + learningMoreTutorials: correction.learningMoreTutorials.map((tutorial) => ({ + ...tutorial, + userSavedTutorial: { ...tutorial.userSavedTutorial }, + tutorialEvaluation: { ...tutorial.tutorialEvaluation }, + })), + }), + attributes: ['solution', 'solutionToDisplay', 'hint', 'tutorials', 'learningMoreTutorials'], + tutorials: tutorialAttributes, + learningMoreTutorials: tutorialAttributes, + typeForAttribute(attribute) { + switch (attribute) { + case 'tutorialEvaluation': + return 'tutorial-evaluation'; + case 'userSavedTutorial': + return 'user-saved-tutorial'; + case 'learningMoreTutorials': + return 'tutorials'; + default: + return attribute; + } + }, + }).serialize(correction); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/country-serializer.js b/api/lib/infrastructure/serializers/jsonapi/country-serializer.js index 9c70500bb13..952edf84290 100644 --- a/api/lib/infrastructure/serializers/jsonapi/country-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/country-serializer.js @@ -1,12 +1,14 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(country) { - return new Serializer('country', { - attributes: ['code', 'name'], - transform(country) { - return { ...country, id: `${country.code}_${country.matcher}` }; - }, - }).serialize(country); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (country) { + return new Serializer('country', { + attributes: ['code', 'name'], + transform(country) { + return { ...country, id: `${country.code}_${country.matcher}` }; + }, + }).serialize(country); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/course-serializer.js b/api/lib/infrastructure/serializers/jsonapi/course-serializer.js index 1891d6d5188..1e1dd66533a 100644 --- a/api/lib/infrastructure/serializers/jsonapi/course-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/course-serializer.js @@ -1,9 +1,11 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(courses) { - return new Serializer('course', { - attributes: ['name', 'description', 'nbChallenges', 'imageUrl'], - }).serialize(courses); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (courses) { + return new Serializer('course', { + attributes: ['name', 'description', 'nbChallenges', 'imageUrl'], + }).serialize(courses); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/deserializer.js b/api/lib/infrastructure/serializers/jsonapi/deserializer.js index 81708ffbb2d..c6ec99dd06c 100644 --- a/api/lib/infrastructure/serializers/jsonapi/deserializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/deserializer.js @@ -1,7 +1,9 @@ -const { Deserializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; + +const { Deserializer } = jsonapiSerializer; const deserializer = new Deserializer({ keyForAttribute: 'camelCase', }); -module.exports = deserializer; +export { deserializer }; diff --git a/api/lib/infrastructure/serializers/jsonapi/division-serializer.js b/api/lib/infrastructure/serializers/jsonapi/division-serializer.js index 8287b4e4cd8..10f7706c061 100644 --- a/api/lib/infrastructure/serializers/jsonapi/division-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/division-serializer.js @@ -1,10 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(divisions) { - return new Serializer('divisions', { - id: 'name', - attributes: ['name'], - }).serialize(divisions); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (divisions) { + return new Serializer('divisions', { + id: 'name', + attributes: ['name'], + }).serialize(divisions); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/email-verification-serializer.js b/api/lib/infrastructure/serializers/jsonapi/email-verification-serializer.js index 5196b295832..b98d8459a2a 100644 --- a/api/lib/infrastructure/serializers/jsonapi/email-verification-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/email-verification-serializer.js @@ -1,12 +1,14 @@ -const { Deserializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - deserialize(payload) { - return new Deserializer().deserialize(payload).then((record) => { - return { - newEmail: record['new-email'].trim()?.toLowerCase(), - password: record['password'], - }; - }); - }, +const { Deserializer } = jsonapiSerializer; + +const deserialize = function (payload) { + return new Deserializer().deserialize(payload).then((record) => { + return { + newEmail: record['new-email'].trim()?.toLowerCase(), + password: record['password'], + }; + }); }; + +export { deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/error-serializer.js b/api/lib/infrastructure/serializers/jsonapi/error-serializer.js index 889f9a9064e..f93cde47ed7 100644 --- a/api/lib/infrastructure/serializers/jsonapi/error-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/error-serializer.js @@ -1,13 +1,15 @@ -const JSONAPIError = require('jsonapi-serializer').Error; +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(infrastructureError) { - return JSONAPIError({ - status: `${infrastructureError.status}`, - title: infrastructureError.title, - detail: infrastructureError.message, - code: infrastructureError.code, - meta: infrastructureError.meta, - }); - }, +const { Error: JSONAPIError } = jsonapiSerializer; + +const serialize = function (infrastructureError) { + return JSONAPIError({ + status: `${infrastructureError.status}`, + title: infrastructureError.title, + detail: infrastructureError.message, + code: infrastructureError.code, + meta: infrastructureError.meta, + }); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/feature-toggle-serializer.js b/api/lib/infrastructure/serializers/jsonapi/feature-toggle-serializer.js index 403c7607017..0ac7b9cb54d 100644 --- a/api/lib/infrastructure/serializers/jsonapi/feature-toggle-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/feature-toggle-serializer.js @@ -1,12 +1,14 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(features) { - return new Serializer('feature-toggles', { - transform(features) { - return { id: 0, ...features }; - }, - attributes: Object.keys(features), - }).serialize(features); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (features) { + return new Serializer('feature-toggles', { + transform(features) { + return { id: 0, ...features }; + }, + attributes: Object.keys(features), + }).serialize(features); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/feedback-serializer.js b/api/lib/infrastructure/serializers/jsonapi/feedback-serializer.js index 95ca1637eec..c64dd43b5d6 100644 --- a/api/lib/infrastructure/serializers/jsonapi/feedback-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/feedback-serializer.js @@ -1,30 +1,33 @@ -const { Serializer, Deserializer } = require('jsonapi-serializer'); -const Feedback = require('../../orm-models/Feedback.js'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(feedbacks) { - return new Serializer('feedbacks', { - attributes: ['createdAt', 'content', 'assessment', 'challenge'], - assessment: { ref: 'id' }, - challenge: { ref: 'id' }, - transform(json) { - const feedback = Object.assign({}, json); - feedback.assessment = { id: json.assessmentId }; - feedback.challenge = { id: json.challengeId }; - return feedback; - }, - }).serialize(feedbacks); - }, +const { Serializer, Deserializer } = jsonapiSerializer; - deserialize(json, userAgent) { - return new Deserializer() - .deserialize(json, function (err, feedback) { - feedback.assessmentId = json.data.relationships.assessment.data.id; - feedback.challengeId = json.data.relationships.challenge.data.id; - feedback.userAgent = userAgent; - }) - .then((deserializedFeedback) => { - return new Feedback(deserializedFeedback); - }); - }, +import { Feedback } from '../../orm-models/Feedback.js'; + +const serialize = function (feedbacks) { + return new Serializer('feedbacks', { + attributes: ['createdAt', 'content', 'assessment', 'challenge'], + assessment: { ref: 'id' }, + challenge: { ref: 'id' }, + transform(json) { + const feedback = Object.assign({}, json); + feedback.assessment = { id: json.assessmentId }; + feedback.challenge = { id: json.challengeId }; + return feedback; + }, + }).serialize(feedbacks); +}; + +const deserialize = function (json, userAgent) { + return new Deserializer() + .deserialize(json, function (err, feedback) { + feedback.assessmentId = json.data.relationships.assessment.data.id; + feedback.challengeId = json.data.relationships.challenge.data.id; + feedback.userAgent = userAgent; + }) + .then((deserializedFeedback) => { + return new Feedback(deserializedFeedback); + }); }; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/framework-areas-serializer.js b/api/lib/infrastructure/serializers/jsonapi/framework-areas-serializer.js index f8415e8ffad..b9e66df71b5 100644 --- a/api/lib/infrastructure/serializers/jsonapi/framework-areas-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/framework-areas-serializer.js @@ -1,54 +1,56 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(framework, { withoutThematics = false } = {}) { - return new Serializer('area', { +const { Serializer } = jsonapiSerializer; + +const serialize = function (framework, { withoutThematics = false } = {}) { + return new Serializer('area', { + ref: 'id', + attributes: ['code', 'title', 'color', 'competences'], + + competences: { + include: true, ref: 'id', - attributes: ['code', 'title', 'color', 'competences'], + attributes: ['name', 'index', 'thematics'], - competences: { + thematics: { include: true, ref: 'id', - attributes: ['name', 'index', 'thematics'], + attributes: ['name', 'index', 'tubes'], - thematics: { + tubes: { include: true, ref: 'id', - attributes: ['name', 'index', 'tubes'], - - tubes: { - include: true, - ref: 'id', - attributes: ['name', 'practicalTitle', 'practicalDescription', 'mobile', 'tablet'], - }, + attributes: ['name', 'practicalTitle', 'practicalDescription', 'mobile', 'tablet'], }, }, + }, - transform(area) { - if (withoutThematics) { - return area; - } - area.competences.forEach((competence) => { - competence.thematics = framework.thematics - .filter((thematic) => { - return competence.thematicIds.includes(thematic.id); - }) - .map((thematic) => { - return { - ...thematic, - tubes: framework.tubes - .filter(({ id }) => { - return thematic.tubeIds.includes(id); - }) - .map((tube) => ({ ...tube, mobile: tube.isMobileCompliant, tablet: tube.isTabletCompliant })), - }; - }) - .filter((thematic) => { - return thematic.tubes.length > 0; - }); - }); + transform(area) { + if (withoutThematics) { return area; - }, - }).serialize(framework.areas); - }, + } + area.competences.forEach((competence) => { + competence.thematics = framework.thematics + .filter((thematic) => { + return competence.thematicIds.includes(thematic.id); + }) + .map((thematic) => { + return { + ...thematic, + tubes: framework.tubes + .filter(({ id }) => { + return thematic.tubeIds.includes(id); + }) + .map((tube) => ({ ...tube, mobile: tube.isMobileCompliant, tablet: tube.isTabletCompliant })), + }; + }) + .filter((thematic) => { + return thematic.tubes.length > 0; + }); + }); + return area; + }, + }).serialize(framework.areas); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/framework-serializer.js b/api/lib/infrastructure/serializers/jsonapi/framework-serializer.js index 26ab6a0ca66..d5348dbf314 100644 --- a/api/lib/infrastructure/serializers/jsonapi/framework-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/framework-serializer.js @@ -1,50 +1,52 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(frameworks) { - return new Serializer('framework', { - ref: 'id', - attributes: ['name', 'areas'], - areas: { - ref: true, - ignoreRelationshipData: true, - relationshipLinks: { - related: (framework) => `/api/admin/frameworks/${framework.id}/areas`, - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (frameworks) { + return new Serializer('framework', { + ref: 'id', + attributes: ['name', 'areas'], + areas: { + ref: true, + ignoreRelationshipData: true, + relationshipLinks: { + related: (framework) => `/api/admin/frameworks/${framework.id}/areas`, }, - transform: (framework) => ({ - ...framework, - areas: true, // forces areas relationship - }), - }).serialize(frameworks); - }, + }, + transform: (framework) => ({ + ...framework, + areas: true, // forces areas relationship + }), + }).serialize(frameworks); +}; - serializeDeepWithoutSkills(frameworks) { - return new Serializer('framework', { +const serializeDeepWithoutSkills = function (frameworks) { + return new Serializer('framework', { + ref: 'id', + attributes: ['name', 'areas'], + areas: { + include: true, ref: 'id', - attributes: ['name', 'areas'], - areas: { + attributes: ['code', 'title', 'color', 'competences'], + competences: { include: true, ref: 'id', - attributes: ['code', 'title', 'color', 'competences'], - competences: { + attributes: ['name', 'index', 'thematics'], + + thematics: { include: true, ref: 'id', - attributes: ['name', 'index', 'thematics'], + attributes: ['name', 'index', 'tubes'], - thematics: { + tubes: { include: true, ref: 'id', - attributes: ['name', 'index', 'tubes'], - - tubes: { - include: true, - ref: 'id', - attributes: ['name', 'practicalTitle', 'practicalDescription', 'isMobileCompliant', 'isTabletCompliant'], - }, + attributes: ['name', 'practicalTitle', 'practicalDescription', 'isMobileCompliant', 'isTabletCompliant'], }, }, }, - }).serialize(frameworks); - }, + }, + }).serialize(frameworks); }; + +export { serialize, serializeDeepWithoutSkills }; diff --git a/api/lib/infrastructure/serializers/jsonapi/group-serializer.js b/api/lib/infrastructure/serializers/jsonapi/group-serializer.js index 13d5d7dc5f8..115948b9064 100644 --- a/api/lib/infrastructure/serializers/jsonapi/group-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/group-serializer.js @@ -1,10 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(groups) { - return new Serializer('groups', { - id: 'name', - attributes: ['name'], - }).serialize(groups); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (groups) { + return new Serializer('groups', { + id: 'name', + attributes: ['name'], + }).serialize(groups); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/jury-certification-serializer.js b/api/lib/infrastructure/serializers/jsonapi/jury-certification-serializer.js index e37922caceb..ec5630de4fc 100644 --- a/api/lib/infrastructure/serializers/jsonapi/jury-certification-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/jury-certification-serializer.js @@ -1,70 +1,72 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(juryCertification) { - return new Serializer('certifications', { - transform(juryCertification) { - return { - id: juryCertification.certificationCourseId, - ...juryCertification, - competencesWithMark: juryCertification.competenceMarks, - }; - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (juryCertification) { + return new Serializer('certifications', { + transform(juryCertification) { + return { + id: juryCertification.certificationCourseId, + ...juryCertification, + competencesWithMark: juryCertification.competenceMarks, + }; + }, + attributes: [ + 'sessionId', + 'assessmentId', + 'userId', + 'firstName', + 'lastName', + 'birthdate', + 'sex', + 'birthplace', + 'birthCountry', + 'birthINSEECode', + 'birthPostalCode', + 'createdAt', + 'completedAt', + 'status', + 'isCancelled', + 'isPublished', + 'juryId', + 'pixScore', + 'competencesWithMark', + 'commentForCandidate', + 'commentForOrganization', + 'commentForJury', + 'commonComplementaryCertificationCourseResults', + 'complementaryCertificationCourseResultsWithExternal', + 'certificationIssueReports', + ], + + commonComplementaryCertificationCourseResults: { + ref: 'id', + attributes: ['label', 'status'], + }, + complementaryCertificationCourseResultsWithExternal: { + ref: 'complementaryCertificationCourseId', attributes: [ - 'sessionId', - 'assessmentId', - 'userId', - 'firstName', - 'lastName', - 'birthdate', - 'sex', - 'birthplace', - 'birthCountry', - 'birthINSEECode', - 'birthPostalCode', - 'createdAt', - 'completedAt', - 'status', - 'isCancelled', - 'isPublished', - 'juryId', - 'pixScore', - 'competencesWithMark', - 'commentForCandidate', - 'commentForOrganization', - 'commentForJury', - 'commonComplementaryCertificationCourseResults', - 'complementaryCertificationCourseResultsWithExternal', - 'certificationIssueReports', + 'complementaryCertificationCourseId', + 'pixResult', + 'externalResult', + 'finalResult', + 'allowedExternalLevels', ], - - commonComplementaryCertificationCourseResults: { - ref: 'id', - attributes: ['label', 'status'], - }, - complementaryCertificationCourseResultsWithExternal: { - ref: 'complementaryCertificationCourseId', - attributes: [ - 'complementaryCertificationCourseId', - 'pixResult', - 'externalResult', - 'finalResult', - 'allowedExternalLevels', - ], - }, - certificationIssueReports: { - ref: 'id', - attributes: [ - 'category', - 'description', - 'subcategory', - 'questionNumber', - 'isImpactful', - 'resolvedAt', - 'resolution', - 'hasBeenAutomaticallyResolved', - ], - }, - }).serialize(juryCertification); - }, + }, + certificationIssueReports: { + ref: 'id', + attributes: [ + 'category', + 'description', + 'subcategory', + 'questionNumber', + 'isImpactful', + 'resolvedAt', + 'resolution', + 'hasBeenAutomaticallyResolved', + ], + }, + }).serialize(juryCertification); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/jury-certification-summary-serializer.js b/api/lib/infrastructure/serializers/jsonapi/jury-certification-summary-serializer.js index bbbef996aaf..54e67adccf4 100644 --- a/api/lib/infrastructure/serializers/jsonapi/jury-certification-summary-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/jury-certification-summary-serializer.js @@ -1,38 +1,41 @@ -const omit = require('lodash/omit'); -const get = require('lodash/get'); +import lodash from 'lodash'; -const { Serializer } = require('jsonapi-serializer'); +const { Serializer } = jsonapiSerializer; -module.exports = { - serialize(juryCertificationSummary, meta) { - return new Serializer('jury-certification-summary', { - transform(juryCertificationSummary) { - const result = omit(juryCertificationSummary, 'certificationIssueReports'); - result.examinerComment = get(juryCertificationSummary, 'certificationIssueReports[0].description'); - result.numberOfCertificationIssueReports = juryCertificationSummary.certificationIssueReports.length; - result.numberOfCertificationIssueReportsWithRequiredAction = - juryCertificationSummary.certificationIssueReports.filter( - (issueReport) => issueReport.isImpactful && issueReport.resolvedAt === null - ).length; - return result; - }, - attributes: [ - 'firstName', - 'lastName', - 'status', - 'pixScore', - 'createdAt', - 'completedAt', - 'isPublished', - 'isCancelled', - 'examinerComment', - 'numberOfCertificationIssueReports', - 'numberOfCertificationIssueReportsWithRequiredAction', - 'hasSeenEndTestScreen', - 'isFlaggedAborted', - 'complementaryCertificationTakenLabels', - ], - meta, - }).serialize(juryCertificationSummary); - }, +const { omit, get } = lodash; + +import jsonapiSerializer from 'jsonapi-serializer'; + +const serialize = function (juryCertificationSummary, meta) { + return new Serializer('jury-certification-summary', { + transform(juryCertificationSummary) { + const result = omit(juryCertificationSummary, 'certificationIssueReports'); + result.examinerComment = get(juryCertificationSummary, 'certificationIssueReports[0].description'); + result.numberOfCertificationIssueReports = juryCertificationSummary.certificationIssueReports.length; + result.numberOfCertificationIssueReportsWithRequiredAction = + juryCertificationSummary.certificationIssueReports.filter( + (issueReport) => issueReport.isImpactful && issueReport.resolvedAt === null + ).length; + return result; + }, + attributes: [ + 'firstName', + 'lastName', + 'status', + 'pixScore', + 'createdAt', + 'completedAt', + 'isPublished', + 'isCancelled', + 'examinerComment', + 'numberOfCertificationIssueReports', + 'numberOfCertificationIssueReportsWithRequiredAction', + 'hasSeenEndTestScreen', + 'isFlaggedAborted', + 'complementaryCertificationTakenLabels', + ], + meta, + }).serialize(juryCertificationSummary); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/jury-session-serializer.js b/api/lib/infrastructure/serializers/jsonapi/jury-session-serializer.js index 62f24eafd01..87487b433ca 100644 --- a/api/lib/infrastructure/serializers/jsonapi/jury-session-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/jury-session-serializer.js @@ -1,80 +1,82 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serializeForPaginatedList(jurySessionsForPaginatedList) { - const { jurySessions, pagination } = jurySessionsForPaginatedList; - return this.serialize(jurySessions, undefined, pagination); - }, +const { Serializer } = jsonapiSerializer; - serialize(jurySessions, hasSupervisorAccess, meta) { - return new Serializer('sessions', { - attributes: [ - 'certificationCenterName', - 'certificationCenterType', - 'certificationCenterId', - 'certificationCenterExternalId', - 'address', - 'room', - 'examiner', - 'date', - 'time', - 'accessCode', - 'status', - 'description', - 'examinerGlobalComment', - 'finalizedAt', - 'resultsSentToPrescriberAt', - 'publishedAt', - 'juryComment', - 'juryCommentAuthorId', - 'juryCommentedAt', - 'hasSupervisorAccess', - 'hasJoiningIssue', - 'hasIncident', - // included - 'assignedCertificationOfficer', - 'juryCommentAuthor', - // links - 'juryCertificationSummaries', - ], - juryCertificationSummaries: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/admin/sessions/${parent.id}/jury-certification-summaries`; - }, +const serialize = function (jurySessions, hasSupervisorAccess, meta) { + return new Serializer('sessions', { + attributes: [ + 'certificationCenterName', + 'certificationCenterType', + 'certificationCenterId', + 'certificationCenterExternalId', + 'address', + 'room', + 'examiner', + 'date', + 'time', + 'accessCode', + 'status', + 'description', + 'examinerGlobalComment', + 'finalizedAt', + 'resultsSentToPrescriberAt', + 'publishedAt', + 'juryComment', + 'juryCommentAuthorId', + 'juryCommentedAt', + 'hasSupervisorAccess', + 'hasJoiningIssue', + 'hasIncident', + // included + 'assignedCertificationOfficer', + 'juryCommentAuthor', + // links + 'juryCertificationSummaries', + ], + juryCertificationSummaries: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/admin/sessions/${parent.id}/jury-certification-summaries`; }, }, - assignedCertificationOfficer: { - ref: 'id', - included: true, - attributes: ['firstName', 'lastName'], - }, - juryCommentAuthor: { - ref: 'id', - included: true, - attributes: ['firstName', 'lastName'], - }, - transform(jurySession) { - const transformedJurySession = Object.assign({}, jurySession); - transformedJurySession.status = jurySession.status; - if (hasSupervisorAccess !== undefined) { - transformedJurySession.hasSupervisorAccess = hasSupervisorAccess; - } - return transformedJurySession; - }, - typeForAttribute: function (attribute) { - if (attribute === 'assignedCertificationOfficer') { - return 'user'; - } - if (attribute === 'juryCommentAuthor') { - return 'user'; - } - return attribute; - }, - meta, - }).serialize(jurySessions); - }, + }, + assignedCertificationOfficer: { + ref: 'id', + included: true, + attributes: ['firstName', 'lastName'], + }, + juryCommentAuthor: { + ref: 'id', + included: true, + attributes: ['firstName', 'lastName'], + }, + transform(jurySession) { + const transformedJurySession = Object.assign({}, jurySession); + transformedJurySession.status = jurySession.status; + if (hasSupervisorAccess !== undefined) { + transformedJurySession.hasSupervisorAccess = hasSupervisorAccess; + } + return transformedJurySession; + }, + typeForAttribute: function (attribute) { + if (attribute === 'assignedCertificationOfficer') { + return 'user'; + } + if (attribute === 'juryCommentAuthor') { + return 'user'; + } + return attribute; + }, + meta, + }).serialize(jurySessions); }; + +const serializeForPaginatedList = function (jurySessionsForPaginatedList, injectedSerialize = serialize) { + const { jurySessions, pagination } = jurySessionsForPaginatedList; + return injectedSerialize(jurySessions, undefined, pagination); +}; + +export { serializeForPaginatedList, serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/membership-serializer.js b/api/lib/infrastructure/serializers/jsonapi/membership-serializer.js index fab17d8c3c1..0bc3f9be1ee 100644 --- a/api/lib/infrastructure/serializers/jsonapi/membership-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/membership-serializer.js @@ -1,176 +1,179 @@ -const { Serializer } = require('jsonapi-serializer'); -const Membership = require('../../../domain/models/Membership.js'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(membership, meta) { - return new Serializer('memberships', { - transform(record) { - if (!record.user) { - delete record.user; - } +const { Serializer } = jsonapiSerializer; - if (!record.organization) { - delete record.organization; - } - return record; - }, - attributes: ['organization', 'organizationRole', 'user'], - organization: { +import { Membership } from '../../../domain/models/Membership.js'; + +const serialize = function (membership, meta) { + return new Serializer('memberships', { + transform(record) { + if (!record.user) { + delete record.user; + } + + if (!record.organization) { + delete record.organization; + } + return record; + }, + attributes: ['organization', 'organizationRole', 'user'], + organization: { + ref: 'id', + included: true, + attributes: [ + 'code', + 'name', + 'type', + 'isManagingStudents', + 'externalId', + 'campaigns', + 'targetProfiles', + 'memberships', + 'organizationInvitations', + ], + campaigns: { ref: 'id', - included: true, - attributes: [ - 'code', - 'name', - 'type', - 'isManagingStudents', - 'externalId', - 'campaigns', - 'targetProfiles', - 'memberships', - 'organizationInvitations', - ], - campaigns: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/campaigns`; - }, + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/campaigns`; }, }, - targetProfiles: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/target-profiles`; - }, - }, - }, - memberships: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/memberships`; - }, + }, + targetProfiles: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/target-profiles`; }, }, - organizationInvitations: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/invitations`; - }, + }, + memberships: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/memberships`; }, }, }, - user: { + organizationInvitations: { ref: 'id', - included: true, - attributes: ['firstName', 'lastName', 'email'], + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/invitations`; + }, + }, }, - meta, - }).serialize(membership); - }, + }, + user: { + ref: 'id', + included: true, + attributes: ['firstName', 'lastName', 'email'], + }, + meta, + }).serialize(membership); +}; - serializeForAdmin(membership, meta) { - return new Serializer('organization-memberships', { - transform(record) { - if (!record.user) { - delete record.user; - } +const serializeForAdmin = function (membership, meta) { + return new Serializer('organization-memberships', { + transform(record) { + if (!record.user) { + delete record.user; + } - if (!record.organization) { - delete record.organization; - } - return record; - }, - attributes: ['organization', 'organizationRole', 'user'], - organization: { + if (!record.organization) { + delete record.organization; + } + return record; + }, + attributes: ['organization', 'organizationRole', 'user'], + organization: { + ref: 'id', + included: true, + attributes: [ + 'code', + 'name', + 'type', + 'isManagingStudents', + 'externalId', + 'campaigns', + 'targetProfiles', + 'organizationMemberships', + 'students', + 'organizationInvitations', + ], + campaigns: { ref: 'id', - included: true, - attributes: [ - 'code', - 'name', - 'type', - 'isManagingStudents', - 'externalId', - 'campaigns', - 'targetProfiles', - 'organizationMemberships', - 'students', - 'organizationInvitations', - ], - campaigns: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/campaigns`; - }, + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/campaigns`; }, }, - targetProfiles: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/target-profiles`; - }, - }, - }, - organizationMemberships: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/memberships`; - }, + }, + targetProfiles: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/target-profiles`; }, }, - students: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/students`; - }, + }, + organizationMemberships: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/memberships`; }, }, - organizationInvitations: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/invitations`; - }, + }, + students: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/students`; }, }, }, - user: { + organizationInvitations: { ref: 'id', - included: true, - attributes: ['firstName', 'lastName', 'email'], + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/invitations`; + }, + }, }, - meta, - }).serialize(membership); - }, + }, + user: { + ref: 'id', + included: true, + attributes: ['firstName', 'lastName', 'email'], + }, + meta, + }).serialize(membership); +}; - deserialize(json) { - return new Membership({ - id: json.data.id, - organizationRole: json.data.attributes['organization-role'], - }); - }, +const deserialize = function (json) { + return new Membership({ + id: json.data.id, + organizationRole: json.data.attributes['organization-role'], + }); }; + +export { serialize, serializeForAdmin, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/oidc-identity-providers-serializer.js b/api/lib/infrastructure/serializers/jsonapi/oidc-identity-providers-serializer.js index 536aecb0f83..f128c2d137a 100644 --- a/api/lib/infrastructure/serializers/jsonapi/oidc-identity-providers-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/oidc-identity-providers-serializer.js @@ -1,18 +1,20 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(oidcIdentityProviders) { - return new Serializer('oidc-identity-providers', { - transform(oidcIdentityProvider) { - return { - id: oidcIdentityProvider.slug, - code: oidcIdentityProvider.code, - organizationName: oidcIdentityProvider.organizationName, - hasLogoutUrl: oidcIdentityProvider.hasLogoutUrl, - source: oidcIdentityProvider.source, - }; - }, - attributes: ['code', 'organizationName', 'hasLogoutUrl', 'source'], - }).serialize(oidcIdentityProviders); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (oidcIdentityProviders) { + return new Serializer('oidc-identity-providers', { + transform(oidcIdentityProvider) { + return { + id: oidcIdentityProvider.slug, + code: oidcIdentityProvider.code, + organizationName: oidcIdentityProvider.organizationName, + hasLogoutUrl: oidcIdentityProvider.hasLogoutUrl, + source: oidcIdentityProvider.source, + }; + }, + attributes: ['code', 'organizationName', 'hasLogoutUrl', 'source'], + }).serialize(oidcIdentityProviders); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/oidc-serializer.js b/api/lib/infrastructure/serializers/jsonapi/oidc-serializer.js index e0c1a804001..48d5668c975 100644 --- a/api/lib/infrastructure/serializers/jsonapi/oidc-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/oidc-serializer.js @@ -1,15 +1,17 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(authenticationContent) { - return new Serializer('user-oidc-authentication-requests', { - attributes: [ - 'fullNameFromPix', - 'fullNameFromExternalIdentityProvider', - 'email', - 'username', - 'authenticationMethods', - ], - }).serialize(authenticationContent); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (authenticationContent) { + return new Serializer('user-oidc-authentication-requests', { + attributes: [ + 'fullNameFromPix', + 'fullNameFromExternalIdentityProvider', + 'email', + 'username', + 'authenticationMethods', + ], + }).serialize(authenticationContent); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization-for-admin-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization-for-admin-serializer.js index db14943d808..f8e27b51751 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization-for-admin-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization-for-admin-serializer.js @@ -1,95 +1,98 @@ -const { Serializer } = require('jsonapi-serializer'); -const _ = require('lodash'); -const OrganizationForAdmin = require('../../../domain/models/organizations-administration/Organization'); -const Tag = require('../../../domain/models/Tag.js'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(organizations, meta) { - return new Serializer('organizations', { - attributes: [ - 'name', - 'type', - 'logoUrl', - 'externalId', - 'provinceCode', - 'isManagingStudents', - 'credit', - 'email', - 'documentationUrl', - 'createdBy', - 'createdAt', - 'showNPS', - 'formNPSUrl', - 'showSkills', - 'archivedAt', - 'archivistFullName', - 'dataProtectionOfficerFirstName', - 'dataProtectionOfficerLastName', - 'dataProtectionOfficerEmail', - 'creatorFullName', - 'tags', - 'organizationMemberships', - 'targetProfileSummaries', - 'identityProviderForCampaigns', - ], - organizationMemberships: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/organizations/${parent.id}/memberships`; - }, +const { Serializer } = jsonapiSerializer; + +import _ from 'lodash'; +import { OrganizationForAdmin } from '../../../domain/models/organizations-administration/Organization.js'; +import { Tag } from '../../../domain/models/Tag.js'; + +const serialize = function (organizations, meta) { + return new Serializer('organizations', { + attributes: [ + 'name', + 'type', + 'logoUrl', + 'externalId', + 'provinceCode', + 'isManagingStudents', + 'credit', + 'email', + 'documentationUrl', + 'createdBy', + 'createdAt', + 'showNPS', + 'formNPSUrl', + 'showSkills', + 'archivedAt', + 'archivistFullName', + 'dataProtectionOfficerFirstName', + 'dataProtectionOfficerLastName', + 'dataProtectionOfficerEmail', + 'creatorFullName', + 'tags', + 'organizationMemberships', + 'targetProfileSummaries', + 'identityProviderForCampaigns', + ], + organizationMemberships: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/organizations/${parent.id}/memberships`; }, }, - targetProfileSummaries: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/admin/organizations/${parent.id}/target-profile-summaries`; - }, + }, + targetProfileSummaries: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/admin/organizations/${parent.id}/target-profile-summaries`; }, }, - tags: { - ref: 'id', - included: true, - attributes: ['id', 'name'], - }, - meta, - }).serialize(organizations); - }, + }, + tags: { + ref: 'id', + included: true, + attributes: ['id', 'name'], + }, + meta, + }).serialize(organizations); +}; - deserialize(json) { - const attributes = json.data.attributes; - const relationships = json.data.relationships; +const deserialize = function (json) { + const attributes = json.data.attributes; + const relationships = json.data.relationships; - let tags = []; - if (relationships && relationships.tags) { - tags = relationships.tags.data.map((tag) => new Tag({ id: parseInt(tag.id) })); - } + let tags = []; + if (relationships && relationships.tags) { + tags = relationships.tags.data.map((tag) => new Tag({ id: parseInt(tag.id) })); + } - const organization = new OrganizationForAdmin({ - id: _.isNil(json.data.id) ? null : parseInt(json.data.id), - name: attributes.name, - type: attributes.type, - email: attributes.email, - credit: attributes.credit, - logoUrl: attributes['logo-url'], - externalId: attributes['external-id'], - provinceCode: attributes['province-code'], - isManagingStudents: attributes['is-managing-students'], - createdBy: attributes['created-by'], - documentationUrl: attributes['documentation-url'], - showSkills: attributes['show-skills'], - identityProviderForCampaigns: attributes['identity-provider-for-campaigns'], - dataProtectionOfficerFirstName: attributes['data-protection-officer-first-name'], - dataProtectionOfficerLastName: attributes['data-protection-officer-last-name'], - dataProtectionOfficerEmail: attributes['data-protection-officer-email'], - tags, - }); + const organization = new OrganizationForAdmin({ + id: _.isNil(json.data.id) ? null : parseInt(json.data.id), + name: attributes.name, + type: attributes.type, + email: attributes.email, + credit: attributes.credit, + logoUrl: attributes['logo-url'], + externalId: attributes['external-id'], + provinceCode: attributes['province-code'], + isManagingStudents: attributes['is-managing-students'], + createdBy: attributes['created-by'], + documentationUrl: attributes['documentation-url'], + showSkills: attributes['show-skills'], + identityProviderForCampaigns: attributes['identity-provider-for-campaigns'], + dataProtectionOfficerFirstName: attributes['data-protection-officer-first-name'], + dataProtectionOfficerLastName: attributes['data-protection-officer-last-name'], + dataProtectionOfficerEmail: attributes['data-protection-officer-email'], + tags, + }); - return organization; - }, + return organization; }; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization-invitation-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization-invitation-serializer.js index 72d35d7241c..e3c8e1dcdd2 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization-invitation-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization-invitation-serializer.js @@ -1,19 +1,21 @@ -const { Serializer, Deserializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(invitations) { - return new Serializer('organization-invitations', { - attributes: ['organizationId', 'organizationName', 'email', 'status', 'updatedAt', 'role'], - }).serialize(invitations); - }, +const { Serializer, Deserializer } = jsonapiSerializer; - deserializeForCreateOrganizationInvitationAndSendEmail(payload) { - return new Deserializer().deserialize(payload).then((record) => { - return { - role: record.role, - lang: record.lang, - email: record.email?.trim().toLowerCase(), - }; - }); - }, +const serialize = function (invitations) { + return new Serializer('organization-invitations', { + attributes: ['organizationId', 'organizationName', 'email', 'status', 'updatedAt', 'role'], + }).serialize(invitations); }; + +const deserializeForCreateOrganizationInvitationAndSendEmail = function (payload) { + return new Deserializer().deserialize(payload).then((record) => { + return { + role: record.role, + lang: record.lang, + email: record.email?.trim().toLowerCase(), + }; + }); +}; + +export { serialize, deserializeForCreateOrganizationInvitationAndSendEmail }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization-learner-activity-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization-learner-activity-serializer.js index 41e391e7074..28f371a39ad 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization-learner-activity-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization-learner-activity-serializer.js @@ -1,25 +1,27 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(organizationLearnerActivity) { - return new Serializer('organization-learner-activity', { - transform: (organizationLearnerActivity) => ({ - ...organizationLearnerActivity, - organizationLearnerParticipations: organizationLearnerActivity.participations, - organizationLearnerStatistics: organizationLearnerActivity.statistics, - }), - id: 'organizationLearnerId', - attributes: ['organizationLearnerParticipations', 'organizationLearnerStatistics'], - organizationLearnerParticipations: { - ref: 'id', - includes: true, - attributes: ['campaignType', 'campaignName', 'createdAt', 'sharedAt', 'status', 'campaignId'], - }, - organizationLearnerStatistics: { - ref: 'campaignType', - includes: true, - attributes: ['total', 'shared', 'started', 'to_share'], - }, - }).serialize(organizationLearnerActivity); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (organizationLearnerActivity) { + return new Serializer('organization-learner-activity', { + transform: (organizationLearnerActivity) => ({ + ...organizationLearnerActivity, + organizationLearnerParticipations: organizationLearnerActivity.participations, + organizationLearnerStatistics: organizationLearnerActivity.statistics, + }), + id: 'organizationLearnerId', + attributes: ['organizationLearnerParticipations', 'organizationLearnerStatistics'], + organizationLearnerParticipations: { + ref: 'id', + includes: true, + attributes: ['campaignType', 'campaignName', 'createdAt', 'sharedAt', 'status', 'campaignId'], + }, + organizationLearnerStatistics: { + ref: 'campaignType', + includes: true, + attributes: ['total', 'shared', 'started', 'to_share'], + }, + }).serialize(organizationLearnerActivity); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization-learner-follow-up/organization-learner-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization-learner-follow-up/organization-learner-serializer.js index 0e6c9f62467..376f6b9a25f 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization-learner-follow-up/organization-learner-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization-learner-follow-up/organization-learner-serializer.js @@ -1,19 +1,21 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(organizationLearner) { - return new Serializer('organization-learner', { - attributes: [ - 'lastName', - 'firstName', - 'email', - 'username', - 'authenticationMethods', - 'division', - 'group', - 'isCertifiable', - 'certifiableAt', - ], - }).serialize(organizationLearner); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (organizationLearner) { + return new Serializer('organization-learner', { + attributes: [ + 'lastName', + 'firstName', + 'email', + 'username', + 'authenticationMethods', + 'division', + 'group', + 'isCertifiable', + 'certifiableAt', + ], + }).serialize(organizationLearner); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization-learner-identity-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization-learner-identity-serializer.js index 0eea6c12107..24a0211ac29 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization-learner-identity-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization-learner-identity-serializer.js @@ -1,9 +1,11 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(organizationLearnerIdentity) { - return new Serializer('organization-learner-identity', { - attributes: ['lastName', 'firstName'], - }).serialize(organizationLearnerIdentity); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (organizationLearnerIdentity) { + return new Serializer('organization-learner-identity', { + attributes: ['lastName', 'firstName'], + }).serialize(organizationLearnerIdentity); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization-member-identity-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization-member-identity-serializer.js index 0697b7f56dc..13aeb6d762a 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization-member-identity-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization-member-identity-serializer.js @@ -1,10 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(model) { - return new Serializer('member-identity', { - id: 'id', - attributes: ['firstName', 'lastName'], - }).serialize(model); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (model) { + return new Serializer('member-identity', { + id: 'id', + attributes: ['firstName', 'lastName'], + }).serialize(model); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization-places-capacity-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization-places-capacity-serializer.js index d7253d037bb..ebed8ab09d1 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization-places-capacity-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization-places-capacity-serializer.js @@ -1,9 +1,11 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(places) { - return new Serializer('organization-places-capacity', { - attributes: ['categories'], - }).serialize(places); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (places) { + return new Serializer('organization-places-capacity', { + attributes: ['categories'], + }).serialize(places); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization-serializer.js index 9e76d92d353..40bf7fcf69f 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization-serializer.js @@ -1,82 +1,85 @@ -const { Serializer } = require('jsonapi-serializer'); -const Organization = require('../../../domain/models/Organization.js'); -const Tag = require('../../../domain/models/Tag.js'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(organizations, meta) { - return new Serializer('organizations', { - attributes: [ - 'name', - 'type', - 'logoUrl', - 'externalId', - 'provinceCode', - 'isManagingStudents', - 'credit', - 'email', - 'memberships', - 'targetProfiles', - 'tags', - 'createdBy', - 'documentationUrl', - 'showNPS', - 'formNPSUrl', - 'showSkills', - ], - memberships: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/organizations/${parent.id}/memberships`; - }, +const { Serializer } = jsonapiSerializer; + +import { Organization } from '../../../domain/models/Organization.js'; +import { Tag } from '../../../domain/models/Tag.js'; + +const serialize = function (organizations, meta) { + return new Serializer('organizations', { + attributes: [ + 'name', + 'type', + 'logoUrl', + 'externalId', + 'provinceCode', + 'isManagingStudents', + 'credit', + 'email', + 'memberships', + 'targetProfiles', + 'tags', + 'createdBy', + 'documentationUrl', + 'showNPS', + 'formNPSUrl', + 'showSkills', + ], + memberships: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/organizations/${parent.id}/memberships`; }, }, - targetProfiles: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/target-profiles`; - }, + }, + targetProfiles: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/target-profiles`; }, }, - tags: { - ref: 'id', - included: true, - attributes: ['id', 'name'], - }, - meta, - }).serialize(organizations); - }, + }, + tags: { + ref: 'id', + included: true, + attributes: ['id', 'name'], + }, + meta, + }).serialize(organizations); +}; - deserialize(json) { - const attributes = json.data.attributes; - const relationships = json.data.relationships; +const deserialize = function (json) { + const attributes = json.data.attributes; + const relationships = json.data.relationships; - let tags = []; - if (relationships && relationships.tags) { - tags = relationships.tags.data.map((tag) => new Tag({ id: parseInt(tag.id) })); - } + let tags = []; + if (relationships && relationships.tags) { + tags = relationships.tags.data.map((tag) => new Tag({ id: parseInt(tag.id) })); + } - const organization = new Organization({ - id: parseInt(json.data.id), - name: attributes.name, - type: attributes.type, - email: attributes.email, - credit: attributes.credit, - logoUrl: attributes['logo-url'], - externalId: attributes['external-id'], - provinceCode: attributes['province-code'], - isManagingStudents: attributes['is-managing-students'], - createdBy: attributes['created-by'], - documentationUrl: attributes['documentation-url'], - showSkills: attributes['show-skills'], - tags, - }); + const organization = new Organization({ + id: parseInt(json.data.id), + name: attributes.name, + type: attributes.type, + email: attributes.email, + credit: attributes.credit, + logoUrl: attributes['logo-url'], + externalId: attributes['external-id'], + provinceCode: attributes['province-code'], + isManagingStudents: attributes['is-managing-students'], + createdBy: attributes['created-by'], + documentationUrl: attributes['documentation-url'], + showSkills: attributes['show-skills'], + tags, + }); - return organization; - }, + return organization; }; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization/organization-participants-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization/organization-participants-serializer.js index b8e5fdd58b2..808fad16f3e 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization/organization-participants-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization/organization-participants-serializer.js @@ -1,21 +1,23 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize({ organizationParticipants, meta }) { - return new Serializer('organization-participants', { - id: 'id', - attributes: [ - 'firstName', - 'lastName', - 'participationCount', - 'lastParticipationDate', - 'campaignName', - 'campaignType', - 'participationStatus', - 'isCertifiable', - 'certifiableAt', - ], - meta, - }).serialize(organizationParticipants); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function ({ organizationParticipants, meta }) { + return new Serializer('organization-participants', { + id: 'id', + attributes: [ + 'firstName', + 'lastName', + 'participationCount', + 'lastParticipationDate', + 'campaignName', + 'campaignType', + 'participationStatus', + 'isCertifiable', + 'certifiableAt', + ], + meta, + }).serialize(organizationParticipants); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization/organization-place-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization/organization-place-serializer.js index 68799aa695d..9364f5b8e5b 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization/organization-place-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization/organization-place-serializer.js @@ -1,9 +1,11 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(places) { - return new Serializer('organization-place', { - attributes: ['count', 'activationDate', 'expirationDate', 'reference', 'category', 'status', 'creatorFullName'], - }).serialize(places); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (places) { + return new Serializer('organization-place', { + attributes: ['count', 'activationDate', 'expirationDate', 'reference', 'category', 'status', 'creatorFullName'], + }).serialize(places); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization/organization-places-lot-management-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization/organization-places-lot-management-serializer.js index 68799aa695d..9364f5b8e5b 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization/organization-places-lot-management-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization/organization-places-lot-management-serializer.js @@ -1,9 +1,11 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(places) { - return new Serializer('organization-place', { - attributes: ['count', 'activationDate', 'expirationDate', 'reference', 'category', 'status', 'creatorFullName'], - }).serialize(places); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (places) { + return new Serializer('organization-place', { + attributes: ['count', 'activationDate', 'expirationDate', 'reference', 'category', 'status', 'creatorFullName'], + }).serialize(places); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization/organization-places-lot-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization/organization-places-lot-serializer.js index 19943e919fc..e3aed6cc177 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization/organization-places-lot-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization/organization-places-lot-serializer.js @@ -1,13 +1,13 @@ -module.exports = { - deserialize(json) { - return { - organizationId: json.data.attributes['organization-id'], - count: json.data.attributes['count'], - activationDate: json.data.attributes['activation-date'], - expirationDate: json.data.attributes['expiration-date'], - reference: json.data.attributes['reference'], - category: json.data.attributes['category'], - createdBy: json.data.attributes['created-by'], - }; - }, +const deserialize = function (json) { + return { + organizationId: json.data.attributes['organization-id'], + count: json.data.attributes['count'], + activationDate: json.data.attributes['activation-date'], + expirationDate: json.data.attributes['expiration-date'], + reference: json.data.attributes['reference'], + category: json.data.attributes['category'], + createdBy: json.data.attributes['created-by'], + }; }; + +export { deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization/sco-organization-participants-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization/sco-organization-participants-serializer.js index c60f112be75..e55dfa1bc1d 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization/sco-organization-participants-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization/sco-organization-participants-serializer.js @@ -1,27 +1,29 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize({ scoOrganizationParticipants, meta }) { - return new Serializer('sco-organization-participants', { - id: 'id', - attributes: [ - 'lastName', - 'firstName', - 'birthdate', - 'username', - 'userId', - 'email', - 'isAuthenticatedFromGAR', - 'division', - 'participationCount', - 'lastParticipationDate', - 'campaignName', - 'campaignType', - 'participationStatus', - 'isCertifiable', - 'certifiableAt', - ], - meta, - }).serialize(scoOrganizationParticipants); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function ({ scoOrganizationParticipants, meta }) { + return new Serializer('sco-organization-participants', { + id: 'id', + attributes: [ + 'lastName', + 'firstName', + 'birthdate', + 'username', + 'userId', + 'email', + 'isAuthenticatedFromGAR', + 'division', + 'participationCount', + 'lastParticipationDate', + 'campaignName', + 'campaignType', + 'participationStatus', + 'isCertifiable', + 'certifiableAt', + ], + meta, + }).serialize(scoOrganizationParticipants); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organization/sup-organization-participants-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organization/sup-organization-participants-serializer.js index 939418d267c..9a795ad9681 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organization/sup-organization-participants-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organization/sup-organization-participants-serializer.js @@ -1,24 +1,26 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize({ supOrganizationParticipants, meta }) { - return new Serializer('sup-organization-participants', { - id: 'id', - attributes: [ - 'lastName', - 'firstName', - 'birthdate', - 'studentNumber', - 'group', - 'participationCount', - 'lastParticipationDate', - 'campaignName', - 'campaignType', - 'participationStatus', - 'isCertifiable', - 'certifiableAt', - ], - meta, - }).serialize(supOrganizationParticipants); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function ({ supOrganizationParticipants, meta }) { + return new Serializer('sup-organization-participants', { + id: 'id', + attributes: [ + 'lastName', + 'firstName', + 'birthdate', + 'studentNumber', + 'group', + 'participationCount', + 'lastParticipationDate', + 'campaignName', + 'campaignType', + 'participationStatus', + 'isCertifiable', + 'certifiableAt', + ], + meta, + }).serialize(supOrganizationParticipants); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/organizations-administration/organization-for-admin-serializer.js b/api/lib/infrastructure/serializers/jsonapi/organizations-administration/organization-for-admin-serializer.js index 6cce224685f..3515818250e 100644 --- a/api/lib/infrastructure/serializers/jsonapi/organizations-administration/organization-for-admin-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/organizations-administration/organization-for-admin-serializer.js @@ -1,97 +1,97 @@ -const { Serializer } = require('jsonapi-serializer'); -const _ = require('lodash'); +import { Serializer } from 'jsonapi-serializer'; +import _ from 'lodash'; -module.exports = { - serialize(organizations, meta) { - return new Serializer('organizations', { - attributes: [ - 'name', - 'type', - 'logoUrl', - 'externalId', - 'provinceCode', - 'isManagingStudents', - 'credit', - 'email', - 'documentationUrl', - 'createdBy', - 'createdAt', - 'showNPS', - 'formNPSUrl', - 'showSkills', - 'archivedAt', - 'archivistFullName', - 'dataProtectionOfficerFirstName', - 'dataProtectionOfficerLastName', - 'dataProtectionOfficerEmail', - 'creatorFullName', - 'tags', - 'organizationMemberships', - 'targetProfileSummaries', - 'identityProviderForCampaigns', - 'enableMultipleSendingAssessment', - ], - organizationMemberships: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/organizations/${parent.id}/memberships`; - }, +const serialize = function (organizations, meta) { + return new Serializer('organizations', { + attributes: [ + 'name', + 'type', + 'logoUrl', + 'externalId', + 'provinceCode', + 'isManagingStudents', + 'credit', + 'email', + 'documentationUrl', + 'createdBy', + 'createdAt', + 'showNPS', + 'formNPSUrl', + 'showSkills', + 'archivedAt', + 'archivistFullName', + 'dataProtectionOfficerFirstName', + 'dataProtectionOfficerLastName', + 'dataProtectionOfficerEmail', + 'creatorFullName', + 'tags', + 'organizationMemberships', + 'targetProfileSummaries', + 'identityProviderForCampaigns', + 'enableMultipleSendingAssessment', + ], + organizationMemberships: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/organizations/${parent.id}/memberships`; }, }, - targetProfileSummaries: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/admin/organizations/${parent.id}/target-profile-summaries`; - }, + }, + targetProfileSummaries: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/admin/organizations/${parent.id}/target-profile-summaries`; }, }, - tags: { - ref: 'id', - included: true, - attributes: ['id', 'name'], - }, - meta, - }).serialize(organizations); - }, + }, + tags: { + ref: 'id', + included: true, + attributes: ['id', 'name'], + }, + meta, + }).serialize(organizations); +}; - deserialize(json) { - const attributes = json.data.attributes; - const relationships = json.data.relationships; +const deserialize = function (json) { + const attributes = json.data.attributes; + const relationships = json.data.relationships; - let tags = []; - if (relationships && relationships.tags) { - tags = relationships.tags.data.map((tag) => { - return { id: parseInt(tag.id) }; - }); - } + let tags = []; + if (relationships && relationships.tags) { + tags = relationships.tags.data.map((tag) => { + return { id: parseInt(tag.id) }; + }); + } - const organization = { - id: _.isNil(json.data.id) ? null : parseInt(json.data.id), - name: attributes.name, - type: attributes.type, - email: attributes.email, - credit: attributes.credit, - logoUrl: attributes['logo-url'], - externalId: attributes['external-id'], - provinceCode: attributes['province-code'], - isManagingStudents: attributes['is-managing-students'], - createdBy: attributes['created-by'], - documentationUrl: attributes['documentation-url'], - showSkills: attributes['show-skills'], - identityProviderForCampaigns: attributes['identity-provider-for-campaigns'], - dataProtectionOfficerFirstName: attributes['data-protection-officer-first-name'], - dataProtectionOfficerLastName: attributes['data-protection-officer-last-name'], - dataProtectionOfficerEmail: attributes['data-protection-officer-email'], - enableMultipleSendingAssessment: attributes['enable-multiple-sending-assessment'], - tags, - }; + const organization = { + id: _.isNil(json.data.id) ? null : parseInt(json.data.id), + name: attributes.name, + type: attributes.type, + email: attributes.email, + credit: attributes.credit, + logoUrl: attributes['logo-url'], + externalId: attributes['external-id'], + provinceCode: attributes['province-code'], + isManagingStudents: attributes['is-managing-students'], + createdBy: attributes['created-by'], + documentationUrl: attributes['documentation-url'], + showSkills: attributes['show-skills'], + identityProviderForCampaigns: attributes['identity-provider-for-campaigns'], + dataProtectionOfficerFirstName: attributes['data-protection-officer-first-name'], + dataProtectionOfficerLastName: attributes['data-protection-officer-last-name'], + dataProtectionOfficerEmail: attributes['data-protection-officer-email'], + enableMultipleSendingAssessment: attributes['enable-multiple-sending-assessment'], + tags, + }; - return organization; - }, + return organization; }; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/participant-result-serializer.js b/api/lib/infrastructure/serializers/jsonapi/participant-result-serializer.js index b68b038e2e5..eeee7fbeb89 100644 --- a/api/lib/infrastructure/serializers/jsonapi/participant-result-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/participant-result-serializer.js @@ -1,94 +1,97 @@ -const { Serializer } = require('jsonapi-serializer'); -module.exports = { - serialize(results) { - return new Serializer('campaign-participation-results', { - transform, +import jsonapiSerializer from 'jsonapi-serializer'; + +const { Serializer } = jsonapiSerializer; + +const serialize = function (results) { + return new Serializer('campaign-participation-results', { + transform, + attributes: [ + 'masteryRate', + 'totalSkillsCount', + 'testedSkillsCount', + 'validatedSkillsCount', + 'isCompleted', + 'isShared', + 'participantExternalId', + 'estimatedFlashLevel', + 'flashPixScore', + 'campaignParticipationBadges', + 'competenceResults', + 'reachedStage', + 'canRetry', + 'canImprove', + 'isDisabled', + ], + campaignParticipationBadges: { + ref: 'id', + included: true, attributes: [ - 'masteryRate', - 'totalSkillsCount', - 'testedSkillsCount', - 'validatedSkillsCount', - 'isCompleted', - 'isShared', - 'participantExternalId', - 'estimatedFlashLevel', - 'flashPixScore', - 'campaignParticipationBadges', - 'competenceResults', - 'reachedStage', - 'canRetry', - 'canImprove', - 'isDisabled', + 'altMessage', + 'message', + 'title', + 'imageUrl', + 'key', + 'isAcquired', + 'skillSetResults', + 'partnerCompetenceResults', + 'isAlwaysVisible', + 'isCertifiable', + 'isValid', ], - campaignParticipationBadges: { + skillSetResults: { ref: 'id', included: true, attributes: [ - 'altMessage', - 'message', - 'title', - 'imageUrl', - 'key', - 'isAcquired', - 'skillSetResults', - 'partnerCompetenceResults', - 'isAlwaysVisible', - 'isCertifiable', - 'isValid', + 'name', + 'index', + 'areaColor', + 'masteryPercentage', + 'totalSkillsCount', + 'testedSkillsCount', + 'validatedSkillsCount', ], - skillSetResults: { - ref: 'id', - included: true, - attributes: [ - 'name', - 'index', - 'areaColor', - 'masteryPercentage', - 'totalSkillsCount', - 'testedSkillsCount', - 'validatedSkillsCount', - ], - }, - partnerCompetenceResults: { - ref: 'id', - included: true, - attributes: [ - 'name', - 'index', - 'areaColor', - 'masteryPercentage', - 'totalSkillsCount', - 'testedSkillsCount', - 'validatedSkillsCount', - ], - }, }, - competenceResults: { + partnerCompetenceResults: { ref: 'id', + included: true, attributes: [ 'name', 'index', 'areaColor', - 'areaTitle', 'masteryPercentage', 'totalSkillsCount', 'testedSkillsCount', 'validatedSkillsCount', - 'flashPixScore', - 'reachedStage', ], }, - reachedStage: { - ref: 'id', - attributes: ['title', 'message', 'totalStage', 'reachedStage'], - }, - typeForAttribute(attribute) { - return attribute === 'reachedStage' ? 'reached-stages' : attribute; - }, - }).serialize(results); - }, + }, + competenceResults: { + ref: 'id', + attributes: [ + 'name', + 'index', + 'areaColor', + 'areaTitle', + 'masteryPercentage', + 'totalSkillsCount', + 'testedSkillsCount', + 'validatedSkillsCount', + 'flashPixScore', + 'reachedStage', + ], + }, + reachedStage: { + ref: 'id', + attributes: ['title', 'message', 'totalStage', 'reachedStage'], + }, + typeForAttribute(attribute) { + return attribute === 'reachedStage' ? 'reached-stages' : attribute; + }, + }).serialize(results); }; +export { serialize }; + function transform(record) { return { ...record, diff --git a/api/lib/infrastructure/serializers/jsonapi/participation-for-campaign-management-serializer.js b/api/lib/infrastructure/serializers/jsonapi/participation-for-campaign-management-serializer.js index ed33ee4c087..9d76328bd85 100644 --- a/api/lib/infrastructure/serializers/jsonapi/participation-for-campaign-management-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/participation-for-campaign-management-serializer.js @@ -1,22 +1,24 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(participationsForCampaignManagement, meta) { - return new Serializer('campaign-participation', { - attributes: [ - 'lastName', - 'firstName', - 'userId', - 'userFullName', - 'participantExternalId', - 'status', - 'createdAt', - 'sharedAt', - 'deletedAt', - 'deletedBy', - 'deletedByFullName', - ], - meta, - }).serialize(participationsForCampaignManagement); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (participationsForCampaignManagement, meta) { + return new Serializer('campaign-participation', { + attributes: [ + 'lastName', + 'firstName', + 'userId', + 'userFullName', + 'participantExternalId', + 'status', + 'createdAt', + 'sharedAt', + 'deletedAt', + 'deletedBy', + 'deletedByFullName', + ], + meta, + }).serialize(participationsForCampaignManagement); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/participations-count-by-mastery-rate.js b/api/lib/infrastructure/serializers/jsonapi/participations-count-by-mastery-rate.js index 58660de98f4..e1141f4301c 100644 --- a/api/lib/infrastructure/serializers/jsonapi/participations-count-by-mastery-rate.js +++ b/api/lib/infrastructure/serializers/jsonapi/participations-count-by-mastery-rate.js @@ -1,10 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(model) { - return new Serializer('participations-count-by-mastery-rate', { - id: 'campaignId', - attributes: ['resultDistribution'], - }).serialize(model); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (model) { + return new Serializer('participations-count-by-mastery-rate', { + id: 'campaignId', + attributes: ['resultDistribution'], + }).serialize(model); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/password-reset-serializer.js b/api/lib/infrastructure/serializers/jsonapi/password-reset-serializer.js index 35b616427dc..47edf6aeb88 100644 --- a/api/lib/infrastructure/serializers/jsonapi/password-reset-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/password-reset-serializer.js @@ -1,9 +1,11 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(passwordResetDemands) { - return new Serializer('password-reset-demand', { - attributes: ['email'], - }).serialize(passwordResetDemands); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (passwordResetDemands) { + return new Serializer('password-reset-demand', { + attributes: ['email'], + }).serialize(passwordResetDemands); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/prescriber-serializer.js b/api/lib/infrastructure/serializers/jsonapi/prescriber-serializer.js index 16e4adf51a9..fb71220d711 100644 --- a/api/lib/infrastructure/serializers/jsonapi/prescriber-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/prescriber-serializer.js @@ -1,115 +1,117 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(prescriber) { - return new Serializer('prescriber', { - transform: (record) => { - const recordWithoutClass = { ...record }; - recordWithoutClass.memberships.forEach((membership) => { - membership.organization = { ...membership.organization }; - }); - recordWithoutClass.userOrgaSettings = { - ...recordWithoutClass.userOrgaSettings, - organization: { - ...recordWithoutClass.userOrgaSettings.currentOrganization, - isAgriculture: recordWithoutClass.userOrgaSettings.currentOrganization.isAgriculture, - }, - }; - delete recordWithoutClass.userOrgaSettings.currentOrganization; - - return recordWithoutClass; - }, +const { Serializer } = jsonapiSerializer; - attributes: [ - 'firstName', - 'lastName', - 'pixOrgaTermsOfServiceAccepted', - 'areNewYearOrganizationLearnersImported', - 'participantCount', - 'lang', - 'memberships', - 'userOrgaSettings', - 'enableMultipleSendingAssessment', - ], - memberships: { - ref: 'id', - attributes: ['organizationRole', 'organization'], +const serialize = function (prescriber) { + return new Serializer('prescriber', { + transform: (record) => { + const recordWithoutClass = { ...record }; + recordWithoutClass.memberships.forEach((membership) => { + membership.organization = { ...membership.organization }; + }); + recordWithoutClass.userOrgaSettings = { + ...recordWithoutClass.userOrgaSettings, organization: { - ref: 'id', - attributes: ['name', 'externalId'], + ...recordWithoutClass.userOrgaSettings.currentOrganization, + isAgriculture: recordWithoutClass.userOrgaSettings.currentOrganization.isAgriculture, }, + }; + delete recordWithoutClass.userOrgaSettings.currentOrganization; + + return recordWithoutClass; + }, + + attributes: [ + 'firstName', + 'lastName', + 'pixOrgaTermsOfServiceAccepted', + 'areNewYearOrganizationLearnersImported', + 'participantCount', + 'lang', + 'memberships', + 'userOrgaSettings', + 'enableMultipleSendingAssessment', + ], + memberships: { + ref: 'id', + attributes: ['organizationRole', 'organization'], + organization: { + ref: 'id', + attributes: ['name', 'externalId'], }, - userOrgaSettings: { + }, + userOrgaSettings: { + ref: 'id', + attributes: ['organization', 'user'], + organization: { ref: 'id', - attributes: ['organization', 'user'], - organization: { + attributes: [ + 'name', + 'type', + 'credit', + 'isManagingStudents', + 'isAgriculture', + 'identityProviderForCampaigns', + 'targetProfiles', + 'memberships', + 'divisions', + 'organizationInvitations', + 'documentationUrl', + 'groups', + ], + memberships: { ref: 'id', - attributes: [ - 'name', - 'type', - 'credit', - 'isManagingStudents', - 'isAgriculture', - 'identityProviderForCampaigns', - 'targetProfiles', - 'memberships', - 'divisions', - 'organizationInvitations', - 'documentationUrl', - 'groups', - ], - memberships: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/memberships`; - }, + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/memberships`; }, }, - organizationInvitations: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/invitations`; - }, + }, + organizationInvitations: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/invitations`; }, }, - targetProfiles: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/target-profiles`; - }, + }, + targetProfiles: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/target-profiles`; }, }, - groups: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/groups`; - }, + }, + groups: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/groups`; }, }, - divisions: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/organizations/${parent.id}/divisions`; - }, + }, + divisions: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/organizations/${parent.id}/divisions`; }, }, }, }, - }).serialize(prescriber); - }, + }, + }).serialize(prescriber); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/private-certificate-serializer.js b/api/lib/infrastructure/serializers/jsonapi/private-certificate-serializer.js index 69da096089b..e4c87b42268 100644 --- a/api/lib/infrastructure/serializers/jsonapi/private-certificate-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/private-certificate-serializer.js @@ -1,4 +1,6 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; + +const { Serializer } = jsonapiSerializer; const typeForAttribute = (attribute) => { if (attribute === 'resultCompetenceTree') { @@ -48,12 +50,12 @@ const attributes = [ 'maxReachableLevelOnCertificationDate', ]; -module.exports = { - serialize(certificate) { - return new Serializer('certifications', { - typeForAttribute, - attributes, - resultCompetenceTree, - }).serialize(certificate); - }, +const serialize = function (certificate) { + return new Serializer('certifications', { + typeForAttribute, + attributes, + resultCompetenceTree, + }).serialize(certificate); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/profile-serializer.js b/api/lib/infrastructure/serializers/jsonapi/profile-serializer.js index 7371720de30..291aa095f24 100644 --- a/api/lib/infrastructure/serializers/jsonapi/profile-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/profile-serializer.js @@ -1,54 +1,56 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(profile = {}) { - return new Serializer('Profile', { - // Transform is necessary due to a bug with 'jsonapi-serializer' - // When a nested object (here: Area) is built with a class constructor - // in a nested object, it will skip the serialization of the area - // But when we use plain object instead of a class then serialization works. - transform: (profile) => ({ - ...profile, - scorecards: profile.scorecards.map((scorecard) => { - scorecard.area = { ...scorecard.area }; - return scorecard; - }), +const { Serializer } = jsonapiSerializer; + +const serialize = function (profile = {}) { + return new Serializer('Profile', { + // Transform is necessary due to a bug with 'jsonapi-serializer' + // When a nested object (here: Area) is built with a class constructor + // in a nested object, it will skip the serialization of the area + // But when we use plain object instead of a class then serialization works. + transform: (profile) => ({ + ...profile, + scorecards: profile.scorecards.map((scorecard) => { + scorecard.area = { ...scorecard.area }; + return scorecard; }), - attributes: ['pixScore', 'maxReachableLevel', 'maxReachablePixScore', 'scorecards'], - scorecards: { + }), + attributes: ['pixScore', 'maxReachableLevel', 'maxReachablePixScore', 'scorecards'], + scorecards: { + ref: 'id', + attributes: [ + 'area', + 'competenceId', + 'description', + 'earnedPix', + 'hasNotEarnedAnything', + 'hasNotReachedLevelOne', + 'hasReachedAtLeastLevelOne', + 'index', + 'isFinished', + 'isFinishedWithMaxLevel', + 'isImprovable', + 'isMaxLevel', + 'isNotStarted', + 'isProgressable', + 'isResettable', + 'isStarted', + 'level', + 'name', + 'percentageAheadOfNextLevel', + 'pixScoreAheadOfNextLevel', + 'remainingDaysBeforeImproving', + 'remainingDaysBeforeReset', + 'remainingPixToNextLevel', + 'shouldWaitBeforeImproving', + 'status', + ], + area: { ref: 'id', - attributes: [ - 'area', - 'competenceId', - 'description', - 'earnedPix', - 'hasNotEarnedAnything', - 'hasNotReachedLevelOne', - 'hasReachedAtLeastLevelOne', - 'index', - 'isFinished', - 'isFinishedWithMaxLevel', - 'isImprovable', - 'isMaxLevel', - 'isNotStarted', - 'isProgressable', - 'isResettable', - 'isStarted', - 'level', - 'name', - 'percentageAheadOfNextLevel', - 'pixScoreAheadOfNextLevel', - 'remainingDaysBeforeImproving', - 'remainingDaysBeforeReset', - 'remainingPixToNextLevel', - 'shouldWaitBeforeImproving', - 'status', - ], - area: { - ref: 'id', - attributes: ['code', 'title', 'color'], - }, + attributes: ['code', 'title', 'color'], }, - }).serialize(profile); - }, + }, + }).serialize(profile); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/progression-serializer.js b/api/lib/infrastructure/serializers/jsonapi/progression-serializer.js index 57ca4397e83..561c77c3ac3 100644 --- a/api/lib/infrastructure/serializers/jsonapi/progression-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/progression-serializer.js @@ -1,9 +1,11 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(progression) { - return new Serializer('progression', { - attributes: ['completionRate'], - }).serialize(progression); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (progression) { + return new Serializer('progression', { + attributes: ['completionRate'], + }).serialize(progression); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/sco-organization-invitation-serializer.js b/api/lib/infrastructure/serializers/jsonapi/sco-organization-invitation-serializer.js index 2350dcd0de0..3afa75ed520 100644 --- a/api/lib/infrastructure/serializers/jsonapi/sco-organization-invitation-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/sco-organization-invitation-serializer.js @@ -1,9 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(invitation) { - return new Serializer('sco-organization-invitation', { - attributes: ['uai', 'lastName', 'firstName'], - }).serialize(invitation); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (invitation) { + return new Serializer('sco-organization-invitation', { + attributes: ['uai', 'lastName', 'firstName'], + }).serialize(invitation); }; + +const serializer = { serialize }; +export { serializer, serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/sco-organization-learner-serializer.js b/api/lib/infrastructure/serializers/jsonapi/sco-organization-learner-serializer.js index 52223cba57a..fe682506213 100644 --- a/api/lib/infrastructure/serializers/jsonapi/sco-organization-learner-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/sco-organization-learner-serializer.js @@ -1,27 +1,29 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serializeIdentity(scoOrganizationLearner) { - return new Serializer('sco-organization-learner', { - attributes: ['lastName', 'firstName', 'birthdate'], - }).serialize(scoOrganizationLearner); - }, +const { Serializer } = jsonapiSerializer; - serializeWithUsernameGeneration(scoOrganizationLearner) { - return new Serializer('sco-organization-learner', { - attributes: ['lastName', 'firstName', 'birthdate', 'username'], - }).serialize(scoOrganizationLearner); - }, +const serializeIdentity = function (scoOrganizationLearner) { + return new Serializer('sco-organization-learner', { + attributes: ['lastName', 'firstName', 'birthdate'], + }).serialize(scoOrganizationLearner); +}; - serializeExternal(scoOrganizationLearner) { - return new Serializer('external-users', { - attributes: ['accessToken'], - }).serialize(scoOrganizationLearner); - }, +const serializeWithUsernameGeneration = function (scoOrganizationLearner) { + return new Serializer('sco-organization-learner', { + attributes: ['lastName', 'firstName', 'birthdate', 'username'], + }).serialize(scoOrganizationLearner); +}; - serializeCredentialsForDependent(scoOrganizationLearner) { - return new Serializer('dependent-users', { - attributes: ['username', 'generatedPassword'], - }).serialize(scoOrganizationLearner); - }, +const serializeExternal = function (scoOrganizationLearner) { + return new Serializer('external-users', { + attributes: ['accessToken'], + }).serialize(scoOrganizationLearner); }; + +const serializeCredentialsForDependent = function (scoOrganizationLearner) { + return new Serializer('dependent-users', { + attributes: ['username', 'generatedPassword'], + }).serialize(scoOrganizationLearner); +}; + +export { serializeIdentity, serializeWithUsernameGeneration, serializeExternal, serializeCredentialsForDependent }; diff --git a/api/lib/infrastructure/serializers/jsonapi/scorecard-serializer.js b/api/lib/infrastructure/serializers/jsonapi/scorecard-serializer.js index b0efa548386..ee08cba2155 100644 --- a/api/lib/infrastructure/serializers/jsonapi/scorecard-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/scorecard-serializer.js @@ -1,61 +1,63 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(scorecard = {}) { - return new Serializer('scorecard', { - attributes: [ - 'area', - 'competenceId', - 'description', - 'earnedPix', - 'hasNotEarnedAnything', - 'hasNotReachedLevelOne', - 'hasReachedAtLeastLevelOne', - 'index', - 'isFinished', - 'isFinishedWithMaxLevel', - 'isImprovable', - 'isMaxLevel', - 'isNotStarted', - 'isProgressable', - 'isResettable', - 'isStarted', - 'level', - 'name', - 'percentageAheadOfNextLevel', - 'pixScoreAheadOfNextLevel', - 'remainingDaysBeforeImproving', - 'remainingDaysBeforeReset', - 'remainingPixToNextLevel', - 'shouldWaitBeforeImproving', - 'status', - 'tutorials', - ], +const { Serializer } = jsonapiSerializer; - area: { - ref: ['id'], - attributes: ['code', 'title', 'color'], - }, - tutorials: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/scorecards/${parent.id}/tutorials`; - }, +const serialize = function (scorecard = {}) { + return new Serializer('scorecard', { + attributes: [ + 'area', + 'competenceId', + 'description', + 'earnedPix', + 'hasNotEarnedAnything', + 'hasNotReachedLevelOne', + 'hasReachedAtLeastLevelOne', + 'index', + 'isFinished', + 'isFinishedWithMaxLevel', + 'isImprovable', + 'isMaxLevel', + 'isNotStarted', + 'isProgressable', + 'isResettable', + 'isStarted', + 'level', + 'name', + 'percentageAheadOfNextLevel', + 'pixScoreAheadOfNextLevel', + 'remainingDaysBeforeImproving', + 'remainingDaysBeforeReset', + 'remainingPixToNextLevel', + 'shouldWaitBeforeImproving', + 'status', + 'tutorials', + ], + + area: { + ref: ['id'], + attributes: ['code', 'title', 'color'], + }, + tutorials: { + ref: 'id', + ignoreRelationshipData: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/scorecards/${parent.id}/tutorials`; }, - attributes: [ - 'id', - 'duration', - 'format', - 'link', - 'source', - 'title', - 'tubeName', - 'tubePracticalTitle', - 'tubePracticalDescription', - ], }, - }).serialize(scorecard); - }, + attributes: [ + 'id', + 'duration', + 'format', + 'link', + 'source', + 'title', + 'tubeName', + 'tubePracticalTitle', + 'tubePracticalDescription', + ], + }, + }).serialize(scorecard); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/session-for-supervising-serializer.js b/api/lib/infrastructure/serializers/jsonapi/session-for-supervising-serializer.js index f6f1f2e7e24..581ad42938c 100644 --- a/api/lib/infrastructure/serializers/jsonapi/session-for-supervising-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/session-for-supervising-serializer.js @@ -1,48 +1,49 @@ -const _ = require('lodash'); -const { Serializer } = require('jsonapi-serializer'); +import _ from 'lodash'; +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(sessions) { - return new Serializer('sessionForSupervising', { - transform(currentSessionForSupervising) { - const cloneSession = _.cloneDeep(currentSessionForSupervising); +const { Serializer } = jsonapiSerializer; - cloneSession.certificationCandidates.forEach((candidate) => { - candidate.enrolledComplementaryCertificationLabel = - candidate.enrolledComplementaryCertification?.label ?? null; - }); +const serialize = function (sessions) { + return new Serializer('sessionForSupervising', { + transform(currentSessionForSupervising) { + const cloneSession = _.cloneDeep(currentSessionForSupervising); - return cloneSession; - }, + cloneSession.certificationCandidates.forEach((candidate) => { + candidate.enrolledComplementaryCertificationLabel = candidate.enrolledComplementaryCertification?.label ?? null; + }); + + return cloneSession; + }, + attributes: [ + 'room', + 'examiner', + 'accessCode', + 'date', + 'time', + 'certificationCenterName', + 'certificationCandidates', + ], + typeForAttribute: (attribute) => + attribute === 'certificationCandidates' ? 'certification-candidate-for-supervising' : attribute, + certificationCandidates: { + included: true, + ref: 'id', attributes: [ - 'room', - 'examiner', - 'accessCode', - 'date', - 'time', - 'certificationCenterName', - 'certificationCandidates', + 'id', + 'userId', + 'firstName', + 'lastName', + 'birthdate', + 'extraTimePercentage', + 'authorizedToStart', + 'assessmentStatus', + 'startDateTime', + 'theoricalEndDateTime', + 'enrolledComplementaryCertificationLabel', + 'isStillEligibleToComplementaryCertification', ], - typeForAttribute: (attribute) => - attribute === 'certificationCandidates' ? 'certification-candidate-for-supervising' : attribute, - certificationCandidates: { - included: true, - ref: 'id', - attributes: [ - 'id', - 'userId', - 'firstName', - 'lastName', - 'birthdate', - 'extraTimePercentage', - 'authorizedToStart', - 'assessmentStatus', - 'startDateTime', - 'theoricalEndDateTime', - 'enrolledComplementaryCertificationLabel', - 'isStillEligibleToComplementaryCertification', - ], - }, - }).serialize(sessions); - }, + }, + }).serialize(sessions); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/session-serializer.js b/api/lib/infrastructure/serializers/jsonapi/session-serializer.js index b9bc5489b48..354b625fe06 100644 --- a/api/lib/infrastructure/serializers/jsonapi/session-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/session-serializer.js @@ -1,87 +1,90 @@ -const { Serializer } = require('jsonapi-serializer'); -const _ = require('lodash'); +import jsonapiSerializer from 'jsonapi-serializer'; -const Session = require('../../../domain/models/Session.js'); +const { Serializer } = jsonapiSerializer; -module.exports = { - serialize({ session, hasSupervisorAccess, hasSomeCleaAcquired }) { - const attributes = [ - 'address', - 'room', - 'examiner', - 'date', - 'time', - 'status', - 'description', - 'accessCode', - 'examinerGlobalComment', - 'hasIncident', - 'hasJoiningIssue', - 'finalizedAt', - 'resultsSentToPrescriberAt', - 'publishedAt', - 'certificationCenterId', - 'certificationCandidates', - 'certificationReports', - 'supervisorPassword', - 'hasSupervisorAccess', - 'hasSomeCleaAcquired', - ]; - return new Serializer('session', { - transform(record) { - if (hasSupervisorAccess !== undefined) { - record.hasSupervisorAccess = hasSupervisorAccess; - } - if (hasSomeCleaAcquired !== undefined) { - record.hasSomeCleaAcquired = hasSomeCleaAcquired; - } - return record; - }, - attributes, - certificationCandidates: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/sessions/${parent.id}/certification-candidates`; - }, +import _ from 'lodash'; + +import { Session } from '../../../domain/models/Session.js'; + +const serialize = function ({ session, hasSupervisorAccess, hasSomeCleaAcquired }) { + const attributes = [ + 'address', + 'room', + 'examiner', + 'date', + 'time', + 'status', + 'description', + 'accessCode', + 'examinerGlobalComment', + 'hasIncident', + 'hasJoiningIssue', + 'finalizedAt', + 'resultsSentToPrescriberAt', + 'publishedAt', + 'certificationCenterId', + 'certificationCandidates', + 'certificationReports', + 'supervisorPassword', + 'hasSupervisorAccess', + 'hasSomeCleaAcquired', + ]; + return new Serializer('session', { + transform(record) { + if (hasSupervisorAccess !== undefined) { + record.hasSupervisorAccess = hasSupervisorAccess; + } + if (hasSomeCleaAcquired !== undefined) { + record.hasSomeCleaAcquired = hasSomeCleaAcquired; + } + return record; + }, + attributes, + certificationCandidates: { + ref: 'id', + ignoreRelationshipData: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/sessions/${parent.id}/certification-candidates`; }, }, - certificationReports: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related(record, current, parent) { - return `/api/sessions/${parent.id}/certification-reports`; - }, + }, + certificationReports: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related(record, current, parent) { + return `/api/sessions/${parent.id}/certification-reports`; }, }, - }).serialize(session); - }, + }, + }).serialize(session); +}; - deserialize(json) { - const attributes = json.data.attributes; +const deserialize = function (json) { + const attributes = json.data.attributes; - const result = new Session({ - id: json.data.id, - certificationCenterId: attributes['certification-center-id'], - address: attributes.address, - room: attributes.room, - examiner: attributes.examiner, - date: attributes.date, - time: attributes.time, - status: attributes.status, - description: attributes.description, - examinerGlobalComment: attributes['examiner-global-comment'], - hasIncident: attributes['has-incident'], - hasJoiningIssue: attributes['has-joining-issue'], - }); + const result = new Session({ + id: json.data.id, + certificationCenterId: attributes['certification-center-id'], + address: attributes.address, + room: attributes.room, + examiner: attributes.examiner, + date: attributes.date, + time: attributes.time, + status: attributes.status, + description: attributes.description, + examinerGlobalComment: attributes['examiner-global-comment'], + hasIncident: attributes['has-incident'], + hasJoiningIssue: attributes['has-joining-issue'], + }); - if (_.isEmpty(_.trim(result.examinerGlobalComment))) { - result.examinerGlobalComment = Session.NO_EXAMINER_GLOBAL_COMMENT; - } + if (_.isEmpty(_.trim(result.examinerGlobalComment))) { + result.examinerGlobalComment = Session.NO_EXAMINER_GLOBAL_COMMENT; + } - return result; - }, + return result; }; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/session-summary-serializer.js b/api/lib/infrastructure/serializers/jsonapi/session-summary-serializer.js index 45953d4c94f..79248338e65 100644 --- a/api/lib/infrastructure/serializers/jsonapi/session-summary-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/session-summary-serializer.js @@ -1,19 +1,21 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(sessionSummaries, meta) { - return new Serializer('session-summary', { - attributes: [ - 'address', - 'room', - 'date', - 'time', - 'examiner', - 'enrolledCandidatesCount', - 'effectiveCandidatesCount', - 'status', - ], - meta, - }).serialize(sessionSummaries); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (sessionSummaries, meta) { + return new Serializer('session-summary', { + attributes: [ + 'address', + 'room', + 'date', + 'time', + 'examiner', + 'enrolledCandidatesCount', + 'effectiveCandidatesCount', + 'status', + ], + meta, + }).serialize(sessionSummaries); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/shareable-certificate-serializer.js b/api/lib/infrastructure/serializers/jsonapi/shareable-certificate-serializer.js index f7d2aa302a8..282fdc321e1 100644 --- a/api/lib/infrastructure/serializers/jsonapi/shareable-certificate-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/shareable-certificate-serializer.js @@ -1,4 +1,6 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; + +const { Serializer } = jsonapiSerializer; const typeForAttribute = (attribute) => { if (attribute === 'resultCompetenceTree') { @@ -44,12 +46,12 @@ const attributes = [ 'maxReachableLevelOnCertificationDate', ]; -module.exports = { - serialize(certificate) { - return new Serializer('certifications', { - typeForAttribute, - attributes, - resultCompetenceTree, - }).serialize(certificate); - }, +const serialize = function (certificate) { + return new Serializer('certifications', { + typeForAttribute, + attributes, + resultCompetenceTree, + }).serialize(certificate); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/shared-profile-for-campaign-serializer.js b/api/lib/infrastructure/serializers/jsonapi/shared-profile-for-campaign-serializer.js index 4b48ad93ac3..26c9cfcc828 100644 --- a/api/lib/infrastructure/serializers/jsonapi/shared-profile-for-campaign-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/shared-profile-for-campaign-serializer.js @@ -1,35 +1,37 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(sharedProfileForCampaign = {}) { - return new Serializer('SharedProfileForCampaign', { - // Transform is necessary due to a bug with 'jsonapi-serializer' - // When a nested object (here: Area) is built with a class constructor - // in a nested object, it will skip the serialization of the area - // But when we use plain object instead of a class then serialization works. - transform: (profile) => ({ - ...profile, - scorecards: profile.scorecards.map((scorecard) => ({ ...scorecard, area: { ...scorecard.area } })), - }), - attributes: ['pixScore', 'sharedAt', 'scorecards', 'canRetry', 'maxReachableLevel', 'maxReachablePixScore'], - scorecards: { +const { Serializer } = jsonapiSerializer; + +const serialize = function (sharedProfileForCampaign = {}) { + return new Serializer('SharedProfileForCampaign', { + // Transform is necessary due to a bug with 'jsonapi-serializer' + // When a nested object (here: Area) is built with a class constructor + // in a nested object, it will skip the serialization of the area + // But when we use plain object instead of a class then serialization works. + transform: (profile) => ({ + ...profile, + scorecards: profile.scorecards.map((scorecard) => ({ ...scorecard, area: { ...scorecard.area } })), + }), + attributes: ['pixScore', 'sharedAt', 'scorecards', 'canRetry', 'maxReachableLevel', 'maxReachablePixScore'], + scorecards: { + ref: 'id', + attributes: [ + 'name', + 'description', + 'index', + 'competenceId', + 'earnedPix', + 'level', + 'pixScoreAheadOfNextLevel', + 'status', + 'area', + ], + area: { ref: 'id', - attributes: [ - 'name', - 'description', - 'index', - 'competenceId', - 'earnedPix', - 'level', - 'pixScoreAheadOfNextLevel', - 'status', - 'area', - ], - area: { - ref: 'id', - attributes: ['code', 'title', 'color'], - }, + attributes: ['code', 'title', 'color'], }, - }).serialize(sharedProfileForCampaign); - }, + }, + }).serialize(sharedProfileForCampaign); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/skill-set-serializer.js b/api/lib/infrastructure/serializers/jsonapi/skill-set-serializer.js index 2de054fb2be..47e476e47cd 100644 --- a/api/lib/infrastructure/serializers/jsonapi/skill-set-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/skill-set-serializer.js @@ -1,9 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); -module.exports = { - serialize(skillSet = {}) { - return new Serializer('skill-sets', { - ref: 'id', - attributes: ['name', 'skillIds'], - }).serialize(skillSet); - }, +import jsonapiSerializer from 'jsonapi-serializer'; + +const { Serializer } = jsonapiSerializer; + +const serialize = function (skillSet = {}) { + return new Serializer('skill-sets', { + ref: 'id', + attributes: ['name', 'skillIds'], + }).serialize(skillSet); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/student-certification-serializer.js b/api/lib/infrastructure/serializers/jsonapi/student-certification-serializer.js index 8fbc84e1255..e88c633aca1 100644 --- a/api/lib/infrastructure/serializers/jsonapi/student-certification-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/student-certification-serializer.js @@ -1,10 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(students, pagination) { - return new Serializer('students', { - attributes: ['lastName', 'firstName', 'birthdate', 'division', 'isEnrolled'], - meta: pagination, - }).serialize(students); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (students, pagination) { + return new Serializer('students', { + attributes: ['lastName', 'firstName', 'birthdate', 'division', 'isEnrolled'], + meta: pagination, + }).serialize(students); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer.js b/api/lib/infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer.js index a1e82658df5..9b21b9f5d03 100644 --- a/api/lib/infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer.js @@ -1,30 +1,32 @@ -const { Serializer, Deserializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(studentInformationForAccountRecovery) { - return new Serializer('student-information-for-account-recoveries', { - attributes: ['firstName', 'lastName', 'username', 'email', 'latestOrganizationName'], - }).serialize(studentInformationForAccountRecovery); - }, +const { Serializer, Deserializer } = jsonapiSerializer; - serializeAccountRecovery(accountRecoveryDemand) { - return new Serializer('account-recovery-demand', { - attributes: ['firstName', 'email'], - }).serialize(accountRecoveryDemand); - }, +const serialize = function (studentInformationForAccountRecovery) { + return new Serializer('student-information-for-account-recoveries', { + attributes: ['firstName', 'lastName', 'username', 'email', 'latestOrganizationName'], + }).serialize(studentInformationForAccountRecovery); +}; + +const serializeAccountRecovery = function (accountRecoveryDemand) { + return new Serializer('account-recovery-demand', { + attributes: ['firstName', 'email'], + }).serialize(accountRecoveryDemand); +}; - async deserialize(studentInformationForAccountRecovery) { - function transform(record) { - return { - ineIna: record['ine-ina'], - firstName: record['first-name'], - lastName: record['last-name'], - birthdate: record.birthdate, - ...(record.email && { email: record.email }), - }; - } - return new Deserializer({ transform }) - .deserialize(studentInformationForAccountRecovery) - .then((studentInformation) => studentInformation); - }, +const deserialize = async function (studentInformationForAccountRecovery) { + function transform(record) { + return { + ineIna: record['ine-ina'], + firstName: record['first-name'], + lastName: record['last-name'], + birthdate: record.birthdate, + ...(record.email && { email: record.email }), + }; + } + return new Deserializer({ transform }) + .deserialize(studentInformationForAccountRecovery) + .then((studentInformation) => studentInformation); }; + +export { serialize, serializeAccountRecovery, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/sup-organization-learner-warnings-serializer.js b/api/lib/infrastructure/serializers/jsonapi/sup-organization-learner-warnings-serializer.js index 7f6e4f5a105..eac18d53fb3 100644 --- a/api/lib/infrastructure/serializers/jsonapi/sup-organization-learner-warnings-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/sup-organization-learner-warnings-serializer.js @@ -1,10 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(organizations, meta) { - return new Serializer('sup-organization-learner-warnings', { - attributes: ['warnings'], - meta, - }).serialize(organizations); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (organizations, meta) { + return new Serializer('sup-organization-learner-warnings', { + attributes: ['warnings'], + meta, + }).serialize(organizations); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/tag-serializer.js b/api/lib/infrastructure/serializers/jsonapi/tag-serializer.js index 5ca6fd06485..0bc300df8a1 100644 --- a/api/lib/infrastructure/serializers/jsonapi/tag-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/tag-serializer.js @@ -1,9 +1,11 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(tags) { - return new Serializer('tags', { - attributes: ['name'], - }).serialize(tags); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (tags) { + return new Serializer('tags', { + attributes: ['name'], + }).serialize(tags); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/target-profile-attach-organization-serializer.js b/api/lib/infrastructure/serializers/jsonapi/target-profile-attach-organization-serializer.js index b33fe3f9f71..a84c332e37d 100644 --- a/api/lib/infrastructure/serializers/jsonapi/target-profile-attach-organization-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/target-profile-attach-organization-serializer.js @@ -1,10 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(model) { - return new Serializer('target-profile-attach-organization', { - id: 'targetProfileId', - attributes: ['duplicatedIds', 'attachedIds'], - }).serialize(model); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (model) { + return new Serializer('target-profile-attach-organization', { + id: 'targetProfileId', + attributes: ['duplicatedIds', 'attachedIds'], + }).serialize(model); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/target-profile-for-admin-serializer.js b/api/lib/infrastructure/serializers/jsonapi/target-profile-for-admin-serializer.js index a27193e8cc5..a3c95c076a5 100644 --- a/api/lib/infrastructure/serializers/jsonapi/target-profile-for-admin-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/target-profile-for-admin-serializer.js @@ -1,93 +1,86 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(targetProfiles) { - return new Serializer('target-profile', { - transform(record) { - record.stageCollection = record.stageCollection.toDTO(); - record.badges = record.badges.map((badge) => { - badge.criteria = badge.criteria.map((criteria) => criteria.toDTO()); - return badge; - }); - return record; +const { Serializer } = jsonapiSerializer; + +const serialize = function (targetProfiles) { + return new Serializer('target-profile', { + transform(record) { + record.stageCollection = record.stageCollection.toDTO(); + record.badges = record.badges.map((badge) => { + badge.criteria = badge.criteria.map((criteria) => criteria.toDTO()); + return badge; + }); + return record; + }, + attributes: [ + 'name', + 'outdated', + 'isPublic', + 'createdAt', + 'ownerOrganizationId', + 'description', + 'comment', + 'imageUrl', + 'category', + 'isSimplifiedAccess', + 'badges', + 'stageCollection', + 'areas', + 'maxLevel', + ], + badges: { + ref: 'id', + included: true, + attributes: ['altMessage', 'imageUrl', 'message', 'title', 'key', 'isCertifiable', 'isAlwaysVisible', 'criteria'], + criteria: { + ref: 'id', + included: true, + attributes: ['threshold', 'scope', 'cappedTubes', 'name'], }, - attributes: [ - 'name', - 'outdated', - 'isPublic', - 'createdAt', - 'ownerOrganizationId', - 'description', - 'comment', - 'imageUrl', - 'category', - 'isSimplifiedAccess', - 'badges', - 'stageCollection', - 'areas', - 'maxLevel', - ], - badges: { + }, + stageCollection: { + ref: 'id', + included: true, + attributes: ['targetProfileId', 'stages'], + stages: { ref: 'id', included: true, attributes: [ - 'altMessage', - 'imageUrl', - 'message', + 'threshold', + 'level', + 'isFirstSkill', 'title', - 'key', - 'isCertifiable', - 'isAlwaysVisible', - 'criteria', + 'message', + 'prescriberTitle', + 'prescriberDescription', ], - criteria: { - ref: 'id', - included: true, - attributes: ['threshold', 'scope', 'cappedTubes', 'name'], - }, }, - stageCollection: { + }, + areas: { + ref: 'id', + included: true, + attributes: ['title', 'code', 'color', 'frameworkId', 'competences'], + competences: { ref: 'id', included: true, - attributes: ['targetProfileId', 'stages'], - stages: { + attributes: ['name', 'index', 'thematics'], + thematics: { ref: 'id', included: true, - attributes: [ - 'threshold', - 'level', - 'isFirstSkill', - 'title', - 'message', - 'prescriberTitle', - 'prescriberDescription', - ], - }, - }, - areas: { - ref: 'id', - included: true, - attributes: ['title', 'code', 'color', 'frameworkId', 'competences'], - competences: { - ref: 'id', - included: true, - attributes: ['name', 'index', 'thematics'], - thematics: { + attributes: ['name', 'index', 'tubes'], + tubes: { ref: 'id', included: true, - attributes: ['name', 'index', 'tubes'], - tubes: { - ref: 'id', - included: true, - attributes: ['name', 'practicalTitle', 'level', 'mobile', 'tablet'], - }, + attributes: ['name', 'practicalTitle', 'level', 'mobile', 'tablet'], }, }, }, - typeForAttribute(attribute) { - if (attribute === 'criteria') return 'badge-criteria'; - return undefined; - }, - }).serialize(targetProfiles); - }, + }, + typeForAttribute(attribute) { + if (attribute === 'criteria') return 'badge-criteria'; + return undefined; + }, + }).serialize(targetProfiles); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/target-profile-serializer.js b/api/lib/infrastructure/serializers/jsonapi/target-profile-serializer.js index 521a741d09e..2030b4eba64 100644 --- a/api/lib/infrastructure/serializers/jsonapi/target-profile-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/target-profile-serializer.js @@ -1,27 +1,29 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(targetProfiles, meta) { - return new Serializer('target-profile', { - attributes: ['name', 'outdated', 'isPublic', 'ownerOrganizationId', 'isSimplifiedAccess'], - meta, - }).serialize(targetProfiles); - }, +const { Serializer } = jsonapiSerializer; - serializeId(targetProfileId) { - return new Serializer('target-profile', {}).serialize({ id: targetProfileId }); - }, +const serialize = function (targetProfiles, meta) { + return new Serializer('target-profile', { + attributes: ['name', 'outdated', 'isPublic', 'ownerOrganizationId', 'isSimplifiedAccess'], + meta, + }).serialize(targetProfiles); +}; + +const serializeId = function (targetProfileId) { + return new Serializer('target-profile', {}).serialize({ id: targetProfileId }); +}; - deserializeCreationCommand(json) { - return { - name: json.data.attributes['name'], - category: json.data.attributes['category'], - description: json.data.attributes['description'], - comment: json.data.attributes['comment'], - isPublic: json.data.attributes['is-public'], - imageUrl: json.data.attributes['image-url'], - ownerOrganizationId: json.data.attributes['owner-organization-id'], - tubes: json.data.attributes['tubes'], - }; - }, +const deserializeCreationCommand = function (json) { + return { + name: json.data.attributes['name'], + category: json.data.attributes['category'], + description: json.data.attributes['description'], + comment: json.data.attributes['comment'], + isPublic: json.data.attributes['is-public'], + imageUrl: json.data.attributes['image-url'], + ownerOrganizationId: json.data.attributes['owner-organization-id'], + tubes: json.data.attributes['tubes'], + }; }; + +export { serialize, serializeId, deserializeCreationCommand }; diff --git a/api/lib/infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer.js b/api/lib/infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer.js index 69752834767..3d6993ba220 100644 --- a/api/lib/infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer.js @@ -1,10 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(targetProfileSummaries, meta) { - return new Serializer('target-profile-summary', { - attributes: ['name', 'outdated', 'createdAt'], - meta, - }).serialize(targetProfileSummaries); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (targetProfileSummaries, meta) { + return new Serializer('target-profile-summary', { + attributes: ['name', 'outdated', 'createdAt'], + meta, + }).serialize(targetProfileSummaries); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/to-be-published-session-serializer.js b/api/lib/infrastructure/serializers/jsonapi/to-be-published-session-serializer.js index f7deeaab792..013cba68af3 100644 --- a/api/lib/infrastructure/serializers/jsonapi/to-be-published-session-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/to-be-published-session-serializer.js @@ -1,12 +1,14 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(finalizedSessions) { - return new Serializer('to-be-published-session', { - transform(finalizedSession) { - return { ...finalizedSession, id: finalizedSession.sessionId }; - }, - attributes: ['sessionId', 'sessionDate', 'sessionTime', 'finalizedAt', 'certificationCenterName'], - }).serialize(finalizedSessions); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (finalizedSessions) { + return new Serializer('to-be-published-session', { + transform(finalizedSession) { + return { ...finalizedSession, id: finalizedSession.sessionId }; + }, + attributes: ['sessionId', 'sessionDate', 'sessionTime', 'finalizedAt', 'certificationCenterName'], + }).serialize(finalizedSessions); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/training-serializer.js b/api/lib/infrastructure/serializers/jsonapi/training-serializer.js index 4030c55a9fb..14a0a759d55 100644 --- a/api/lib/infrastructure/serializers/jsonapi/training-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/training-serializer.js @@ -1,132 +1,134 @@ -const { Serializer, Deserializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serializeForAdmin(training = {}, meta) { - return new Serializer('trainings', { - transform(record) { - const duration = record.duration; - duration.days = duration.days || 0; - duration.hours = duration.hours || 0; - duration.minutes = duration.minutes || 0; +const { Serializer, Deserializer } = jsonapiSerializer; - return JSON.parse(JSON.stringify({ ...record, isRecommendable: record.isRecommendable })); - }, - attributes: [ - 'id', - 'duration', - 'link', - 'locale', - 'title', - 'type', - 'editorName', - 'editorLogoUrl', - 'trainingTriggers', - 'targetProfileSummaries', - 'isRecommendable', - ], - trainingTriggers: { +const serializeForAdmin = function (training = {}, meta) { + return new Serializer('trainings', { + transform(record) { + const duration = record.duration; + duration.days = duration.days || 0; + duration.hours = duration.hours || 0; + duration.minutes = duration.minutes || 0; + + return JSON.parse(JSON.stringify({ ...record, isRecommendable: record.isRecommendable })); + }, + attributes: [ + 'id', + 'duration', + 'link', + 'locale', + 'title', + 'type', + 'editorName', + 'editorLogoUrl', + 'trainingTriggers', + 'targetProfileSummaries', + 'isRecommendable', + ], + trainingTriggers: { + ref: 'id', + attributes: ['id', 'trainingId', 'type', 'threshold', 'areas', 'tubesCount'], + areas: { ref: 'id', - attributes: ['id', 'trainingId', 'type', 'threshold', 'areas', 'tubesCount'], - areas: { + included: true, + attributes: ['id', 'title', 'code', 'color', 'competences'], + competences: { ref: 'id', included: true, - attributes: ['id', 'title', 'code', 'color', 'competences'], - competences: { + attributes: ['id', 'name', 'index', 'thematics'], + thematics: { ref: 'id', included: true, - attributes: ['id', 'name', 'index', 'thematics'], - thematics: { + attributes: ['id', 'name', 'index', 'triggerTubes'], + triggerTubes: { ref: 'id', included: true, - attributes: ['id', 'name', 'index', 'triggerTubes'], - triggerTubes: { + attributes: ['id', 'level', 'tube'], + tube: { ref: 'id', included: true, - attributes: ['id', 'level', 'tube'], - tube: { - ref: 'id', - included: true, - attributes: ['id', 'name', 'practicalTitle'], - }, + attributes: ['id', 'name', 'practicalTitle'], }, }, }, }, }, - targetProfileSummaries: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/admin/trainings/${parent.id}/target-profile-summaries`; - }, + }, + targetProfileSummaries: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/admin/trainings/${parent.id}/target-profile-summaries`; }, }, - meta, - typeForAttribute(attribute) { - switch (attribute) { - case 'trainingTriggers': - return 'training-triggers'; - case 'triggerTubes': - return 'trigger-tubes'; - case 'tube': - return 'tubes'; - default: - return attribute; - } - }, - }).serialize(training); - }, + }, + meta, + typeForAttribute(attribute) { + switch (attribute) { + case 'trainingTriggers': + return 'training-triggers'; + case 'triggerTubes': + return 'trigger-tubes'; + case 'tube': + return 'tubes'; + default: + return attribute; + } + }, + }).serialize(training); +}; - serialize(training = {}, meta) { - return new Serializer('trainings', { - attributes: [ - 'duration', - 'link', - 'locale', - 'title', - 'type', - 'editorName', - 'editorLogoUrl', - 'targetProfileSummaries', - ], - targetProfileSummaries: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/admin/trainings/${parent.id}/target-profile-summaries`; - }, +const serialize = function (training = {}, meta) { + return new Serializer('trainings', { + attributes: [ + 'duration', + 'link', + 'locale', + 'title', + 'type', + 'editorName', + 'editorLogoUrl', + 'targetProfileSummaries', + ], + targetProfileSummaries: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/admin/trainings/${parent.id}/target-profile-summaries`; }, }, - meta, - transform(training) { - const duration = training.duration; - duration.days = duration.days || 0; - duration.hours = duration.hours || 0; - duration.minutes = duration.minutes || 0; - return training; - }, - }).serialize(training); - }, + }, + meta, + transform(training) { + const duration = training.duration; + duration.days = duration.days || 0; + duration.hours = duration.hours || 0; + duration.minutes = duration.minutes || 0; + return training; + }, + }).serialize(training); +}; - deserialize(payload) { - return new Deserializer({ - keyForAttribute: 'camelCase', - transform(deserializedTraining) { - const duration = deserializedTraining.duration; - if (!duration) return deserializedTraining; +const deserialize = function (payload) { + return new Deserializer({ + keyForAttribute: 'camelCase', + transform(deserializedTraining) { + const duration = deserializedTraining.duration; + if (!duration) return deserializedTraining; - const { days, hours, minutes } = duration; - const formattedDuration = `${days}d${hours}h${minutes}m`; + const { days, hours, minutes } = duration; + const formattedDuration = `${days}d${hours}h${minutes}m`; - return { - ...deserializedTraining, - duration: formattedDuration, - }; - }, - }).deserialize(payload); - }, + return { + ...deserializedTraining, + duration: formattedDuration, + }; + }, + }).deserialize(payload); }; + +export { serializeForAdmin, serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/training-summary-serializer.js b/api/lib/infrastructure/serializers/jsonapi/training-summary-serializer.js index 927f4964767..2cad3b47aee 100644 --- a/api/lib/infrastructure/serializers/jsonapi/training-summary-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/training-summary-serializer.js @@ -1,10 +1,12 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(trainingSummaries, meta) { - return new Serializer('training-summaries', { - attributes: ['title', 'isRecommendable'], - meta, - }).serialize(trainingSummaries); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (trainingSummaries, meta) { + return new Serializer('training-summaries', { + attributes: ['title', 'isRecommendable'], + meta, + }).serialize(trainingSummaries); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/training-trigger-serializer.js b/api/lib/infrastructure/serializers/jsonapi/training-trigger-serializer.js index 6a4e190a45d..2c196f14743 100644 --- a/api/lib/infrastructure/serializers/jsonapi/training-trigger-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/training-trigger-serializer.js @@ -1,54 +1,56 @@ -const { Serializer, Deserializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(trainingTrigger = {}, meta) { - return new Serializer('training-triggers', { - transform(record) { - return JSON.parse(JSON.stringify(record)); - }, - attributes: ['id', 'trainingId', 'type', 'threshold', 'areas', 'tubesCount'], - areas: { +const { Serializer, Deserializer } = jsonapiSerializer; + +const serialize = function (trainingTrigger = {}, meta) { + return new Serializer('training-triggers', { + transform(record) { + return JSON.parse(JSON.stringify(record)); + }, + attributes: ['id', 'trainingId', 'type', 'threshold', 'areas', 'tubesCount'], + areas: { + ref: 'id', + included: true, + attributes: ['title', 'code', 'color', 'competences'], + competences: { ref: 'id', included: true, - attributes: ['title', 'code', 'color', 'competences'], - competences: { + attributes: ['name', 'index', 'thematics'], + thematics: { ref: 'id', included: true, - attributes: ['name', 'index', 'thematics'], - thematics: { + attributes: ['name', 'index', 'triggerTubes'], + triggerTubes: { ref: 'id', included: true, - attributes: ['name', 'index', 'triggerTubes'], - triggerTubes: { + attributes: ['id', 'level', 'tube'], + tube: { ref: 'id', included: true, - attributes: ['id', 'level', 'tube'], - tube: { - ref: 'id', - included: true, - attributes: ['id', 'name', 'practicalTitle'], - }, + attributes: ['id', 'name', 'practicalTitle'], }, }, }, }, - meta, - typeForAttribute(attribute) { - switch (attribute) { - case 'triggerTubes': - return 'trigger-tubes'; - case 'tube': - return 'tubes'; - default: - return attribute; - } - }, - }).serialize(trainingTrigger); - }, + }, + meta, + typeForAttribute(attribute) { + switch (attribute) { + case 'triggerTubes': + return 'trigger-tubes'; + case 'tube': + return 'tubes'; + default: + return attribute; + } + }, + }).serialize(trainingTrigger); +}; - deserialize(payload) { - return new Deserializer({ - keyForAttribute: 'camelCase', - }).deserialize(payload); - }, +const deserialize = function (payload) { + return new Deserializer({ + keyForAttribute: 'camelCase', + }).deserialize(payload); }; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/tutorial-attributes.js b/api/lib/infrastructure/serializers/jsonapi/tutorial-attributes.js index f4c6c7b8078..1b16296de61 100644 --- a/api/lib/infrastructure/serializers/jsonapi/tutorial-attributes.js +++ b/api/lib/infrastructure/serializers/jsonapi/tutorial-attributes.js @@ -1,5 +1,5 @@ -const tutorialEvaluationAttributes = require('./tutorial-evaluation-attributes.js'); -const userSavedTutorialAttributes = require('./user-saved-tutorial-attributes.js'); +import { tutorialEvaluationAttributes } from './tutorial-evaluation-attributes.js'; +import { userSavedTutorialAttributes } from './user-saved-tutorial-attributes.js'; const tutorialAttributes = { ref: 'id', includes: true, @@ -18,4 +18,4 @@ const tutorialAttributes = { userSavedTutorial: userSavedTutorialAttributes, }; -module.exports = tutorialAttributes; +export { tutorialAttributes }; diff --git a/api/lib/infrastructure/serializers/jsonapi/tutorial-evaluation-attributes.js b/api/lib/infrastructure/serializers/jsonapi/tutorial-evaluation-attributes.js index 732c67b0bc4..dc5b06b748b 100644 --- a/api/lib/infrastructure/serializers/jsonapi/tutorial-evaluation-attributes.js +++ b/api/lib/infrastructure/serializers/jsonapi/tutorial-evaluation-attributes.js @@ -4,4 +4,4 @@ const tutorialEvaluationAttributes = { attributes: ['id', 'userId', 'tutorialId', 'status'], }; -module.exports = tutorialEvaluationAttributes; +export { tutorialEvaluationAttributes }; diff --git a/api/lib/infrastructure/serializers/jsonapi/tutorial-evaluation-serializer.js b/api/lib/infrastructure/serializers/jsonapi/tutorial-evaluation-serializer.js index d374ec9972c..1cb9d3ad6fe 100644 --- a/api/lib/infrastructure/serializers/jsonapi/tutorial-evaluation-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/tutorial-evaluation-serializer.js @@ -1,21 +1,24 @@ -const { Serializer } = require('jsonapi-serializer'); -const tutorial = require('./tutorial-attributes.js'); -const TutorialEvaluation = require('../../../domain/models/TutorialEvaluation.js'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(tutorialEvaluation) { - return new Serializer('tutorial-evaluation', { - attributes: ['tutorial', 'userId', 'tutorialId', 'status', 'updatedAt'], - tutorial, - }).serialize(tutorialEvaluation); - }, +const { Serializer } = jsonapiSerializer; - deserialize(json) { - return new TutorialEvaluation({ - id: json?.data.id, - userId: json?.data.attributes['user-id'], - tutorialId: json?.data.attributes['tutorial-id'], - status: json?.data.attributes.status, - }); - }, +import { tutorialAttributes } from './tutorial-attributes.js'; +import { TutorialEvaluation } from '../../../domain/models/TutorialEvaluation.js'; + +const serialize = function (tutorialEvaluation) { + return new Serializer('tutorial-evaluation', { + attributes: ['tutorial', 'userId', 'tutorialId', 'status', 'updatedAt'], + tutorial: tutorialAttributes, + }).serialize(tutorialEvaluation); +}; + +const deserialize = function (json) { + return new TutorialEvaluation({ + id: json?.data.id, + userId: json?.data.attributes['user-id'], + tutorialId: json?.data.attributes['tutorial-id'], + status: json?.data.attributes.status, + }); }; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/tutorial-serializer.js b/api/lib/infrastructure/serializers/jsonapi/tutorial-serializer.js index 632faf3b64c..2e7a51a7a29 100644 --- a/api/lib/infrastructure/serializers/jsonapi/tutorial-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/tutorial-serializer.js @@ -1,30 +1,33 @@ -const { Serializer } = require('jsonapi-serializer'); -const tutorialEvaluationAttributes = require('./tutorial-evaluation-attributes.js'); -const userSavedTutorialAttributes = require('./user-saved-tutorial-attributes.js'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(tutorial = {}, pagination) { - return new Serializer('tutorials', { - attributes: [ - 'duration', - 'format', - 'link', - 'source', - 'title', - 'tubeName', - 'tubePracticalTitle', - 'tubePracticalDescription', - 'tutorialEvaluation', - 'userSavedTutorial', - 'skillId', - ], - tutorialEvaluation: tutorialEvaluationAttributes, - userSavedTutorial: userSavedTutorialAttributes, - typeForAttribute(attribute) { - if (attribute === 'userSavedTutorial') return 'user-saved-tutorial'; - return attribute; - }, - meta: pagination, - }).serialize(tutorial); - }, +const { Serializer } = jsonapiSerializer; + +import { tutorialEvaluationAttributes } from './tutorial-evaluation-attributes.js'; +import { userSavedTutorialAttributes } from './user-saved-tutorial-attributes.js'; + +const serialize = function (tutorial = {}, pagination) { + return new Serializer('tutorials', { + attributes: [ + 'duration', + 'format', + 'link', + 'source', + 'title', + 'tubeName', + 'tubePracticalTitle', + 'tubePracticalDescription', + 'tutorialEvaluation', + 'userSavedTutorial', + 'skillId', + ], + tutorialEvaluation: tutorialEvaluationAttributes, + userSavedTutorial: userSavedTutorialAttributes, + typeForAttribute(attribute) { + if (attribute === 'userSavedTutorial') return 'user-saved-tutorial'; + return attribute; + }, + meta: pagination, + }).serialize(tutorial); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/update-email-serializer.js b/api/lib/infrastructure/serializers/jsonapi/update-email-serializer.js index a10d272f8b4..a4833c7a912 100644 --- a/api/lib/infrastructure/serializers/jsonapi/update-email-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/update-email-serializer.js @@ -1,9 +1,11 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(newEmail) { - return new Serializer('email-verification-codes', { - attributes: ['email'], - }).serialize(newEmail); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (newEmail) { + return new Serializer('email-verification-codes', { + attributes: ['email'], + }).serialize(newEmail); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/user-anonymized-details-for-admin-serializer.js b/api/lib/infrastructure/serializers/jsonapi/user-anonymized-details-for-admin-serializer.js index 32309b72e26..20f8f5cef51 100644 --- a/api/lib/infrastructure/serializers/jsonapi/user-anonymized-details-for-admin-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/user-anonymized-details-for-admin-serializer.js @@ -1,26 +1,28 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(usersAnonymizedDetailsForAdmin) { - return new Serializer('user', { - attributes: [ - 'firstName', - 'lastName', - 'email', - 'username', - 'cgu', - 'hasBeenAnonymised', - 'anonymisedByFullName', - 'updatedAt', - 'pixOrgaTermsOfServiceAccepted', - 'pixCertifTermsOfServiceAccepted', - 'authenticationMethods', - ], - authenticationMethods: { - ref: 'id', - includes: true, - attributes: ['identityProvider'], - }, - }).serialize(usersAnonymizedDetailsForAdmin); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (usersAnonymizedDetailsForAdmin) { + return new Serializer('user', { + attributes: [ + 'firstName', + 'lastName', + 'email', + 'username', + 'cgu', + 'hasBeenAnonymised', + 'anonymisedByFullName', + 'updatedAt', + 'pixOrgaTermsOfServiceAccepted', + 'pixCertifTermsOfServiceAccepted', + 'authenticationMethods', + ], + authenticationMethods: { + ref: 'id', + includes: true, + attributes: ['identityProvider'], + }, + }).serialize(usersAnonymizedDetailsForAdmin); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/user-details-for-admin-serializer.js b/api/lib/infrastructure/serializers/jsonapi/user-details-for-admin-serializer.js index 23a3c77178d..5a4394de4fa 100644 --- a/api/lib/infrastructure/serializers/jsonapi/user-details-for-admin-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/user-details-for-admin-serializer.js @@ -1,162 +1,165 @@ -const { Serializer } = require('jsonapi-serializer'); -const UserDetailsForAdmin = require('../../../domain/models/UserDetailsForAdmin.js'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(usersDetailsForAdmin) { - return new Serializer('user', { - transform(record) { - record.profile = null; - record.participations = null; - record.organizationMemberships = null; - record.certificationCenterMemberships = null; - return record; - }, +const { Serializer } = jsonapiSerializer; + +import { UserDetailsForAdmin } from '../../../domain/models/UserDetailsForAdmin.js'; + +const serialize = function (usersDetailsForAdmin) { + return new Serializer('user', { + transform(record) { + record.profile = null; + record.participations = null; + record.organizationMemberships = null; + record.certificationCenterMemberships = null; + return record; + }, + attributes: [ + 'firstName', + 'lastName', + 'email', + 'username', + 'cgu', + 'pixOrgaTermsOfServiceAccepted', + 'pixCertifTermsOfServiceAccepted', + 'createdAt', + 'lang', + 'locale', + 'lastTermsOfServiceValidatedAt', + 'lastPixOrgaTermsOfServiceValidatedAt', + 'lastPixCertifTermsOfServiceValidatedAt', + 'lastLoggedAt', + 'emailConfirmedAt', + 'hasBeenAnonymised', + 'anonymisedByFullName', + 'organizationLearners', + 'authenticationMethods', + 'profile', + 'participations', + 'organizationMemberships', + 'certificationCenterMemberships', + 'userLogin', + ], + organizationLearners: { + ref: 'id', + includes: true, attributes: [ 'firstName', 'lastName', - 'email', - 'username', - 'cgu', - 'pixOrgaTermsOfServiceAccepted', - 'pixCertifTermsOfServiceAccepted', + 'birthdate', + 'division', + 'group', + 'organizationId', + 'organizationName', 'createdAt', - 'lang', - 'locale', - 'lastTermsOfServiceValidatedAt', - 'lastPixOrgaTermsOfServiceValidatedAt', - 'lastPixCertifTermsOfServiceValidatedAt', - 'lastLoggedAt', - 'emailConfirmedAt', - 'hasBeenAnonymised', - 'anonymisedByFullName', - 'organizationLearners', - 'authenticationMethods', - 'profile', - 'participations', - 'organizationMemberships', - 'certificationCenterMemberships', - 'userLogin', + 'updatedAt', + 'isDisabled', + 'canBeDissociated', ], - organizationLearners: { - ref: 'id', - includes: true, - attributes: [ - 'firstName', - 'lastName', - 'birthdate', - 'division', - 'group', - 'organizationId', - 'organizationName', - 'createdAt', - 'updatedAt', - 'isDisabled', - 'canBeDissociated', - ], - }, - authenticationMethods: { - ref: 'id', - includes: true, - attributes: ['identityProvider', 'authenticationComplement'], - }, - userLogin: { - ref: 'id', - includes: true, - attributes: ['blockedAt', 'temporaryBlockedUntil', 'failureCount'], - }, - profile: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/admin/users/${parent.id}/profile`; - }, + }, + authenticationMethods: { + ref: 'id', + includes: true, + attributes: ['identityProvider', 'authenticationComplement'], + }, + userLogin: { + ref: 'id', + includes: true, + attributes: ['blockedAt', 'temporaryBlockedUntil', 'failureCount'], + }, + profile: { + ref: 'id', + ignoreRelationshipData: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/admin/users/${parent.id}/profile`; }, }, - participations: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/admin/users/${parent.id}/participations`; - }, + }, + participations: { + ref: 'id', + ignoreRelationshipData: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/admin/users/${parent.id}/participations`; }, }, - organizationMemberships: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/admin/users/${parent.id}/organizations`; - }, + }, + organizationMemberships: { + ref: 'id', + ignoreRelationshipData: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/admin/users/${parent.id}/organizations`; }, }, - certificationCenterMemberships: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/admin/users/${parent.id}/certification-center-memberships`; - }, + }, + certificationCenterMemberships: { + ref: 'id', + ignoreRelationshipData: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/admin/users/${parent.id}/certification-center-memberships`; }, }, - }).serialize(usersDetailsForAdmin); - }, + }, + }).serialize(usersDetailsForAdmin); +}; - serializeForUpdate(usersDetailsForAdmin) { - return new Serializer('user', { +const serializeForUpdate = function (usersDetailsForAdmin) { + return new Serializer('user', { + attributes: [ + 'firstName', + 'lastName', + 'email', + 'username', + 'lang', + 'locale', + 'cgu', + 'pixOrgaTermsOfServiceAccepted', + 'pixCertifTermsOfServiceAccepted', + 'organizationLearners', + 'authenticationMethods', + ], + organizationLearners: { + ref: 'id', + includes: true, attributes: [ 'firstName', 'lastName', - 'email', - 'username', - 'lang', - 'locale', - 'cgu', - 'pixOrgaTermsOfServiceAccepted', - 'pixCertifTermsOfServiceAccepted', - 'organizationLearners', - 'authenticationMethods', + 'birthdate', + 'division', + 'group', + 'organizationId', + 'organizationName', + 'createdAt', + 'updatedAt', + 'isDisabled', + 'canBeDissociated', ], - organizationLearners: { - ref: 'id', - includes: true, - attributes: [ - 'firstName', - 'lastName', - 'birthdate', - 'division', - 'group', - 'organizationId', - 'organizationName', - 'createdAt', - 'updatedAt', - 'isDisabled', - 'canBeDissociated', - ], - }, - authenticationMethods: { - ref: 'id', - includes: true, - attributes: ['identityProvider'], - }, - userLogin: { - ref: 'id', - includes: true, - attributes: ['blockedAt', 'createdAt', 'updatedAt', 'temporaryBlockedUntil', 'failureCount'], - }, - }).serialize(usersDetailsForAdmin); - }, + }, + authenticationMethods: { + ref: 'id', + includes: true, + attributes: ['identityProvider'], + }, + userLogin: { + ref: 'id', + includes: true, + attributes: ['blockedAt', 'createdAt', 'updatedAt', 'temporaryBlockedUntil', 'failureCount'], + }, + }).serialize(usersDetailsForAdmin); +}; - deserialize(json) { - return new UserDetailsForAdmin({ - id: json.data.id, - firstName: json.data.attributes['first-name'], - lastName: json.data.attributes['last-name'], - email: json.data.attributes.email, - username: json.data.attributes.username, - lang: json.data.attributes.lang, - locale: json.data.attributes.locale, - }); - }, +const deserialize = function (json) { + return new UserDetailsForAdmin({ + id: json.data.id, + firstName: json.data.attributes['first-name'], + lastName: json.data.attributes['last-name'], + email: json.data.attributes.email, + username: json.data.attributes.username, + lang: json.data.attributes.lang, + locale: json.data.attributes.locale, + }); }; + +export { serialize, serializeForUpdate, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/user-for-admin-serializer.js b/api/lib/infrastructure/serializers/jsonapi/user-for-admin-serializer.js index ef020173563..2a96302da4b 100644 --- a/api/lib/infrastructure/serializers/jsonapi/user-for-admin-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/user-for-admin-serializer.js @@ -1,71 +1,73 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(users, meta) { - return new Serializer('user', { - transform(record) { - record.profile = null; - return record; - }, - attributes: [ - 'firstName', - 'lastName', - 'email', - 'username', - 'cgu', - 'lastTermsOfServiceValidatedAt', - 'mustValidateTermsOfService', - 'pixOrgaTermsOfServiceAccepted', - 'pixCertifTermsOfServiceAccepted', - 'lang', - 'isAnonymous', - 'memberships', - 'certificationCenterMemberships', - 'pixScore', - 'scorecards', - 'profile', - 'campaignParticipations', - 'hasSeenAssessmentInstructions', - 'isCertifiable', - 'hasSeenNewDashboardInfo', - 'hasSeenFocusedChallengeTooltip', - 'hasSeenOtherChallengesTooltip', - ], - memberships: { - ref: 'id', - ignoreRelationshipData: true, - }, - certificationCenterMemberships: { - ref: 'id', - ignoreRelationshipData: true, - }, - pixScore: { - ref: 'id', - ignoreRelationshipData: true, - }, - scorecards: { - ref: 'id', - ignoreRelationshipData: true, - }, - profile: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/admin/users/${parent.id}/profile`; - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (users, meta) { + return new Serializer('user', { + transform(record) { + record.profile = null; + return record; + }, + attributes: [ + 'firstName', + 'lastName', + 'email', + 'username', + 'cgu', + 'lastTermsOfServiceValidatedAt', + 'mustValidateTermsOfService', + 'pixOrgaTermsOfServiceAccepted', + 'pixCertifTermsOfServiceAccepted', + 'lang', + 'isAnonymous', + 'memberships', + 'certificationCenterMemberships', + 'pixScore', + 'scorecards', + 'profile', + 'campaignParticipations', + 'hasSeenAssessmentInstructions', + 'isCertifiable', + 'hasSeenNewDashboardInfo', + 'hasSeenFocusedChallengeTooltip', + 'hasSeenOtherChallengesTooltip', + ], + memberships: { + ref: 'id', + ignoreRelationshipData: true, + }, + certificationCenterMemberships: { + ref: 'id', + ignoreRelationshipData: true, + }, + pixScore: { + ref: 'id', + ignoreRelationshipData: true, + }, + scorecards: { + ref: 'id', + ignoreRelationshipData: true, + }, + profile: { + ref: 'id', + ignoreRelationshipData: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/admin/users/${parent.id}/profile`; }, }, - campaignParticipations: { - ref: 'id', - ignoreRelationshipData: true, - }, - isCertifiable: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - }, - meta, - }).serialize(users); - }, + }, + campaignParticipations: { + ref: 'id', + ignoreRelationshipData: true, + }, + isCertifiable: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + }, + meta, + }).serialize(users); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/user-login-serializer.js b/api/lib/infrastructure/serializers/jsonapi/user-login-serializer.js index a8c8097a5ec..959d7fd9be3 100644 --- a/api/lib/infrastructure/serializers/jsonapi/user-login-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/user-login-serializer.js @@ -1,9 +1,11 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(usersAnonymizedDetailsForAdmin) { - return new Serializer('user-login', { - attributes: ['userId', 'failureCount', 'temporaryBlockedUntil', 'blockedAt'], - }).serialize(usersAnonymizedDetailsForAdmin); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (usersAnonymizedDetailsForAdmin) { + return new Serializer('user-login', { + attributes: ['userId', 'failureCount', 'temporaryBlockedUntil', 'blockedAt'], + }).serialize(usersAnonymizedDetailsForAdmin); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/user-orga-settings-serializer.js b/api/lib/infrastructure/serializers/jsonapi/user-orga-settings-serializer.js index 156faab91df..1e115ce7b4d 100644 --- a/api/lib/infrastructure/serializers/jsonapi/user-orga-settings-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/user-orga-settings-serializer.js @@ -1,77 +1,79 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(userOrgaSettings) { - return new Serializer('user-orga-settings', { - transform(record) { - if (!record.user) { - delete record.user; - } +const { Serializer } = jsonapiSerializer; - record.organization = record.currentOrganization; - return record; - }, - attributes: ['organization', 'user'], - organization: { +const serialize = function (userOrgaSettings) { + return new Serializer('user-orga-settings', { + transform(record) { + if (!record.user) { + delete record.user; + } + + record.organization = record.currentOrganization; + return record; + }, + attributes: ['organization', 'user'], + organization: { + ref: 'id', + included: true, + attributes: [ + 'code', + 'name', + 'type', + 'isManagingStudents', + 'externalId', + 'campaigns', + 'targetProfiles', + 'memberships', + 'organizationInvitations', + ], + campaigns: { ref: 'id', - included: true, - attributes: [ - 'code', - 'name', - 'type', - 'isManagingStudents', - 'externalId', - 'campaigns', - 'targetProfiles', - 'memberships', - 'organizationInvitations', - ], - campaigns: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/campaigns`; - }, - }, - }, - targetProfiles: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/target-profiles`; - }, + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/campaigns`; }, }, - memberships: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/memberships`; - }, + }, + targetProfiles: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/target-profiles`; }, }, - organizationInvitations: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/organizations/${parent.id}/invitations`; - }, + }, + memberships: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/memberships`; }, }, }, - user: { + organizationInvitations: { ref: 'id', - included: true, - attributes: ['firstName', 'lastName', 'email'], + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/organizations/${parent.id}/invitations`; + }, + }, }, - }).serialize(userOrgaSettings); - }, + }, + user: { + ref: 'id', + included: true, + attributes: ['firstName', 'lastName', 'email'], + }, + }).serialize(userOrgaSettings); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/user-organization-for-admin-serializer.js b/api/lib/infrastructure/serializers/jsonapi/user-organization-for-admin-serializer.js index dfe2b0a9cd5..9245a832ece 100644 --- a/api/lib/infrastructure/serializers/jsonapi/user-organization-for-admin-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/user-organization-for-admin-serializer.js @@ -1,16 +1,18 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(organization) { - return new Serializer('organization-membership', { - attributes: [ - 'updatedAt', - 'organizationRole', - 'organizationId', - 'organizationName', - 'organizationType', - 'organizationExternalId', - ], - }).serialize(organization); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (organization) { + return new Serializer('organization-membership', { + attributes: [ + 'updatedAt', + 'organizationRole', + 'organizationId', + 'organizationName', + 'organizationType', + 'organizationExternalId', + ], + }).serialize(organization); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/user-saved-tutorial-attributes.js b/api/lib/infrastructure/serializers/jsonapi/user-saved-tutorial-attributes.js index eceb5cef649..80065ce2821 100644 --- a/api/lib/infrastructure/serializers/jsonapi/user-saved-tutorial-attributes.js +++ b/api/lib/infrastructure/serializers/jsonapi/user-saved-tutorial-attributes.js @@ -4,4 +4,4 @@ const userSavedTutorialAttributes = { attributes: ['id', 'userId', 'tutorialId'], }; -module.exports = userSavedTutorialAttributes; +export { userSavedTutorialAttributes }; diff --git a/api/lib/infrastructure/serializers/jsonapi/user-saved-tutorial-serializer.js b/api/lib/infrastructure/serializers/jsonapi/user-saved-tutorial-serializer.js index d2a283fcd68..8b2ffc05a1a 100644 --- a/api/lib/infrastructure/serializers/jsonapi/user-saved-tutorial-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/user-saved-tutorial-serializer.js @@ -1,19 +1,22 @@ -const { Serializer } = require('jsonapi-serializer'); -const tutorial = require('./tutorial-attributes.js'); -const UserSavedTutorial = require('../../../domain/models/UserSavedTutorial.js'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(userTutorial) { - return new Serializer('user-saved-tutorial', { - attributes: ['tutorial', 'userId', 'tutorialId', 'skillId', 'updatedAt'], - tutorial, - }).serialize(userTutorial); - }, +const { Serializer } = jsonapiSerializer; - deserialize(json) { - return new UserSavedTutorial({ - id: json?.data.id, - skillId: json?.data.attributes['skill-id'], - }); - }, +import { tutorialAttributes } from './tutorial-attributes.js'; +import { UserSavedTutorial } from '../../../domain/models/UserSavedTutorial.js'; + +const serialize = function (userTutorial) { + return new Serializer('user-saved-tutorial', { + attributes: ['tutorial', 'userId', 'tutorialId', 'skillId', 'updatedAt'], + tutorial: tutorialAttributes, + }).serialize(userTutorial); +}; + +const deserialize = function (json) { + return new UserSavedTutorial({ + id: json?.data.id, + skillId: json?.data.attributes['skill-id'], + }); }; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/user-serializer.js b/api/lib/infrastructure/serializers/jsonapi/user-serializer.js index 152440b6e7f..0d057df3276 100644 --- a/api/lib/infrastructure/serializers/jsonapi/user-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/user-serializer.js @@ -1,89 +1,92 @@ -const { Serializer } = require('jsonapi-serializer'); -const User = require('../../../domain/models/User.js'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(users, meta) { - return new Serializer('user', { - attributes: [ - 'firstName', - 'lastName', - 'email', - 'username', - 'cgu', - 'lastTermsOfServiceValidatedAt', - 'mustValidateTermsOfService', - 'pixOrgaTermsOfServiceAccepted', - 'pixCertifTermsOfServiceAccepted', - 'lang', - 'locale', - 'isAnonymous', - 'profile', - 'campaignParticipations', - 'hasSeenAssessmentInstructions', - 'isCertifiable', - 'hasSeenNewDashboardInfo', - 'hasSeenFocusedChallengeTooltip', - 'hasSeenOtherChallengesTooltip', - 'trainings', - 'lastDataProtectionPolicySeenAt', - 'shouldSeeDataProtectionPolicyInformationBanner', - ], - profile: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/users/${parent.id}/profile`; - }, +const { Serializer } = jsonapiSerializer; + +import { User } from '../../../domain/models/User.js'; + +const serialize = function (users, meta) { + return new Serializer('user', { + attributes: [ + 'firstName', + 'lastName', + 'email', + 'username', + 'cgu', + 'lastTermsOfServiceValidatedAt', + 'mustValidateTermsOfService', + 'pixOrgaTermsOfServiceAccepted', + 'pixCertifTermsOfServiceAccepted', + 'lang', + 'locale', + 'isAnonymous', + 'profile', + 'campaignParticipations', + 'hasSeenAssessmentInstructions', + 'isCertifiable', + 'hasSeenNewDashboardInfo', + 'hasSeenFocusedChallengeTooltip', + 'hasSeenOtherChallengesTooltip', + 'trainings', + 'lastDataProtectionPolicySeenAt', + 'shouldSeeDataProtectionPolicyInformationBanner', + ], + profile: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/users/${parent.id}/profile`; }, }, - campaignParticipations: { - ref: 'id', - ignoreRelationshipData: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/users/${parent.id}/campaign-participations`; - }, + }, + campaignParticipations: { + ref: 'id', + ignoreRelationshipData: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/users/${parent.id}/campaign-participations`; }, }, - isCertifiable: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/users/${parent.id}/is-certifiable`; - }, + }, + isCertifiable: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/users/${parent.id}/is-certifiable`; }, }, - trainings: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/users/${parent.id}/trainings`; - }, + }, + trainings: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/users/${parent.id}/trainings`; }, }, - meta, - }).serialize(users); - }, + }, + meta, + }).serialize(users); +}; - deserialize(json) { - return new User({ - id: json.data.id, - firstName: json.data.attributes['first-name'], - lastName: json.data.attributes['last-name'], - email: json.data.attributes.email, - cgu: json.data.attributes.cgu, - lang: json.data.attributes.lang, - locale: json.data.attributes.locale, - lastTermsOfServiceValidatedAt: json.data.attributes['lastTermsOfServiceValidatedAt'], - mustValidateTermsOfService: json.data.attributes['must-validate-terms-of-service'], - pixOrgaTermsOfServiceAccepted: json.data.attributes['pix-orga-terms-of-service-accepted'], - pixCertifTermsOfServiceAccepted: json.data.attributes['pix-certif-terms-of-service-accepted'], - }); - }, +const deserialize = function (json) { + return new User({ + id: json.data.id, + firstName: json.data.attributes['first-name'], + lastName: json.data.attributes['last-name'], + email: json.data.attributes.email, + cgu: json.data.attributes.cgu, + lang: json.data.attributes.lang, + locale: json.data.attributes.locale, + lastTermsOfServiceValidatedAt: json.data.attributes['lastTermsOfServiceValidatedAt'], + mustValidateTermsOfService: json.data.attributes['must-validate-terms-of-service'], + pixOrgaTermsOfServiceAccepted: json.data.attributes['pix-orga-terms-of-service-accepted'], + pixCertifTermsOfServiceAccepted: json.data.attributes['pix-certif-terms-of-service-accepted'], + }); }; + +export { serialize, deserialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/user-with-activity-serializer.js b/api/lib/infrastructure/serializers/jsonapi/user-with-activity-serializer.js index 463ea5741e2..a6accb61339 100644 --- a/api/lib/infrastructure/serializers/jsonapi/user-with-activity-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/user-with-activity-serializer.js @@ -1,64 +1,66 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(users, meta) { - return new Serializer('user', { - attributes: [ - 'firstName', - 'lastName', - 'email', - 'username', - 'cgu', - 'lastTermsOfServiceValidatedAt', - 'lastDataProtectionPolicySeenAt', - 'mustValidateTermsOfService', - 'pixOrgaTermsOfServiceAccepted', - 'pixCertifTermsOfServiceAccepted', - 'lang', - 'isAnonymous', - 'profile', - 'hasSeenAssessmentInstructions', - 'isCertifiable', - 'hasSeenNewDashboardInfo', - 'hasSeenFocusedChallengeTooltip', - 'hasSeenOtherChallengesTooltip', - 'hasAssessmentParticipations', - 'hasRecommendedTrainings', - 'codeForLastProfileToShare', - 'trainings', - 'shouldSeeDataProtectionPolicyInformationBanner', - ], - profile: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/users/${parent.id}/profile`; - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (users, meta) { + return new Serializer('user', { + attributes: [ + 'firstName', + 'lastName', + 'email', + 'username', + 'cgu', + 'lastTermsOfServiceValidatedAt', + 'lastDataProtectionPolicySeenAt', + 'mustValidateTermsOfService', + 'pixOrgaTermsOfServiceAccepted', + 'pixCertifTermsOfServiceAccepted', + 'lang', + 'isAnonymous', + 'profile', + 'hasSeenAssessmentInstructions', + 'isCertifiable', + 'hasSeenNewDashboardInfo', + 'hasSeenFocusedChallengeTooltip', + 'hasSeenOtherChallengesTooltip', + 'hasAssessmentParticipations', + 'hasRecommendedTrainings', + 'codeForLastProfileToShare', + 'trainings', + 'shouldSeeDataProtectionPolicyInformationBanner', + ], + profile: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/users/${parent.id}/profile`; }, }, - isCertifiable: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/users/${parent.id}/is-certifiable`; - }, + }, + isCertifiable: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/users/${parent.id}/is-certifiable`; }, }, - trainings: { - ref: 'id', - ignoreRelationshipData: true, - nullIfMissing: true, - relationshipLinks: { - related: function (record, current, parent) { - return `/api/users/${parent.id}/trainings`; - }, + }, + trainings: { + ref: 'id', + ignoreRelationshipData: true, + nullIfMissing: true, + relationshipLinks: { + related: function (record, current, parent) { + return `/api/users/${parent.id}/trainings`; }, }, - meta, - }).serialize(users); - }, + }, + meta, + }).serialize(users); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/validation-error-serializer.js b/api/lib/infrastructure/serializers/jsonapi/validation-error-serializer.js index 5ac0956d8b6..fd2ed0f4c3e 100644 --- a/api/lib/infrastructure/serializers/jsonapi/validation-error-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/validation-error-serializer.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; function _buildError(field, message) { return { @@ -37,4 +37,4 @@ function serialize(validationErrors) { }; } -module.exports = { serialize }; +export { serialize }; diff --git a/api/lib/infrastructure/serializers/jsonapi/with-required-action-session-serializer.js b/api/lib/infrastructure/serializers/jsonapi/with-required-action-session-serializer.js index 80418bf34b5..67b24293831 100644 --- a/api/lib/infrastructure/serializers/jsonapi/with-required-action-session-serializer.js +++ b/api/lib/infrastructure/serializers/jsonapi/with-required-action-session-serializer.js @@ -1,19 +1,21 @@ -const { Serializer } = require('jsonapi-serializer'); +import jsonapiSerializer from 'jsonapi-serializer'; -module.exports = { - serialize(finalizedSessions) { - return new Serializer('with-required-action-session', { - transform(finalizedSession) { - return { ...finalizedSession, id: finalizedSession.sessionId }; - }, - attributes: [ - 'sessionId', - 'sessionDate', - 'sessionTime', - 'finalizedAt', - 'certificationCenterName', - 'assignedCertificationOfficerName', - ], - }).serialize(finalizedSessions); - }, +const { Serializer } = jsonapiSerializer; + +const serialize = function (finalizedSessions) { + return new Serializer('with-required-action-session', { + transform(finalizedSession) { + return { ...finalizedSession, id: finalizedSession.sessionId }; + }, + attributes: [ + 'sessionId', + 'sessionDate', + 'sessionTime', + 'finalizedAt', + 'certificationCenterName', + 'assignedCertificationOfficerName', + ], + }).serialize(finalizedSessions); }; + +export { serialize }; diff --git a/api/lib/infrastructure/serializers/xml/siecle-parser.js b/api/lib/infrastructure/serializers/xml/siecle-parser.js index 1dad8ff07fc..21c93ea1b16 100644 --- a/api/lib/infrastructure/serializers/xml/siecle-parser.js +++ b/api/lib/infrastructure/serializers/xml/siecle-parser.js @@ -1,9 +1,12 @@ -const { SiecleXmlImportError } = require('../../../domain/errors.js'); -const xml2js = require('xml2js'); -const saxPath = require('saxpath'); -const { isEmpty, isUndefined } = require('lodash'); -const SiecleFileStreamer = require('../../utils/xml/siecle-file-streamer.js'); -const XMLOrganizationLearnerSet = require('./xml-organization-learner-set.js'); +import { SiecleXmlImportError } from '../../../domain/errors.js'; +import xml2js from 'xml2js'; +import saxPath from 'saxpath'; +import lodash from 'lodash'; + +const { isEmpty, isUndefined } = lodash; + +import { SiecleFileStreamer } from '../../utils/xml/siecle-file-streamer.js'; +import { XMLOrganizationLearnersSet } from './xml-organization-learner-set.js'; const ERRORS = { UAI_MISMATCHED: 'UAI_MISMATCHED', @@ -18,7 +21,7 @@ class SiecleParser { constructor(organization, path) { this.organization = organization; this.path = path; - this.organizationLearnersSet = new XMLOrganizationLearnerSet(); + this.organizationLearnersSet = new XMLOrganizationLearnersSet(); } async parse() { @@ -107,4 +110,4 @@ function _isImportable(studentData) { return isStudentNotLeftOrganizationLearner && isStudentNotYetArrivedOrganizationLearner; } -module.exports = SiecleParser; +export { SiecleParser }; diff --git a/api/lib/infrastructure/serializers/xml/xml-organization-learner-set.js b/api/lib/infrastructure/serializers/xml/xml-organization-learner-set.js index f4ed73a49f1..508c205d922 100644 --- a/api/lib/infrastructure/serializers/xml/xml-organization-learner-set.js +++ b/api/lib/infrastructure/serializers/xml/xml-organization-learner-set.js @@ -1,6 +1,9 @@ -const moment = require('moment'); -const { isEmpty, isNil, each } = require('lodash'); -const { SiecleXmlImportError } = require('../../../domain/errors.js'); +import moment from 'moment'; +import lodash from 'lodash'; + +const { isEmpty, isNil, each } = lodash; + +import { SiecleXmlImportError } from '../../../domain/errors.js'; const ERRORS = { INE_REQUIRED: 'INE_REQUIRED', @@ -102,4 +105,4 @@ function _frenchBornHasEmptyCityCode({ birthCountryCode, birthCityCode }) { return birthCountryCode === FRANCE_COUNTRY_CODE && isEmpty(birthCityCode); } -module.exports = XMLOrganizationLearnersSet; +export { XMLOrganizationLearnersSet }; diff --git a/api/lib/infrastructure/temporary-storage/InMemoryTemporaryStorage.js b/api/lib/infrastructure/temporary-storage/InMemoryTemporaryStorage.js index 7c46855b843..1b1198159ee 100644 --- a/api/lib/infrastructure/temporary-storage/InMemoryTemporaryStorage.js +++ b/api/lib/infrastructure/temporary-storage/InMemoryTemporaryStorage.js @@ -1,7 +1,9 @@ -const NodeCache = require('node-cache'); -const trim = require('lodash/trim'); -const TemporaryStorage = require('./TemporaryStorage.js'); -const { noop } = require('lodash'); +import NodeCache from 'node-cache'; +import lodash from 'lodash'; + +const { trim, noop } = lodash; + +import { TemporaryStorage } from './TemporaryStorage.js'; class InMemoryTemporaryStorage extends TemporaryStorage { constructor() { @@ -62,4 +64,4 @@ class InMemoryTemporaryStorage extends TemporaryStorage { } } -module.exports = InMemoryTemporaryStorage; +export { InMemoryTemporaryStorage }; diff --git a/api/lib/infrastructure/temporary-storage/RedisTemporaryStorage.js b/api/lib/infrastructure/temporary-storage/RedisTemporaryStorage.js index 348badb07de..9afcc6ba291 100644 --- a/api/lib/infrastructure/temporary-storage/RedisTemporaryStorage.js +++ b/api/lib/infrastructure/temporary-storage/RedisTemporaryStorage.js @@ -1,7 +1,9 @@ -const trim = require('lodash/trim'); +import lodash from 'lodash'; -const TemporaryStorage = require('./TemporaryStorage.js'); -const RedisClient = require('../utils/RedisClient.js'); +const { trim } = lodash; + +import { TemporaryStorage } from './TemporaryStorage.js'; +import { RedisClient } from '../utils/RedisClient.js'; const EXPIRATION_PARAMETER = 'ex'; const KEEPTTL_PARAMETER = 'keepttl'; @@ -65,4 +67,4 @@ class RedisTemporaryStorage extends TemporaryStorage { } } -module.exports = RedisTemporaryStorage; +export { RedisTemporaryStorage }; diff --git a/api/lib/infrastructure/temporary-storage/TemporaryStorage.js b/api/lib/infrastructure/temporary-storage/TemporaryStorage.js index b74e38ab54b..50bd4903ed3 100644 --- a/api/lib/infrastructure/temporary-storage/TemporaryStorage.js +++ b/api/lib/infrastructure/temporary-storage/TemporaryStorage.js @@ -1,4 +1,4 @@ -const { v4: uuidv4 } = require('uuid'); +import { v4 as uuidv4 } from 'uuid'; class TemporaryStorage { static generateKey() { @@ -89,4 +89,4 @@ class TemporaryStorage { } } -module.exports = TemporaryStorage; +export { TemporaryStorage }; diff --git a/api/lib/infrastructure/temporary-storage/index.js b/api/lib/infrastructure/temporary-storage/index.js index 8c06ed7c81c..4e479367a6f 100644 --- a/api/lib/infrastructure/temporary-storage/index.js +++ b/api/lib/infrastructure/temporary-storage/index.js @@ -1,8 +1,8 @@ -const settings = require('../../config.js'); -const REDIS_URL = settings.temporaryStorage.redisUrl; +import { config } from '../../config.js'; +const REDIS_URL = config.temporaryStorage.redisUrl; -const InMemoryTemporaryStorage = require('./InMemoryTemporaryStorage.js'); -const RedisTemporaryStorage = require('./RedisTemporaryStorage.js'); +import { InMemoryTemporaryStorage } from './InMemoryTemporaryStorage.js'; +import { RedisTemporaryStorage } from './RedisTemporaryStorage.js'; function _createTemporaryStorage() { if (REDIS_URL) { @@ -14,4 +14,4 @@ function _createTemporaryStorage() { const temporaryStorage = _createTemporaryStorage(); -module.exports = { temporaryStorage }; +export { temporaryStorage }; diff --git a/api/lib/infrastructure/utils/CampaignAssessmentCsvLine.js b/api/lib/infrastructure/utils/CampaignAssessmentCsvLine.js index 6dfdf208f07..6e628293344 100644 --- a/api/lib/infrastructure/utils/CampaignAssessmentCsvLine.js +++ b/api/lib/infrastructure/utils/CampaignAssessmentCsvLine.js @@ -1,5 +1,5 @@ -const moment = require('moment'); -const _ = require('lodash'); +import moment from 'moment'; +import _ from 'lodash'; const STATS_COLUMNS_COUNT = 3; @@ -199,4 +199,4 @@ class CampaignAssessmentCsvLine { } } -module.exports = CampaignAssessmentCsvLine; +export { CampaignAssessmentCsvLine }; diff --git a/api/lib/infrastructure/utils/RedisClient.js b/api/lib/infrastructure/utils/RedisClient.js index c0c45e8c569..52491f04f42 100644 --- a/api/lib/infrastructure/utils/RedisClient.js +++ b/api/lib/infrastructure/utils/RedisClient.js @@ -1,11 +1,14 @@ -const redis = require('redis'); -const Redlock = require('redlock'); -const { promisify } = require('util'); -const logger = require('../logger.js'); +import redis from 'redis'; +import Redlock from 'redlock'; +import util from 'util'; + +const { promisify } = util; + +import { logger } from '../logger.js'; const REDIS_CLIENT_OPTIONS = {}; -module.exports = class RedisClient { +class RedisClient { constructor(redisUrl, { name, prefix } = {}) { this._clientName = name; @@ -63,4 +66,6 @@ module.exports = class RedisClient { async quit() { await this._client.quit(); } -}; +} + +export { RedisClient }; diff --git a/api/lib/infrastructure/utils/bookshelf-to-domain-converter.js b/api/lib/infrastructure/utils/bookshelf-to-domain-converter.js index 50d69ab22a0..1ec785b7406 100644 --- a/api/lib/infrastructure/utils/bookshelf-to-domain-converter.js +++ b/api/lib/infrastructure/utils/bookshelf-to-domain-converter.js @@ -1,10 +1,7 @@ -const _ = require('lodash'); -const Models = require('../../domain/models/index.js'); +import _ from 'lodash'; +import * as Models from '../../domain/models/index.js'; -module.exports = { - buildDomainObjects, - buildDomainObject, -}; +export { buildDomainObjects, buildDomainObject }; function buildDomainObjects(BookshelfClass, bookshelfObjects) { return bookshelfObjects.map((bookshelfObject) => buildDomainObject(BookshelfClass, bookshelfObject)); @@ -18,6 +15,7 @@ function buildDomainObject(BookshelfClass, bookshelfObject) { } function _buildDomainObject(BookshelfClass, bookshelfObjectJson) { + // eslint-disable-next-line import/namespace const Model = Models[BookshelfClass.modelName]; const domainObject = new Model(); diff --git a/api/lib/infrastructure/utils/code-utils.js b/api/lib/infrastructure/utils/code-utils.js index 29fb624af92..eb82ea62327 100644 --- a/api/lib/infrastructure/utils/code-utils.js +++ b/api/lib/infrastructure/utils/code-utils.js @@ -1,11 +1,11 @@ -const randomString = require('randomstring'); +import randomString from 'randomstring'; -module.exports = { - generateNumericalString(numberOfDigits) { - return randomString.generate({ - charset: 'numeric', - length: numberOfDigits, - readable: true, - }); - }, +const generateNumericalString = function (numberOfDigits) { + return randomString.generate({ + charset: 'numeric', + length: numberOfDigits, + readable: true, + }); }; + +export { generateNumericalString }; diff --git a/api/lib/infrastructure/utils/csv/certification-results.js b/api/lib/infrastructure/utils/csv/certification-results.js index c6d12446979..ab992d885ba 100644 --- a/api/lib/infrastructure/utils/csv/certification-results.js +++ b/api/lib/infrastructure/utils/csv/certification-results.js @@ -1,6 +1,6 @@ -const _ = require('lodash'); -const moment = require('moment'); -const { getCsvContent } = require('./write-csv-utils.js'); +import _ from 'lodash'; +import moment from 'moment'; +import { getCsvContent } from './write-csv-utils.js'; const REJECTED_AUTOMATICALLY_COMMENT = "Le candidat a répondu faux à plus de 50% des questions posées, cela a invalidé l'ensemble de sa certification, et a donc entraîné un score de 0 pix"; @@ -343,7 +343,7 @@ const _headers = { FIRST_SHOT: 'Obtention après la première évaluation ?', }; -module.exports = { +export { getSessionCertificationResultsCsv, getDivisionCertificationResultsCsv, getCleaCertifiedCandidateCsv, diff --git a/api/lib/infrastructure/utils/csv/sessions-import.js b/api/lib/infrastructure/utils/csv/sessions-import.js index 391feac0085..3acb74f20a9 100644 --- a/api/lib/infrastructure/utils/csv/sessions-import.js +++ b/api/lib/infrastructure/utils/csv/sessions-import.js @@ -49,8 +49,4 @@ const emptySession = { const COMPLEMENTARY_CERTIFICATION_SUFFIX = "('oui' ou laisser vide)"; -module.exports = { - headers, - emptySession, - COMPLEMENTARY_CERTIFICATION_SUFFIX, -}; +export { headers, emptySession, COMPLEMENTARY_CERTIFICATION_SUFFIX }; diff --git a/api/lib/infrastructure/utils/csv/write-csv-utils.js b/api/lib/infrastructure/utils/csv/write-csv-utils.js index b715c06b756..7c6da905e44 100644 --- a/api/lib/infrastructure/utils/csv/write-csv-utils.js +++ b/api/lib/infrastructure/utils/csv/write-csv-utils.js @@ -1,5 +1,6 @@ -const { parseAsync } = require('json2csv'); -const { CsvParsingError } = require('../../../../lib/domain/errors.js'); +import { parseAsync } from 'json2csv'; + +import { CsvParsingError } from '../../../../lib/domain/errors.js'; async function getCsvContent({ data, delimiter = ';', eol = '\n', fileHeaders, withBOM = true }) { try { @@ -11,6 +12,4 @@ async function getCsvContent({ data, delimiter = ';', eol = '\n', fileHeaders, w } } -module.exports = { - getCsvContent, -}; +export { getCsvContent }; diff --git a/api/lib/infrastructure/utils/date-utils.js b/api/lib/infrastructure/utils/date-utils.js index 6a0416289c0..5d242194305 100644 --- a/api/lib/infrastructure/utils/date-utils.js +++ b/api/lib/infrastructure/utils/date-utils.js @@ -1,4 +1,4 @@ -const moment = require('moment-timezone'); +import moment from 'moment-timezone'; moment.parseTwoDigitYear = function (yearString) { const year = parseInt(yearString); @@ -23,8 +23,4 @@ function getNowDate() { return new Date(); } -module.exports = { - isValidDate, - convertDateValue, - getNowDate, -}; +export { isValidDate, convertDateValue, getNowDate }; diff --git a/api/lib/infrastructure/utils/dependency-injection.js b/api/lib/infrastructure/utils/dependency-injection.js index 9a5017bef85..e022bc101d8 100644 --- a/api/lib/infrastructure/utils/dependency-injection.js +++ b/api/lib/infrastructure/utils/dependency-injection.js @@ -1,4 +1,4 @@ -const _ = require('lodash'); +import _ from 'lodash'; function injectDefaults(defaults, targetFn) { return (args) => targetFn(Object.assign(Object.create(defaults), args)); @@ -8,4 +8,4 @@ function injectDependencies(toBeInjected, dependencies) { return _.mapValues(toBeInjected, _.partial(injectDefaults, dependencies)); } -module.exports = { injectDependencies, injectDefaults }; +export { injectDependencies, injectDefaults }; diff --git a/api/lib/infrastructure/utils/filter-utils.js b/api/lib/infrastructure/utils/filter-utils.js index ec7627e1e6f..eb3c5b601bf 100644 --- a/api/lib/infrastructure/utils/filter-utils.js +++ b/api/lib/infrastructure/utils/filter-utils.js @@ -1,16 +1,17 @@ -const { knex } = require('../../../db/knex-database-connection.js'); +import { knex } from '../../../db/knex-database-connection.js'; const DISTANCE = 0.8; -module.exports = { - filterByFullName(queryBuilder, search, firstName, lastName) { - const searchLowerCase = search.trim().toLowerCase(); - queryBuilder.where(function () { - //the search is performed by pg_search which uses the distances between the pattern and the data - //if the distance is too large then pg-search won't find anything - //this is why the others where are used - this.where(knex.raw(`CONCAT (??, ' ', ??) <-> ?`, [firstName, lastName, searchLowerCase]), '<=', DISTANCE); - this.orWhereRaw('LOWER(??) LIKE ?', [firstName, `%${searchLowerCase}%`]); - this.orWhereRaw('LOWER(??) LIKE ?', [lastName, `%${searchLowerCase}%`]); - }); - }, + +const filterByFullName = function (queryBuilder, search, firstName, lastName) { + const searchLowerCase = search.trim().toLowerCase(); + queryBuilder.where(function () { + //the search is performed by pg_search which uses the distances between the pattern and the data + //if the distance is too large then pg-search won't find anything + //this is why the others where are used + this.where(knex.raw(`CONCAT (??, ' ', ??) <-> ?`, [firstName, lastName, searchLowerCase]), '<=', DISTANCE); + this.orWhereRaw('LOWER(??) LIKE ?', [firstName, `%${searchLowerCase}%`]); + this.orWhereRaw('LOWER(??) LIKE ?', [lastName, `%${searchLowerCase}%`]); + }); }; + +export { filterByFullName }; diff --git a/api/lib/infrastructure/utils/knex-utils.js b/api/lib/infrastructure/utils/knex-utils.js index 5da4bf02e86..8be380e7cfe 100644 --- a/api/lib/infrastructure/utils/knex-utils.js +++ b/api/lib/infrastructure/utils/knex-utils.js @@ -1,4 +1,4 @@ -const { knex } = require('../../../db/knex-database-connection.js'); +import { knex } from '../../../db/knex-database-connection.js'; const DEFAULT_PAGINATION = { PAGE: 1, @@ -57,7 +57,7 @@ function getChunkSizeForParameterBinding(objectAboutToBeBinded) { return MAX_BINDED_PARAMS_PG; } -module.exports = { +export { fetchPage, isUniqConstraintViolated, foreignKeyConstraintViolated, diff --git a/api/lib/infrastructure/utils/lodash-utils.js b/api/lib/infrastructure/utils/lodash-utils.js index ce943a2265a..63ca13e0e6a 100644 --- a/api/lib/infrastructure/utils/lodash-utils.js +++ b/api/lib/infrastructure/utils/lodash-utils.js @@ -1,4 +1,5 @@ -const { runInContext } = require('lodash'); +import pkg from 'lodash'; +const { runInContext } = pkg; const _ = runInContext(); _.mixin({ /* @@ -72,4 +73,4 @@ _.mixin({ }, }); -module.exports = _; +export { _ }; diff --git a/api/lib/infrastructure/utils/ods/added-cell-option.js b/api/lib/infrastructure/utils/ods/added-cell-option.js index bd4f7bf5878..58e2c1600b4 100644 --- a/api/lib/infrastructure/utils/ods/added-cell-option.js +++ b/api/lib/infrastructure/utils/ods/added-cell-option.js @@ -1,8 +1,10 @@ -module.exports = class AddedCellOption { +class AddedCellOption { constructor({ labels = [], rowspan = 0, colspan = 0, positionOffset = 0 }) { this.labels = labels; this.rowspan = rowspan; this.colspan = colspan; this.positionOffset = positionOffset; } -}; +} + +export { AddedCellOption }; diff --git a/api/lib/infrastructure/utils/ods/common-ods-utils.js b/api/lib/infrastructure/utils/ods/common-ods-utils.js index a2e9fe890f5..8c862fe36e5 100644 --- a/api/lib/infrastructure/utils/ods/common-ods-utils.js +++ b/api/lib/infrastructure/utils/ods/common-ods-utils.js @@ -1,5 +1,5 @@ -const JSZip = require('jszip'); -const fs = require('fs').promises; +import JSZip from 'jszip'; +import * as fs from 'fs/promises'; async function loadOdsZip(odsFilePath) { const odsFileData = await _openOdsFile(odsFilePath); @@ -11,6 +11,4 @@ function _openOdsFile(odsFilePath) { return fs.readFile(odsFilePath); } -module.exports = { - loadOdsZip, -}; +export { loadOdsZip }; diff --git a/api/lib/infrastructure/utils/ods/read-ods-utils.js b/api/lib/infrastructure/utils/ods/read-ods-utils.js index 0360c985521..bfc546b4b87 100644 --- a/api/lib/infrastructure/utils/ods/read-ods-utils.js +++ b/api/lib/infrastructure/utils/ods/read-ods-utils.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const XLSX = require('xlsx'); +import _ from 'lodash'; +import XLSX from 'xlsx'; -const { UnprocessableEntityError } = require('../../../application/http-errors.js'); -const { loadOdsZip } = require('./common-ods-utils.js'); +import { UnprocessableEntityError } from '../../../application/http-errors.js'; +import { loadOdsZip } from './common-ods-utils.js'; const CONTENT_XML_IN_ODS = 'content.xml'; @@ -122,9 +122,4 @@ function _transformSheetDataRow(sheetDataRow, sheetHeaderPropertyMap) { ); } -module.exports = { - extractTableDataFromOdsFile, - getContentXml, - getSheetDataRowsFromOdsBuffer, - validateOdsHeaders, -}; +export { extractTableDataFromOdsFile, getContentXml, getSheetDataRowsFromOdsBuffer, validateOdsHeaders }; diff --git a/api/lib/infrastructure/utils/ods/write-ods-utils.js b/api/lib/infrastructure/utils/ods/write-ods-utils.js index c64d1d68be4..fa7af55e6bd 100644 --- a/api/lib/infrastructure/utils/ods/write-ods-utils.js +++ b/api/lib/infrastructure/utils/ods/write-ods-utils.js @@ -1,7 +1,11 @@ -const { loadOdsZip } = require('./common-ods-utils.js'); -const { DOMParser, XMLSerializer } = require('@xmldom/xmldom'); -const _ = require('lodash'); -const AddedCellOption = require('./added-cell-option.js'); +import { loadOdsZip } from './common-ods-utils.js'; + +import xmldom from '@xmldom/xmldom'; + +const { DOMParser, XMLSerializer } = xmldom; + +import _ from 'lodash'; +import { AddedCellOption } from './added-cell-option.js'; const CONTENT_XML_IN_ODS = 'content.xml'; @@ -496,7 +500,7 @@ function _translateNoteBackgroundTitle(targetXmlDomElement, translate) { } } -module.exports = { +export { makeUpdatedOdsByContentXml, updateXmlSparseValues, updateXmlRows, diff --git a/api/lib/infrastructure/utils/paginate.js b/api/lib/infrastructure/utils/paginate.js index bd648cf03ec..f855390a6d7 100644 --- a/api/lib/infrastructure/utils/paginate.js +++ b/api/lib/infrastructure/utils/paginate.js @@ -17,4 +17,4 @@ function paginate(data, { number = DEFAULT_PAGINATION.PAGE, size = DEFAULT_PAGIN }; } -module.exports = { paginate }; +export { paginate }; diff --git a/api/lib/infrastructure/utils/pdf/AttestationViewModel.js b/api/lib/infrastructure/utils/pdf/AttestationViewModel.js index 7f75abc42df..fd155851a0d 100644 --- a/api/lib/infrastructure/utils/pdf/AttestationViewModel.js +++ b/api/lib/infrastructure/utils/pdf/AttestationViewModel.js @@ -1,6 +1,9 @@ -const sortBy = require('lodash/sortBy'); -const moment = require('moment'); -const { toArrayOfFixedLengthStringsConservingWords } = require('../string-utils.js'); +import lodash from 'lodash'; + +const { sortBy } = lodash; + +import moment from 'moment'; +import { toArrayOfFixedLengthStringsConservingWords } from '../string-utils.js'; const PROFESSIONALIZING_VALIDITY_START_DATE = new Date('2022-01-01'); @@ -135,4 +138,4 @@ function _formatDate(date) { return moment(date).locale('fr').format('LL'); } -module.exports = AttestationViewModel; +export { AttestationViewModel }; diff --git a/api/lib/infrastructure/utils/pdf/certification-attestation-pdf.js b/api/lib/infrastructure/utils/pdf/certification-attestation-pdf.js index e03ca1a783b..e08f8277484 100644 --- a/api/lib/infrastructure/utils/pdf/certification-attestation-pdf.js +++ b/api/lib/infrastructure/utils/pdf/certification-attestation-pdf.js @@ -1,15 +1,17 @@ -const { PDFDocument, rgb } = require('pdf-lib'); -const { readFile } = require('fs/promises'); -const pdfLibFontkit = require('@pdf-lib/fontkit'); -const moment = require('moment'); -const _ = require('lodash'); -const bluebird = require('bluebird'); -// eslint-disable-next-line no-restricted-modules -const axios = require('axios'); - -const AttestationViewModel = require('./AttestationViewModel.js'); -const { CertificationAttestationGenerationError } = require('../../../domain/errors.js'); +import { PDFDocument, rgb } from 'pdf-lib'; +import { readFile } from 'fs/promises'; +import pdfLibFontkit from '@pdf-lib/fontkit'; +import moment from 'moment'; +import _ from 'lodash'; +import bluebird from 'bluebird'; +import axios from 'axios'; +import * as url from 'url'; + +import { AttestationViewModel } from './AttestationViewModel.js'; +import { CertificationAttestationGenerationError } from '../../../domain/errors.js'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); const fonts = { openSansBold: 'OpenSans-Bold.ttf', openSansSemiBold: 'OpenSans-SemiBold.ttf', @@ -359,6 +361,5 @@ async function _finalizeDocument(pdfDocument) { return buffer; } -module.exports = { - getCertificationAttestationsPdfBuffer, -}; +const getCertificationAttestationsPdf = { getCertificationAttestationsPdfBuffer }; +export { getCertificationAttestationsPdfBuffer, getCertificationAttestationsPdf }; diff --git a/api/lib/infrastructure/utils/pdf/supervisor-kit-pdf.js b/api/lib/infrastructure/utils/pdf/supervisor-kit-pdf.js index d073afb6852..0701c8d45a1 100644 --- a/api/lib/infrastructure/utils/pdf/supervisor-kit-pdf.js +++ b/api/lib/infrastructure/utils/pdf/supervisor-kit-pdf.js @@ -1,6 +1,12 @@ -const { PDFDocument, rgb } = require('pdf-lib'); -const { readFile } = require('fs/promises'); -const pdfLibFontkit = require('@pdf-lib/fontkit'); +import { readFile } from 'fs/promises'; + +import { PDFDocument, rgb } from 'pdf-lib'; + +import pdfLibFontkit from '@pdf-lib/fontkit'; +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); + const MAX_SESSION_DETAIL_WIDTH = 155; const SESSION_DETAIL_FONT_SIZE = 7; const SESSION_DETAIL_LINE_HEIGHT = 8; @@ -175,6 +181,4 @@ function _toArrayOfFixedWidthConservingWords(str, font, maxWidth) { return result.map((str) => str.trim()); } -module.exports = { - getSupervisorKitPdfBuffer, -}; +export { getSupervisorKitPdfBuffer }; diff --git a/api/lib/infrastructure/utils/progression-logger.js b/api/lib/infrastructure/utils/progression-logger.js index 563046448f0..7271e44ed42 100644 --- a/api/lib/infrastructure/utils/progression-logger.js +++ b/api/lib/infrastructure/utils/progression-logger.js @@ -20,4 +20,4 @@ class ProgressionLogger { } } -module.exports = ProgressionLogger; +export { ProgressionLogger }; diff --git a/api/lib/infrastructure/utils/pseudo-random.js b/api/lib/infrastructure/utils/pseudo-random.js index fb29c0262ee..4242091c1ca 100644 --- a/api/lib/infrastructure/utils/pseudo-random.js +++ b/api/lib/infrastructure/utils/pseudo-random.js @@ -1,4 +1,4 @@ -const hashInt = require('hash-int'); +import hashInt from 'hash-int'; class PseudoRandom { constructor(initialSeed) { @@ -31,8 +31,8 @@ class PseudoRandom { } } -module.exports = { - create: (seed) => { - return new PseudoRandom(seed); - }, +const create = (seed) => { + return new PseudoRandom(seed); }; + +export { create }; diff --git a/api/lib/infrastructure/utils/query-params-utils.js b/api/lib/infrastructure/utils/query-params-utils.js index cc39214200a..157f0b7a2e7 100644 --- a/api/lib/infrastructure/utils/query-params-utils.js +++ b/api/lib/infrastructure/utils/query-params-utils.js @@ -1,6 +1,6 @@ -const _ = require('lodash'); +import _ from 'lodash'; -module.exports = { extractParameters }; +export { extractParameters }; // query example: 'filter[organizationId]=4&page[size]=30$page[number]=3&sort=createdAt[desc]&include=user' // Warning: there is not any order between sort parameters diff --git a/api/lib/infrastructure/utils/redis-monitor.js b/api/lib/infrastructure/utils/redis-monitor.js index 5b3d2e4e5cf..719930dfc00 100644 --- a/api/lib/infrastructure/utils/redis-monitor.js +++ b/api/lib/infrastructure/utils/redis-monitor.js @@ -1,10 +1,10 @@ -const settings = require('../../config.js'); -const RedisClient = require('./RedisClient.js'); +import { config } from '../../config.js'; +import { RedisClient } from './RedisClient.js'; class RedisMonitor { constructor() { - if (settings.caching.redisUrl) { - this._client = new RedisClient(settings.caching.redisUrl, { name: 'redis-monitor' }); + if (config.caching.redisUrl) { + this._client = new RedisClient(config.caching.redisUrl, { name: 'redis-monitor' }); } } @@ -22,4 +22,4 @@ class RedisMonitor { const redisMonitor = new RedisMonitor(); -module.exports = { redisMonitor }; +export { redisMonitor }; diff --git a/api/lib/infrastructure/utils/request-response-utils.js b/api/lib/infrastructure/utils/request-response-utils.js index 31c5146d6e2..05d0ef30ffc 100644 --- a/api/lib/infrastructure/utils/request-response-utils.js +++ b/api/lib/infrastructure/utils/request-response-utils.js @@ -1,8 +1,10 @@ -const accept = require('@hapi/accept'); -const tokenService = require('../../domain/services/token-service.js'); -const { ENGLISH_SPOKEN, FRENCH_FRANCE, FRENCH_SPOKEN } = require('../../domain/constants.js').LOCALE; +import accept from '@hapi/accept'; +import { tokenService } from '../../domain/services/token-service.js'; +import { LOCALE } from '../../domain/constants.js'; -module.exports = { escapeFileName, extractUserIdFromRequest, extractLocaleFromRequest }; +const { ENGLISH_SPOKEN, FRENCH_FRANCE, FRENCH_SPOKEN } = LOCALE; + +export { escapeFileName, extractUserIdFromRequest, extractLocaleFromRequest }; function escapeFileName(fileName) { return fileName.replace(/[^_. A-Za-z0-9-]/g, '_'); diff --git a/api/lib/infrastructure/utils/string-utils.js b/api/lib/infrastructure/utils/string-utils.js index d0ed0c84baf..ad82353816e 100644 --- a/api/lib/infrastructure/utils/string-utils.js +++ b/api/lib/infrastructure/utils/string-utils.js @@ -1,4 +1,4 @@ -const _ = require('../../infrastructure/utils/lodash-utils.js'); +import { _ } from '../../infrastructure/utils/lodash-utils.js'; function getArrayOfStrings(commaSeparatedStrings) { if (!commaSeparatedStrings) return []; @@ -66,7 +66,7 @@ function toArrayOfFixedLengthStringsConservingWords(str, maxLength) { return result.map((str) => str.trim()); } -module.exports = { +export { isNumeric, splitIntoWordsAndRemoveBackspaces, cleanStringAndParseFloat, diff --git a/api/lib/infrastructure/utils/url-builder.js b/api/lib/infrastructure/utils/url-builder.js index 5d8a1b84609..6e7a07b7249 100644 --- a/api/lib/infrastructure/utils/url-builder.js +++ b/api/lib/infrastructure/utils/url-builder.js @@ -1,16 +1,16 @@ -const settings = require('../../config.js'); +import { config } from '../../config.js'; -module.exports = { getCampaignUrl }; +export { getCampaignUrl }; function getCampaignUrl(locale, campaignCode) { if (!campaignCode) { return null; } if (locale === 'fr') { - return `${settings.domain.pixApp + settings.domain.tldOrg}/campagnes/${campaignCode}/?lang=fr`; + return `${config.domain.pixApp + config.domain.tldOrg}/campagnes/${campaignCode}/?lang=fr`; } if (locale === 'en') { - return `${settings.domain.pixApp + settings.domain.tldOrg}/campagnes/${campaignCode}/?lang=en`; + return `${config.domain.pixApp + config.domain.tldOrg}/campagnes/${campaignCode}/?lang=en`; } - return `${settings.domain.pixApp + settings.domain.tldFr}/campagnes/${campaignCode}`; + return `${config.domain.pixApp + config.domain.tldFr}/campagnes/${campaignCode}`; } diff --git a/api/lib/infrastructure/utils/xml/siecle-file-streamer.js b/api/lib/infrastructure/utils/xml/siecle-file-streamer.js index 50ad1c2f193..72b058486e7 100644 --- a/api/lib/infrastructure/utils/xml/siecle-file-streamer.js +++ b/api/lib/infrastructure/utils/xml/siecle-file-streamer.js @@ -1,17 +1,24 @@ -const { isObject, values } = require('lodash'); -const { FileValidationError, SiecleXmlImportError } = require('../../../domain/errors.js'); -const { logErrorWithCorrelationIds } = require('../../monitoring-tools.js'); -const fs = require('fs'); +import _ from 'lodash'; + +const { isObject, values } = _; +import { FileValidationError, SiecleXmlImportError } from '../../../domain/errors.js'; +import { logErrorWithCorrelationIds } from '../../monitoring-tools.js'; +import fs from 'fs'; + const fsPromises = fs.promises; -const Path = require('path'); -const os = require('os'); -const { Buffer } = require('buffer'); -const StreamZip = require('node-stream-zip'); -const FileType = require('file-type'); -const iconv = require('iconv-lite'); -const sax = require('sax'); -const xmlEncoding = require('xml-buffer-tostring').xmlEncoding; -const _ = require('lodash'); +import Path from 'path'; +import os from 'os'; +import buffer from 'buffer'; + +const { xmlEncoding } = xmlBufferTostring; + +const { Buffer } = buffer; + +import StreamZip from 'node-stream-zip'; +import FileType from 'file-type'; +import iconv from 'iconv-lite'; +import sax from 'sax'; +import xmlBufferTostring from 'xml-buffer-tostring'; /* https://github.com/1024pix/pix/pull/3470#discussion_r707319744 @@ -69,11 +76,13 @@ async function _isFileZipped(path) { const fileType = await FileType.fromFile(path); return isObject(fileType) && fileType.mime === ZIP; } + function _createTempDir() { const tmpDir = os.tmpdir(); const directory = Path.join(tmpDir, 'import-siecle-'); return fsPromises.mkdtemp(directory); } + async function _unzipFile(directory, path) { const extractedFileName = Path.join(directory, 'organization-learners.xml'); const zip = new StreamZip.async({ file: path }); @@ -158,4 +167,4 @@ function getDecodingStream(encoding) { } } -module.exports = SiecleFileStreamer; +export { SiecleFileStreamer }; diff --git a/api/lib/infrastructure/validate-environment-variables.js b/api/lib/infrastructure/validate-environment-variables.js index 9b0d78820d9..06a43b1a113 100644 --- a/api/lib/infrastructure/validate-environment-variables.js +++ b/api/lib/infrastructure/validate-environment-variables.js @@ -1,4 +1,4 @@ -const Joi = require('joi'); +import Joi from 'joi'; const schema = Joi.object({ REDIS_URL: Joi.string().uri().optional(), @@ -65,4 +65,4 @@ const validateEnvironmentVariables = function () { } }; -module.exports = validateEnvironmentVariables; +export { validateEnvironmentVariables }; diff --git a/api/lib/routes.js b/api/lib/routes.js index a5c627a9128..8302bc96262 100644 --- a/api/lib/routes.js +++ b/api/lib/routes.js @@ -1,59 +1,59 @@ -const accountRecovery = require('./application/account-recovery/index.js'); -const adminMembers = require('./application/admin-members/index.js'); -const answers = require('./application/answers/index.js'); -const assessmentResults = require('./application/assessment-results/index.js'); -const assessments = require('./application/assessments/index.js'); -const authentication = require('./application/authentication/index.js'); -const authenticationOidc = require('./application/authentication/oidc/index.js'); -const badges = require('./application/badges/index.js'); -const cache = require('./application/cache/index.js'); -const campaignParticipations = require('./application/campaign-participations/index.js'); -const campaigns = require('./application/campaigns/index.js'); -const campaignsAdministration = require('./application/campaigns-administration/index.js'); -const certificationCandidates = require('./application/certification-candidates/index.js'); -const certificationCenters = require('./application/certification-centers/index.js'); -const certificationCenterInvitations = require('./application/certification-center-invitations/index.js'); -const certificationCenterMemberships = require('./application/certification-center-memberships/index.js'); -const certificationCourses = require('./application/certification-courses/index.js'); -const certificationPointOfContacts = require('./application/certification-point-of-contacts/index.js'); -const certificationLivretScolaire = require('./application/certification-livret-scolaire/index.js'); -const certificationReports = require('./application/certification-reports/index.js'); -const certificationIssueReports = require('./application/certification-issue-reports/index.js'); -const certifications = require('./application/certifications/index.js'); -const challenges = require('./application/challenges/index.js'); -const competenceEvaluations = require('./application/competence-evaluations/index.js'); -const complementaryCertifications = require('./application/complementary-certifications/index.js'); -const complementaryCertificationCourseResults = require('./application/complementary-certification-course-results/index.js'); -const countries = require('./application/countries/index.js'); -const courses = require('./application/courses/index.js'); -const featureToggles = require('./application/feature-toggles/index.js'); -const feedbacks = require('./application/feedbacks/index.js'); -const healthcheck = require('./application/healthcheck/index.js'); -const lcms = require('./application/lcms/index.js'); -const memberships = require('./application/memberships/index.js'); -const organizationInvitations = require('./application/organization-invitations/index.js'); -const organizations = require('./application/organizations/index.js'); -const organizationsAdministration = require('./application/organizations-administration/index.js'); -const passwords = require('./application/passwords/index.js'); -const poleEmploi = require('./application/pole-emploi/index.js'); -const prescribers = require('./application/prescribers/index.js'); -const progressions = require('./application/progressions/index.js'); -const saml = require('./application/saml/index.js'); -const stageCollection = require('./application/stage-collections/index.js'); -const scoringSimulator = require('./application/scoring-simulator/index.js'); -const organizationLearners = require('./application/organization-learners/index.js'); -const scorecards = require('./application/scorecards/index.js'); -const scoOrganizationLearners = require('./application/sco-organization-learners/index.js'); -const supOrganizationLearners = require('./application/sup-organization-learners/index.js'); -const sessions = require('./application/sessions/index.js'); -const tags = require('./application/tags/index.js'); -const targetProfiles = require('./application/target-profiles/index.js'); -const trainings = require('./application/trainings/index.js'); -const frameworks = require('./application/frameworks/index.js'); -const tutorialEvaluations = require('./application/tutorial-evaluations/index.js'); -const userOrgaSettings = require('./application/user-orga-settings/index.js'); -const userTutorials = require('./application/user-tutorials/index.js'); -const users = require('./application/users/index.js'); +import * as accountRecovery from './application/account-recovery/index.js'; +import * as adminMembers from './application/admin-members/index.js'; +import * as answers from './application/answers/index.js'; +import * as assessmentResults from './application/assessment-results/index.js'; +import * as assessments from './application/assessments/index.js'; +import * as authentication from './application/authentication/index.js'; +import * as authenticationOidc from './application/authentication/oidc/index.js'; +import * as badges from './application/badges/index.js'; +import * as cache from './application/cache/index.js'; +import * as campaignParticipations from './application/campaign-participations/index.js'; +import * as campaigns from './application/campaigns/index.js'; +import * as campaignsAdministration from './application/campaigns-administration/index.js'; +import * as certificationCandidates from './application/certification-candidates/index.js'; +import * as certificationCenters from './application/certification-centers/index.js'; +import * as certificationCenterInvitations from './application/certification-center-invitations/index.js'; +import * as certificationCenterMemberships from './application/certification-center-memberships/index.js'; +import * as certificationCourses from './application/certification-courses/index.js'; +import * as certificationPointOfContacts from './application/certification-point-of-contacts/index.js'; +import * as certificationLivretScolaire from './application/certification-livret-scolaire/index.js'; +import * as certificationReports from './application/certification-reports/index.js'; +import * as certificationIssueReports from './application/certification-issue-reports/index.js'; +import * as certifications from './application/certifications/index.js'; +import * as challenges from './application/challenges/index.js'; +import * as competenceEvaluations from './application/competence-evaluations/index.js'; +import * as complementaryCertifications from './application/complementary-certifications/index.js'; +import * as complementaryCertificationCourseResults from './application/complementary-certification-course-results/index.js'; +import * as countries from './application/countries/index.js'; +import * as courses from './application/courses/index.js'; +import * as featureToggles from './application/feature-toggles/index.js'; +import * as feedbacks from './application/feedbacks/index.js'; +import * as healthcheck from './application/healthcheck/index.js'; +import * as lcms from './application/lcms/index.js'; +import * as memberships from './application/memberships/index.js'; +import * as organizationInvitations from './application/organization-invitations/index.js'; +import * as organizations from './application/organizations/index.js'; +import * as organizationsAdministration from './application/organizations-administration/index.js'; +import * as passwords from './application/passwords/index.js'; +import * as poleEmploi from './application/pole-emploi/index.js'; +import * as prescribers from './application/prescribers/index.js'; +import * as progressions from './application/progressions/index.js'; +import * as saml from './application/saml/index.js'; +import * as stageCollection from './application/stage-collections/index.js'; +import * as scoringSimulator from './application/scoring-simulator/index.js'; +import * as organizationLearners from './application/organization-learners/index.js'; +import * as scorecards from './application/scorecards/index.js'; +import * as scoOrganizationLearners from './application/sco-organization-learners/index.js'; +import * as supOrganizationLearners from './application/sup-organization-learners/index.js'; +import * as sessions from './application/sessions/index.js'; +import * as tags from './application/tags/index.js'; +import * as targetProfiles from './application/target-profiles/index.js'; +import * as trainings from './application/trainings/index.js'; +import * as frameworks from './application/frameworks/index.js'; +import * as tutorialEvaluations from './application/tutorial-evaluations/index.js'; +import * as userOrgaSettings from './application/user-orga-settings/index.js'; +import * as userTutorials from './application/user-tutorials/index.js'; +import * as users from './application/users/index.js'; const routes = [ accountRecovery, @@ -114,4 +114,4 @@ const routes = [ users, ]; -module.exports = { routes }; +export { routes }; diff --git a/api/lib/swaggers.js b/api/lib/swaggers.js index cfdf54649c3..05ef2808a2c 100644 --- a/api/lib/swaggers.js +++ b/api/lib/swaggers.js @@ -1,5 +1,5 @@ -const HapiSwagger = require('hapi-swagger'); -const packageJSON = require('../package.json'); +import HapiSwagger from 'hapi-swagger'; +import packageJSON from '../package.json' assert { type: 'json' }; const swaggerOptionsAuthorizationServer = { routeTag: 'authorization-server', @@ -59,4 +59,4 @@ const swaggers = [ swaggerOptionsIn, ].map(_buildSwaggerArgs); -module.exports = swaggers; +export { swaggers }; diff --git a/api/lib/validate.js b/api/lib/validate.js index 047f03b2264..b6df0fc2892 100644 --- a/api/lib/validate.js +++ b/api/lib/validate.js @@ -1,11 +1,12 @@ -const get = require('lodash/get'); -const { BadRequestError, sendJsonApiError } = require('./application/http-errors.js'); +import lodash from 'lodash'; + +const { get } = lodash; + +import { BadRequestError, sendJsonApiError } from './application/http-errors.js'; function handleFailAction(request, h, err) { const message = get(err, 'details[0].message', ''); return sendJsonApiError(new BadRequestError(message), h); } -module.exports = { - handleFailAction, -}; +export { handleFailAction }; diff --git a/api/package-lock.json b/api/package-lock.json index 22ba6e39a3d..fcb2928fcc7 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -25,7 +25,6 @@ "bcrypt": "^5.0.1", "bluebird": "^3.7.2", "bookshelf": "^1.2.0", - "bookshelf-json-columns": "^3.0.0", "bookshelf-validate": "^2.0.3", "cron-parser": "^4.6.0", "dayjs": "^1.11.5", @@ -83,6 +82,7 @@ }, "devDependencies": { "@babel/eslint-parser": "^7.18.2", + "@babel/plugin-syntax-import-assertions": "^7.20.0", "@ls-lint/ls-lint": "^1.11.2", "chai": "^4.3.6", "chai-as-promised": "^7.1.1", @@ -92,6 +92,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-chai-expect": "^3.0.0", "eslint-plugin-i18n-json": "^4.0.0", + "eslint-plugin-import": "^2.27.5", "eslint-plugin-knex": "^0.2.1", "eslint-plugin-mocha": "^10.0.5", "eslint-plugin-node": "^11.1.0", @@ -101,7 +102,6 @@ "flush-write-stream": "^2.0.0", "form-data": "^4.0.0", "inquirer": "^8.2.4", - "jscodeshift": "^0.14.0", "mocha": "^10.0.0", "mocha-junit-reporter": "^2.0.2", "mockdate": "^3.0.5", @@ -109,7 +109,6 @@ "nodemon": "^2.0.16", "npm-run-all": "^4.1.5", "prettier": "^2.7.1", - "proxyquire": "^2.1.3", "sinon": "^15.0.0", "sinon-chai": "^3.7.0", "split2": "^4.1.0", @@ -2934,7 +2933,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, - "peer": true, "dependencies": { "@babel/helper-plugin-utils": "^7.19.0" }, @@ -4857,6 +4855,19 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "node_modules/@ianvs/eslint-stats": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@ianvs/eslint-stats/-/eslint-stats-2.0.0.tgz", + "integrity": "sha512-DnIVVAiXR4tfWERTiQxr1Prrs/uFEbC1C4gTGORMvbF4k7ENyVQeLcoUfNyhlAj2MB/OeorCrN3wSnYuDOUS6Q==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "lodash": "^4.17.15" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -5427,6 +5438,12 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "node_modules/@types/mime-db": { "version": "1.43.1", "resolved": "https://registry.npmjs.org/@types/mime-db/-/mime-db-1.43.1.tgz", @@ -5762,6 +5779,19 @@ "node": ">=6" } }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-differ": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", @@ -5771,6 +5801,25 @@ "node": ">=8" } }, + "node_modules/array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -5788,6 +5837,42 @@ "node": ">=0.10.0" } }, + "node_modules/array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -5871,6 +5956,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -6944,15 +7041,19 @@ } }, "node_modules/define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, "dependencies": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/delay": { @@ -7259,31 +7360,45 @@ } }, "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "dev": true, "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" }, "engines": { "node": ">= 0.4" @@ -7292,6 +7407,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, "node_modules/es-to-primitive": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", @@ -7486,6 +7624,201 @@ "eslint": ">=7.0.0" } }, + "node_modules/eslint-filtered-fix": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-filtered-fix/-/eslint-filtered-fix-0.3.0.tgz", + "integrity": "sha512-UMHOza9epEn9T+yVT8RiCFf0JdALpVzmoH62Ez/zvxM540IyUNAkr7aH2Frkv6zlm9a/gbmq/sc7C4SvzZQXcA==", + "dev": true, + "dependencies": { + "optionator": "^0.9.1" + }, + "bin": { + "eslint-filtered-fix": "bin/eslint-filtered-fix.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-formatter-friendly": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/eslint-formatter-friendly/-/eslint-formatter-friendly-7.0.0.tgz", + "integrity": "sha512-WXg2D5kMHcRxIZA3ulxdevi8/BGTXu72pfOO5vXHqcAfClfIWDSlOljROjCSOCcKvilgmHz1jDWbvFCZHjMQ5w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.0.0", + "chalk": "2.4.2", + "extend": "3.0.2", + "strip-ansi": "5.2.0", + "text-table": "0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-formatter-friendly/node_modules/@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.0.0" + } + }, + "node_modules/eslint-formatter-friendly/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-formatter-friendly/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-nibble": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-nibble/-/eslint-nibble-8.1.0.tgz", + "integrity": "sha512-x9H/1oeuKdC0HsaWeBarOryqNLC+7QZfAZIAP0HnGcmiiPktFIQq/D0e+iiCSyqYLSaui3UwvH56sXMrf5oQhw==", + "dev": true, + "dependencies": { + "@ianvs/eslint-stats": "^2.0.0", + "chalk": "^4.1.1", + "eslint-filtered-fix": "^0.3.0", + "eslint-formatter-friendly": "^7.0.0", + "eslint-summary": "^1.0.0", + "inquirer": "^8.2.3", + "optionator": "^0.9.1" + }, + "bin": { + "eslint-nibble": "bin/eslint-nibble.js" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-nibble/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint-nibble/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint-nibble/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint-nibble/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint-nibble/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/eslint-plugin-chai-expect": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-chai-expect/-/eslint-plugin-chai-expect-3.0.0.tgz", @@ -7588,23 +7921,82 @@ "node": ">=4" } }, - "node_modules/eslint-plugin-knex": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-knex/-/eslint-plugin-knex-0.2.1.tgz", - "integrity": "sha512-6D/XCF5Sb3RSFF2VTk74t+8RkHg8abJC7VIdSJqeokxZqkKkr0HsndxSidhVOKFcG1VLqFb5Rq4a3CFOAseicQ==", - "dev": true, - "dependencies": { - "eslint-remote-tester": "^1.1.0" - } - }, - "node_modules/eslint-plugin-mocha": { - "version": "10.0.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.0.5.tgz", - "integrity": "sha512-H5xuD5NStlpaKLqUWYC5BsMx8fHgrIYsdloFbONUTc2vgVNiJcWdKoX29Tt0BO75QgAltplPLIziByMozGGixA==", + "node_modules/eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", "dev": true, "dependencies": { - "eslint-utils": "^3.0.0", - "rambda": "^7.1.0" + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-knex": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-knex/-/eslint-plugin-knex-0.2.1.tgz", + "integrity": "sha512-6D/XCF5Sb3RSFF2VTk74t+8RkHg8abJC7VIdSJqeokxZqkKkr0HsndxSidhVOKFcG1VLqFb5Rq4a3CFOAseicQ==", + "dev": true, + "dependencies": { + "eslint-remote-tester": "^1.1.0" + } + }, + "node_modules/eslint-plugin-mocha": { + "version": "10.0.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.0.5.tgz", + "integrity": "sha512-H5xuD5NStlpaKLqUWYC5BsMx8fHgrIYsdloFbONUTc2vgVNiJcWdKoX29Tt0BO75QgAltplPLIziByMozGGixA==", + "dev": true, + "dependencies": { + "eslint-utils": "^3.0.0", + "rambda": "^7.1.0" }, "engines": { "node": ">=14.0.0" @@ -7872,6 +8264,53 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint-summary": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-summary/-/eslint-summary-1.0.0.tgz", + "integrity": "sha512-cHr5WiNFhu2guLQykhQV8O7BQcnpFLR6GdLjbQfDDL0yGy9U7dXC6zMUtwoxYgJRC/Wk3yZMc+I6Q15Z7r4j9Q==", + "dev": true, + "dependencies": { + "chalk": "^1.0.0", + "text-table": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-summary/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-summary/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-summary/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", @@ -7987,18 +8426,6 @@ "node": ">=10.13.0" } }, - "node_modules/eslint/node_modules/glob-parent/node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/eslint/node_modules/globals": { "version": "13.20.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz", @@ -8488,6 +8915,15 @@ } } }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, "node_modules/foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -8588,6 +9024,33 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -8630,13 +9093,14 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8719,6 +9183,33 @@ "node": ">=4" } }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", @@ -8936,10 +9427,22 @@ "node": ">= 0.4.0" } }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -8953,10 +9456,33 @@ "node": ">=4" } }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "engines": { "node": ">= 0.4" }, @@ -9537,12 +10063,12 @@ } }, "node_modules/internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "dependencies": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" }, @@ -9576,6 +10102,20 @@ "node": ">=0.10.0" } }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -9644,9 +10184,9 @@ } }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, "engines": { "node": ">= 0.4" @@ -9668,9 +10208,9 @@ } }, "node_modules/is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "dependencies": { "has": "^1.0.3" }, @@ -9714,9 +10254,9 @@ } }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" @@ -9735,9 +10275,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { "node": ">= 0.4" @@ -9756,9 +10296,9 @@ } }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" @@ -9826,10 +10366,13 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -9876,6 +10419,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -9894,12 +10456,12 @@ } }, "node_modules/is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12051,9 +12613,9 @@ } }, "node_modules/object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12068,14 +12630,14 @@ } }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -12085,6 +12647,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/on-exit-leak-free": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz", @@ -13595,6 +14174,23 @@ "regexp-tree": "bin/regexp-tree" } }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -13790,12 +14386,16 @@ "dev": true }, "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13913,6 +14513,20 @@ "regexp-tree": "~0.1.1" } }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-stable-stringify": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", @@ -14661,33 +15275,52 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "node_modules/string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "node_modules/string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/strip-ansi": { + "node_modules/string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", @@ -14799,6 +15432,17 @@ "node": ">=4" } }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/swagger-parser": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-10.0.3.tgz", @@ -15022,6 +15666,30 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, "node_modules/tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -15075,6 +15743,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -15097,14 +15779,14 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "dependencies": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" }, "funding": { @@ -15307,6 +15989,26 @@ "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "optional": true }, + "node_modules/which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", @@ -18240,7 +18942,6 @@ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz", "integrity": "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==", "dev": true, - "peer": true, "requires": { "@babel/helper-plugin-utils": "^7.19.0" } @@ -19828,6 +20529,16 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, + "@ianvs/eslint-stats": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@ianvs/eslint-stats/-/eslint-stats-2.0.0.tgz", + "integrity": "sha512-DnIVVAiXR4tfWERTiQxr1Prrs/uFEbC1C4gTGORMvbF4k7ENyVQeLcoUfNyhlAj2MB/OeorCrN3wSnYuDOUS6Q==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "lodash": "^4.17.15" + } + }, "@istanbuljs/load-nyc-config": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", @@ -20305,6 +21016,12 @@ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==" }, + "@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, "@types/mime-db": { "version": "1.43.1", "resolved": "https://registry.npmjs.org/@types/mime-db/-/mime-db-1.43.1.tgz", @@ -20587,12 +21304,35 @@ } } }, + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } + }, "array-differ": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true }, + "array-includes": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" + } + }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -20604,6 +21344,30 @@ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.2.tgz", "integrity": "sha1-X8w3OSB3VyPP1k1lxkvvU7+eum0=" }, + "array.prototype.flat": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz", + "integrity": "sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, + "array.prototype.flatmap": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.1.tgz", + "integrity": "sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "es-shim-unscopables": "^1.0.0" + } + }, "arrify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", @@ -20665,6 +21429,12 @@ "integrity": "sha512-Hdw8qdNiqdJ8LqT0iK0sVzkFbzg6fhnQqqfWhBDxcHZvU75+B+ayzTy8x+k5Ix0Y92XOhOUlx74ps+bA6BeYMQ==", "dev": true }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -20822,8 +21592,7 @@ } }, "bookshelf-json-columns": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bookshelf-json-columns/-/bookshelf-json-columns-3.0.0.tgz", + "version": "https://registry.npmjs.org/bookshelf-json-columns/-/bookshelf-json-columns-3.0.0.tgz", "integrity": "sha512-oLJ4P7DxgrERLjxCfQQxTa5KJ8CREr9aRXc7ejtomkl+DZvr5JD0OxQnvoGNA0/BBSEli5tbYtBVA5mSwjTYGw==", "requires": {} }, @@ -21455,12 +22224,13 @@ } }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dev": true, "requires": { - "object-keys": "^1.0.12" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "delay": { @@ -21700,31 +22470,65 @@ } }, "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", "dev": true, "requires": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.1", + "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + } + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "requires": { + "has": "^1.0.3" } }, "es-to-primitive": { @@ -21913,17 +22717,6 @@ "dev": true, "requires": { "is-glob": "^4.0.3" - }, - "dependencies": { - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - } } }, "globals": { @@ -21968,6 +22761,156 @@ "dev": true, "requires": {} }, + "eslint-filtered-fix": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-filtered-fix/-/eslint-filtered-fix-0.3.0.tgz", + "integrity": "sha512-UMHOza9epEn9T+yVT8RiCFf0JdALpVzmoH62Ez/zvxM540IyUNAkr7aH2Frkv6zlm9a/gbmq/sc7C4SvzZQXcA==", + "dev": true, + "requires": { + "optionator": "^0.9.1" + } + }, + "eslint-formatter-friendly": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/eslint-formatter-friendly/-/eslint-formatter-friendly-7.0.0.tgz", + "integrity": "sha512-WXg2D5kMHcRxIZA3ulxdevi8/BGTXu72pfOO5vXHqcAfClfIWDSlOljROjCSOCcKvilgmHz1jDWbvFCZHjMQ5w==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0", + "chalk": "2.4.2", + "extend": "3.0.2", + "strip-ansi": "5.2.0", + "text-table": "0.2.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", + "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.0.0" + } + }, + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "eslint-import-resolver-node": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.7.tgz", + "integrity": "sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "is-core-module": "^2.11.0", + "resolve": "^1.22.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "requires": { + "debug": "^3.2.7" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-nibble": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-nibble/-/eslint-nibble-8.1.0.tgz", + "integrity": "sha512-x9H/1oeuKdC0HsaWeBarOryqNLC+7QZfAZIAP0HnGcmiiPktFIQq/D0e+iiCSyqYLSaui3UwvH56sXMrf5oQhw==", + "dev": true, + "requires": { + "@ianvs/eslint-stats": "^2.0.0", + "chalk": "^4.1.1", + "eslint-filtered-fix": "^0.3.0", + "eslint-formatter-friendly": "^7.0.0", + "eslint-summary": "^1.0.0", + "inquirer": "^8.2.3", + "optionator": "^0.9.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, "eslint-plugin-chai-expect": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-plugin-chai-expect/-/eslint-plugin-chai-expect-3.0.0.tgz", @@ -22039,6 +22982,55 @@ } } }, + "eslint-plugin-import": { + "version": "2.27.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.27.5.tgz", + "integrity": "sha512-LmEt3GVofgiGuiE+ORpnvP+kAm3h6MLZJ4Q5HCyHADofsb4VzXFsRiWj3c0OFiV+3DWFh0qg3v9gcPlfc3zRow==", + "dev": true, + "requires": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.7.4", + "has": "^1.0.3", + "is-core-module": "^2.11.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.6", + "resolve": "^1.22.1", + "semver": "^6.3.0", + "tsconfig-paths": "^3.14.1" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, "eslint-plugin-knex": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/eslint-plugin-knex/-/eslint-plugin-knex-0.2.1.tgz", @@ -22226,6 +23218,43 @@ "estraverse": "^5.2.0" } }, + "eslint-summary": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-summary/-/eslint-summary-1.0.0.tgz", + "integrity": "sha512-cHr5WiNFhu2guLQykhQV8O7BQcnpFLR6GdLjbQfDDL0yGy9U7dXC6zMUtwoxYgJRC/Wk3yZMc+I6Q15Z7r4j9Q==", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "text-table": "^0.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + } + } + }, "eslint-utils": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", @@ -22565,6 +23594,15 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz", "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==" }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "requires": { + "is-callable": "^1.1.3" + } + }, "foreground-child": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", @@ -22634,6 +23672,24 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -22667,13 +23723,14 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", - "has-symbols": "^1.0.1" + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" } }, "get-package-type": { @@ -22732,6 +23789,24 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "devOptional": true }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", @@ -22920,10 +23995,19 @@ "function-bind": "^1.1.1" } }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true }, "has-flag": { @@ -22931,10 +24015,24 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==" + }, "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, "has-tostringtag": { "version": "1.0.0", @@ -23350,12 +24448,12 @@ } }, "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", "dev": true, "requires": { - "get-intrinsic": "^1.1.0", + "get-intrinsic": "^1.2.0", "has": "^1.0.3", "side-channel": "^1.0.4" } @@ -23380,6 +24478,17 @@ "integrity": "sha1-LKmwM2UREYVUEvFr5dd8YqRYp2Y=", "dev": true }, + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", @@ -23430,9 +24539,9 @@ } }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-ci": { @@ -23445,9 +24554,9 @@ } }, "is-core-module": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.4.0.tgz", - "integrity": "sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==", + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", + "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", "requires": { "has": "^1.0.3" } @@ -23476,9 +24585,9 @@ } }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -23491,9 +24600,9 @@ "dev": true }, "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-number": { @@ -23503,9 +24612,9 @@ "dev": true }, "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, "requires": { "has-tostringtag": "^1.0.0" @@ -23549,10 +24658,13 @@ } }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", - "dev": true + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } }, "is-stream": { "version": "2.0.1", @@ -23578,6 +24690,19 @@ "has-symbols": "^1.0.2" } }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + } + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -23590,12 +24715,12 @@ "dev": true }, "is-weakref": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz", - "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, "requires": { - "call-bind": "^1.0.0" + "call-bind": "^1.0.2" } }, "is-windows": { @@ -25264,9 +26389,9 @@ "dev": true }, "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, "object-keys": { "version": "1.1.1", @@ -25275,17 +26400,28 @@ "dev": true }, "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, + "object.values": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.6.tgz", + "integrity": "sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, "on-exit-leak-free": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.0.tgz", @@ -26430,6 +27566,17 @@ "integrity": "sha512-s2aEVuLhvnVJW6s/iPgEGK6R+/xngd2jNQ+xy4bXNDKxZKJH6jpPHY6kVeVv1IeLCHgswRj+Kl3ELaDjG6V1iw==", "dev": true }, + "regexp.prototype.flags": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", + "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "functions-have-names": "^1.2.3" + } + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -26567,12 +27714,13 @@ "dev": true }, "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-from": { @@ -26656,6 +27804,17 @@ "regexp-tree": "~0.1.1" } }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + } + }, "safe-stable-stringify": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.3.1.tgz", @@ -27241,24 +28400,37 @@ "es-abstract": "^1.19.1" } }, + "string.prototype.trim": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", + "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "requires": { "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "strip-ansi": { @@ -27343,6 +28515,11 @@ "has-flag": "^3.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "swagger-parser": { "version": "10.0.3", "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-10.0.3.tgz", @@ -27516,6 +28693,29 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, + "tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "requires": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "dependencies": { + "json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + } + } + }, "tslib": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", @@ -27554,6 +28754,17 @@ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -27570,14 +28781,14 @@ "optional": true }, "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", "which-boxed-primitive": "^1.0.2" } }, @@ -27730,6 +28941,20 @@ "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", "optional": true }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", diff --git a/api/package.json b/api/package.json index d98cc04afc0..639d3f4e1b9 100644 --- a/api/package.json +++ b/api/package.json @@ -9,6 +9,7 @@ "node": "16", "npm": ">=8.13.2 <9" }, + "type": "module", "repository": { "type": "git", "url": "git+https://github.com/1024pix/pix.git" @@ -31,7 +32,6 @@ "bcrypt": "^5.0.1", "bluebird": "^3.7.2", "bookshelf": "^1.2.0", - "bookshelf-json-columns": "^3.0.0", "bookshelf-validate": "^2.0.3", "cron-parser": "^4.6.0", "dayjs": "^1.11.5", @@ -89,6 +89,7 @@ }, "devDependencies": { "@babel/eslint-parser": "^7.18.2", + "@babel/plugin-syntax-import-assertions": "^7.20.0", "@ls-lint/ls-lint": "^1.11.2", "chai": "^4.3.6", "chai-as-promised": "^7.1.1", @@ -98,6 +99,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-plugin-chai-expect": "^3.0.0", "eslint-plugin-i18n-json": "^4.0.0", + "eslint-plugin-import": "^2.27.5", "eslint-plugin-knex": "^0.2.1", "eslint-plugin-mocha": "^10.0.5", "eslint-plugin-node": "^11.1.0", @@ -107,7 +109,6 @@ "flush-write-stream": "^2.0.0", "form-data": "^4.0.0", "inquirer": "^8.2.4", - "jscodeshift": "^0.14.0", "mocha": "^10.0.0", "mocha-junit-reporter": "^2.0.2", "mockdate": "^3.0.5", @@ -115,7 +116,6 @@ "nodemon": "^2.0.16", "npm-run-all": "^4.1.5", "prettier": "^2.7.1", - "proxyquire": "^2.1.3", "sinon": "^15.0.0", "sinon-chai": "^3.7.0", "split2": "^4.1.0", @@ -140,8 +140,8 @@ "db:reset": "npm run db:prepare && npm run db:seed", "lint": "npm-run-all --parallel --continue-on-error lint:*", "lint:dependencies": "depcheck", - "lint:database": "NODE_ENV=test npm run db:prepare && schemalint --config tests/acceptance/database/configuration.js", "lint:file-and-directory-names": "ls-lint", + "lint:database": "NODE_ENV=test npm run db:prepare && schemalint --config tests/acceptance/database/configuration.cjs", "lint:code": "eslint . --ext js --cache --cache-strategy content", "lint:code:uncached": "eslint . --ext js", "lint:translations": "eslint --ext .json --format node_modules/eslint-plugin-i18n-json/formatter.js translations", @@ -149,7 +149,6 @@ "lint-fix:translations": "eslint --fix --ext .json --format node_modules/eslint-plugin-i18n-json/formatter.js translations", "lint-fix:code": "eslint --fix . --ext js --cache --cache-strategy content", "local:test:coverage": "nyc npm test", - "migrate-to-esm": "jscodeshift --transform ./codemods/migrate-cjs-to-esm/transforms/index.js --extensions js --ignore-config=.esmignore --dry .", "postdeploy": "npm run db:migrate", "preinstall": "npx check-engine", "scalingo-postbuild": "node scripts/generate-cron > cron.json", @@ -157,7 +156,7 @@ "start:watch": "nodemon index.js", "start:job": "node worker.js", "start:job:watch": "nodemon worker.js", - "test": "NODE_ENV=test npm run db:prepare && npm run test:api && npm run test:codemods", + "test": "NODE_ENV=test npm run db:prepare && npm run test:api", "test:api": "status=0; npm run test:api:unit || status=1 ; for dir in $(find tests/* -maxdepth 0 -type d -not -path tests/unit) ; do npm run test:api:path -- $dir || status=1 ; done ; exit $status", "test:api:path": "NODE_ENV=test mocha --exit --recursive --reporter=${MOCHA_REPORTER:-dot}", "test:api:scripts": "npm run test:api:path -- tests/integration/scripts", @@ -167,10 +166,7 @@ "test:api:debug": "NODE_ENV=test mocha --inspect-brk=9229 --recursive --exit --reporter dot tests", "test:api:watch": "NODE_ENV=test mocha --recursive tests --watch --reporter dot", "test:api:bail": "npm run test:api:unit -- --bail && npm run test:api:integration -- --bail && npm run test:api:acceptance -- --bail", - "test:codemods": "cd codemods/migrate-cjs-to-esm; npm install; npm run test", - "test:lint": "npm test && npm run lint", - "esm-migration:prepare": "jscodeshift --transform ./codemods/migrate-cjs-to-esm/transforms/prepare.js --extensions js --ignore-config=.codemodsignore ./lib", - "esm-migration:execute": "jscodeshift --transform ./codemods/migrate-cjs-to-esm/transforms/execute.js --extensions js --ignore-config=.codemodsignore ./lib" + "test:lint": "npm test && npm run lint" }, "optionalDependencies": { "nyc": "^15.1.0" diff --git a/api/scripts/PgClient.js b/api/scripts/PgClient.js index 0182539e83e..12c892993c3 100644 --- a/api/scripts/PgClient.js +++ b/api/scripts/PgClient.js @@ -1,4 +1,6 @@ -const { Client } = require('pg'); +import pg from 'pg'; + +const { Client } = pg; class PgClient { constructor(databaseUrl) { @@ -29,4 +31,4 @@ class PgClient { } } -module.exports = PgClient; +export { PgClient }; diff --git a/api/scripts/_template.js b/api/scripts/_template.js index 86d14b52e77..ee75671dbaf 100644 --- a/api/scripts/_template.js +++ b/api/scripts/_template.js @@ -1,10 +1,14 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const { performance } = require('perf_hooks'); -const logger = require('../lib/infrastructure/logger'); -const { cache } = require('../lib/infrastructure/caches/learning-content-cache'); +import perf_hooks from 'perf_hooks'; +import * as url from 'url'; + +const { performance } = perf_hooks; -const { knex, disconnect } = require('../db/knex-database-connection'); +import { logger } from '../lib/infrastructure/logger.js'; +import { learningContentCache as cache } from '../lib/infrastructure/caches/learning-content-cache.js'; +import { knex, disconnect } from '../db/knex-database-connection.js'; const doSomething = async ({ throwError }) => { if (throwError) { @@ -14,7 +18,9 @@ const doSomething = async ({ throwError }) => { return data; }; -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +const __filename = modulePath; async function main() { const startTime = performance.now(); @@ -39,4 +45,4 @@ async function main() { } })(); -module.exports = { doSomething }; +export { doSomething }; diff --git a/api/scripts/add-or-update-certification-centers-dpo-infos.js b/api/scripts/add-or-update-certification-centers-dpo-infos.js index e94cde9fbf5..aac1c1217d1 100644 --- a/api/scripts/add-or-update-certification-centers-dpo-infos.js +++ b/api/scripts/add-or-update-certification-centers-dpo-infos.js @@ -1,14 +1,17 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); +import * as url from 'url'; -const _ = require('lodash'); -const bluebird = require('bluebird'); -const { checkCsvHeader, parseCsvWithHeader } = require('./helpers/csvHelpers'); -const { disconnect } = require('../db/knex-database-connection'); -const updateCertificationCenterDataProtectionOfficerInformation = require('../lib/domain/usecases/update-certification-center-data-protection-officer-information'); -const dataProtectionOfficerRepository = require('../lib/infrastructure/repositories/data-protection-officer-repository'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import { checkCsvHeader, parseCsvWithHeader } from './helpers/csvHelpers.js'; +import { disconnect } from '../db/knex-database-connection.js'; +import { updateCertificationCenterDataProtectionOfficerInformation } from '../lib/domain/usecases/update-certification-center-data-protection-officer-information.js'; +import * as dataProtectionOfficerRepository from '../lib/infrastructure/repositories/data-protection-officer-repository.js'; -const IS_LAUNCHED_FROM_CLI = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const IS_LAUNCHED_FROM_CLI = process.argv[1] === modulePath; const REQUIRED_FIELD_NAMES = ['certificationCenterId', 'firstName', 'lastName', 'email']; const parsingOptions = { diff --git a/api/scripts/add-or-update-organizations-dpo-infos.js b/api/scripts/add-or-update-organizations-dpo-infos.js index f656a687aaf..588d9f62d58 100644 --- a/api/scripts/add-or-update-organizations-dpo-infos.js +++ b/api/scripts/add-or-update-organizations-dpo-infos.js @@ -1,14 +1,19 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const _ = require('lodash'); -const bluebird = require('bluebird'); -const { checkCsvHeader, parseCsvWithHeader } = require('./helpers/csvHelpers'); -const { disconnect } = require('../db/knex-database-connection'); -const updateOrganizationDataProtectionOfficerInformation = require('../lib/domain/usecases/update-organization-data-protection-officer-information'); -const dataProtectionOfficerRepository = require('../lib/infrastructure/repositories/data-protection-officer-repository'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import { checkCsvHeader, parseCsvWithHeader } from './helpers/csvHelpers.js'; +import { disconnect } from '../db/knex-database-connection.js'; +import { updateOrganizationDataProtectionOfficerInformation } from '../lib/domain/usecases/update-organization-data-protection-officer-information.js'; +import * as dataProtectionOfficerRepository from '../lib/infrastructure/repositories/data-protection-officer-repository.js'; + +import * as url from 'url'; + +const modulePath = url.fileURLToPath(import.meta.url); +const IS_LAUNCHED_FROM_CLI = process.argv[1] === modulePath; -const IS_LAUNCHED_FROM_CLI = require.main === module; const REQUIRED_FIELD_NAMES = ['organizationId', 'firstName', 'lastName', 'email']; const parsingOptions = { diff --git a/api/scripts/add-tags-to-organizations.js b/api/scripts/add-tags-to-organizations.js index 777c9a7b93a..61431a4dc29 100644 --- a/api/scripts/add-tags-to-organizations.js +++ b/api/scripts/add-tags-to-organizations.js @@ -1,29 +1,36 @@ // Usage: node add-tags-to-organizations.js path/file.csv // To use on file with columns |organizationId, tagName| -'use strict'; -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const organizationTagRepository = require('../lib/infrastructure/repositories/organization-tag-repository'); -const tagRepository = require('../lib/infrastructure/repositories/tag-repository'); -const OrganizationTag = require('../lib/domain/models/OrganizationTag'); -const { parseCsv } = require('./helpers/csvHelpers'); -const uniq = require('lodash/uniq'); -const { disconnect } = require('../db/knex-database-connection'); +import * as organizationTagRepository from '../lib/infrastructure/repositories/organization-tag-repository.js'; +import * as tagRepository from '../lib/infrastructure/repositories/tag-repository.js'; +import { OrganizationTag } from '../lib/domain/models/OrganizationTag.js'; +import { parseCsv } from './helpers/csvHelpers.js'; +import lodash from 'lodash'; + +const { uniq } = lodash; +import { disconnect } from '../db/knex-database-connection.js'; + +import * as url from 'url'; + +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; function checkData({ csvData }) { return csvData .map(([organizationId, tagName]) => { if (!organizationId && !tagName) { - if (require.main === module) process.stdout.write('Found empty line in input file.'); + if (isLaunchedFromCommandLine) process.stdout.write('Found empty line in input file.'); return null; } if (!organizationId) { - if (require.main === module) process.stdout.write(`A line is missing an organizationId for tag ${tagName}`); + if (isLaunchedFromCommandLine) process.stdout.write(`A line is missing an organizationId for tag ${tagName}`); return null; } if (!tagName) { - if (require.main === module) + if (isLaunchedFromCommandLine) process.stdout.write(`A line is missing a tag name for organization id ${organizationId}`); return null; } @@ -50,7 +57,7 @@ async function retrieveTagsByName({ checkedData }) { async function addTagsToOrganizations({ tagsByName, checkedData, dependencies = { organizationTagRepository } }) { for (let i = 0; i < checkedData.length; i++) { - if (require.main === module) process.stdout.write(`\n${i + 1}/${checkedData.length} `); + if (isLaunchedFromCommandLine) process.stdout.write(`\n${i + 1}/${checkedData.length} `); const { organizationId, tagName } = checkedData[i]; const tagId = tagsByName.get(tagName).id; @@ -61,21 +68,19 @@ async function addTagsToOrganizations({ tagsByName, checkedData, dependencies = }); if (!isExisting) { - if (require.main === module) process.stdout.write(`Adding tag: ${tagName} to organization: ${organizationId} `); + if (isLaunchedFromCommandLine) process.stdout.write(`Adding tag: ${tagName} to organization: ${organizationId} `); const organizationTag = new OrganizationTag({ organizationId, tagId }); await dependencies.organizationTagRepository.create(organizationTag); - if (require.main === module) process.stdout.write('===> ✔'); + if (isLaunchedFromCommandLine) process.stdout.write('===> ✔'); } else { - if (require.main === module) + if (isLaunchedFromCommandLine) process.stdout.write(`Tag: ${tagName} already exists for organization: ${organizationId} `); } } } -const isLaunchedFromCommandLine = require.main === module; - async function main() { console.log('Starting script add-tags-to-organizations'); @@ -111,8 +116,4 @@ async function main() { } })(); -module.exports = { - addTagsToOrganizations, - retrieveTagsByName, - checkData, -}; +export { addTagsToOrganizations, retrieveTagsByName, checkData }; diff --git a/api/scripts/certification/cancel-certifications-and-publish-sessions.js b/api/scripts/certification/cancel-certifications-and-publish-sessions.js index 186db2b052c..84fa687f430 100644 --- a/api/scripts/certification/cancel-certifications-and-publish-sessions.js +++ b/api/scripts/certification/cancel-certifications-and-publish-sessions.js @@ -1,15 +1,17 @@ -const _ = require('lodash'); -const yargs = require('yargs'); -const unpublishSession = require('../../lib/domain/usecases/unpublish-session'); -const publishSession = require('../../lib/domain/usecases/publish-session'); -const finalizedSessionRepository = require('../../lib/infrastructure/repositories/sessions/finalized-session-repository'); -const sessionRepository = require('../../lib/infrastructure/repositories/sessions/session-repository'); -const certificationRepository = require('../../lib/infrastructure/repositories/certification-repository'); -const sessionPublicationService = require('../../lib/domain/services/session-publication-service'); -const { parseCsvWithHeader } = require('../helpers/csvHelpers'); -const { knex, disconnect } = require('../../db/knex-database-connection'); +import _ from 'lodash'; +import yargs from 'yargs'; +import { unpublishSession } from '../../lib/domain/usecases/unpublish-session.js'; +import { publishSession } from '../../lib/domain/usecases/publish-session.js'; +import * as finalizedSessionRepository from '../../lib/infrastructure/repositories/sessions/finalized-session-repository.js'; +import * as sessionRepository from '../../lib/infrastructure/repositories/sessions/session-repository.js'; +import * as certificationRepository from '../../lib/infrastructure/repositories/certification-repository.js'; +import * as sessionPublicationService from '../../lib/domain/services/session-publication-service.js'; +import { parseCsvWithHeader } from '../helpers/csvHelpers.js'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import * as url from 'url'; let progression = 0; + function _logProgression(totalCount) { ++progression; process.stdout.cursorTo(0); @@ -168,7 +170,8 @@ async function _findAlreadyPublishedSessions(sessionIdsToPublish) { return _.map(results, 'id'); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { const commandLineArgs = yargs diff --git a/api/scripts/certification/fill-issue-report-category-id.js b/api/scripts/certification/fill-issue-report-category-id.js index 42a72700d17..f6bdad59545 100644 --- a/api/scripts/certification/fill-issue-report-category-id.js +++ b/api/scripts/certification/fill-issue-report-category-id.js @@ -1,8 +1,11 @@ -const logger = require('../../lib/infrastructure/logger'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const bluebird = require('bluebird'); +import { logger } from '../../lib/infrastructure/logger.js'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import bluebird from 'bluebird'; +import * as url from 'url'; -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +const __filename = modulePath; async function _getIdCategorySubcategoryFromCertificationIssueReport() { return knex('certification-issue-reports').select('id', 'category', 'subcategory'); @@ -43,7 +46,7 @@ async function main() { } })(); -module.exports = { main }; +export { main }; async function _updateIssueReportsWithCategoryId(certificationIssueReports, categories) { let count = 0; diff --git a/api/scripts/certification/fill-last-assessment-result-certification-course-table.js b/api/scripts/certification/fill-last-assessment-result-certification-course-table.js index 75b327b0cbf..94da25ef958 100755 --- a/api/scripts/certification/fill-last-assessment-result-certification-course-table.js +++ b/api/scripts/certification/fill-last-assessment-result-certification-course-table.js @@ -1,9 +1,11 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const logger = require('../../lib/infrastructure/logger'); -const { cache } = require('../../lib/infrastructure/caches/learning-content-cache'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const bluebird = require('bluebird'); +import { logger } from '../../lib/infrastructure/logger.js'; +import { learningContentCache as cache } from '../../lib/infrastructure/caches/learning-content-cache.js'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import bluebird from 'bluebird'; +import * as url from 'url'; const ASSOC_TABLE_NAME = 'certification-courses-last-assessment-results'; @@ -28,7 +30,8 @@ const addLastAssessmentResultCertificationCourse = async () => { } }; -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; function main() { return addLastAssessmentResultCertificationCourse(); @@ -84,4 +87,4 @@ async function _getLatestAssessmentResultId(certificationCourseId) { return certificationDTO?.lastAssessmentResultId; } -module.exports = { addLastAssessmentResultCertificationCourse }; +export { addLastAssessmentResultCertificationCourse }; diff --git a/api/scripts/certification/fill-pix-certification-status-column-in-certification-courses-table.js b/api/scripts/certification/fill-pix-certification-status-column-in-certification-courses-table.js index 0b3147f8a1d..169e73b52fa 100644 --- a/api/scripts/certification/fill-pix-certification-status-column-in-certification-courses-table.js +++ b/api/scripts/certification/fill-pix-certification-status-column-in-certification-courses-table.js @@ -1,17 +1,24 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const { performance } = require('perf_hooks'); -const logger = require('../../lib/infrastructure/logger'); -const { cache } = require('../../lib/infrastructure/caches/learning-content-cache'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const yargs = require('yargs'); -const bluebird = require('bluebird'); -const { status } = require('../../lib/domain/models/AssessmentResult'); -const readline = require('readline'); +import perf_hooks from 'perf_hooks'; + +const { performance } = perf_hooks; + +import { logger } from '../../lib/infrastructure/logger.js'; +import { learningContentCache as cache } from '../../lib/infrastructure/caches/learning-content-cache.js'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import yargs from 'yargs'; +import bluebird from 'bluebird'; +import { status } from '../../lib/domain/models/AssessmentResult.js'; +import readline from 'readline'; +import * as url from 'url'; + const DEFAULT_COUNT = 20000; const DEFAULT_CONCURRENCY = 2; let progression = 0; + function _logProgression(totalCount) { ++progression; readline.cursorTo(process.stdout, 0); @@ -41,7 +48,9 @@ const updatePixCertificationStatus = async ({ count, concurrency }) => { logger.info(`\n\tOK, ${failedGenerations} générations de codes échouées pour cause de code en doublon`); }; -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +const __filename = modulePath; async function main() { const startTime = performance.now(); @@ -146,4 +155,4 @@ async function _updatePixCertificationStatus(certificationId) { }); } -module.exports = { updatePixCertificationStatus }; +export { updatePixCertificationStatus }; diff --git a/api/scripts/certification/generate-certificate-verification-code.js b/api/scripts/certification/generate-certificate-verification-code.js index 879af777644..90ecb10f15b 100755 --- a/api/scripts/certification/generate-certificate-verification-code.js +++ b/api/scripts/certification/generate-certificate-verification-code.js @@ -1,18 +1,20 @@ -#! /usr/bin/env node /* eslint no-console: ["off"] */ -'use strict'; -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const yargs = require('yargs'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const bluebird = require('bluebird'); -const certificationRepository = require('../../lib/infrastructure/repositories/certification-repository'); -const verifyCertificateCodeService = require('../../lib/domain/services/verify-certificate-code-service'); +import yargs from 'yargs'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import bluebird from 'bluebird'; +import * as certificationRepository from '../../lib/infrastructure/repositories/certification-repository.js'; +import * as verifyCertificateCodeService from '../../lib/domain/services/verify-certificate-code-service.js'; +import * as url from 'url'; + const uniqueConstraintViolationCode = '23505'; const DEFAULT_COUNT = 20000; const DEFAULT_CONCURRENCY = 1; let progression = 0; + function _logProgression(totalCount) { ++progression; process.stdout.cursorTo(0); @@ -83,10 +85,12 @@ function _findEligibleCertifications(count) { async function _generateVerificationCode(certificationId) { const verificationCode = await verifyCertificateCodeService.generateCertificateVerificationCode(); + // eslint-disable-next-line import/namespace return certificationRepository.saveVerificationCode(certificationId, verificationCode); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('Validation des arguments...'); diff --git a/api/scripts/certification/generate-certification-attestations-by-session-ids.js b/api/scripts/certification/generate-certification-attestations-by-session-ids.js index a99a098f06e..e43ac27770a 100644 --- a/api/scripts/certification/generate-certification-attestations-by-session-ids.js +++ b/api/scripts/certification/generate-certification-attestations-by-session-ids.js @@ -1,18 +1,20 @@ -'use strict'; -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const fs = require('fs'); -const bluebird = require('bluebird'); -const isEmpty = require('lodash/isEmpty'); -const compact = require('lodash/compact'); -const logger = require('../../lib/infrastructure/logger'); -const certificateRepository = require('../../lib/infrastructure/repositories/certificate-repository'); -const certificationCourseRepository = require('../../lib/infrastructure/repositories/certification-course-repository'); -const certificationAttestationPdf = require('../../lib/infrastructure/utils/pdf/certification-attestation-pdf'); -const { NotFoundError } = require('../../lib/domain/errors'); -const { cache } = require('../../lib/infrastructure/caches/learning-content-cache'); -const { disconnect } = require('../../db/knex-database-connection'); +import fs from 'fs'; +import bluebird from 'bluebird'; +import lodash from 'lodash'; + +const { isEmpty, compact } = lodash; +import { logger } from '../../lib/infrastructure/logger.js'; +import * as certificateRepository from '../../lib/infrastructure/repositories/certificate-repository.js'; +import * as certificationCourseRepository from '../../lib/infrastructure/repositories/certification-course-repository.js'; +import * as certificationAttestationPdf from '../../lib/infrastructure/utils/pdf/certification-attestation-pdf.js'; +import { NotFoundError } from '../../lib/domain/errors.js'; +import { learningContentCache as cache } from '../../lib/infrastructure/caches/learning-content-cache.js'; +import { disconnect } from '../../db/knex-database-connection.js'; +import * as url from 'url'; /** * Avant de lancer le script, remplacer la variable DATABASE_URL par l'url de la base de réplication @@ -70,8 +72,10 @@ async function main() { logger.info('Fin du script.'); } +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; (async () => { - if (require.main === module) { + if (isLaunchedFromCommandLine) { try { await main(); } catch (error) { diff --git a/api/scripts/certification/generate-certification-csv-results-by-session-ids.js b/api/scripts/certification/generate-certification-csv-results-by-session-ids.js index 892ed0b2aa9..30e37fde71e 100644 --- a/api/scripts/certification/generate-certification-csv-results-by-session-ids.js +++ b/api/scripts/certification/generate-certification-csv-results-by-session-ids.js @@ -1,14 +1,19 @@ -'use strict'; -require('dotenv').config({ path: `${__dirname}/../.env` }); +import * as dotenv from 'dotenv'; -const fs = require('fs'); -const bluebird = require('bluebird'); -const isEmpty = require('lodash/isEmpty'); -const logger = require('../../lib/infrastructure/logger'); -const certificationResultUtils = require('../../lib/infrastructure/utils/csv/certification-results'); -const usecases = require('../../lib/domain/usecases/index.js'); -const temporaryStorage = require('../../lib/infrastructure/temporary-storage/index'); -const { disconnect } = require('../../db/knex-database-connection'); +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +dotenv.config({ path: `${__dirname}/../.env` }); + +import fs from 'fs'; +import bluebird from 'bluebird'; +import lodash from 'lodash'; +const { isEmpty } = lodash; +import { logger } from '../../lib/infrastructure/logger.js'; +import * as certificationResultUtils from '../../lib/infrastructure/utils/csv/certification-results.js'; +import { usecases } from '../../lib/domain/usecases/index.js'; +import { temporaryStorage } from '../../lib/infrastructure/temporary-storage/index.js'; +import { disconnect } from '../../db/knex-database-connection.js'; /** * Avant de lancer le script, remplacer la variable DATABASE_URL par l'url de la base de réplication @@ -47,8 +52,11 @@ async function main() { logger.info('Fin du script.'); } +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; + (async () => { - if (require.main === module) { + if (isLaunchedFromCommandLine) { try { await main(); } catch (error) { diff --git a/api/scripts/certification/generate-certification-results.js b/api/scripts/certification/generate-certification-results.js index 066d173cf95..f555d5e76f9 100644 --- a/api/scripts/certification/generate-certification-results.js +++ b/api/scripts/certification/generate-certification-results.js @@ -1,8 +1,10 @@ -const { knex, disconnect } = require('../../db/knex-database-connection'); +import { knex, disconnect } from '../../db/knex-database-connection.js'; + const ASSESSMENT_COUNT = parseInt(process.env.ASSESSMENT_COUNT) || 100; -const bluebird = require('bluebird'); -const scoringCertificationService = require('../../lib/domain/services/scoring/scoring-certification-service'); -const certificationAssessmentRepository = require('../../lib/infrastructure/repositories/certification-assessment-repository'); +import bluebird from 'bluebird'; +import * as scoringCertificationService from '../../lib/domain/services/scoring/scoring-certification-service.js'; +import * as certificationAssessmentRepository from '../../lib/infrastructure/repositories/certification-assessment-repository.js'; +import * as url from 'url'; async function _retrieveLastScoredAssessmentIds() { const result = await knex.raw( @@ -39,7 +41,8 @@ async function _computeScore(assessmentIds) { return scores; } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.error(`Récupération de ${ASSESSMENT_COUNT} assessments...`); diff --git a/api/scripts/certification/generate-certification-test-statistics.js b/api/scripts/certification/generate-certification-test-statistics.js index 4c0b140ca92..f907400343e 100644 --- a/api/scripts/certification/generate-certification-test-statistics.js +++ b/api/scripts/certification/generate-certification-test-statistics.js @@ -1,15 +1,21 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const _ = require('lodash'); -const fp = require('lodash/fp').convert({ cap: false }); -const bluebird = require('bluebird'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const competenceRepository = require('../../lib/infrastructure/repositories/competence-repository'); -const challengeRepository = require('../../lib/infrastructure/repositories/challenge-repository'); -const placementProfileService = require('../../lib/domain/services/placement-profile-service'); -const certificationChallengeService = require('../../lib/domain/services/certification-challenges-service'); -const { FRENCH_FRANCE } = require('../../lib/domain/constants').LOCALE; +import _ from 'lodash'; + +import originalFp from 'lodash/fp.js'; + +const fp = originalFp.convert({ cap: false }); +import bluebird from 'bluebird'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import * as competenceRepository from '../../lib/infrastructure/repositories/competence-repository.js'; +import * as placementProfileService from '../../lib/domain/services/placement-profile-service.js'; +import * as certificationChallengeService from '../../lib/domain/services/certification-challenges-service.js'; +import { LOCALE } from '../../lib/domain/constants.js'; +import * as url from 'url'; + +const { FRENCH_FRANCE } = LOCALE; const USER_COUNT = parseInt(process.env.USER_COUNT) || 100; const USER_ID = parseInt(process.env.USER_ID) || null; @@ -20,14 +26,6 @@ const USER_ID = parseInt(process.env.USER_ID) || null; // Voir aussi : // - https://1024pix.atlassian.net/wiki/spaces/DEV/pages/1855422507/2020-09-28+G+n+rer+des+stats+sur+les+tests+de+certif -function makeRefDataFaster() { - challengeRepository.list = _.memoize(challengeRepository.findOperative); - competenceRepository.list = _.memoize(competenceRepository.list); - competenceRepository.listPixCompetencesOnly = _.memoize(competenceRepository.listPixCompetencesOnly); -} - -makeRefDataFaster(); - async function _retrieveUserIds() { const result = await knex.raw( ` @@ -80,7 +78,8 @@ function updateProgress() { process.stderr.write('.'); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { let userIds; diff --git a/api/scripts/certification/generate-last-assessments-score.js b/api/scripts/certification/generate-last-assessments-score.js index b241f503f00..485fa009653 100644 --- a/api/scripts/certification/generate-last-assessments-score.js +++ b/api/scripts/certification/generate-last-assessments-score.js @@ -1,10 +1,13 @@ -const { knex, disconnect } = require('../../db/knex-database-connection'); -const _ = require('lodash'); +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import _ from 'lodash'; + const ASSESSMENT_COUNT = parseInt(process.env.ASSESSMENT_COUNT) || 100; const ASSESSMENT_ID = parseInt(process.env.ASSESSMENT_ID) || null; -const bluebird = require('bluebird'); -const scoringCertificationService = require('../../lib/domain/services/scoring/scoring-certification-service'); -const certificationAssessmentRepository = require('../../lib/infrastructure/repositories/certification-assessment-repository'); +import bluebird from 'bluebird'; +import * as scoringCertificationService from '../../lib/domain/services/scoring/scoring-certification-service.js'; +import * as certificationAssessmentRepository from '../../lib/infrastructure/repositories/certification-assessment-repository.js'; +import * as url from 'url'; + async function _retrieveLastScoredAssessmentIds() { const result = await knex.raw( ` @@ -54,7 +57,8 @@ async function _computeScore(assessmentIds) { return scores; } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { let assessmentIds = []; diff --git a/api/scripts/certification/get-cpf-import-status-from-xml.js b/api/scripts/certification/get-cpf-import-status-from-xml.js index 5d5ed8635b5..909a5c0436c 100644 --- a/api/scripts/certification/get-cpf-import-status-from-xml.js +++ b/api/scripts/certification/get-cpf-import-status-from-xml.js @@ -1,15 +1,17 @@ -const fs = require('fs'); -const sax = require('sax'); -const saxPath = require('saxpath'); -const logger = require('../../lib/infrastructure/logger'); +import fs from 'fs'; +import sax from 'sax'; +import saxPath from 'saxpath'; +import { logger } from '../../lib/infrastructure/logger.js'; -const xml2js = require('xml2js'); +import xml2js from 'xml2js'; -const { disconnect } = require('../../db/knex-database-connection'); -const cpfCertificationResultRepository = require('../../lib/infrastructure/repositories/cpf-certification-result-repository'); -const { cpfImportStatus } = require('../../lib/domain/models/CertificationCourse'); +import { disconnect } from '../../db/knex-database-connection.js'; +import * as cpfCertificationResultRepository from '../../lib/infrastructure/repositories/cpf-certification-result-repository.js'; +import { cpfImportStatus } from '../../lib/domain/models/CertificationCourse.js'; +import * as url from 'url'; -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main(path) { logger.info("Récupération des résultats d'import CPF..."); @@ -90,7 +92,4 @@ function getCpfImportResults(filePath) { }); } -module.exports = { - getCpfImportResults, - main, -}; +export { getCpfImportResults, main }; diff --git a/api/scripts/certification/get-results-certifications-old.js b/api/scripts/certification/get-results-certifications-old.js index e93f7ab65b2..ca3b5afa11e 100755 --- a/api/scripts/certification/get-results-certifications-old.js +++ b/api/scripts/certification/get-results-certifications-old.js @@ -1,8 +1,7 @@ -#! /usr/bin/env node - -const request = require('request-promise-native'); -const json2csv = require('json2csv'); -const moment = require('moment-timezone'); +import request from 'request-promise-native'; +import json2csv from 'json2csv'; +import moment from 'moment-timezone'; +import * as url from 'url'; // request.debug = true; const HEADERS = [ @@ -98,15 +97,10 @@ function main() { } /*=================== tests =============================*/ - -if (require.main === module) { +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +if (isLaunchedFromCommandLine) { main(); -} else { - module.exports = { - parseArgs, - toCSVRow, - buildRequestObject, - findCompetence, - HEADERS, - }; } + +export { parseArgs, toCSVRow, buildRequestObject, findCompetence, HEADERS }; diff --git a/api/scripts/certification/get-results-certifications.js b/api/scripts/certification/get-results-certifications.js index c1534fa5229..81dda14fc1b 100755 --- a/api/scripts/certification/get-results-certifications.js +++ b/api/scripts/certification/get-results-certifications.js @@ -1,10 +1,8 @@ -#! /usr/bin/env node - -const fileSystem = require('fs'); - -const request = require('request-promise-native'); -const json2csv = require('json2csv'); -const moment = require('moment-timezone'); +import fileSystem from 'fs'; +import request from 'request-promise-native'; +import json2csv from 'json2csv'; +import moment from 'moment-timezone'; +import * as url from 'url'; const HEADERS = [ 'ID de certification', @@ -181,13 +179,10 @@ function main() { }); } -if (require.main === module) { +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +if (isLaunchedFromCommandLine) { main(); } -module.exports = { - buildCertificationRequest, - toCSVRow, - findCompetence, - buildSessionRequest, -}; +export { buildCertificationRequest, toCSVRow, findCompetence, buildSessionRequest }; diff --git a/api/scripts/certification/get-user-certifications-eligibility.js b/api/scripts/certification/get-user-certifications-eligibility.js index 3bae6e81611..fc22a1cda74 100644 --- a/api/scripts/certification/get-user-certifications-eligibility.js +++ b/api/scripts/certification/get-user-certifications-eligibility.js @@ -1,14 +1,19 @@ -require('dotenv').config({ path: `${__dirname}/../.env` }); -const logger = require('../../lib/infrastructure/logger'); -const usecases = require('../../lib/domain/usecases/index.js'); -const { cache } = require('../../lib/infrastructure/caches/learning-content-cache'); -const placementProfileService = require('../../lib/domain/services/placement-profile-service'); -const certificationBadgesService = require('../../lib/domain/services/certification-badges-service'); +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +import * as dotenv from 'dotenv'; + +dotenv.config({ path: `${__dirname}/../.env` }); + +import { logger } from '../../lib/infrastructure/logger.js'; +import { usecases } from '../../lib/domain/usecases/index.js'; +import { learningContentCache as cache } from '../../lib/infrastructure/caches/learning-content-cache.js'; +import * as placementProfileService from '../../lib/domain/services/placement-profile-service.js'; +import * as certificationBadgesService from '../../lib/domain/services/certification-badges-service.js'; // Usage: node scripts/get-certifications-eligibility 1234 -('use strict'); -const { disconnect } = require('../../db/knex-database-connection'); -const temporaryStorage = require('../../lib/infrastructure/temporary-storage/index'); +import { disconnect } from '../../db/knex-database-connection.js'; +import { temporaryStorage } from '../../lib/infrastructure/temporary-storage/index.js'; async function getUserCertificationsEligibility(userId) { logger.info('Starting script get-user-certifications-eligibility'); @@ -26,7 +31,8 @@ async function getUserCertificationsEligibility(userId) { console.log(`COMPLEMENTAIRES: ${complementaires}`); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { const userId = process.argv[2]; @@ -48,6 +54,4 @@ async function main() { } })(); -module.exports = { - getUserCertificationsEligibility, -}; +export { getUserCertificationsEligibility }; diff --git a/api/scripts/certification/import-certification-cpf-cities.js b/api/scripts/certification/import-certification-cpf-cities.js index d01aa0ce274..dc4a9703397 100644 --- a/api/scripts/certification/import-certification-cpf-cities.js +++ b/api/scripts/certification/import-certification-cpf-cities.js @@ -1,9 +1,7 @@ -#!/usr/bin/env node -// eslint-disable-file node/no-process-exit +import dotenv from 'dotenv'; -const dotenv = require('dotenv'); dotenv.config(); -const logger = require('../../lib/infrastructure/logger'); +import { logger } from '../../lib/infrastructure/logger.js'; /** * Usage: node scripts/import-certification-cpf-cities path/file.csv @@ -14,11 +12,11 @@ const logger = require('../../lib/infrastructure/logger'); * File downloaded from https://www.data.gouv.fr/fr/datasets/base-officielle-des-codes-postaux/ (Export au format CSV) **/ -('use strict'); -const { parseCsv, checkCsvHeader } = require('../helpers/csvHelpers'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const uniqBy = require('lodash/uniqBy'); -const values = require('lodash/values'); +import { parseCsv, checkCsvHeader } from '../helpers/csvHelpers.js'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import lodash from 'lodash'; +const { uniqBy, values } = lodash; +import * as url from 'url'; const wordsToReplace = [ { @@ -393,7 +391,8 @@ function _buildCityNameWithWordReplaced(cityName) { return cityName.replace(entry.regex, ` ${entry.value} `).trim(); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main(filePath) { logger.info('Starting script import-certification-cpf-cities'); @@ -443,7 +442,4 @@ async function main(filePath) { } })(); -module.exports = { - buildCities, - getCitiesWithDistricts, -}; +export { buildCities, getCitiesWithDistricts }; diff --git a/api/scripts/certification/import-certification-cpf-countries.js b/api/scripts/certification/import-certification-cpf-countries.js index 44337adb973..ba2fdca0aee 100755 --- a/api/scripts/certification/import-certification-cpf-countries.js +++ b/api/scripts/certification/import-certification-cpf-countries.js @@ -1,14 +1,12 @@ -#!/usr/bin/env node - // Usage: node import-certification-cpf-countries.js path/file.csv // File Millésime 2021 : Liste des pays et territoires étrangers au 01/01/2021 // downloaded from https://www.data.gouv.fr/fr/datasets/code-officiel-geographique-cog/ -'use strict'; -const { parseCsv } = require('../helpers/csvHelpers'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const { normalizeAndSortChars } = require('../../lib/infrastructure/utils/string-utils'); -const _ = require('lodash'); +import { parseCsv } from '../helpers/csvHelpers.js'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import { normalizeAndSortChars } from '../../lib/infrastructure/utils/string-utils.js'; +import _ from 'lodash'; +import * as url from 'url'; const CURRENT_NAME_COLUMN = 'LIBCOG'; const ALTERNATIVE_NAME_COLUMN = 'LIBENR'; @@ -75,7 +73,8 @@ function checkTransformUnicity(countries) { if (hasError) throw new Error('There are more than 1 transformed name with distinct code'); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main(filePath) { console.log('Starting script import-certification-cpf-countries'); @@ -121,7 +120,4 @@ async function main(filePath) { } })(); -module.exports = { - buildCountries, - checkTransformUnicity, -}; +export { buildCountries, checkTransformUnicity }; diff --git a/api/scripts/certification/import-certifications-from-csv.js b/api/scripts/certification/import-certifications-from-csv.js index f0fe648b0f8..fef4e2be4f4 100755 --- a/api/scripts/certification/import-certifications-from-csv.js +++ b/api/scripts/certification/import-certifications-from-csv.js @@ -1,8 +1,9 @@ -const path = require('path'); -const fs = require('fs'); -const request = require('request-promise-native'); -const papa = require('papaparse'); -const { disconnect } = require('../../db/knex-database-connection'); +import path from 'path'; +import fs from 'fs'; +import request from 'request-promise-native'; +import papa from 'papaparse'; +import { disconnect } from '../../db/knex-database-connection.js'; +import * as url from 'url'; const CSV_HEADERS = { ID: 'ID de certification', @@ -117,7 +118,8 @@ function _logErrorObjects(errorObjects) { }); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; /** * Usage: node import-certifications-from-csv.js http://localhost:3000 jwt.access.token my_file.csv @@ -152,8 +154,4 @@ function main() { } })(); -module.exports = { - assertFileValidity, - convertCSVDataIntoCertifications, - saveCertifications, -}; +export { assertFileValidity, convertCSVDataIntoCertifications, saveCertifications }; diff --git a/api/scripts/certification/launch-auto-jury-for-session.js b/api/scripts/certification/launch-auto-jury-for-session.js index 218213e67dd..eb6d8f9c17a 100644 --- a/api/scripts/certification/launch-auto-jury-for-session.js +++ b/api/scripts/certification/launch-auto-jury-for-session.js @@ -1,17 +1,19 @@ -'use strict'; -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const SessionFinalized = require('../../lib/domain/events/SessionFinalized'); -const certificationAssessmentRepository = require('../../lib/infrastructure/repositories/certification-assessment-repository'); -const challengeRepository = require('../../lib/infrastructure/repositories/challenge-repository'); -const certificationIssueReportRepository = require('../../lib/infrastructure/repositories/certification-issue-report-repository'); -const certificationCourseRepository = require('../../lib/infrastructure/repositories/certification-course-repository'); -const handleAutoJury = require('../../lib/domain/events/handle-auto-jury'); -const events = require('../../lib/domain/events/index.js'); -const logger = require('../../lib/infrastructure/logger'); +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import { SessionFinalized } from '../../lib/domain/events/SessionFinalized.js'; +import * as certificationAssessmentRepository from '../../lib/infrastructure/repositories/certification-assessment-repository.js'; +import * as challengeRepository from '../../lib/infrastructure/repositories/challenge-repository.js'; +import * as certificationIssueReportRepository from '../../lib/infrastructure/repositories/certification-issue-report-repository.js'; +import * as certificationCourseRepository from '../../lib/infrastructure/repositories/certification-course-repository.js'; +import { handleAutoJury } from '../../lib/domain/events/handle-auto-jury.js'; +import * as events from '../../lib/domain/events/index.js'; +import { logger } from '../../lib/infrastructure/logger.js'; +import * as url from 'url'; -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { const id = process.argv[2]; diff --git a/api/scripts/certification/trigger-autojury-on-finalized-sessions.js b/api/scripts/certification/trigger-autojury-on-finalized-sessions.js index 7c651471149..ef489059685 100644 --- a/api/scripts/certification/trigger-autojury-on-finalized-sessions.js +++ b/api/scripts/certification/trigger-autojury-on-finalized-sessions.js @@ -1,13 +1,15 @@ -const { knex, disconnect } = require('../../db/knex-database-connection'); -const bluebird = require('bluebird'); -const handleAutoJury = require('../../lib/domain/events/handle-auto-jury'); -const certificationIssueReportRepository = require('../../lib/infrastructure/repositories/certification-issue-report-repository'); -const certificationAssessmentRepository = require('../../lib/infrastructure/repositories/certification-assessment-repository'); -const certificationCourseRepository = require('../../lib/infrastructure/repositories/certification-course-repository'); -const challengeRepository = require('../../lib/infrastructure/repositories/challenge-repository'); -const logger = require('../../lib/infrastructure/logger'); -const SessionFinalized = require('../../lib/domain/events/SessionFinalized'); -const { eventDispatcher } = require('../../lib/domain/events/index.js'); +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import bluebird from 'bluebird'; +import { handleAutoJury } from '../../lib/domain/events/handle-auto-jury.js'; +import * as certificationIssueReportRepository from '../../lib/infrastructure/repositories/certification-issue-report-repository.js'; +import * as certificationAssessmentRepository from '../../lib/infrastructure/repositories/certification-assessment-repository.js'; +import * as certificationCourseRepository from '../../lib/infrastructure/repositories/certification-course-repository.js'; +import * as challengeRepository from '../../lib/infrastructure/repositories/challenge-repository.js'; +import { logger } from '../../lib/infrastructure/logger.js'; +import { SessionFinalized } from '../../lib/domain/events/SessionFinalized.js'; +import { eventDispatcher } from '../../lib/domain/events/index.js'; +import * as url from 'url'; + const IS_FROM_SCRATCH = process.env.IS_FROM_SCRATCH === 'true'; const AUDIT_TABLE = 'autojury-script-audit'; @@ -138,7 +140,8 @@ async function _toRetry(sessionId, error) { .where({ sessionId }); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { let finalizedSessionEvents; diff --git a/api/scripts/certification/update-certification-infos.js b/api/scripts/certification/update-certification-infos.js index 5df34d1b3e0..51dad658e89 100644 --- a/api/scripts/certification/update-certification-infos.js +++ b/api/scripts/certification/update-certification-infos.js @@ -1,8 +1,15 @@ -require('dotenv').config({ path: `${__dirname}/../.env` }); +import * as url from 'url'; -const bluebird = require('bluebird'); -const { readFile } = require('fs/promises'); -const logger = require('../../lib/infrastructure/logger'); +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +import * as dotenv from 'dotenv'; + +dotenv.config({ path: `${__dirname}/../.env` }); + +import bluebird from 'bluebird'; + +import { readFile } from 'fs/promises'; + +import { logger } from '../../lib/infrastructure/logger.js'; // Usage: node scripts/update-certifications-infos path/data.csv path/sessionsId.csv // data.csv // #externalId,birthdate,birthINSEECode,birthPostalCode,birthCity,birthCountry @@ -10,10 +17,10 @@ const logger = require('../../lib/infrastructure/logger'); // sessionsId.csv // 1,12,30 -('use strict'); -const { parseCsv, checkCsvHeader } = require('../helpers/csvHelpers'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const values = require('lodash/values'); +import { parseCsv, checkCsvHeader } from '../helpers/csvHelpers.js'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import lodash from 'lodash'; +const { values } = lodash; const headers = { externalId: 'externalId', @@ -107,7 +114,8 @@ async function updateCertificationInfos(dataFilePath, sessionIdsFilePath) { logger.info('Done.'); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { const dataFilePath = process.argv[2]; @@ -128,7 +136,4 @@ async function main() { } })(); -module.exports = { - updateCertificationInfos, - headers, -}; +export { updateCertificationInfos, headers }; diff --git a/api/scripts/certification/verify-certificate-code-service_script.js b/api/scripts/certification/verify-certificate-code-service_script.js index f9223bfc72f..f0cbbf56625 100644 --- a/api/scripts/certification/verify-certificate-code-service_script.js +++ b/api/scripts/certification/verify-certificate-code-service_script.js @@ -1,6 +1,9 @@ -const _ = require('lodash'); -const verifyCertificationCodeService = require('../../lib/domain/services/verify-certificate-code-service'); -const verifyCertificateCodeRepository = require('../../../../lib/infrastructure/repositories/verify-certificate-code-repository'); +// eslint-disable-next-line eslint-comments/disable-enable-pair +/* eslint-disable import/namespace */ +import _ from 'lodash'; +import * as verifyCertificationCodeService from '../../lib/domain/services/verify-certificate-code-service.js'; +// eslint-disable-next-line node/no-missing-import, import/no-unresolved, node/no-unpublished-import +import * as verifyCertificateCodeRepository from '../../../../lib/infrastructure/repositories/verify-certificate-code-repository.js'; const addCertification = async () => { const code = await verifyCertificationCodeService.getNewVerifyCertificationCode(); diff --git a/api/scripts/clean-anonymized-users-authentication-methods.js b/api/scripts/clean-anonymized-users-authentication-methods.js index 7dc41937418..88646fdcd62 100644 --- a/api/scripts/clean-anonymized-users-authentication-methods.js +++ b/api/scripts/clean-anonymized-users-authentication-methods.js @@ -1,12 +1,16 @@ -'use strict'; -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const _ = require('lodash'); -const bluebird = require('bluebird'); -const { disconnect } = require('../db/knex-database-connection'); -const { parseCsvWithHeader } = require('./helpers/csvHelpers'); -const authenticationMethodRepository = require('../lib/infrastructure/repositories/authentication-method-repository'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import { disconnect } from '../db/knex-database-connection.js'; +import { parseCsvWithHeader } from './helpers/csvHelpers.js'; +import * as authenticationMethodRepository from '../lib/infrastructure/repositories/authentication-method-repository.js'; +import * as url from 'url'; + +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function cleanAnonymizedAuthenticationMethods({ arrayOfAnonymizedUsersIds }) { const anonymizedUserIdsWithAuthenticationMethodsDeleted = []; @@ -21,8 +25,6 @@ async function cleanAnonymizedAuthenticationMethods({ arrayOfAnonymizedUsersIds return anonymizedUserIdsWithAuthenticationMethodsDeleted; } -const isLaunchedFromCommandLine = require.main === module; - async function main() { console.log('Starting deleting anonymized users authentication methods'); @@ -60,4 +62,4 @@ async function main() { } })(); -module.exports = { cleanAnonymizedAuthenticationMethods }; +export { cleanAnonymizedAuthenticationMethods }; diff --git a/api/scripts/compare-pix-with-latest-release.js b/api/scripts/compare-pix-with-latest-release.js index 16e9da6be6a..d3e2029cd35 100644 --- a/api/scripts/compare-pix-with-latest-release.js +++ b/api/scripts/compare-pix-with-latest-release.js @@ -1,15 +1,15 @@ -const dotenv = require('dotenv'); -dotenv.config(); -const _ = require('lodash'); -const calculateScoringInformationForCompetence = - require('../lib/domain/services/scoring/scoring-service').calculateScoringInformationForCompetence; -const buildKnowledgeElement = require('../db/database-builder/factory/build-knowledge-element'); -const tubeRepository = require('../lib/infrastructure/repositories/tube-repository'); -const skillRepository = require('../lib/infrastructure/repositories/skill-repository'); -const knowledgeElementRepository = require('../lib/infrastructure/repositories/knowledge-element-repository'); -const { cache } = require('../lib/infrastructure/caches/learning-content-cache'); +import dotenv from 'dotenv'; +import * as url from 'url'; -const { disconnect } = require('../db/knex-database-connection'); +dotenv.config(); +import _ from 'lodash'; +import { calculateScoringInformationForCompetence } from '../lib/domain/services/scoring/scoring-service.js'; +import { buildKnowledgeElement } from '../db/database-builder/factory/build-knowledge-element.js'; +import * as tubeRepository from '../lib/infrastructure/repositories/tube-repository.js'; +import * as skillRepository from '../lib/infrastructure/repositories/skill-repository.js'; +import * as knowledgeElementRepository from '../lib/infrastructure/repositories/knowledge-element-repository.js'; +import { learningContentCache as cache } from '../lib/infrastructure/caches/learning-content-cache.js'; +import { disconnect } from '../db/knex-database-connection.js'; async function getUserSkillsGroupedByTubeId(elements) { const ids = _.map(elements, (current) => current.skillId); @@ -120,7 +120,7 @@ async function main(userId) { console.log(result); } -module.exports = { +export { compareUserScoreWithLatestRelease, getUserValidatedKnowledgeElements, getUserSkillsGroupedByTubeId, @@ -128,4 +128,10 @@ module.exports = { getTubeByIds, }; -main(parseInt(process.argv[2])); +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +async () => { + if (isLaunchedFromCommandLine) { + await main(parseInt(process.argv[2])); + } +}; diff --git a/api/scripts/create-badge-criteria-for-specified-badge.js b/api/scripts/create-badge-criteria-for-specified-badge.js index 522b0122e5c..2894242f070 100644 --- a/api/scripts/create-badge-criteria-for-specified-badge.js +++ b/api/scripts/create-badge-criteria-for-specified-badge.js @@ -1,13 +1,14 @@ -('use strict'); -const Joi = require('joi'); -const bluebird = require('bluebird'); -const { NotFoundError } = require('../lib/domain/errors'); -const BadgeCriterion = require('../lib/domain/models/BadgeCriterion'); -const badgeRepository = require('../lib/infrastructure/repositories/badge-repository'); -const badgeCriteriaRepository = require('../lib/infrastructure/repositories/badge-criteria-repository'); -const skillSetRepository = require('../lib/infrastructure/repositories/skill-set-repository'); -const DomainTransaction = require('../lib/infrastructure/DomainTransaction'); -const { knex, disconnect } = require('../db/knex-database-connection'); +import Joi from 'joi'; +import bluebird from 'bluebird'; +import { NotFoundError } from '../lib/domain/errors.js'; +import { BadgeCriterion } from '../lib/domain/models/BadgeCriterion.js'; +import * as badgeRepository from '../lib/infrastructure/repositories/badge-repository.js'; +import * as badgeCriteriaRepository from '../lib/infrastructure/repositories/badge-criteria-repository.js'; +import * as skillSetRepository from '../lib/infrastructure/repositories/skill-set-repository.js'; +import { DomainTransaction } from '../lib/infrastructure/DomainTransaction.js'; +import { knex, disconnect } from '../db/knex-database-connection.js'; +import { readFile } from 'fs/promises'; +import * as url from 'url'; // Usage: node scripts/create-badge-criteria-for-specified-badge path/data.json // data.json @@ -86,7 +87,8 @@ async function copySkillSets({ skillSetIds, newBadgeId }) { }); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('Starting creating badge criteria'); @@ -94,7 +96,7 @@ async function main() { const filePath = process.argv[2]; console.log('Reading json data file... '); - const jsonFile = require(filePath); + const jsonFile = await readFile(filePath); console.log('ok'); await checkBadgeExistence(jsonFile.badgeId); @@ -133,4 +135,4 @@ async function main() { } })(); -module.exports = { checkBadgeExistence, checkCriteriaFormat, checkSkillSetIds, copySkillSets }; +export { checkBadgeExistence, checkCriteriaFormat, checkSkillSetIds, copySkillSets }; diff --git a/api/scripts/create-certification-center-memberships-from-organization-admins.js b/api/scripts/create-certification-center-memberships-from-organization-admins.js index 79bbcde17dc..546ea58244a 100644 --- a/api/scripts/create-certification-center-memberships-from-organization-admins.js +++ b/api/scripts/create-certification-center-memberships-from-organization-admins.js @@ -1,13 +1,10 @@ -'use strict'; +import _ from 'lodash'; +import bluebird from 'bluebird'; -const _ = require('lodash'); -const bluebird = require('bluebird'); - -const { parseCsvWithHeader } = require('./helpers/csvHelpers'); - -const Membership = require('../lib/domain/models/Membership'); - -const { knex, disconnect } = require('../db/knex-database-connection'); +import { parseCsvWithHeader } from './helpers/csvHelpers.js'; +import { Membership } from '../lib/domain/models/Membership.js'; +import { knex, disconnect } from '../db/knex-database-connection.js'; +import * as url from 'url'; async function getCertificationCenterIdWithMembershipsUserIdByExternalId(externalId) { const certificationCenterIdWithMemberships = await knex('certification-centers') @@ -73,7 +70,8 @@ async function createCertificationCenterMemberships(certificationCenterMembershi return knex.batchInsert('certification-center-memberships', certificationCenterMemberships); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('Starting creating Certification Center memberships with a list of ExternalIds.'); @@ -106,7 +104,7 @@ async function main() { } })(); -module.exports = { +export { getCertificationCenterIdWithMembershipsUserIdByExternalId, getAdminMembershipsUserIdByOrganizationExternalId, buildCertificationCenterMemberships, diff --git a/api/scripts/create-or-update-sco-agri-organizations.js b/api/scripts/create-or-update-sco-agri-organizations.js index c7dcb7d6c3f..4dded2116b1 100644 --- a/api/scripts/create-or-update-sco-agri-organizations.js +++ b/api/scripts/create-or-update-sco-agri-organizations.js @@ -1,23 +1,25 @@ // Usage: scalingo scalingo --region osc-secnum-fr1 -a pix-api-production run --file file.csv node scripts/create-or-update-sco-agri-organizations.js /tmp/uploads/file.csv // To use on file with columns |externalId, name, email| (email is optional) -'use strict'; -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const logoUrl = require('./logo/default-sco-agri-organization-logo-base64'); -const { +import { logoUrl } from './logo/default-sco-agri-organization-logo-base64.js'; +import { findOrganizationsByExternalIds, organizeOrganizationsByExternalId, -} = require('./helpers/organizations-by-external-id-helper'); -const { parseCsv } = require('./helpers/csvHelpers'); -const Organization = require('../lib/domain/models/Organization'); -const Tag = require('../lib/domain/models/Tag'); -const OrganizationTag = require('../lib/domain/models/OrganizationTag'); -const organizationRepository = require('../lib/infrastructure/repositories/organization-repository'); -const tagRepository = require('../lib/infrastructure/repositories/tag-repository'); -const organizationTagRepository = require('../lib/infrastructure/repositories/organization-tag-repository'); -const { disconnect } = require('../db/knex-database-connection'); +} from './helpers/organizations-by-external-id-helper.js'; +import { parseCsv } from './helpers/csvHelpers.js'; +import { Organization } from '../lib/domain/models/Organization.js'; +import { Tag } from '../lib/domain/models/Tag.js'; +import { OrganizationTag } from '../lib/domain/models/OrganizationTag.js'; +import * as organizationRepository from '../lib/infrastructure/repositories/organization-repository.js'; +import * as tagRepository from '../lib/infrastructure/repositories/tag-repository.js'; +import * as organizationTagRepository from '../lib/infrastructure/repositories/organization-tag-repository.js'; +import { disconnect } from '../db/knex-database-connection.js'; + +import * as url from 'url'; const TAG_NAME = 'AGRICULTURE'; @@ -27,15 +29,15 @@ function checkData({ csvData }) { const [externalIdLowerCase, name, email] = data; if (!externalIdLowerCase && !name) { - if (require.main === module) process.stdout.write('Found empty line in input file.'); + if (isLaunchedFromCommandLine) process.stdout.write('Found empty line in input file.'); return null; } if (!externalIdLowerCase) { - if (require.main === module) process.stdout.write(`A line is missing an externalId for name ${name}`); + if (isLaunchedFromCommandLine) process.stdout.write(`A line is missing an externalId for name ${name}`); return null; } if (!name) { - if (require.main === module) + if (isLaunchedFromCommandLine) process.stdout.write(`A line is missing a name for external id ${externalIdLowerCase}`); return null; } @@ -57,7 +59,7 @@ function checkData({ csvData }) { async function createOrUpdateOrganizations({ organizationsByExternalId, checkedData }) { const createdOrUpdatedOrganizations = []; for (let i = 0; i < checkedData.length; i++) { - if (require.main === module) process.stdout.write(`\n${i + 1}/${checkedData.length} `); + if (isLaunchedFromCommandLine) process.stdout.write(`\n${i + 1}/${checkedData.length} `); const { externalId, name, email } = checkedData[i]; let organization = organizationsByExternalId[externalId]; @@ -104,7 +106,8 @@ async function addTag(organizations) { } } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('Starting creating or updating SCO AGRICULTURE organizations.'); @@ -147,8 +150,4 @@ async function main() { } })(); -module.exports = { - addTag, - checkData, - createOrUpdateOrganizations, -}; +export { addTag, checkData, createOrUpdateOrganizations }; diff --git a/api/scripts/create-or-update-sco-organizations.js b/api/scripts/create-or-update-sco-organizations.js index fbf92bfe178..97113252137 100644 --- a/api/scripts/create-or-update-sco-organizations.js +++ b/api/scripts/create-or-update-sco-organizations.js @@ -1,18 +1,19 @@ // Usage: BASE_URL=... PIXMASTER_EMAIL=... PIXMASTER_PASSWORD=... node create-or-update-sco-organizations.js path/file.csv // To use on file with columns |externalId, name| -'use strict'; -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const request = require('request-promise-native'); +import request from 'request-promise-native'; -const logoUrl = require('./logo/default-sco-organization-logo-base64'); -const { +import { logoUrl } from './logo/default-sco-organization-logo-base64.js'; +import { findOrganizationsByExternalIds, organizeOrganizationsByExternalId, -} = require('./helpers/organizations-by-external-id-helper'); -const { parseCsv } = require('./helpers/csvHelpers'); -const { disconnect } = require('../db/knex-database-connection'); +} from './helpers/organizations-by-external-id-helper.js'; +import { parseCsv } from './helpers/csvHelpers.js'; +import { disconnect } from '../db/knex-database-connection.js'; +import * as url from 'url'; const baseUrl = process.env.BASE_URL || 'http://localhost:3000'; @@ -22,15 +23,15 @@ function checkData({ csvData }) { const [externalIdLowerCase, name] = data; if (!externalIdLowerCase && !name) { - if (require.main === module) process.stdout.write('Found empty line in input file.'); + if (isLaunchedFromCommandLine) process.stdout.write('Found empty line in input file.'); return null; } if (!externalIdLowerCase) { - if (require.main === module) process.stdout.write(`A line is missing an externalId for name ${name}`); + if (isLaunchedFromCommandLine) process.stdout.write(`A line is missing an externalId for name ${name}`); return null; } if (!name) { - if (require.main === module) + if (isLaunchedFromCommandLine) process.stdout.write(`A line is missing a name for external id ${externalIdLowerCase}`); return null; } @@ -43,7 +44,7 @@ function checkData({ csvData }) { async function createOrUpdateOrganizations({ accessToken, organizationsByExternalId, checkedData }) { for (let i = 0; i < checkedData.length; i++) { - if (require.main === module) process.stdout.write(`\n${i + 1}/${checkedData.length} `); + if (isLaunchedFromCommandLine) process.stdout.write(`\n${i + 1}/${checkedData.length} `); const { externalId, name } = checkedData[i]; const organization = organizationsByExternalId[externalId]; @@ -126,7 +127,8 @@ function _buildPostOrganizationRequestObject(accessToken, organization) { }; } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('Starting creating or updating SCO organizations.'); @@ -169,7 +171,4 @@ async function main() { } })(); -module.exports = { - checkData, - createOrUpdateOrganizations, -}; +export { checkData, createOrUpdateOrganizations }; diff --git a/api/scripts/create-organizations-with-tags-and-target-profiles.js b/api/scripts/create-organizations-with-tags-and-target-profiles.js index d12d4d9c63e..a79d09e9b37 100644 --- a/api/scripts/create-organizations-with-tags-and-target-profiles.js +++ b/api/scripts/create-organizations-with-tags-and-target-profiles.js @@ -1,23 +1,24 @@ // Usage: node create-organizations-with-tags-and-target-profiles.js path/file.csv // To use on file with columns |type, externalId, name, provinceCode, credit, emailInvitations, emailForSCOActivation, organizationInvitationRole, locale, tags, createdBy, targetProfiles, isManagingStudents, identityProviderForCampaigns, DPOFirstName, DPOLastName, DPOEmail| -'use strict'; -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const { checkCsvHeader, parseCsvWithHeader } = require('./helpers/csvHelpers'); +import { checkCsvHeader, parseCsvWithHeader } from './helpers/csvHelpers.js'; +import { temporaryStorage } from '../lib/infrastructure/temporary-storage/index.js'; +import { createOrganizationsWithTagsAndTargetProfiles } from '../lib/domain/usecases/create-organizations-with-tags-and-target-profiles.js'; +import { DomainTransaction as domainTransaction } from '../lib/infrastructure/DomainTransaction.js'; +import * as organizationInvitationRepository from '../lib/infrastructure/repositories/organization-invitation-repository.js'; +import * as organizationRepository from '../lib/infrastructure/repositories/organization-repository.js'; +import * as dataProtectionOfficerRepository from '../lib/infrastructure/repositories/data-protection-officer-repository.js'; +import * as organizationTagRepository from '../lib/infrastructure/repositories/organization-tag-repository.js'; +import * as tagRepository from '../lib/infrastructure/repositories/tag-repository.js'; +import * as targetProfileShareRepository from '../lib/infrastructure/repositories/target-profile-share-repository.js'; +import { disconnect } from '../db/knex-database-connection.js'; +import lodash from 'lodash'; -const { temporaryStorage } = require('../lib/infrastructure/temporary-storage/index.js'); -const createOrganizationsWithTagsAndTargetProfiles = require('../lib/domain/usecases/create-organizations-with-tags-and-target-profiles'); -const domainTransaction = require('../lib/infrastructure/DomainTransaction'); -const organizationInvitationRepository = require('../lib/infrastructure/repositories/organization-invitation-repository'); -const organizationRepository = require('../lib/infrastructure/repositories/organization-repository'); -const dataProtectionOfficerRepository = require('../lib/infrastructure/repositories/data-protection-officer-repository'); -const organizationTagRepository = require('../lib/infrastructure/repositories/organization-tag-repository'); -const tagRepository = require('../lib/infrastructure/repositories/tag-repository'); -const targetProfileShareRepository = require('../lib/infrastructure/repositories/target-profile-share-repository'); -const { disconnect } = require('../db/knex-database-connection'); -const { isEmpty } = require('lodash'); +const { isEmpty } = lodash; const REQUIRED_FIELD_NAMES = [ 'type', @@ -112,7 +113,10 @@ async function createOrganizationWithTagsAndTargetProfiles(filePath) { }); } -const isLaunchedFromCommandLine = require.main === module; +import * as url from 'url'; + +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('Starting creating PRO organizations with tags and target profiles.'); @@ -137,7 +141,4 @@ async function main() { } })(); -module.exports = { - createOrganizationWithTagsAndTargetProfiles, - batchOrganizationOptionsWithHeader, -}; +export { createOrganizationWithTagsAndTargetProfiles, batchOrganizationOptionsWithHeader }; diff --git a/api/scripts/create-sco-certification-centers.js b/api/scripts/create-sco-certification-centers.js index 3ed23e9f9da..c66a6d08e5c 100644 --- a/api/scripts/create-sco-certification-centers.js +++ b/api/scripts/create-sco-certification-centers.js @@ -1,7 +1,6 @@ -const { parseCsvWithHeader } = require('./helpers/csvHelpers'); - -const Bookshelf = require('../lib/infrastructure/bookshelf'); -const { disconnect } = require('../db/knex-database-connection'); +import { parseCsvWithHeader } from './helpers/csvHelpers.js'; +import { Bookshelf } from '../lib/infrastructure/bookshelf.js'; +import { disconnect } from '../db/knex-database-connection.js'; function prepareDataForInsert(rawCertificationCenters) { return rawCertificationCenters.map(({ name, uai }) => { @@ -17,7 +16,10 @@ function createScoCertificationCenters(certificationCenters) { return Bookshelf.knex.batchInsert('certification-centers', certificationCenters); } -const isLaunchedFromCommandLine = require.main === module; +import * as url from 'url'; + +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('Starting creating SCO certification centers.'); @@ -50,7 +52,4 @@ async function main() { } })(); -module.exports = { - prepareDataForInsert, - createScoCertificationCenters, -}; +export { prepareDataForInsert, createScoCertificationCenters }; diff --git a/api/scripts/create-users-accounts-for-contest.js b/api/scripts/create-users-accounts-for-contest.js index 17668c299bb..398c6d3ff81 100644 --- a/api/scripts/create-users-accounts-for-contest.js +++ b/api/scripts/create-users-accounts-for-contest.js @@ -1,10 +1,11 @@ -const { parseCsvWithHeader } = require('./helpers/csvHelpers'); -const bluebird = require('bluebird'); -const userToCreateRepository = require('../lib/infrastructure/repositories/user-to-create-repository'); -const authenticationMethodRepository = require('../lib/infrastructure/repositories/authentication-method-repository'); -const userService = require('../lib/domain/services/user-service'); -const encryptionService = require('../lib/domain/services/encryption-service'); -const { disconnect } = require('../db/knex-database-connection'); +import { parseCsvWithHeader } from './helpers/csvHelpers.js'; +import bluebird from 'bluebird'; +import * as userToCreateRepository from '../lib/infrastructure/repositories/user-to-create-repository.js'; +import * as authenticationMethodRepository from '../lib/infrastructure/repositories/authentication-method-repository.js'; +import * as userService from '../lib/domain/services/user-service.js'; +import * as encryptionService from '../lib/domain/services/encryption-service.js'; +import { disconnect } from '../db/knex-database-connection.js'; +import * as url from 'url'; function prepareDataForInsert(rawUsers) { return rawUsers.map(({ firstName, lastName, email, password }) => { @@ -40,7 +41,8 @@ async function createUsers({ usersInRaw }) { }); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('Starting creating users accounts for contest.'); @@ -73,7 +75,4 @@ async function main() { } })(); -module.exports = { - prepareDataForInsert, - createUsers, -}; +export { prepareDataForInsert, createUsers }; diff --git a/api/scripts/data-generation/add-many-divisions-and-students-to-sco-organization.js b/api/scripts/data-generation/add-many-divisions-and-students-to-sco-organization.js index 187ca70f2e9..38ec220699f 100644 --- a/api/scripts/data-generation/add-many-divisions-and-students-to-sco-organization.js +++ b/api/scripts/data-generation/add-many-divisions-and-students-to-sco-organization.js @@ -1,8 +1,9 @@ -const _ = require('lodash'); -const randomString = require('randomstring'); -const OrganizationLearner = require('../../lib/domain/models/OrganizationLearner'); -const { OrganizationLearnersCouldNotBeSavedError } = require('../../lib/domain/errors'); -const { knex, disconnect } = require('../../db/knex-database-connection'); +import _ from 'lodash'; +import randomString from 'randomstring'; +import { OrganizationLearner } from '../../lib/domain/models/OrganizationLearner.js'; +import { OrganizationLearnersCouldNotBeSavedError } from '../../lib/domain/errors.js'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import * as url from 'url'; function _buildOrganizationLearner(division, organizationId, iteration) { const birthdates = ['2001-01-05', '2002-11-15', '1995-06-25']; @@ -48,7 +49,8 @@ async function addManyDivisionsAndStudentsToScoCertificationCenter(numberOfDivis } } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('Starting adding SCO students to certification center.'); @@ -74,6 +76,4 @@ async function main() { } })(); -module.exports = { - addManyDivisionsAndStudentsToScoCertificationCenter, -}; +export { addManyDivisionsAndStudentsToScoCertificationCenter }; diff --git a/api/scripts/data-generation/add-many-fake-members-related-to-one-organization.js b/api/scripts/data-generation/add-many-fake-members-related-to-one-organization.js index 05ec6beb3c1..f665f451884 100644 --- a/api/scripts/data-generation/add-many-fake-members-related-to-one-organization.js +++ b/api/scripts/data-generation/add-many-fake-members-related-to-one-organization.js @@ -1,7 +1,9 @@ -const DomainTransaction = require('../../lib/infrastructure/DomainTransaction'); -const { MembershipUpdateError, UserCantBeCreatedError, ForbiddenAccess } = require('../../lib/domain/errors'); -const times = require('lodash/times'); -const { knex, disconnect } = require('../../db/knex-database-connection'); +import { DomainTransaction } from '../../lib/infrastructure/DomainTransaction.js'; +import { MembershipUpdateError, UserCantBeCreatedError, ForbiddenAccess } from '../../lib/domain/errors.js'; +import lodash from 'lodash'; +const { times } = lodash; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import * as url from 'url'; const INITIAL_ID = 300000; @@ -60,7 +62,8 @@ async function addManyMembersToExistingOrganization({ numberOfUsers }) { } } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { const numberOfUsers = process.argv[2]; @@ -90,6 +93,4 @@ async function main() { } })(); -module.exports = { - addManyMembersToExistingOrganization, -}; +export { addManyMembersToExistingOrganization }; diff --git a/api/scripts/data-generation/add-many-students-to-sco-certification-center.js b/api/scripts/data-generation/add-many-students-to-sco-certification-center.js index c42401a3bad..ad4b76c90f9 100644 --- a/api/scripts/data-generation/add-many-students-to-sco-certification-center.js +++ b/api/scripts/data-generation/add-many-students-to-sco-certification-center.js @@ -1,9 +1,10 @@ -const _ = require('lodash'); -const { SCO_MIDDLE_SCHOOL_ID } = require('../../db/seeds/data/organizations-sco-builder'); -const OrganizationLearner = require('../../lib/domain/models/OrganizationLearner'); -const { OrganizationLearnersCouldNotBeSavedError } = require('../../lib/domain/errors'); -const DomainTransaction = require('../../lib/infrastructure/DomainTransaction'); -const { knex, disconnect } = require('../../db/knex-database-connection'); +import _ from 'lodash'; +import { SCO_MIDDLE_SCHOOL_ID } from '../../db/seeds/data/organizations-sco-builder.js'; +import { OrganizationLearner } from '../../lib/domain/models/OrganizationLearner.js'; +import { OrganizationLearnersCouldNotBeSavedError } from '../../lib/domain/errors.js'; +import { DomainTransaction } from '../../lib/infrastructure/DomainTransaction.js'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import * as url from 'url'; function _buildOrganizationLearner(iteration) { const birthdates = ['2001-01-05', '2002-11-15', '1995-06-25']; @@ -28,7 +29,8 @@ async function addManyStudentsToScoCertificationCenter(numberOfStudents) { } } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('Starting adding SCO students to certification center.'); @@ -53,6 +55,4 @@ async function main() { } })(); -module.exports = { - addManyStudentsToScoCertificationCenter, -}; +export { addManyStudentsToScoCertificationCenter }; diff --git a/api/scripts/data-generation/generate-campaign-with-participants.js b/api/scripts/data-generation/generate-campaign-with-participants.js index 09a170e5abd..acb4e70dae6 100644 --- a/api/scripts/data-generation/generate-campaign-with-participants.js +++ b/api/scripts/data-generation/generate-campaign-with-participants.js @@ -1,19 +1,24 @@ -require('dotenv').config({ path: `${__dirname}/../../.env` }); - -const _ = require('lodash'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const { learningContentCache: cache } = require('../../lib/infrastructure/caches/learning-content-cache'); -const moment = require('moment'); -const competenceRepository = require('../../lib/infrastructure/repositories/competence-repository'); -const skillRepository = require('../../lib/infrastructure/repositories/skill-repository'); -const campaignRepository = require('../../lib/infrastructure/repositories/campaign-repository'); -const CampaignParticipationStatuses = require('../../lib/domain/models/CampaignParticipationStatuses'); -const computeParticipationResults = require('../prod/compute-participation-results'); -const { +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +import * as dotenv from 'dotenv'; + +dotenv.config({ path: `${__dirname}/../../.env` }); + +import _ from 'lodash'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import { learningContentCache as cache } from '../../lib/infrastructure/caches/learning-content-cache.js'; +import moment from 'moment'; +import * as competenceRepository from '../../lib/infrastructure/repositories/competence-repository.js'; +import * as skillRepository from '../../lib/infrastructure/repositories/skill-repository.js'; +import * as campaignRepository from '../../lib/infrastructure/repositories/campaign-repository.js'; +import { CampaignParticipationStatuses } from '../../lib/domain/models/CampaignParticipationStatuses.js'; +import { computeParticipantResultsShared as computeParticipationResults } from '../prod/compute-participation-results.js'; +import { getEligibleCampaignParticipations, generateKnowledgeElementSnapshots, -} = require('../prod/generate-knowledge-element-snapshots-for-campaigns'); -const { generate } = require('../../lib/domain/services/campaigns/campaign-code-generator'); +} from '../prod/generate-knowledge-element-snapshots-for-campaigns.js'; +import { generate } from '../../lib/domain/services/campaigns/campaign-code-generator.js'; const { SHARED, TO_SHARE } = CampaignParticipationStatuses; @@ -539,7 +544,8 @@ async function generateCampaignWithParticipants({ ); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { const commandLineArgs = process.argv.slice(2); @@ -574,4 +580,4 @@ async function main() { } })(); -module.exports = { generateCampaignWithParticipants }; +export { generateCampaignWithParticipants }; diff --git a/api/scripts/data-generation/generate-certif-cli.js b/api/scripts/data-generation/generate-certif-cli.js index 3715e2ffa37..3b33287fe9d 100755 --- a/api/scripts/data-generation/generate-certif-cli.js +++ b/api/scripts/data-generation/generate-certif-cli.js @@ -1,25 +1,33 @@ -#!/usr/bin/env node -'use strict'; -const inquirer = require('inquirer'); -require('dotenv').config({ path: `${__dirname}/../../.env` }); -const { knex, disconnect } = require(`../../db/knex-database-connection`); -const bluebird = require('bluebird'); -const maxBy = require('lodash/maxBy'); -const logger = require('../../lib/infrastructure/logger'); -const { getNewSessionCode } = require('../../lib/domain/services/session-code-service'); -const { temporaryStorage } = require('../../lib/infrastructure/temporary-storage/index'); -const { +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +// eslint-disable-next-line node/no-unpublished-import +import inquirer from 'inquirer'; +import * as dotenv from 'dotenv'; + +dotenv.config({ path: `${__dirname}/../../.env` }); +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import bluebird from 'bluebird'; +import lodash from 'lodash'; + +const { maxBy } = lodash; +import { logger } from '../../lib/infrastructure/logger.js'; +import { getNewSessionCode } from '../../lib/domain/services/session-code-service.js'; +import { temporaryStorage } from '../../lib/infrastructure/temporary-storage/index.js'; +import { makeUserPixCertifiable, makeUserPixDroitCertifiable, makeUserCleaCertifiable, makeUserPixEduCertifiable, -} = require('../../db/seeds/data/certification/tooling'); -const DatabaseBuilder = require('../../db/database-builder/database-builder'); -const databaseBuffer = require('../../db/database-builder/database-buffer'); -const databaseBuilder = new DatabaseBuilder({ knex, emptyFirst: false }); -const { learningContentCache } = require('../../lib/infrastructure/caches/learning-content-cache'); -const { SHARED } = require('../../lib/domain/models/CampaignParticipationStatuses'); +} from '../../db/seeds/data/certification/tooling.js'; +import { DatabaseBuilder } from '../../db/database-builder/database-builder.js'; +import { databaseBuffer } from '../../db/database-builder/database-buffer.js'; +import { learningContentCache } from '../../lib/infrastructure/caches/learning-content-cache.js'; +import { CampaignParticipationStatuses } from '../../lib/domain/models/CampaignParticipationStatuses.js'; + +const { SHARED } = CampaignParticipationStatuses; +const databaseBuilder = new DatabaseBuilder({ knex, emptyFirst: false }); /** * LOG_LEVEL=info ./scripts/data-generation/generate-certif-cli.js 'SUP' 1 '[{"candidateNumber": 1, "key": "EDU_1ER_DEGRE"}, {"candidateNumber": 1, "key": "EDU_2ND_DEGRE"}]' * LOG_LEVEL=info ./scripts/data-generation/generate-certif-cli.js 'PRO' 2 '[{"candidateNumber": 1, "key": "CLEA"}, {"candidateNumber": 2, "key": "DROIT"}]' @@ -390,6 +398,8 @@ async function _createUser({ firstName, lastName, birthdate, email, organization return { userId, organizationLearnerId }; } +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; if (process.argv.length > 2 && !isInTest) { const [centerType, candidateNumber, complementaryCertifications = '[]'] = process.argv.slice(2); @@ -403,7 +413,7 @@ if (process.argv.length > 2 && !isInTest) { throw error; }) .finally(_disconnect); -} else if (require.main === module) { +} else if (isLaunchedFromCommandLine) { inquirer .prompt(questions) .then(async (answers) => { @@ -416,11 +426,6 @@ if (process.argv.length > 2 && !isInTest) { throw error; }) .finally(_disconnect); -} else { - module.exports = { - main, - databaseBuilder, - }; } async function _disconnect() { @@ -431,3 +436,5 @@ async function _disconnect() { await temporaryStorage.quit(); logger.info('Exiting process gracefully...'); } + +export { main, databaseBuilder }; diff --git a/api/scripts/data-generation/generate-certifications-for-organization.js b/api/scripts/data-generation/generate-certifications-for-organization.js index c4be99470bf..81cfb560634 100644 --- a/api/scripts/data-generation/generate-certifications-for-organization.js +++ b/api/scripts/data-generation/generate-certifications-for-organization.js @@ -1,7 +1,8 @@ -const yargs = require('yargs'); -const _ = require('lodash'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const { competenceDatasource } = require('../../lib/infrastructure/datasources/learning-content/competence-datasource'); +import yargs from 'yargs'; +import _ from 'lodash'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import { competenceDatasource } from '../../lib/infrastructure/datasources/learning-content/competence-datasource.js'; +import * as url from 'url'; const CERTIF_ERROR_RATE = 0.05; const CERTIF_REJECTED_RATE = 0.15; @@ -304,7 +305,8 @@ function _getChunkSize(objectToBeInserted) { return MAX_BINDED_PG; } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('DEBUT'); diff --git a/api/scripts/data-generation/seeds/dump-target-profile-data-as-seeds.js b/api/scripts/data-generation/seeds/dump-target-profile-data-as-seeds.js index 28a468e99ec..b48549e582b 100644 --- a/api/scripts/data-generation/seeds/dump-target-profile-data-as-seeds.js +++ b/api/scripts/data-generation/seeds/dump-target-profile-data-as-seeds.js @@ -1,9 +1,17 @@ -require('dotenv').config({ path: `${__dirname}/../../../.env` }); -const yargs = require('yargs'); -const { hideBin } = require('yargs/helpers'); -const { knex, disconnect } = require('../../../db/knex-database-connection'); -const logger = require('../../../lib/infrastructure/logger'); -const { learningContentCache } = require('../../../lib/infrastructure/caches/learning-content-cache'); +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +import * as dotenv from 'dotenv'; + +dotenv.config({ + path: `${__dirname}/../../../.env`, +}); +import yargs from 'yargs'; +import { hideBin } from 'yargs/helpers'; + +import { knex, disconnect } from '../../../db/knex-database-connection.js'; +import { logger } from '../../../lib/infrastructure/logger.js'; +import { learningContentCache } from '../../../lib/infrastructure/caches/learning-content-cache.js'; async function main() { try { @@ -138,10 +146,10 @@ function escapedOrNull(value) { return value === null ? null : `\`${value}\``; } -if (require.main === module) { +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +if (isLaunchedFromCommandLine) { main(); } -module.exports = { - doJob, -}; +export { doJob }; diff --git a/api/scripts/database/create-database.js b/api/scripts/database/create-database.js index 1b3084c4034..d07f52e2078 100644 --- a/api/scripts/database/create-database.js +++ b/api/scripts/database/create-database.js @@ -1,8 +1,8 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; dotenv.config(); -const logger = require('../../lib/infrastructure/logger'); -const PgClient = require('../PgClient'); -const { PGSQL_DUPLICATE_DATABASE_ERROR } = require('../../db/pgsql-errors'); +import { logger } from '../../lib/infrastructure/logger.js'; +import { PgClient } from '../PgClient.js'; +import { PGSQL_DUPLICATE_DATABASE_ERROR } from '../../db/pgsql-errors.js'; const dbUrl = process.env.NODE_ENV === 'test' ? process.env.TEST_DATABASE_URL : process.env.DATABASE_URL; diff --git a/api/scripts/database/drop-database.js b/api/scripts/database/drop-database.js index 43a1f8a130a..0ec253dea6b 100644 --- a/api/scripts/database/drop-database.js +++ b/api/scripts/database/drop-database.js @@ -1,8 +1,8 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; dotenv.config(); -const logger = require('../../lib/infrastructure/logger'); -const PgClient = require('../PgClient'); -const { PGSQL_NON_EXISTENT_DATABASE_ERROR } = require('../../db/pgsql-errors'); +import { logger } from '../../lib/infrastructure/logger.js'; +import { PgClient } from '../PgClient.js'; +import { PGSQL_NON_EXISTENT_DATABASE_ERROR } from '../../db/pgsql-errors.js'; function isPlatformScalingo() { return Boolean(process.env.CONTAINER); diff --git a/api/scripts/database/empty-database.js b/api/scripts/database/empty-database.js index b09d00735f9..e7d5baacb29 100644 --- a/api/scripts/database/empty-database.js +++ b/api/scripts/database/empty-database.js @@ -1,5 +1,5 @@ -const { emptyAllTables, disconnect } = require('../../db/knex-database-connection'); -const logger = require('../../lib/infrastructure/logger'); +import { emptyAllTables, disconnect } from '../../db/knex-database-connection.js'; +import { logger } from '../../lib/infrastructure/logger.js'; const main = async () => { logger.info('Emptying all tables...'); diff --git a/api/scripts/database/pg-boss-migration.js b/api/scripts/database/pg-boss-migration.js index d188d5434df..c4e54dc380a 100644 --- a/api/scripts/database/pg-boss-migration.js +++ b/api/scripts/database/pg-boss-migration.js @@ -1,8 +1,8 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; dotenv.config(); -const PgBoss = require('pg-boss'); -const logger = require('../../lib/infrastructure/logger'); -const { disconnect } = require('../../db/knex-database-connection'); +import PgBoss from 'pg-boss'; +import { logger } from '../../lib/infrastructure/logger.js'; +import { disconnect } from '../../db/knex-database-connection.js'; async function main() { console.log('run pgboss migrations'); diff --git a/api/scripts/database/restore-dump/download-backup.js b/api/scripts/database/restore-dump/download-backup.js index b7d2f01268f..3d4404d7577 100644 --- a/api/scripts/database/restore-dump/download-backup.js +++ b/api/scripts/database/restore-dump/download-backup.js @@ -1,10 +1,12 @@ -require('dotenv').config({ path: '../../../.env' }); +import * as dotenv from 'dotenv'; -const fs = require('fs'); -const Joi = require('joi'); -const ScalingoClient = require('./helpers/scalingo/scalingo-client'); -const logger = require('../../../lib/infrastructure/logger'); -const { disconnect } = require('../../../db/knex-database-connection'); +dotenv.config({ path: '../../../.env' }); + +import fs from 'fs'; +import Joi from 'joi'; +import { ScalingoClient } from './helpers/scalingo/scalingo-client.js'; +import { logger } from '../../../lib/infrastructure/logger.js'; +import { disconnect } from '../../../db/knex-database-connection.js'; const postgresDatabaseAddonProviderId = 'postgresql'; diff --git a/api/scripts/database/restore-dump/helpers/scalingo/db-client.js b/api/scripts/database/restore-dump/helpers/scalingo/db-client.js index 8543c3afdf1..1ba99cd7b60 100644 --- a/api/scripts/database/restore-dump/helpers/scalingo/db-client.js +++ b/api/scripts/database/restore-dump/helpers/scalingo/db-client.js @@ -1,7 +1,10 @@ -const axios = require('axios'); -const util = require('util'); -const fs = require('fs'); -const streamPipeline = util.promisify(require('stream').pipeline); +import axios from 'axios'; +import util from 'util'; +import fs from 'fs'; + +import pipeline from 'stream'; + +const streamPipeline = util.promisify(pipeline); class ScalingoDBClient { constructor(dbId, client) { @@ -52,4 +55,4 @@ class ScalingoDBClient { } } -module.exports = ScalingoDBClient; +export { ScalingoDBClient }; diff --git a/api/scripts/database/restore-dump/helpers/scalingo/scalingo-client.js b/api/scripts/database/restore-dump/helpers/scalingo/scalingo-client.js index 4db455e6279..e9d04956171 100644 --- a/api/scripts/database/restore-dump/helpers/scalingo/scalingo-client.js +++ b/api/scripts/database/restore-dump/helpers/scalingo/scalingo-client.js @@ -1,5 +1,5 @@ -const scalingo = require('scalingo'); -const ScalingoDBClient = require('./db-client'); +import scalingo from 'scalingo'; +import { ScalingoDBClient } from './db-client.js'; class ScalingoClient { constructor({ client, application, region }) { @@ -39,4 +39,4 @@ class ScalingoClient { } } -module.exports = ScalingoClient; +export { ScalingoClient }; diff --git a/api/scripts/delete-assessment.js b/api/scripts/delete-assessment.js index d16c34403d5..46a9269b5d2 100755 --- a/api/scripts/delete-assessment.js +++ b/api/scripts/delete-assessment.js @@ -1,6 +1,5 @@ -#! /usr/bin/env node -/* eslint no-console: ["off"] */ -const PgClient = require('./PgClient'); +import { PgClient } from './PgClient.js'; +import * as url from 'url'; async function initialize() { const client = await PgClient.getClient(process.env.DATABASE_URL); @@ -87,11 +86,10 @@ class ScriptQueryBuilder { /*=================== tests =============================*/ -if (require.main === module) { +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +if (isLaunchedFromCommandLine) { main(); } -module.exports = { - ScriptQueryBuilder, - AssessmentEraser, -}; +export { ScriptQueryBuilder, AssessmentEraser }; diff --git a/api/scripts/delete-user.js b/api/scripts/delete-user.js index 4ab28cb467e..a63364c35a1 100755 --- a/api/scripts/delete-user.js +++ b/api/scripts/delete-user.js @@ -1,6 +1,5 @@ -#! /usr/bin/env node -/* eslint no-console: ["off"] */ -const PgClient = require('./PgClient'); +import { PgClient } from './PgClient.js'; +import * as url from 'url'; async function initialize() { const client = await PgClient.getClient(process.env.DATABASE_URL); @@ -167,12 +166,10 @@ class ScriptQueryBuilder { /*=================== tests =============================*/ -if (require.main === module) { +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +if (isLaunchedFromCommandLine) { main(); } -module.exports = { - ScriptQueryBuilder, - ClientQueryAdapter, - UserEraser, -}; +export { ScriptQueryBuilder, ClientQueryAdapter, UserEraser }; diff --git a/api/scripts/extract-challenge-with-skills.js b/api/scripts/extract-challenge-with-skills.js index f50e46b3bcf..c692dee3fc5 100644 --- a/api/scripts/extract-challenge-with-skills.js +++ b/api/scripts/extract-challenge-with-skills.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); -const challengeRepository = require('../lib/infrastructure/repositories/challenge-repository'); -const skillsRepository = require('../lib/infrastructure/repositories/skill-repository'); -const competencesRepository = require('../lib/infrastructure/repositories/competence-repository'); +import _ from 'lodash'; +import * as challengeRepository from '../lib/infrastructure/repositories/challenge-repository.js'; +import * as skillsRepository from '../lib/infrastructure/repositories/skill-repository.js'; +import * as competencesRepository from '../lib/infrastructure/repositories/competence-repository.js'; async function findChallengesWithSkills() { const [challenges, skillsFromDb] = await _getReferentialData(); @@ -51,6 +51,7 @@ async function _getReferentialData() { // Récupération des acquis par compétences let skills = await Promise.all( _.map(competences, (competence) => { + // eslint-disable-next-line import/namespace return skillsRepository.findByCompetenceId(competence.id); }) ); @@ -144,4 +145,4 @@ function _createObjectInvalidatedInferred(skill) { }; } -module.exports = findChallengesWithSkills; +export { findChallengesWithSkills }; diff --git a/api/scripts/fill-campaign-participation-id-in-badge-acquisitions.js b/api/scripts/fill-campaign-participation-id-in-badge-acquisitions.js index 3cca1933000..8cb2a63c6e8 100644 --- a/api/scripts/fill-campaign-participation-id-in-badge-acquisitions.js +++ b/api/scripts/fill-campaign-participation-id-in-badge-acquisitions.js @@ -1,5 +1,6 @@ -const { knex, disconnect } = require('../db/knex-database-connection'); -const bluebird = require('bluebird'); +import { knex, disconnect } from '../db/knex-database-connection.js'; +import bluebird from 'bluebird'; +import * as url from 'url'; async function getAllBadgeAcquistionsWithoutCampaignParticipationId() { return knex('badge-acquisitions').select().where({ campaignParticipationId: null }); @@ -59,7 +60,8 @@ async function updateBadgeAcquisitionWithCampaignParticipationId(badgeAcquisitio ); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { const badgeAcquisitionsWithoutCampaignParticipationId = await getAllBadgeAcquistionsWithoutCampaignParticipationId(); @@ -85,7 +87,7 @@ async function main() { } })(); -module.exports = { +export { main, getAllBadgeAcquistionsWithoutCampaignParticipationId, getCampaignParticipationFromBadgeAcquisition, diff --git a/api/scripts/fill-in-assessment-method.js b/api/scripts/fill-in-assessment-method.js index e1d97e7053a..890571216ea 100644 --- a/api/scripts/fill-in-assessment-method.js +++ b/api/scripts/fill-in-assessment-method.js @@ -1,8 +1,8 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; dotenv.config(); -const { knex } = require('../db/knex-database-connection'); -const logger = require('../lib/infrastructure/logger'); +import { knex } from '../db/knex-database-connection.js'; +import { logger } from '../lib/infrastructure/logger.js'; async function fillInAssessmentMethod() { const chunkSize = 50000; diff --git a/api/scripts/fill-score-level.js b/api/scripts/fill-score-level.js index de55b09e167..f18df8a2790 100755 --- a/api/scripts/fill-score-level.js +++ b/api/scripts/fill-score-level.js @@ -1,6 +1,5 @@ -#! /usr/bin/env node - -const request = require('request-promise-native'); +import request from 'request-promise-native'; +import * as url from 'url'; function parseArgs(argv) { return argv.slice(3); @@ -46,7 +45,10 @@ function main() { /*=================== tests =============================*/ -if (require.main === module) { +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; + +if (isLaunchedFromCommandLine) { console.log('Start script : '); main(); } diff --git a/api/scripts/fill-skill-id-in-user-saved-tutorials.js b/api/scripts/fill-skill-id-in-user-saved-tutorials.js index d65c52a28cd..59466f0b10f 100644 --- a/api/scripts/fill-skill-id-in-user-saved-tutorials.js +++ b/api/scripts/fill-skill-id-in-user-saved-tutorials.js @@ -1,13 +1,16 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const groupBy = require('lodash/groupBy'); -const { knex, disconnect } = require('../db/knex-database-connection'); -const UserSavedTutorial = require('../lib/domain/models/UserSavedTutorial'); -const KnowledgeElement = require('../lib/domain/models/KnowledgeElement'); -const UserSavedTutorialWithTutorial = require('../lib/domain/models/UserSavedTutorialWithTutorial'); -const knowledgeElementRepository = require('../lib/infrastructure/repositories/knowledge-element-repository'); -const { tutorialDatasource } = require('../lib/infrastructure/datasources/learning-content/tutorial-datasource'); -const { skillDatasource } = require('../lib/infrastructure/datasources/learning-content/skill-datasource'); +import lodash from 'lodash'; +const { groupBy } = lodash; +import { knex, disconnect } from '../db/knex-database-connection.js'; +import { UserSavedTutorial } from '../lib/domain/models/UserSavedTutorial.js'; +import { KnowledgeElement } from '../lib/domain/models/KnowledgeElement.js'; +import { UserSavedTutorialWithTutorial } from '../lib/domain/models/UserSavedTutorialWithTutorial.js'; +import * as knowledgeElementRepository from '../lib/infrastructure/repositories/knowledge-element-repository.js'; +import { tutorialDatasource } from '../lib/infrastructure/datasources/learning-content/tutorial-datasource.js'; +import { skillDatasource } from '../lib/infrastructure/datasources/learning-content/skill-datasource.js'; +import * as url from 'url'; async function getAllUserSavedTutorialsWithoutSkillId() { const userSavedTutorials = await knex('user-saved-tutorials').whereNull('skillId'); @@ -152,7 +155,8 @@ async function main() { console.log('End filling skillId to user saved tutorials'); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; (async () => { if (isLaunchedFromCommandLine) { @@ -167,7 +171,7 @@ const isLaunchedFromCommandLine = require.main === module; } })(); -module.exports = { +export { getAllUserSavedTutorialsWithoutSkillId, getAllTutorials, getAllSkills, diff --git a/api/scripts/get-next-commit-subject.js b/api/scripts/get-next-commit-subject.js index 5f6f2a8eef2..2c410f5d809 100644 --- a/api/scripts/get-next-commit-subject.js +++ b/api/scripts/get-next-commit-subject.js @@ -1,25 +1,4 @@ -/* - * IF message title: - * > Doesn't start with square brackets [] - * > Doesn't start with Merge branch - * > Doesn't start with Merge pull request - * > Doesn't start with # - * - * AND - * > branch name starts with AA-XXX-something (e.g. pi-123-branch-description) - * > branch name is not: - * > - dev - * > - master - * > - gh-pages - * > - release-xxx - * - * THEN - * > prepend the issue tag to the commit message - * - * My awesome commit -> [pi-123] My awesome commit - */ - -module.exports = function getNextCommitSubject(messageTitle, branchName) { +const getNextCommitSubject = function (messageTitle, branchName) { const startsWithBraces = (str) => str.match(/^\[[^\]]/); const startsWithMergeBranch = (str) => str.indexOf('Merge branch') === 0; const startsWithMergePR = (str) => str.indexOf('Merge pull request') === 0; @@ -57,3 +36,5 @@ module.exports = function getNextCommitSubject(messageTitle, branchName) { return messageTitle; } }; + +export { getNextCommitSubject }; diff --git a/api/scripts/helpers/csvHelpers.js b/api/scripts/helpers/csvHelpers.js index c7f7293c4fb..994b16bf7dc 100644 --- a/api/scripts/helpers/csvHelpers.js +++ b/api/scripts/helpers/csvHelpers.js @@ -1,10 +1,16 @@ -const fs = require('fs'); -const { readFile, access } = require('fs').promises; -const { difference, isEmpty } = require('lodash'); -const papa = require('papaparse'); +import fs from 'fs'; -const { NotFoundError, FileValidationError } = require('../../lib/domain/errors'); -const { UnprocessableEntityError } = require('../../lib/application/http-errors'); +const { difference, isEmpty } = lodash; + +const { promises } = fs; + +const { readFile, access } = promises; + +import lodash from 'lodash'; +import papa from 'papaparse'; + +import { NotFoundError, FileValidationError } from '../../lib/domain/errors.js'; +import { UnprocessableEntityError } from '../../lib/application/http-errors.js'; const ERRORS = { INVALID_FILE_EXTENSION: 'INVALID_FILE_EXTENSION', @@ -111,7 +117,7 @@ async function parseCsvWithHeaderAndRequiredFields({ filePath, requiredFieldName return csvData; } -module.exports = { +export { checkCsvHeader, readCsvFile, parseCsvData, diff --git a/api/scripts/helpers/organizations-by-external-id-helper.js b/api/scripts/helpers/organizations-by-external-id-helper.js index afcf06ff8e2..a414fadeb68 100644 --- a/api/scripts/helpers/organizations-by-external-id-helper.js +++ b/api/scripts/helpers/organizations-by-external-id-helper.js @@ -1,4 +1,4 @@ -const organizationRepository = require('../../lib/infrastructure/repositories/organization-repository'); +import * as organizationRepository from '../../lib/infrastructure/repositories/organization-repository.js'; function organizeOrganizationsByExternalId(organizations) { const organizationsByExternalId = {}; @@ -12,14 +12,11 @@ function organizeOrganizationsByExternalId(organizations) { return organizationsByExternalId; } -function findOrganizationsByExternalIds({ checkedData }) { +function findOrganizationsByExternalIds({ checkedData }, injectedOrganizationRepository = organizationRepository) { const externalIds = checkedData.map((data) => data.externalId); - return organizationRepository.findByExternalIdsFetchingIdsOnly(externalIds).then((organizations) => { + return injectedOrganizationRepository.findByExternalIdsFetchingIdsOnly(externalIds).then((organizations) => { return organizations.map((organization) => ({ id: organization.id, externalId: organization.externalId })); }); } -module.exports = { - findOrganizationsByExternalIds, - organizeOrganizationsByExternalId, -}; +export { findOrganizationsByExternalIds, organizeOrganizationsByExternalId }; diff --git a/api/scripts/logo/default-sco-agri-organization-logo-base64.js b/api/scripts/logo/default-sco-agri-organization-logo-base64.js index 88da01b215d..e6c0dfa755f 100644 --- a/api/scripts/logo/default-sco-agri-organization-logo-base64.js +++ b/api/scripts/logo/default-sco-agri-organization-logo-base64.js @@ -1,2 +1,4 @@ -module.exports = +const logoUrl = 'data:image/png;base64,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'; + +export { logoUrl }; diff --git a/api/scripts/logo/default-sco-organization-logo-base64.js b/api/scripts/logo/default-sco-organization-logo-base64.js index 2cfc5d0e663..2c0f3c63330 100644 --- a/api/scripts/logo/default-sco-organization-logo-base64.js +++ b/api/scripts/logo/default-sco-organization-logo-base64.js @@ -1,2 +1,3 @@ -module.exports = +const logoUrl = 'data:image/jpeg;base64,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jU1FABRRRQBGUUsHIBIzg9xnrUlFFAEPkxb/ADti7/72Bn86moooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDN1j/AJBN5/17y/8AoJr4i8Mf8eEn/XU/+grX27rH/IJvP+veX/0E18ReGP8Ajwk/66n/ANBWgaP/1bvwN/5GbXP9wf8Aow19OV8yfA3/AJGXXP8AcH/ow19N02AUUUUgCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACvmK0/5ODP8A10k/9I2r6dr5itP+ThG/66Sf+kbUDR9O0UUUCCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDN1j/kE3n/AF7y/wDoJr4i8Mf8eEn/AF1P/oK19u6x/wAgm8/695f/AEE18ReGP+PCT/rqf/QVoGj/1r3wO/5GbXP9wf8Aow19N18yfA3/AJGXXP8AcH/ow19N0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABXzFaf8nBn/rpJ/6RtX07XzFaf8nBn/rpJ/6RtQNH07RRRQIKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAM3WP+QTef9e8v/oJr4i8Mf8AHhJ/11P/AKCtfbusf8gm8/695f8A0E18R+F/+PCT/rqf/QVoGj//18z4X+KtB8L6/q8+vXP2ZJhtQ7HfJDkkfIrfrXuX/C3/AId/9BT/AMgT/wDxuuKuPh54OeeWRrHLF2JPmy+v+/R/wrfwX/z4f+Rpv/i6dhna/wDC3/h3/wBBT/yBP/8AG6P+Fv8Aw7/6Cn/kCf8A+N1xX/Ct/Bf/AD4f+Rpv/i6T/hW3gv8A58P/ACNN/wDF0WA7b/hb/wAO/wDoKf8AkCf/AON0f8Lf+Hf/AEFP/IE//wAbrif+FbeC/wDnw/8AI03/AMXS/wDCtvBf/Ph/5Gm/+LosB2v/AAt/4d/9BT/yBP8A/G6P+Fv/AA7/AOgp/wCQJ/8A43XFf8K38F/8+H/kab/4uj/hW3gv/nw/8jTf/F0WA7X/AIW/8O/+gp/5An/+N0f8Lf8Ah3/0FP8AyBP/APG64n/hW3gv/nw/8jTf/F0v/Ct/Bf8Az4f+Rpv/AIuiwHa/8Lf+Hf8A0FP/ACBP/wDG6P8Ahb/w7/6Cn/kCf/43XFf8K38F/wDPh/5Gm/8Ai6P+Fb+C/wDnw/8AI03/AMXRYDtf+Fv/AA7/AOgp/wCQJ/8A43R/wt/4d/8AQU/8gT//ABuuK/4Vv4L/AOfD/wAjTf8AxdH/AArbwX/z4f8Akab/AOLosB2v/C3/AId/9BT/AMgT/wDxuj/hb/w7/wCgp/5An/8AjdcT/wAK28F/8+H/AJGm/wDi6P8AhW3gv/nw/wDI03/xdFgO2/4W/wDDv/oKf+QJ/wD43R/wt/4d/wDQU/8AIE//AMbrif8AhW3gv/nw/wDI03/xdL/wrfwX/wA+H/kab/4ukB2v/C3/AId/9BT/AMgT/wDxuk/4W/8ADv8A6Cn/AJAn/wDjdcX/AMK38F/8+H/kab/4uj/hW3gv/nw/8jTf/F07Adr/AMLf+Hf/AEFP/IE//wAbo/4W/wDDv/oKf+QJ/wD43XFf8K38F/8APh/5Gm/+LpP+FbeC/wDnw/8AI03/AMXRYDtv+Fv/AA7/AOgp/wCQJ/8A43R/wt/4d/8AQU/8gT//ABuuK/4Vt4L/AOfD/wAjTf8AxdH/AArfwX/z4f8Akab/AOLosB2v/C3/AId/9BT/AMgT/wDxuj/hb/w7/wCgp/5An/8AjdcV/wAK38F/8+H/AJGm/wDi6P8AhW3gv/nw/wDI03/xdFgO1/4W/wDDv/oKf+QJ/wD43R/wt/4d/wDQU/8AIE//AMbrif8AhW3gv/nw/wDI03/xdL/wrbwX/wA+H/kab/4uiwHa/wDC3/h3/wBBT/yBP/8AG6P+Fv8Aw7/6Cn/kCf8A+N1xX/Ct/Bf/AD4f+Rpv/i6T/hW3gv8A58P/ACNN/wDF0WA7b/hb/wAO/wDoKf8AkCf/AON0f8Lf+Hf/AEFP/IE//wAbrif+FbeC/wDnw/8AI03/AMXR/wAK28F/8+H/AJGm/wDi6LAdt/wt/wCHf/QU/wDIE/8A8bo/4W/8O/8AoKf+QJ//AI3XFf8ACt/Bf/Ph/wCRpv8A4uj/AIVv4L/58P8AyNN/8XRYDtf+Fv8Aw7/6Cn/kCf8A+N0f8Lf+Hf8A0FP/ACBP/wDG64n/AIVt4L/58P8AyNN/8XR/wrfwX/z4f+Rpv/i6LAdt/wALf+Hf/QU/8gT/APxuj/hb/wAO/wDoKf8AkCf/AON1xP8AwrbwX/z4f+Rpv/i6X/hW/gv/AJ8P/I03/wAXRYDtf+Fv/Dv/AKCn/kCf/wCN0f8AC3/h3/0FP/IE/wD8briv+Fb+C/8Anw/8jTf/ABdH/Ct/Bf8Az4f+Rpv/AIuiwHa/8Lf+Hf8A0FP/ACBP/wDG6P8Ahb/w7/6Cn/kCf/43XFf8K28F/wDPh/5Gm/8Ai6P+FbeC/wDnw/8AI03/AMXRYDtf+Fv/AA7/AOgp/wCQJ/8A43R/wt/4d/8AQU/8gT//ABuuK/4Vv4L/AOfD/wAjTf8AxdH/AArbwX/z4f8Akab/AOLosB2v/C3/AId/9BT/AMgT/wDxuj/hb/w7/wCgp/5An/8AjdcV/wAK38F/8+H/AJGm/wDi6P8AhW/gv/nw/wDI03/xdIDtf+Fv/Dv/AKCn/kCf/wCN0f8AC3/h3/0FP/IE/wD8briv+FbeC/8Anw/8jTf/ABdH/Ct/Bf8Az4f+Rpv/AIunYDtf+Fv/AA7/AOgp/wCQJ/8A43R/wt/4d/8AQU/8gT//ABuuJ/4Vt4L/AOfD/wAjTf8AxdL/AMK38F/8+H/kab/4uiwHa/8AC3/h3/0FP/IE/wD8bo/4W/8ADv8A6Cn/AJAn/wDjdcV/wrbwX/z4f+Rpv/i6P+Fb+C/+fD/yNN/8XRYDtf8Ahb/w7/6Cn/kCf/43R/wt/wCHf/QU/wDIE/8A8briv+Fb+C/+fD/yNN/8XR/wrbwX/wA+H/kab/4uiwHa/wDC3/h3/wBBT/yBP/8AG6P+Fv8Aw7/6Cn/kCf8A+N1xP/CtvBf/AD4f+Rpv/i6X/hW3gv8A58P/ACNN/wDF0WA7X/hb/wAO/wDoKf8AkCf/AON0f8Lf+Hf/AEFP/IE//wAbriv+Fb+C/wDnw/8AI03/AMXR/wAK38F/8+H/AJGm/wDi6QHa/wDC3/h3/wBBT/yBP/8AG6P+Fv8Aw7/6Cn/kCf8A+N1xX/Ct/Bf/AD4f+Rpv/i6P+Fb+C/8Anw/8jTf/ABdOwHa/8Lf+Hf8A0FP/ACBP/wDG6P8Ahb/w7/6Cn/kCf/43XE/8K28F/wDPh/5Gm/8Ai6X/AIVv4L/58P8AyNN/8XRYDtf+Fv8Aw7/6Cn/kCf8A+N0f8Lf+Hf8A0FP/ACBP/wDG64r/AIVv4L/58P8AyNN/8XR/wrbwX/z4f+Rpv/i6LAdr/wALf+Hf/QU/8gT/APxuj/hb/wAO/wDoKf8AkCf/AON1xP8AwrbwX/z4f+Rpv/i6P+Fb+C/+fD/yNN/8XRYDtv8Ahb/w7/6Cn/kCf/43R/wt/wCHf/QU/wDIE/8A8briv+Fb+C/+fD/yNN/8XR/wrfwX/wA+H/kab/4uiwHa/wDC3/h3/wBBT/yBP/8AG6P+Fv8Aw7/6Cn/kCf8A+N1xP/CtvBf/AD4f+Rpv/i6X/hW/gv8A58P/ACNN/wDF0WA7X/hb/wAO/wDoKf8AkCf/AON14Rb+LPD6fGI+Kmuf+Jbvc+d5b9DbGMfJt3/e46fpXoP/AArbwX/z4f8Akab/AOLrAuPAvhVJ2jSzwo7ebL/8XSA9V/4W/wDDv/oKf+QJ/wD43R/wt/4d/wDQU/8AIE//AMbriv8AhW/gv/nw/wDI03/xdH/CtvBf/Ph/5Gm/+Lp2A7X/AIW/8O/+gp/5An/+N0f8Lf8Ah3/0FP8AyBP/APG64n/hW3gv/nw/8jTf/F0v/Ct/Bf8Az4f+Rpv/AIuiwHa/8Lf+Hf8A0FP/ACBP/wDG6P8Ahb/w7/6Cn/kCf/43XE/8K28F/wDPh/5Gm/8Ai6X/AIVt4L/58P8AyNN/8XRYDtf+Fv8Aw7/6Cn/kCf8A+N0f8Lf+Hf8A0FP/ACBP/wDG64n/AIVt4L/58P8AyNN/8XR/wrbwX/z4f+Rpv/i6LAdt/wALf+Hf/QU/8gT/APxuj/hb/wAO/wDoKf8AkCf/AON1xX/Ct/Bf/Ph/5Gm/+LpP+FbeC/8Anw/8jTf/ABdFgO2/4W/8O/8AoKf+QJ//AI3R/wALf+Hf/QU/8gT/APxuuK/4Vv4L/wCfD/yNN/8AF0f8K28F/wDPh/5Gm/8Ai6QHaf8AC3/h3/0FP/IE/wD8bpf+Fv8Aw7/6Cn/kCf8A+N1xX/Ct/Bf/AD4f+Rpv/i6T/hW3gv8A58P/ACNN/wDF07Adr/wt/wCHf/QU/wDIE/8A8bpf+Fv/AA7/AOgp/wCQJ/8A43XFf8K38F/8+H/kab/4uk/4Vt4L/wCfD/yNN/8AF0gO2/4W/wDDv/oKf+QJ/wD43R/wt/4d/wDQU/8AIE//AMbrif8AhW3gv/nw/wDI03/xdL/wrbwX/wA+H/kab/4unYDtf+Fv/Dv/AKCn/kCf/wCN0f8AC3/h3/0FP/IE/wD8brif+FbeC/8Anw/8jTf/ABdL/wAK28F/8+H/AJGm/wDi6QHa/wDC3/h3/wBBT/yBP/8AG6P+Fv8Aw7/6Cn/kCf8A+N1xP/CtvBf/AD4f+Rpv/i6X/hW3gv8A58P/ACNN/wDF07Adr/wt/wCHf/QU/wDIE/8A8bo/4W/8O/8AoKf+QJ//AI3XE/8ACtvBf/Ph/wCRpv8A4ul/4Vt4L/58P/I03/xdFgO1/wCFv/Dv/oKf+QJ//jdH/C3/AId/9BT/AMgT/wDxuuJ/4Vt4L/58P/I03/xdL/wrfwX/AM+H/kab/wCLosB2v/C3/h3/ANBT/wAgT/8Axuj/AIW/8O/+gp/5An/+N1xP/CtvBf8Az4f+Rpv/AIul/wCFb+C/+fD/AMjTf/F0WA7X/hb/AMO/+gp/5An/APjdH/C3/h3/ANBT/wAgT/8AxuuJ/wCFbeC/+fD/AMjTf/F0f8K28F/8+H/kab/4uiwHbf8AC3/h3/0FP/IE/wD8bo/4W/8ADv8A6Cn/AJAn/wDjdcT/AMK28F/8+H/kab/4uj/hW3gv/nw/8jTf/F0WA7b/AIW/8O/+gp/5An/+N0f8Lf8Ah3/0FP8AyBP/APG64r/hW3gv/nw/8jTf/F0f8K38F/8APh/5Gm/+LosB2v8Awt/4d/8AQU/8gT//ABuj/hb/AMO/+gp/5An/APjdcV/wrfwX/wA+H/kab/4uk/4Vt4L/AOfD/wAjTf8AxdFgO2/4W/8ADv8A6Cn/AJAn/wDjdH/C3/h3/wBBT/yBP/8AG64n/hW3gv8A58P/ACNN/wDF0v8AwrbwX/z4f+Rpv/i6LAdr/wALf+Hf/QU/8gT/APxuj/hb/wAO/wDoKf8AkCf/AON1xX/Ct/Bf/Ph/5Gm/+LpP+FbeC/8Anw/8jTf/ABdFgO2/4W/8O/8AoKf+QJ//AI3R/wALf+Hf/QU/8gT/APxuuK/4Vv4L/wCfD/yNN/8AF0f8K38F/wDPh/5Gm/8Ai6LAdr/wt/4d/wDQU/8AIE//AMbo/wCFv/Dv/oKf+QJ//jdcT/wrbwX/AM+H/kab/wCLpf8AhW3gv/nw/wDI03/xdFgO1/4W/wDDv/oKf+QJ/wD43R/wt/4d/wDQU/8AIE//AMbriv8AhW/gv/nw/wDI03/xdJ/wrbwX/wA+H/kab/4uiwHbf8Lf+Hf/AEFP/IE//wAbo/4W/wDDv/oKf+QJ/wD43XE/8K28F/8APh/5Gm/+Lpf+Fb+C/wDnw/8AI03/AMXRYDtf+Fv/AA7/AOgp/wCQJ/8A43Sf8Lf+Hf8A0FP/ACBP/wDG64v/AIVv4L/58P8AyNN/8XR/wrfwX/z4f+Rpv/i6LAdr/wALf+Hf/QU/8gT/APxuj/hb/wAO/wDoKf8AkCf/AON1xP8AwrfwX/z4f+Rpv/i6P+FbeC/+fD/yNN/8XRYDtv8Ahb/w7/6Cn/kCf/43R/wt/wCHf/QU/wDIE/8A8brif+FbeC/+fD/yNN/8XS/8K28F/wDPh/5Gm/8Ai6LAdr/wt/4d/wDQU/8AIE//AMbo/wCFv/Dv/oKf+QJ//jdcT/wrbwX/AM+H/kab/wCLpf8AhW/gv/nw/wDI03/xdFgO1/4W/wDDv/oKf+QJ/wD43R/wt/4d/wDQU/8AIE//AMbrif8AhW3gv/nw/wDI03/xdL/wrfwX/wA+H/kab/4uiwHa/wDC3/h3/wBBT/yBP/8AG6P+Fv8Aw7/6Cn/kCf8A+N1xP/CtvBf/AD4f+Rpv/i6X/hW/gv8A58P/ACNN/wDF0WA7X/hb/wAO/wDoKf8AkCf/AON0f8Lf+Hf/AEFP/IE//wAbriv+FbeC/wDnw/8AI03/AMXR/wAK38F/8+H/AJGm/wDi6LAdr/wt/wCHf/QU/wDIE/8A8bo/4W/8O/8AoKf+QJ//AI3XE/8ACtvBf/Ph/wCRpv8A4ul/4Vt4L/58P/I03/xdFgO1/wCFv/Dv/oKf+QJ//jdH/C3/AId/9BT/AMgT/wDxuuK/4Vt4L/58P/I03/xdH/Ct/Bf/AD4f+Rpv/i6LAdr/AMLf+Hf/AEFP/IE//wAbo/4W/wDDv/oKf+QJ/wD43XE/8K28F/8APh/5Gm/+Lpf+FbeC/wDnw/8AI03/AMXRYDtf+Fv/AA7/AOgp/wCQJ/8A43R/wt/4d/8AQU/8gT//ABuuK/4Vv4L/AOfD/wAjTf8AxdJ/wrfwX/z4f+Rpv/i6LAdt/wALf+Hf/QU/8gT/APxuj/hb/wAO/wDoKf8AkCf/AON1xP8AwrbwX/z4f+Rpv/i6X/hW3gv/AJ8P/I03/wAXRYDtf+Fv/Dv/AKCn/kCf/wCN0f8AC3/h3/0FP/IE/wD8briv+FbeC/8Anw/8jTf/ABdH/Ct/Bf8Az4f+Rpv/AIuiwHa/8Lf+Hf8A0FP/ACBP/wDG6P8Ahb/w7/6Cn/kCf/43XFf8K38F/wDPh/5Gm/8Ai6P+FbeC/wDnw/8AI03/AMXRYDtf+Fv/AA7/AOgp/wCQJ/8A43R/wt/4d/8AQU/8gT//ABuuJ/4Vt4L/AOfD/wAjTf8AxdL/AMK38F/8+H/kab/4uiwHa/8AC3/h3/0FP/IE/wD8bo/4W/8ADv8A6Cn/AJAn/wDjdcV/wrfwX/z4f+Rpv/i6P+Fb+C/+fD/yNN/8XRYDtf8Ahb/w7/6Cn/kCf/43R/wt/wCHf/QU/wDIE/8A8briv+Fb+C/+fD/yNN/8XR/wrbwX/wA+H/kab/4uiwHa/wDC3/h3/wBBT/yBP/8AG6P+Fv8Aw7/6Cn/kCf8A+N1xX/Ct/Bf/AD4f+Rpv/i6T/hW3gv8A58P/ACNN/wDF0WA7b/hb/wAO/wDoKf8AkCf/AON0f8Lf+Hf/AEFP/IE//wAbrif+FbeC/wDnw/8AI03/AMXR/wAK28F/8+H/AJGm/wDi6LAdt/wt/wCHf/QU/wDIE/8A8bpP+Fv/AA7/AOgp/wCQJ/8A43XF/wDCt/Bf/Ph/5Gm/+LpP+FbeC/8Anw/8jTf/ABdFgOo1H4sfD+4065gh1PLyQuqjyJxklSB1jr5o8Mf8eEn/AF1P/oK17f8A8K28F/8APh/5Gm/+LrT07wN4WghaOKz2ruzjzJPQf7VAH//Z'; +export { logoUrl }; diff --git a/api/scripts/make-saml-env.js b/api/scripts/make-saml-env.js index 0cf772291cd..85b48ed9124 100644 --- a/api/scripts/make-saml-env.js +++ b/api/scripts/make-saml-env.js @@ -1,164 +1,8 @@ -/* +import fs from 'fs'; -# Configuration des variables d'environnement pour l'intégration SAML +const { promises } = fs; -Pix (API) utilise les variables d'environnement suivantes pour configurer -l'intégration avec un fournisseur d'identité SAML : - -## `SAML_SP_CONFIG` - -Contient un JSON décrivant (au format attendu par `samlify`) la configuration -de Pix en tant que "Service provider". - -Exemple de JSON (à mettre sur une seule ligne dans la variable d'environnement): - -``` -{ - "metadata": "", - "encPrivateKey": "-----BEGIN RSA PRIVATE KEY-----\n…\n-----END RSA PRIVATE KEY-----\n", - "relayState": "https://…" -} -``` - -Détails des clés du JSON (référence : https://samlify.js.org/#/configuration) : - - * `metadata`: métadonnées du _Service Provider_ qui seront . - * Le fournisseur d'identité utilisera ces métadonnées (servies telles quelles - sur `/api/saml/metadata.xml`pour accepter les demandes d'authentification - de Pix et générer des assertions SAML. - * L'implémentation SAML dans Pix (basée sur `samlify`) utilise également ces - métadonnées pour se configurer. - - * `encPrivateKey`: clé privée associée au certificat contenu dans les métadonnées - ci-dessus (élément X509Certificate). - - * `relayState`: paramètre qui sera ajouté aux demandes d'authentification envoyées - par Pix au fournisseur d'identité. Dans le cadre du GAR, ce paramètre doit absolument - contenir l'"URL de la ressource" (telle qu'indiquée dans la notice ScoLomFR) - sous peine de faire échouer l'authentification. - -## `SAML_IDP_CONFIG` - -Un JSON également, utilisé cette fois pour configurer le modèle du fournisseur -d'identité utilisé par `samlify` pour générer des demandes d'authentification et -interpréter les assertions. - -Exemple de JSON : - -``` -{ - "metadata":"", -} -``` - -On retrouve une clé `metadata` dans laquelle il faut inclure les métadonnées fournies par le -fournisseur d'identité. Par exemple pour le GAR en pré-production elles sont disponibles -à l'adresse https://idp-auth.partenaire.test-gar.education.fr/idp/metadata. - -Ces métadonnées sont utilisées pour configurer `samlify` ; les éléments importants sont les -certificats et l'adresse du _binding_ `HTTP-Redirect` du `SingleSignOnService`. - -Si le XML des métadonnées est trop gros pour tenir dans la variable d'environnement, il est donc -permis de ne garder que ces éléments. - -Les autres clés du JSON permettent de configurer `samlify` (cf. https://samlify.js.org/#/configuration) -pour les paramètres qui ne pourraient pas être déduits des métadonnées. - -Par exemple, nous avons constaté que pour l'intégration avec https://samlidp.io il fallait ajouter -les options suivantes : - -``` - "isAssertionEncrypted": true, - "messageSigningOrder": "encrypt-then-sign" -``` - -Pour le GAR en revanche, l'intégration semble fonctionner avec uniquement `metadata`. - -## `SAML_ATTRIBUTE_MAPPING` - -Cette variable contient encore un JSON, qui permet de configurer un mapping entre les attributs -utilisateur fournis par le fournisseur d'identité, et les champs du modèle `User` de Pix. - -Exemple : - -``` -{ - samlId: 'IDO', - firstName: 'PRE', - lastName: 'NOM', -} -``` - -# Génération du certificat de _service provider_ - -``` -openssl genrsa -out private.key 1024 -openssl req -new -x509 -key privatekey.pem -out publickey.cer -days 365 -``` - -Le contenu de `publickey.cer` (sans les lignes `BEGIN CERTIFICATE` ni `END CERTIFICATE`) -peut être utilisé dans l'élément `X509Certificate` des métadonnées de _service provider_. - -Le contenu de privatekey.pem (en gardant les lignes `BEGIN…` et `END…`) est à copier dans -la propriété `encPrivateKey` de `SAML_SP_CONFIG`. - -# Exemple de métadonnées de _service provider_ - -``` - - - - - - MIICCzCCAXQCCQD2MlHh/QmGmjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQGEwJGUjEPMA0GA1UECAwGRlJBTkNFMQ4wDAYDVQQHDAVQQVJJUzEMMAoGA1UECgwDUElYMQwwCgYDVQQLDANERVYwHhcNMTgxMDIyMTQ1MjQ5WhcNMTkxMDIyMTQ1MjQ5WjBKMQswCQYDVQQGEwJGUjEPMA0GA1UECAwGRlJBTkNFMQ4wDAYDVQQHDAVQQVJJUzEMMAoGA1UECgwDUElYMQwwCgYDVQQLDANERVYwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMbY6nVh9GjtlyIm6KxQ8p+2dOE+wWTRq6Kg/481ovarmJWyW10LgZirfUvKrLqK5OdJ9+svOl2/JokF8ckOQmR/VWtuwcb6EvEfIMgLwQGZYKIPrdGN56BcY0+aprp8SIMfsrtR+NrWp0QJIRc6aWd5WWQybKNwFeGz2WIWzQXRAgMBAAEwDQYJKoZIhvcNAQELBQADgYEACRHKc85tMIANiX+4agaZFPluqoo2cjk6ph6FAigNuIZZr6mEAVCUh8Pmh5fQzUP9vl6Baqw+x5RBIw919OwzwcMCN3hNTi2k4oO4Kua/DJ/1fWJRqfnAZU3M6Y7Tfjfg7yhSkHuPYVew4SHMtWSYEkP0opnxjXIiBWfhpDY8EuE= - - - - - - - urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress - - - - -``` - -Éléments notables / à personnaliser : - * L'attribut `entityID` de `EntityDescriptor` sera utilisé pour identifier ce _service provider_ - au sein du fournisseur d'identité. Le GAR exige que cet attribut ait pour valeur l'URL - où sont servies les métadonnées, soit https://…/api/saml/metadata.xml pour une instance - Pix. - * Le certificat X.509 dans `X509Certificate` doit correspondre à la clé privée contenue dans - `encPrivateKey` (voir plus haut comment le générer). Il faut bien entendu utiliser un - couple certificat/clé privée différent entre l'intégration et la production. - * L'attribut `Location` de `AssertionConsumerService` indique au fournisseur d'identité - où poster les assertions. Il doit correspondre à l'URL de l'application cible et se - terminer par `/api/saml/assert`. - * De même l'attribut `Location` de `SingleLogoutService` désigne le service de consommation - de requêtes de déconnexion, mais il n'est pas actuellement implémenté. - -# Utilisation du script `make-saml-env.js` - -La syntaxe d'une valeur de variable d'environnement contenant du XML à -l'intérieur d'un object JSON étant délicate à maintenir, ce script permet de -générer les valeurs de `SAML_SP_CONFIG` et `SAML_IDP_CONFIG` à partir de -fichiers XML. - -Le mode d'utilisation est le suivant : - * Créer dans le répertoire courant : - * un fichier `metadata_sp.xml` contenant les métadonnées du _service provider_ (voir plus haut) ; - * un fichier `metadata_idp.xml` contenant les métadonnées de l'_identity provider_ ; - * un ficher `privatekey.pem` contenant la clé privée du certificat du _service provider_. - * Lancer le script `make-saml-env.js` : deux lignes (un peu longues…) sont générées sur - la console ; - * Si besoin, ajouter les options nécessaires dans le JSON généré (ex. pour le GAR, `relayState`) ; - * Copier ces deux lignes dans la configuration de variables d'environnement de l'application - cible. - -*/ - -const { readFile } = require('fs').promises; +const { readFile } = promises; function readXml(filename) { return readFile(filename, 'utf-8').replace(/^\s+|\s+$|\n/gm, ''); diff --git a/api/scripts/mark-users-for-TermsOfService-revalidation.js b/api/scripts/mark-users-for-TermsOfService-revalidation.js index 4d761a4f97c..0414f98b2b8 100644 --- a/api/scripts/mark-users-for-TermsOfService-revalidation.js +++ b/api/scripts/mark-users-for-TermsOfService-revalidation.js @@ -1,4 +1,5 @@ -const { knex, disconnect } = require('../db/knex-database-connection'); +import { knex, disconnect } from '../db/knex-database-connection.js'; +import * as url from 'url'; async function markUsersRequiringTermsOfServiceValidationForRevalidation() { const subquery = knex.select('users.id').from('users').where({ @@ -13,7 +14,8 @@ async function markUsersRequiringTermsOfServiceValidationForRevalidation() { return result.map(({ id }) => id); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log( @@ -39,6 +41,4 @@ async function main() { } })(); -module.exports = { - markUsersRequiringTermsOfServiceValidationForRevalidation, -}; +export { markUsersRequiringTermsOfServiceValidationForRevalidation }; diff --git a/api/scripts/populate-organizations-email.js b/api/scripts/populate-organizations-email.js index 3082fafea38..fe310af020f 100644 --- a/api/scripts/populate-organizations-email.js +++ b/api/scripts/populate-organizations-email.js @@ -1,7 +1,8 @@ -const bluebird = require('bluebird'); -const { disconnect } = require('../db/knex-database-connection'); -const { parseCsvWithHeader } = require('../scripts/helpers/csvHelpers'); -const BookshelfOrganization = require('../lib/infrastructure/orm-models/Organization'); +import bluebird from 'bluebird'; +import { disconnect } from '../db/knex-database-connection.js'; +import { parseCsvWithHeader } from '../scripts/helpers/csvHelpers.js'; +import { BookshelfOrganization } from '../lib/infrastructure/orm-models/Organization.js'; +import * as url from 'url'; async function updateOrganizationEmailByExternalId(externalId, email) { return BookshelfOrganization.where({ externalId }) @@ -21,7 +22,8 @@ async function populateOrganizations(objectsFromFile) { }); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log("Start populating organization's email"); @@ -54,4 +56,4 @@ async function main() { } })(); -module.exports = populateOrganizations; +export { populateOrganizations }; diff --git a/api/scripts/prod/archive-campaigns.js b/api/scripts/prod/archive-campaigns.js index 29775867786..ad3f40c2ade 100644 --- a/api/scripts/prod/archive-campaigns.js +++ b/api/scripts/prod/archive-campaigns.js @@ -1,9 +1,10 @@ -const { parseCsvWithHeader } = require('../helpers/csvHelpers'); -const archiveCampaignFromCampaignCode = require('../../lib/domain/usecases/archive-campaign-from-campaign-code'); -const campaignForArchivingRepository = require('../../lib/infrastructure/repositories/campaign/campaign-for-archiving-repository'); -const bluebird = require('bluebird'); -const ProgressionLogger = require('../../lib/infrastructure/utils/progression-logger'); -const { disconnect } = require('../../db/knex-database-connection'); +import { parseCsvWithHeader } from '../helpers/csvHelpers.js'; +import { archiveCampaignFromCampaignCode } from '../../lib/domain/usecases/archive-campaign-from-campaign-code.js'; +import * as campaignForArchivingRepository from '../../lib/infrastructure/repositories/campaign/campaign-for-archiving-repository.js'; +import bluebird from 'bluebird'; +import { ProgressionLogger } from '../../lib/infrastructure/utils/progression-logger.js'; +import { disconnect } from '../../db/knex-database-connection.js'; +import * as url from 'url'; async function archiveCampaign(campaignData, logger) { try { @@ -29,7 +30,8 @@ async function archiveCampaigns(file, logger, concurrency = 1) { logger.log('DONE'); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { const logger = new ProgressionLogger(process.stdout); @@ -49,4 +51,4 @@ async function main() { } })(); -module.exports = archiveCampaigns; +export { archiveCampaigns }; diff --git a/api/scripts/prod/compute-badge-acquisitions.js b/api/scripts/prod/compute-badge-acquisitions.js index 125a254fa23..0373879d9f5 100644 --- a/api/scripts/prod/compute-badge-acquisitions.js +++ b/api/scripts/prod/compute-badge-acquisitions.js @@ -1,17 +1,22 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const _ = require('lodash'); -const bluebird = require('bluebird'); -const { performance } = require('perf_hooks'); -const yargs = require('yargs/yargs'); -const { hideBin } = require('yargs/helpers'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const CampaignParticipation = require('../../lib/domain/models/CampaignParticipation'); -const logger = require('../../lib/infrastructure/logger'); -const badgeAcquisitionRepository = require('../../lib/infrastructure/repositories/badge-acquisition-repository'); -const badgeForCalculationRepository = require('../../lib/infrastructure/repositories/badge-for-calculation-repository'); -const knowledgeElementRepository = require('../../lib/infrastructure/repositories/knowledge-element-repository'); -const { cache } = require('../../lib/infrastructure/caches/learning-content-cache'); +import _ from 'lodash'; +import bluebird from 'bluebird'; +import perf_hooks from 'perf_hooks'; + +const { performance } = perf_hooks; + +import yargs from 'yargs/yargs'; +import { hideBin } from 'yargs/helpers'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import { CampaignParticipation } from '../../lib/domain/models/CampaignParticipation.js'; +import { logger } from '../../lib/infrastructure/logger.js'; +import * as badgeAcquisitionRepository from '../../lib/infrastructure/repositories/badge-acquisition-repository.js'; +import * as badgeForCalculationRepository from '../../lib/infrastructure/repositories/badge-for-calculation-repository.js'; +import * as knowledgeElementRepository from '../../lib/infrastructure/repositories/knowledge-element-repository.js'; +import { learningContentCache as cache } from '../../lib/infrastructure/caches/learning-content-cache.js'; +import * as url from 'url'; const MAX_RANGE_SIZE = 100_000; @@ -133,8 +138,8 @@ async function getCampaignParticipationsBetweenIds({ idMin, idMax }) { return campaignParticipations.map((campaignParticipation) => new CampaignParticipation(campaignParticipation)); } -const isLaunchedFromCommandLine = require.main === module; - +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; (async () => { if (isLaunchedFromCommandLine) { try { @@ -149,9 +154,4 @@ const isLaunchedFromCommandLine = require.main === module; } })(); -module.exports = { - normalizeRange, - computeAllBadgeAcquisitions, - computeBadgeAcquisition, - getCampaignParticipationsBetweenIds, -}; +export { normalizeRange, computeAllBadgeAcquisitions, computeBadgeAcquisition, getCampaignParticipationsBetweenIds }; diff --git a/api/scripts/prod/compute-participation-results.js b/api/scripts/prod/compute-participation-results.js index ec394492e2c..42d423b8071 100644 --- a/api/scripts/prod/compute-participation-results.js +++ b/api/scripts/prod/compute-participation-results.js @@ -1,16 +1,22 @@ // Usage: node compute-participation-results.js -require('dotenv').config({ path: `${__dirname}/../../.env` }); -const knowlegeElementSnapshotRepository = require('../../lib/infrastructure/repositories/knowledge-element-snapshot-repository'); -const campaignRepository = require('../../lib/infrastructure/repositories/campaign-repository'); -const ParticipantResultsShared = require('../../lib/domain/models/ParticipantResultsShared'); -const CampaignParticipationStatuses = require('../../lib/domain/models/CampaignParticipationStatuses'); +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +import * as dotenv from 'dotenv'; + +dotenv.config({ path: `${__dirname}/../../.env` }); +import * as knowlegeElementSnapshotRepository from '../../lib/infrastructure/repositories/knowledge-element-snapshot-repository.js'; +import * as campaignRepository from '../../lib/infrastructure/repositories/campaign-repository.js'; +import { ParticipantResultsShared } from '../../lib/domain/models/ParticipantResultsShared.js'; +import { CampaignParticipationStatuses } from '../../lib/domain/models/CampaignParticipationStatuses.js'; + const { SHARED } = CampaignParticipationStatuses; -const { knex, disconnect } = require('../../db/knex-database-connection'); -const _ = require('lodash'); -const bluebird = require('bluebird'); -const { constants } = require('../../lib/infrastructure/constants'); -const placementProfileService = require('../../lib/domain/services/placement-profile-service'); -const competenceRepository = require('../../lib/infrastructure/repositories/competence-repository'); +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import _ from 'lodash'; +import bluebird from 'bluebird'; +import { constants } from '../../lib/infrastructure/constants.js'; +import * as placementProfileService from '../../lib/domain/services/placement-profile-service.js'; +import * as competenceRepository from '../../lib/infrastructure/repositories/competence-repository.js'; const concurrency = parseInt(process.argv[2]); let count; @@ -141,7 +147,8 @@ function _toSQLValuesWithIsCertifiable(participantsResults) { .join(', '); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { await computeParticipantResultsShared(concurrency); @@ -161,4 +168,4 @@ async function main() { } })(); -module.exports = computeParticipantResultsShared; +export { computeParticipantResultsShared }; diff --git a/api/scripts/prod/create-assessment-campaigns-for-sco.js b/api/scripts/prod/create-assessment-campaigns-for-sco.js index 98c7bd7e44e..986912ccddf 100644 --- a/api/scripts/prod/create-assessment-campaigns-for-sco.js +++ b/api/scripts/prod/create-assessment-campaigns-for-sco.js @@ -1,13 +1,12 @@ -// Usage: node create-assessment-campaigns.js path/file.csv -// To use on file with columns |targetProfileId, name, externalId, title, customLandingPageText, creatorId|, those headers included -const bluebird = require('bluebird'); -const _ = require('lodash'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const CampaignTypes = require('../../lib/domain/models/CampaignTypes'); -const campaignCodeGenerator = require('../../lib/domain/services/campaigns/campaign-code-generator'); -const campaignValidator = require('../../lib/domain/validators/campaign-validator'); -const campaignRepository = require('../../lib/infrastructure/repositories/campaign-repository'); -const { parseCsvWithHeader } = require('../helpers/csvHelpers'); +import bluebird from 'bluebird'; +import _ from 'lodash'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import { CampaignTypes } from '../../lib/domain/models/CampaignTypes.js'; +import * as campaignCodeGenerator from '../../lib/domain/services/campaigns/campaign-code-generator.js'; +import * as campaignValidator from '../../lib/domain/validators/campaign-validator.js'; +import * as campaignRepository from '../../lib/infrastructure/repositories/campaign-repository.js'; +import { parseCsvWithHeader } from '../helpers/csvHelpers.js'; +import * as url from 'url'; function checkData(csvData) { return csvData.map(({ targetProfileId, name, externalId, title, customLandingPageText, creatorId }) => { @@ -47,7 +46,7 @@ async function prepareCampaigns(campaignsData) { campaignValidator.validate(campaign); campaign.code = await campaignCodeGenerator.generate(campaignRepository); - if (require.main === module) + if (isLaunchedFromCommandLine) process.stdout.write(`Campagne ${campaign.name} pour l'organisation ${campaign.organizationId} ===> ✔\n`); return campaign; }); @@ -72,7 +71,8 @@ function createAssessmentCampaignsForSco(campaigns) { return knex.batchInsert('campaigns', campaigns); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { const filePath = process.argv[2]; @@ -105,8 +105,4 @@ async function main() { } })(); -module.exports = { - prepareCampaigns, - checkData, - getByExternalIdFetchingIdOnly, -}; +export { prepareCampaigns, checkData, getByExternalIdFetchingIdOnly }; diff --git a/api/scripts/prod/create-organization-places-lot.js b/api/scripts/prod/create-organization-places-lot.js index e58ca77ae69..7f0a88ee441 100644 --- a/api/scripts/prod/create-organization-places-lot.js +++ b/api/scripts/prod/create-organization-places-lot.js @@ -1,9 +1,9 @@ -// Usage: node create-organization-places-lot.js path/file.csv -// To use on file with columns |createdBy, organizationId, count, category, reference, activationDate, expirationDate|, those headers included -const { knex, disconnect } = require('../../db/knex-database-connection'); -const { parseCsvWithHeader } = require('../helpers/csvHelpers'); -const OrganizationPlacesLot = require('../../lib/domain/models/OrganizationPlacesLot'); -const categories = require('../../lib/domain/constants/organization-places-categories'); +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import { parseCsvWithHeader } from '../helpers/csvHelpers.js'; +import { OrganizationPlacesLot } from '../../lib/domain/models/OrganizationPlacesLot.js'; +import * as categories from '../../lib/domain/constants/organization-places-categories.js'; +import * as url from 'url'; + const categoriesByCode = { [categories.T0]: categories.FREE_RATE, [categories.T1]: categories.PUBLIC_RATE, @@ -13,6 +13,7 @@ const categoriesByCode = { }; let logEnable; + async function prepareOrganizationPlacesLot(organizationPlacesLotData, log = true) { logEnable = log; const organizationPlacesLot = organizationPlacesLotData.map( @@ -44,7 +45,8 @@ function createOrganizationPlacesLots(organizationPlacesLot) { return knex.batchInsert('organization-places', organizationPlacesLot); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { const filePath = process.argv[2]; @@ -85,6 +87,4 @@ function _log(message) { } } -module.exports = { - prepareOrganizationPlacesLot, -}; +export { prepareOrganizationPlacesLot }; diff --git a/api/scripts/prod/create-profiles-collection-campaigns.js b/api/scripts/prod/create-profiles-collection-campaigns.js index c3a9caa1e21..9007d127bf0 100644 --- a/api/scripts/prod/create-profiles-collection-campaigns.js +++ b/api/scripts/prod/create-profiles-collection-campaigns.js @@ -1,12 +1,11 @@ -// Usage: node create-profile-collection-campaigns.js path/file.csv -// To use on file with columns |name, organizationId, customLandingPageText, creatorId|, those headers included -const bluebird = require('bluebird'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const CampaignTypes = require('../../lib/domain/models/CampaignTypes'); -const campaignCodeGenerator = require('../../lib/domain/services/campaigns/campaign-code-generator'); -const campaignValidator = require('../../lib/domain/validators/campaign-validator'); -const campaignRepository = require('../../lib/infrastructure/repositories/campaign-repository'); -const { parseCsvWithHeader } = require('../helpers/csvHelpers'); +import bluebird from 'bluebird'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import { CampaignTypes } from '../../lib/domain/models/CampaignTypes.js'; +import * as campaignCodeGenerator from '../../lib/domain/services/campaigns/campaign-code-generator.js'; +import * as campaignValidator from '../../lib/domain/validators/campaign-validator.js'; +import * as campaignRepository from '../../lib/infrastructure/repositories/campaign-repository.js'; +import { parseCsvWithHeader } from '../helpers/csvHelpers.js'; +import * as url from 'url'; function checkData(campaignData) { return campaignData.map(({ name, organizationId, customLandingPageText, creatorId }, index) => { @@ -44,7 +43,7 @@ async function prepareCampaigns(campaignsData) { campaign.code = await campaignCodeGenerator.generate(campaignRepository, generatedList); generatedList.push(campaign.code); - if (require.main === module) + if (isLaunchedFromCommandLine) process.stdout.write( `Campagne de collecte de profils ${campaign.name} pour l'organisation ${campaign.organizationId} ===> ✔\n` ); @@ -60,7 +59,8 @@ function createProfilesCollectionCampaigns(campaigns) { return knex.batchInsert('campaigns', campaigns); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { const filePath = process.argv[2]; @@ -93,7 +93,4 @@ async function main() { } })(); -module.exports = { - prepareCampaigns, - checkData, -}; +export { prepareCampaigns, checkData }; diff --git a/api/scripts/prod/generate-knowledge-element-snapshots-for-campaigns.js b/api/scripts/prod/generate-knowledge-element-snapshots-for-campaigns.js index 9f0a072fdd1..f5c670ea37f 100644 --- a/api/scripts/prod/generate-knowledge-element-snapshots-for-campaigns.js +++ b/api/scripts/prod/generate-knowledge-element-snapshots-for-campaigns.js @@ -1,9 +1,10 @@ -const yargs = require('yargs'); -const bluebird = require('bluebird'); -const { knex, disconnect } = require('../../db/knex-database-connection'); -const knowledgeElementRepository = require('../../lib/infrastructure/repositories/knowledge-element-repository'); -const knowledgeElementSnapshotRepository = require('../../lib/infrastructure/repositories/knowledge-element-snapshot-repository'); -const { AlreadyExistingEntityError } = require('../../lib/domain/errors'); +import yargs from 'yargs'; +import bluebird from 'bluebird'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import * as knowledgeElementRepository from '../../lib/infrastructure/repositories/knowledge-element-repository.js'; +import * as knowledgeElementSnapshotRepository from '../../lib/infrastructure/repositories/knowledge-element-snapshot-repository.js'; +import { AlreadyExistingEntityError } from '../../lib/domain/errors.js'; +import * as url from 'url'; const DEFAULT_MAX_SNAPSHOT_COUNT = 5000; const DEFAULT_CONCURRENCY = 3; @@ -60,14 +61,21 @@ async function getEligibleCampaignParticipations(maxSnapshotCount) { .limit(maxSnapshotCount); } -async function generateKnowledgeElementSnapshots(campaignParticipationData, concurrency) { +async function generateKnowledgeElementSnapshots( + campaignParticipationData, + concurrency, + dependencies = { knowledgeElementRepository, knowledgeElementSnapshotRepository } +) { return bluebird.map( campaignParticipationData, async (campaignParticipation) => { const { userId, sharedAt } = campaignParticipation; - const knowledgeElements = await knowledgeElementRepository.findUniqByUserId({ userId, limitDate: sharedAt }); + const knowledgeElements = await dependencies.knowledgeElementRepository.findUniqByUserId({ + userId, + limitDate: sharedAt, + }); try { - await knowledgeElementSnapshotRepository.save({ userId, snappedAt: sharedAt, knowledgeElements }); + await dependencies.knowledgeElementSnapshotRepository.save({ userId, snappedAt: sharedAt, knowledgeElements }); } catch (err) { if (!(err instanceof AlreadyExistingEntityError)) { throw err; @@ -78,7 +86,8 @@ async function generateKnowledgeElementSnapshots(campaignParticipationData, conc ); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { const commandLineArgs = yargs @@ -114,7 +123,4 @@ async function main() { } })(); -module.exports = { - getEligibleCampaignParticipations, - generateKnowledgeElementSnapshots, -}; +export { getEligibleCampaignParticipations, generateKnowledgeElementSnapshots }; diff --git a/api/scripts/prod/hide-skills-in-csv-export.js b/api/scripts/prod/hide-skills-in-csv-export.js index d94e2ef5f22..e217f43c982 100644 --- a/api/scripts/prod/hide-skills-in-csv-export.js +++ b/api/scripts/prod/hide-skills-in-csv-export.js @@ -1,10 +1,12 @@ -const { knex, disconnect } = require('../../db/knex-database-connection'); +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import * as url from 'url'; async function hideSkills() { await knex('organizations').where('showSkills', true).update({ showSkills: false }); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { await hideSkills(); @@ -23,6 +25,4 @@ async function main() { } })(); -module.exports = { - hideSkills, -}; +export { hideSkills }; diff --git a/api/scripts/prod/select-category-for-target-profiles.js b/api/scripts/prod/select-category-for-target-profiles.js index f76d67f1d96..ce74a1e12c9 100644 --- a/api/scripts/prod/select-category-for-target-profiles.js +++ b/api/scripts/prod/select-category-for-target-profiles.js @@ -1,16 +1,14 @@ -#! /usr/bin/env node -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const bluebird = require('bluebird'); -const groupBy = require('lodash/groupBy'); -const sum = require('lodash/sum'); -const has = require('lodash/has'); -const partition = require('lodash/partition'); -const negate = require('lodash/negate'); +import bluebird from 'bluebird'; +import lodash from 'lodash'; +const { groupBy, sum, has, partition, negate } = lodash; -const { readCsvFile, parseCsvData } = require('../helpers/csvHelpers'); -const { categories } = require('../../lib/domain/models/TargetProfile'); -const { knex, disconnect } = require('../../db/knex-database-connection'); +import { readCsvFile, parseCsvData } from '../helpers/csvHelpers.js'; +import { categories } from '../../lib/domain/models/TargetProfile.js'; +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import * as url from 'url'; const TARGET_PROFILE_ID_COLUMN = 'targetProfileId'; const CATEGORY_COLUMN = 'category'; @@ -58,7 +56,8 @@ function _isSupportedCategory(category) { return supportedCategories.includes(category); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('Starting script select-category-for-target-profiles'); @@ -95,7 +94,4 @@ async function main() { } })(); -module.exports = { - setCategoriesToTargetProfiles, - setCategoryToTargetProfiles, -}; +export { setCategoriesToTargetProfiles, setCategoryToTargetProfiles }; diff --git a/api/scripts/prod/swap-campaign-codes.js b/api/scripts/prod/swap-campaign-codes.js index 79ef20d76e2..19a3740f550 100644 --- a/api/scripts/prod/swap-campaign-codes.js +++ b/api/scripts/prod/swap-campaign-codes.js @@ -1,8 +1,8 @@ -const { knex } = require('../../db/knex-database-connection'); -const { generate } = require('../../lib/domain/services/campaigns/campaign-code-generator'); -const DomainTransaction = require('../../lib/infrastructure/DomainTransaction'); -const campaignRepository = require('../../lib/infrastructure/repositories/campaign-repository'); -const { disconnect } = require('../../db/knex-database-connection'); +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import { generate } from '../../lib/domain/services/campaigns/campaign-code-generator.js'; +import { DomainTransaction } from '../../lib/infrastructure/DomainTransaction.js'; +import * as campaignRepository from '../../lib/infrastructure/repositories/campaign-repository.js'; +import * as url from 'url'; async function swapCampaignCodes(campaignId, otherCampaignId) { const temporaryCode = await generate(campaignRepository); @@ -16,7 +16,8 @@ async function swapCampaignCodes(campaignId, otherCampaignId) { }); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; (async () => { if (isLaunchedFromCommandLine) { @@ -32,4 +33,4 @@ const isLaunchedFromCommandLine = require.main === module; } })(); -module.exports = { swapCampaignCodes }; +export { swapCampaignCodes }; diff --git a/api/scripts/prod/target-profile-migrations/common.js b/api/scripts/prod/target-profile-migrations/common.js index b9922318559..db971707fcd 100644 --- a/api/scripts/prod/target-profile-migrations/common.js +++ b/api/scripts/prod/target-profile-migrations/common.js @@ -1,41 +1,42 @@ -const _ = require('lodash'); +import _ from 'lodash'; +import * as skillRepository from '../../../lib/infrastructure/repositories/skill-repository.js'; +import * as tubeRepository from '../../../lib/infrastructure/repositories/tube-repository.js'; let allSkills; let allTubes; async function _cacheLearningContentData() { - const skillRepository = require('../../../lib/infrastructure/repositories/skill-repository'); allSkills = await skillRepository.list(); - const tubeRepository = require('../../../lib/infrastructure/repositories/tube-repository'); allTubes = await tubeRepository.list(); } let cached = false; -module.exports = { - async autoMigrateTargetProfile(id, trx) { - if (!cached) await _cacheLearningContentData(); - cached = true; - const skillIds = await trx('target-profiles_skills').pluck('skillId').where({ targetProfileId: id }); - if (skillIds.length === 0) throw new Error("Le profil cible n'a pas d'acquis."); - const skills = skillIds.map((skillId) => { - const foundSkill = allSkills.find((skill) => skill.id === skillId); - if (!foundSkill) return null; - if (!foundSkill.tubeId) throw new Error(`L'acquis "${skillId}" n'appartient à aucun sujet.`); - const tubeExists = Boolean(allTubes.find((tube) => tube.id === foundSkill.tubeId)); - if (!tubeExists) throw new Error(`Le sujet "${foundSkill.tubeId}" n'existe pas dans le référentiel.`); - return foundSkill; - }); - const skillsGroupedByTubeId = _.groupBy(_.compact(skills), 'tubeId'); - const tubes = []; - for (const [tubeId, skills] of Object.entries(skillsGroupedByTubeId)) { - const skillWithHighestDifficulty = _.maxBy(skills, 'difficulty'); - tubes.push({ - tubeId, - level: skillWithHighestDifficulty.difficulty, - }); - } - const completeTubes = tubes.map((tube) => { - return { ...tube, targetProfileId: id }; + +const autoMigrateTargetProfile = async function (id, trx) { + if (!cached) await _cacheLearningContentData(); + cached = true; + const skillIds = await trx('target-profiles_skills').pluck('skillId').where({ targetProfileId: id }); + if (skillIds.length === 0) throw new Error("Le profil cible n'a pas d'acquis."); + const skills = skillIds.map((skillId) => { + const foundSkill = allSkills.find((skill) => skill.id === skillId); + if (!foundSkill) return null; + if (!foundSkill.tubeId) throw new Error(`L'acquis "${skillId}" n'appartient à aucun sujet.`); + const tubeExists = Boolean(allTubes.find((tube) => tube.id === foundSkill.tubeId)); + if (!tubeExists) throw new Error(`Le sujet "${foundSkill.tubeId}" n'existe pas dans le référentiel.`); + return foundSkill; + }); + const skillsGroupedByTubeId = _.groupBy(_.compact(skills), 'tubeId'); + const tubes = []; + for (const [tubeId, skills] of Object.entries(skillsGroupedByTubeId)) { + const skillWithHighestDifficulty = _.maxBy(skills, 'difficulty'); + tubes.push({ + tubeId, + level: skillWithHighestDifficulty.difficulty, }); - await trx('target-profiles').update({ migration_status: 'AUTO' }).where({ id }); - await trx.batchInsert('target-profile_tubes', completeTubes); - }, + } + const completeTubes = tubes.map((tube) => { + return { ...tube, targetProfileId: id }; + }); + await trx('target-profiles').update({ migration_status: 'AUTO' }).where({ id }); + await trx.batchInsert('target-profile_tubes', completeTubes); }; + +export { autoMigrateTargetProfile }; diff --git a/api/scripts/prod/target-profile-migrations/convert-badges.js b/api/scripts/prod/target-profile-migrations/convert-badges.js index a06c255ec3d..0d194f5f355 100644 --- a/api/scripts/prod/target-profile-migrations/convert-badges.js +++ b/api/scripts/prod/target-profile-migrations/convert-badges.js @@ -1,15 +1,19 @@ -require('dotenv').config(); -const _ = require('lodash'); -const { knex, disconnect } = require('../../../db/knex-database-connection'); -const logger = require('../../../lib/infrastructure/logger'); -const cache = require('../../../lib/infrastructure/caches/learning-content-cache'); +import * as dotenv from 'dotenv'; + +dotenv.config(); +import _ from 'lodash'; +import { knex, disconnect } from '../../../db/knex-database-connection.js'; +import { logger } from '../../../lib/infrastructure/logger.js'; +import { learningContentCache as cache } from '../../../lib/infrastructure/caches/learning-content-cache.js'; +import * as skillRepository from '../../../lib/infrastructure/repositories/skill-repository.js'; +import * as tubeRepository from '../../../lib/infrastructure/repositories/tube-repository.js'; +import * as url from 'url'; let allSkills; let allTubes; + async function _cacheLearningContentData() { - const skillRepository = require('../../../lib/infrastructure/repositories/skill-repository'); allSkills = await skillRepository.list(); - const tubeRepository = require('../../../lib/infrastructure/repositories/tube-repository'); allTubes = await tubeRepository.list(); } @@ -130,10 +134,11 @@ async function _deleteSkillSetCriteria(badgeId, trx) { await trx('badge-criteria').where({ badgeId, scope: 'SkillSet' }).del(); } -if (require.main === module) { +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; + +if (isLaunchedFromCommandLine) { main(); } -module.exports = { - doJob, -}; +export { doJob }; diff --git a/api/scripts/prod/target-profile-migrations/convert-target-profiles-into-new-format.js b/api/scripts/prod/target-profile-migrations/convert-target-profiles-into-new-format.js index 015c5d80113..d79bf07f1ee 100644 --- a/api/scripts/prod/target-profile-migrations/convert-target-profiles-into-new-format.js +++ b/api/scripts/prod/target-profile-migrations/convert-target-profiles-into-new-format.js @@ -1,10 +1,12 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const _ = require('lodash'); -const { knex, disconnect } = require('../../../db/knex-database-connection'); -const logger = require('../../../lib/infrastructure/logger'); -const { learningContentCache } = require('../../../lib/infrastructure/caches/learning-content-cache'); -const { autoMigrateTargetProfile } = require('./common'); +import _ from 'lodash'; +import { knex, disconnect } from '../../../db/knex-database-connection.js'; +import { logger } from '../../../lib/infrastructure/logger.js'; +import { learningContentCache } from '../../../lib/infrastructure/caches/learning-content-cache.js'; +import { autoMigrateTargetProfile } from './common.js'; +import * as url from 'url'; async function main() { try { @@ -52,10 +54,10 @@ async function _convertTargetProfile(targetProfileId, trx) { return autoMigrateTargetProfile(targetProfileId, trx); } -if (require.main === module) { +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +if (isLaunchedFromCommandLine) { main(); } -module.exports = { - doJob, -}; +export { doJob }; diff --git a/api/scripts/prod/target-profile-migrations/extract-need-stages-migration.js b/api/scripts/prod/target-profile-migrations/extract-need-stages-migration.js index f453140c01a..e4c5b758a8a 100644 --- a/api/scripts/prod/target-profile-migrations/extract-need-stages-migration.js +++ b/api/scripts/prod/target-profile-migrations/extract-need-stages-migration.js @@ -1,11 +1,21 @@ -require('dotenv').config({ +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +import * as dotenv from 'dotenv'; + +dotenv.config({ path: `${__dirname}/../../../.env`, }); -const { resolve } = require('path'); -const { performance } = require('perf_hooks'); -const XLSX = require('xlsx'); -const logger = require('../../../lib/infrastructure/logger'); -const { writeFile } = require('fs/promises'); +import path from 'path'; +import { writeFile } from 'fs/promises'; + +const { performance } = perf_hooks; + +const { resolve } = path; + +import perf_hooks from 'perf_hooks'; +import XLSX from 'xlsx'; +import { logger } from '../../../lib/infrastructure/logger.js'; async function doJob(multiFormFiles) { const targetProfiles = Object.entries( @@ -64,8 +74,10 @@ function containsOnlyLevelStages(stageRows) { ); return levelStageRows.length === stageRows.length; } +const modulePath = url.fileURLToPath(import.meta.url); +const __filename = modulePath; -const isLaunchedFromCommandLine = require.main === module; +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { const startTime = performance.now(); @@ -88,4 +100,4 @@ async function main() { } })(); -module.exports = { doJob }; +export { doJob }; diff --git a/api/scripts/prod/target-profile-migrations/parse-xls-files-for-target-profiles-migration.js b/api/scripts/prod/target-profile-migrations/parse-xls-files-for-target-profiles-migration.js index 60ec36f08af..868fb007244 100644 --- a/api/scripts/prod/target-profile-migrations/parse-xls-files-for-target-profiles-migration.js +++ b/api/scripts/prod/target-profile-migrations/parse-xls-files-for-target-profiles-migration.js @@ -1,21 +1,31 @@ -require('dotenv').config({ +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +import * as dotenv from 'dotenv'; + +dotenv.config({ path: `${__dirname}/../../../.env`, }); -const _ = require('lodash'); -const { performance } = require('perf_hooks'); -const XLSX = require('xlsx'); -const logger = require('../../../lib/infrastructure/logger'); -const { cache } = require('../../../lib/infrastructure/caches/learning-content-cache'); -const { knex, disconnect } = require('../../../db/knex-database-connection'); -const { normalizeAndRemoveAccents } = require('../../../lib/domain/services/validation-treatments'); -const { autoMigrateTargetProfile } = require('./common'); +import _ from 'lodash'; +import perf_hooks from 'perf_hooks'; + +const { performance } = perf_hooks; + +import XLSX from 'xlsx'; +import { logger } from '../../../lib/infrastructure/logger.js'; +import { learningContentCache as cache } from '../../../lib/infrastructure/caches/learning-content-cache.js'; +import { knex, disconnect } from '../../../db/knex-database-connection.js'; +import { normalizeAndRemoveAccents } from '../../../lib/domain/services/validation-treatments.js'; +import { autoMigrateTargetProfile } from './common.js'; +import * as tubeRepository from '../../../lib/infrastructure/repositories/tube-repository.js'; let allTubes; + async function _cacheLearningContentData() { - const tubeRepository = require('../../../lib/infrastructure/repositories/tube-repository'); const tubes = await tubeRepository.list(); allTubes = tubes.map((tube) => ({ ...tube, normalizedName: normalizeAndRemoveAccents(tube.name) })); } + const report = []; async function doJob(mainFile, multiFormFiles, dryRun) { @@ -284,7 +294,9 @@ function _checkIfTPHasUnexpectedMultiformInstructions(id, multiFormData) { throw new Error(`Une feuille d'instructions "multiforme" existe pour ce profil cible.`); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +const __filename = modulePath; async function main() { const startTime = performance.now(); @@ -311,4 +323,4 @@ async function main() { } })(); -module.exports = { doJob }; +export { doJob }; diff --git a/api/scripts/prod/target-profile-migrations/replace-threshold1-with-first-skill-stage.js b/api/scripts/prod/target-profile-migrations/replace-threshold1-with-first-skill-stage.js index 9733ebfc249..b3c00cec731 100644 --- a/api/scripts/prod/target-profile-migrations/replace-threshold1-with-first-skill-stage.js +++ b/api/scripts/prod/target-profile-migrations/replace-threshold1-with-first-skill-stage.js @@ -1,10 +1,17 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; dotenv.config(); -const { performance } = require('perf_hooks'); -const logger = require('../../../lib/infrastructure/logger'); -const { cache } = require('../../../lib/infrastructure/caches/learning-content-cache'); +import perf_hooks from 'perf_hooks'; -const { knex, disconnect } = require('../../../db/knex-database-connection'); +const { performance } = perf_hooks; + +import { logger } from '../../../lib/infrastructure/logger.js'; +import { learningContentCache as cache } from '../../../lib/infrastructure/caches/learning-content-cache.js'; +import { knex, disconnect } from '../../../db/knex-database-connection.js'; +import * as url from 'url'; + +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +const __filename = modulePath; const replaceThreshold = async () => { const results = await knex('stages').select('*').where('threshold', 1); @@ -17,8 +24,6 @@ const replaceThreshold = async () => { logger.info(`${ids.length} paliers convertis...`); }; -const isLaunchedFromCommandLine = require.main === module; - async function main() { const startTime = performance.now(); logger.info(`Script ${__filename} has started`); @@ -42,4 +47,4 @@ async function main() { } })(); -module.exports = { main }; +export { main }; diff --git a/api/scripts/prod/target-profile-migrations/update-pix-plus-edu-badges.js b/api/scripts/prod/target-profile-migrations/update-pix-plus-edu-badges.js index 0736b0b435c..e1ebe440865 100644 --- a/api/scripts/prod/target-profile-migrations/update-pix-plus-edu-badges.js +++ b/api/scripts/prod/target-profile-migrations/update-pix-plus-edu-badges.js @@ -1,16 +1,23 @@ -require('dotenv').config({ - path: `${__dirname}/../../../.env`, -}); -const { performance } = require('perf_hooks'); -const XLSX = require('xlsx'); -const logger = require('../../../lib/infrastructure/logger'); -const { cache } = require('../../../lib/infrastructure/caches/learning-content-cache'); -const { knex, disconnect } = require('../../../db/knex-database-connection'); -const { normalizeAndRemoveAccents } = require('../../../lib/domain/services/validation-treatments'); +// Usage: node compute-participation-results.js +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +import * as dotenv from 'dotenv'; + +dotenv.config({ path: `${__dirname}/../../../.env` }); +import perf_hooks from 'perf_hooks'; + +const { performance } = perf_hooks; + +import XLSX from 'xlsx'; +import { logger } from '../../../lib/infrastructure/logger.js'; +import { learningContentCache as cache } from '../../../lib/infrastructure/caches/learning-content-cache.js'; +import { knex, disconnect } from '../../../db/knex-database-connection.js'; +import { normalizeAndRemoveAccents } from '../../../lib/domain/services/validation-treatments.js'; +import * as tubeRepository from '../../../lib/infrastructure/repositories/tube-repository.js'; let allTubes; async function _cacheLearningContentData() { - const tubeRepository = require('../../../lib/infrastructure/repositories/tube-repository'); const tubes = await tubeRepository.list(); allTubes = tubes.map((tube) => ({ ...tube, normalizedName: normalizeAndRemoveAccents(tube.name) })); } @@ -167,7 +174,9 @@ async function _writeCriteriaInDB(badgeId, criterionName, criterionThreshold, ta }); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +const __filename = modulePath; async function main() { const startTime = performance.now(); @@ -194,4 +203,4 @@ async function main() { } })(); -module.exports = { doJob }; +export { doJob }; diff --git a/api/scripts/prod/update-documentation-url.js b/api/scripts/prod/update-documentation-url.js index e9b87e0d04a..d53249737e7 100644 --- a/api/scripts/prod/update-documentation-url.js +++ b/api/scripts/prod/update-documentation-url.js @@ -1,4 +1,5 @@ -const { knex, disconnect } = require('../../db/knex-database-connection'); +import { knex, disconnect } from '../../db/knex-database-connection.js'; +import * as url from 'url'; async function updateDocumentationUrl() { await _updateProOrganizations(); @@ -53,10 +54,7 @@ const URL = { PIXTERRITOIRES: 'https://cloud.pix.fr/s/deploiement_pixterritoires', }; -module.exports = { - updateDocumentationUrl, - URL, -}; +export { updateDocumentationUrl, URL }; async function _updateProOrganizations() { await knex('organizations').where('type', 'PRO').update({ documentationUrl: URL.PRO }); @@ -231,7 +229,8 @@ async function _updateAGRIOrganizations() { await knex('organizations').whereIn('id', ids).update({ documentationUrl: URL.AGRI }); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { await updateDocumentationUrl(); diff --git a/api/scripts/refresh-cache.js b/api/scripts/refresh-cache.js index e427808e650..31978b7f5d8 100755 --- a/api/scripts/refresh-cache.js +++ b/api/scripts/refresh-cache.js @@ -1,11 +1,10 @@ -#! /usr/bin/env node -'use strict'; -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const logger = require('../lib/infrastructure/logger'); -const { learningContentCache } = require('../lib/infrastructure/caches/learning-content-cache'); +import { logger } from '../lib/infrastructure/logger.js'; +import { learningContentCache } from '../lib/infrastructure/caches/learning-content-cache.js'; -const learningContentDatasource = require('../lib/infrastructure/datasources/learning-content/datasource'); +import * as learningContentDatasource from '../lib/infrastructure/datasources/learning-content/datasource.js'; logger.info('Starting refreshing Learning Content'); learningContentDatasource diff --git a/api/scripts/send-invitations-to-sco-organizations.js b/api/scripts/send-invitations-to-sco-organizations.js index 97fdc4a4604..3cd5852fb2a 100644 --- a/api/scripts/send-invitations-to-sco-organizations.js +++ b/api/scripts/send-invitations-to-sco-organizations.js @@ -1,17 +1,16 @@ -const bluebird = require('bluebird'); +import bluebird from 'bluebird'; -const { NotFoundError } = require('../lib/domain/errors'); +import { NotFoundError } from '../lib/domain/errors.js'; +import { parseCsvWithHeader } from '../scripts/helpers/csvHelpers.js'; +import { disconnect } from '../db/knex-database-connection.js'; -const { parseCsvWithHeader } = require('../scripts/helpers/csvHelpers'); -const { disconnect } = require('../db/knex-database-connection'); +import * as bookshelfToDomainConverter from '../lib/infrastructure/utils/bookshelf-to-domain-converter.js'; +import { BookshelfOrganization } from '../lib/infrastructure/orm-models/Organization.js'; -const bookshelfToDomainConverter = require('../lib/infrastructure/utils/bookshelf-to-domain-converter'); -const BookshelfOrganization = require('../lib/infrastructure/orm-models/Organization'); - -const organizationInvitationService = require('../lib/domain/services/organization-invitation-service'); - -const organizationRepository = require('../lib/infrastructure/repositories/organization-repository'); -const organizationInvitationRepository = require('../lib/infrastructure/repositories/organization-invitation-repository'); +import * as organizationInvitationService from '../lib/domain/services/organization-invitation-service.js'; +import * as organizationRepository from '../lib/infrastructure/repositories/organization-repository.js'; +import * as organizationInvitationRepository from '../lib/infrastructure/repositories/organization-invitation-repository.js'; +import * as url from 'url'; const TAGS = ['JOIN_ORGA']; @@ -40,7 +39,7 @@ async function prepareDataForSending(objectsFromFile) { async function sendJoinOrganizationInvitations(invitations, tags) { return bluebird.mapSeries(invitations, ({ organizationId, email }, index) => { - if (require.main === module) { + if (isLaunchedFromCommandLine) { process.stdout.write(`${index}/${invitations.length}\r`); } @@ -54,7 +53,8 @@ async function sendJoinOrganizationInvitations(invitations, tags) { }); } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('Start sending "join SCO organization" invitations to users.'); @@ -89,9 +89,4 @@ async function main() { } })(); -module.exports = { - getOrganizationByExternalId, - buildInvitation, - prepareDataForSending, - sendJoinOrganizationInvitations, -}; +export { getOrganizationByExternalId, buildInvitation, prepareDataForSending, sendJoinOrganizationInvitations }; diff --git a/api/scripts/switch-campaign-to-flash.js b/api/scripts/switch-campaign-to-flash.js index 372ac9d5888..d68c66aeeed 100644 --- a/api/scripts/switch-campaign-to-flash.js +++ b/api/scripts/switch-campaign-to-flash.js @@ -1,9 +1,10 @@ -'use strict'; -const _ = require('lodash'); -const dotenv = require('dotenv'); +import _ from 'lodash'; +import dotenv from 'dotenv'; + dotenv.config(); -const { knex } = require('../db/knex-database-connection'); -const Assessment = require('../lib/domain/models/Assessment'); +import { knex } from '../db/knex-database-connection.js'; +import { Assessment } from '../lib/domain/models/Assessment.js'; +import * as url from 'url'; async function switchCampaignToFlash(id) { await knex('campaigns').update({ assessmentMethod: Assessment.methods.FLASH }).where({ id }); @@ -17,7 +18,9 @@ async function main(id) { await switchCampaignToFlash(id); } -if (require.main === module) { +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +if (isLaunchedFromCommandLine) { const id = parseInt(process.argv[2]); main(id).catch((err) => { @@ -26,4 +29,4 @@ if (require.main === module) { }); } -module.exports = { switchCampaignToFlash }; +export { switchCampaignToFlash }; diff --git a/api/scripts/toggle-is-for-absolute-novice-campaign-attribute.js b/api/scripts/toggle-is-for-absolute-novice-campaign-attribute.js index c6c77b47874..0428080c6ef 100644 --- a/api/scripts/toggle-is-for-absolute-novice-campaign-attribute.js +++ b/api/scripts/toggle-is-for-absolute-novice-campaign-attribute.js @@ -1,10 +1,13 @@ -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const { performance } = require('perf_hooks'); -const logger = require('../lib/infrastructure/logger'); -const { cache } = require('../lib/infrastructure/caches/learning-content-cache'); +import perf_hooks from 'perf_hooks'; + +const { performance } = perf_hooks; -const { knex, disconnect } = require('../db/knex-database-connection'); +import { logger } from '../lib/infrastructure/logger.js'; +import { learningContentCache as cache } from '../lib/infrastructure/caches/learning-content-cache.js'; +import { knex, disconnect } from '../db/knex-database-connection.js'; async function toggleIsForAbsoluteNoviceCampaignAttribute(campaignId) { const campaign = await knex.select('isForAbsoluteNovice').from('campaigns').where({ id: campaignId }).first(); @@ -14,7 +17,11 @@ async function toggleIsForAbsoluteNoviceCampaignAttribute(campaignId) { await knex('campaigns').update({ isForAbsoluteNovice: !campaign.isForAbsoluteNovice }).where({ id: campaignId }); } -const isLaunchedFromCommandLine = require.main === module; +import * as url from 'url'; + +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; +const __filename = modulePath; async function main() { const startTime = performance.now(); @@ -40,4 +47,4 @@ async function main() { } })(); -module.exports = { toggleIsForAbsoluteNoviceCampaignAttribute }; +export { toggleIsForAbsoluteNoviceCampaignAttribute }; diff --git a/api/scripts/update-sco-organizations-with-is-managing-students-to-true.js b/api/scripts/update-sco-organizations-with-is-managing-students-to-true.js index 9d2e3b13d67..91a458862e5 100644 --- a/api/scripts/update-sco-organizations-with-is-managing-students-to-true.js +++ b/api/scripts/update-sco-organizations-with-is-managing-students-to-true.js @@ -1,16 +1,17 @@ // Usage: BASE_URL=... PIXMASTER_EMAIL=... PIXMASTER_PASSWORD=... node update-sco-organizations-with-is-managing-students-to-true.js path/file.csv // To use on file with columns |externalId| -'use strict'; -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const { disconnect } = require('../db/knex-database-connection'); -const request = require('request-promise-native'); -const { +import { disconnect } from '../db/knex-database-connection.js'; +import request from 'request-promise-native'; +import { findOrganizationsByExternalIds, organizeOrganizationsByExternalId, -} = require('./helpers/organizations-by-external-id-helper'); -const { parseCsv } = require('./helpers/csvHelpers'); +} from './helpers/organizations-by-external-id-helper.js'; +import { parseCsv } from './helpers/csvHelpers.js'; +import * as url from 'url'; const baseUrl = process.env.BASE_URL || 'http://localhost:3000'; @@ -20,7 +21,7 @@ function checkData({ csvData }) { const [externalIdLowerCase] = data; if (!externalIdLowerCase) { - if (require.main === module) process.stdout.write('Found empty line in input file.'); + if (isLaunchedFromCommandLine) process.stdout.write('Found empty line in input file.'); return null; } const externalId = externalIdLowerCase.toUpperCase(); @@ -32,7 +33,7 @@ function checkData({ csvData }) { async function updateOrganizations({ accessToken, organizationsByExternalId, checkedData }) { for (let i = 0; i < checkedData.length; i++) { - if (require.main === module) process.stdout.write(`\n${i + 1}/${checkedData.length} `); + if (isLaunchedFromCommandLine) process.stdout.write(`\n${i + 1}/${checkedData.length} `); const { externalId } = checkedData[i]; const organization = organizationsByExternalId[externalId]; @@ -81,7 +82,8 @@ function _buildPatchOrganizationRequestObject(accessToken, organization) { }; } -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; async function main() { console.log('Starting setting is-managing-students to true.'); @@ -123,7 +125,4 @@ async function main() { } })(); -module.exports = { - checkData, - updateOrganizations, -}; +export { checkData, updateOrganizations }; diff --git a/api/scripts/update-sco-organizations-with-province-code-and-external-id.js b/api/scripts/update-sco-organizations-with-province-code-and-external-id.js index fa6a0f924c5..025734ba444 100644 --- a/api/scripts/update-sco-organizations-with-province-code-and-external-id.js +++ b/api/scripts/update-sco-organizations-with-province-code-and-external-id.js @@ -1,12 +1,14 @@ -'use strict'; -const dotenv = require('dotenv'); +import dotenv from 'dotenv'; + dotenv.config(); -const path = require('path'); -const fs = require('fs'); -const { access } = require('fs').promises; -const request = require('request-promise-native'); -const papa = require('papaparse'); -const { disconnect } = require('../db/knex-database-connection'); +import path from 'path'; +import fs from 'fs'; +import { access } from 'fs/promises'; + +import request from 'request-promise-native'; +import papa from 'papaparse'; +import { disconnect } from '../db/knex-database-connection.js'; +import * as url from 'url'; const CSV_HEADERS = { ID: 'Orga_ID', @@ -111,7 +113,9 @@ function _logErrorObjects(errorObjects) { * Usage: BASE_URL='url' (...) node update-sco-organizations-with-province-code-and-external-id.js my_file.csv */ -const isLaunchedFromCommandLine = require.main === module; +const modulePath = url.fileURLToPath(import.meta.url); +const isLaunchedFromCommandLine = process.argv[1] === modulePath; + async function main() { console.log("Début du script de mise à jour des Organisations avec l'ID externe et le département"); const filePath = process.argv[2]; @@ -155,8 +159,4 @@ async function main() { } })(); -module.exports = { - assertFileValidity, - convertCSVDataIntoOrganizations, - saveOrganizations, -}; +export { assertFileValidity, convertCSVDataIntoOrganizations, saveOrganizations }; diff --git a/api/server.js b/api/server.js index ff54ccfc77d..71410be3bb9 100644 --- a/api/server.js +++ b/api/server.js @@ -1,28 +1,24 @@ -const dotenv = require('dotenv'); -dotenv.config(); -const Hapi = require('@hapi/hapi'); -const Oppsy = require('oppsy'); - -const settings = require('./lib/config'); -const preResponseUtils = require('./lib/application/pre-response-utils'); - -const { routes } = require('./lib/routes'); -const plugins = require('./lib/infrastructure/plugins'); -const swaggers = require('./lib/swaggers'); -const authentication = require('./lib/infrastructure/authentication'); - -const { handleFailAction } = require('./lib/validate'); -const monitoringTools = require('./lib/infrastructure/monitoring-tools'); -const deserializer = require('./lib/infrastructure/serializers/jsonapi/deserializer'); -const { knex } = require('./db/knex-database-connection'); -const { port, logging } = require('./lib/config'); +import Hapi from '@hapi/hapi'; +import Oppsy from 'oppsy'; + +import { config } from './lib/config.js'; +import * as preResponseUtils from './lib/application/pre-response-utils.js'; +import { routes } from './lib/routes.js'; +import { plugins } from './lib/infrastructure/plugins/index.js'; +import { swaggers } from './lib/swaggers.js'; +import { authentication } from './lib/infrastructure/authentication.js'; +import { handleFailAction } from './lib/validate.js'; +import { monitoringTools } from './lib/infrastructure/monitoring-tools.js'; +import { deserializer } from './lib/infrastructure/serializers/jsonapi/deserializer.js'; +import { knex } from './db/knex-database-connection.js'; monitoringTools.installHapiHook(); +const { logOpsMetrics, port, logging } = config; const createServer = async () => { const server = createBareServer(); - if (settings.logOpsMetrics) await enableOpsMetrics(server); + if (logOpsMetrics) await enableOpsMetrics(server); setupErrorHandling(server); @@ -115,4 +111,4 @@ const setupOpenApiSpecification = async function (server) { } }; -module.exports = createServer; +export { createServer }; diff --git a/api/tests/.eslintrc.yaml b/api/tests/.eslintrc.yaml index b03cc9766eb..aeb9692a855 100644 --- a/api/tests/.eslintrc.yaml +++ b/api/tests/.eslintrc.yaml @@ -6,3 +6,5 @@ env: rules: no-console: - error + mocha/no-setup-in-describe: + - warn diff --git a/api/tests/acceptance/application/account-recovery/account-recovery-route-get_test.js b/api/tests/acceptance/application/account-recovery/account-recovery-route-get_test.js index 25f4fb892d4..0a5d0d84826 100644 --- a/api/tests/acceptance/application/account-recovery/account-recovery-route-get_test.js +++ b/api/tests/acceptance/application/account-recovery/account-recovery-route-get_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Application | Account-Recovery | Routes', function () { describe('GET /api/account-recovery/{temporaryKey}', function () { diff --git a/api/tests/acceptance/application/account-recovery/account-recovery-route-patch_test.js b/api/tests/acceptance/application/account-recovery/account-recovery-route-patch_test.js index 98e1344857c..cf6482c8c06 100644 --- a/api/tests/acceptance/application/account-recovery/account-recovery-route-patch_test.js +++ b/api/tests/acceptance/application/account-recovery/account-recovery-route-patch_test.js @@ -1,5 +1,5 @@ -const { databaseBuilder, expect, knex } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { databaseBuilder, expect, knex } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | Account-recovery', function () { describe('PATCH /api/account-recovery', function () { diff --git a/api/tests/acceptance/application/account-recovery/account-recovery-route_test.js b/api/tests/acceptance/application/account-recovery/account-recovery-route_test.js index 4c1628bbd67..e6b202a9e0d 100644 --- a/api/tests/acceptance/application/account-recovery/account-recovery-route_test.js +++ b/api/tests/acceptance/application/account-recovery/account-recovery-route_test.js @@ -1,5 +1,5 @@ -const { databaseBuilder, expect } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { databaseBuilder, expect } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | Account-recovery', function () { describe('POST /api/account-recovery', function () { diff --git a/api/tests/acceptance/application/admin-members/admin-members-routes_test.js b/api/tests/acceptance/application/admin-members/admin-members-routes_test.js index 026f4b4252f..19a8aaaa777 100644 --- a/api/tests/acceptance/application/admin-members/admin-members-routes_test.js +++ b/api/tests/acceptance/application/admin-members/admin-members-routes_test.js @@ -1,11 +1,14 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const { ROLES } = require('../../../../lib/domain/constants').PIX_ADMIN; +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { PIX_ADMIN } from '../../../../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; describe('Acceptance | Application | Admin-members | Routes', function () { describe('GET /api/admin/admin-members/me', function () { diff --git a/api/tests/acceptance/application/answers/answer-controller-find_test.js b/api/tests/acceptance/application/answers/answer-controller-find_test.js index d214ff8c4be..5d6cd201727 100644 --- a/api/tests/acceptance/application/answers/answer-controller-find_test.js +++ b/api/tests/acceptance/application/answers/answer-controller-find_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | answer-controller-find', function () { describe('GET /api/answers?challengeId=Y&assessmentId=Z', function () { diff --git a/api/tests/acceptance/application/answers/answer-controller-get-correction_test.js b/api/tests/acceptance/application/answers/answer-controller-get-correction_test.js index 9d75dae2178..3e06f391ee4 100644 --- a/api/tests/acceptance/application/answers/answer-controller-get-correction_test.js +++ b/api/tests/acceptance/application/answers/answer-controller-get-correction_test.js @@ -1,11 +1,14 @@ -const { +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder, mockLearningContent, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const { FRENCH_FRANCE } = require('../../../../lib/domain/constants').LOCALE; +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { FRENCH_FRANCE } = LOCALE; describe('Acceptance | Controller | answer-controller-get-correction', function () { let server; diff --git a/api/tests/acceptance/application/answers/answer-controller-get_test.js b/api/tests/acceptance/application/answers/answer-controller-get_test.js index bb2aece3398..0764819b6ff 100644 --- a/api/tests/acceptance/application/answers/answer-controller-get_test.js +++ b/api/tests/acceptance/application/answers/answer-controller-get_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | answer-controller-get', function () { describe('GET /api/answers/:id', function () { diff --git a/api/tests/acceptance/application/answers/answer-controller-save_test.js b/api/tests/acceptance/application/answers/answer-controller-save_test.js index 7b24e98d426..6f7b0dbccb8 100644 --- a/api/tests/acceptance/application/answers/answer-controller-save_test.js +++ b/api/tests/acceptance/application/answers/answer-controller-save_test.js @@ -1,12 +1,15 @@ -const { +import { expect, knex, databaseBuilder, mockLearningContent, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const { FRENCH_FRANCE, ENGLISH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { FRENCH_FRANCE, ENGLISH_SPOKEN } = LOCALE; describe('Acceptance | Controller | answer-controller-save', function () { let server; diff --git a/api/tests/acceptance/application/answers/answer-controller-update_test.js b/api/tests/acceptance/application/answers/answer-controller-update_test.js index a7a067f4626..24857beae23 100644 --- a/api/tests/acceptance/application/answers/answer-controller-update_test.js +++ b/api/tests/acceptance/application/answers/answer-controller-update_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | answer-controller-update', function () { describe('PATCH /api/answers/:id', function () { diff --git a/api/tests/acceptance/application/assessment-results/assessment-result-admin-controller_test.js b/api/tests/acceptance/application/assessment-results/assessment-result-admin-controller_test.js index fceb7bd995e..d5263c7853b 100644 --- a/api/tests/acceptance/application/assessment-results/assessment-result-admin-controller_test.js +++ b/api/tests/acceptance/application/assessment-results/assessment-result-admin-controller_test.js @@ -1,13 +1,13 @@ -const { +import { expect, knex, databaseBuilder, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; -const Assessment = require('../../../../lib/domain/models/Assessment'); +import { createServer } from '../../../../server.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; describe('Acceptance | Controller | assessment-results-controller', function () { let server; diff --git a/api/tests/acceptance/application/assessments/assessment-controller-auto-validate-next-challenge_test.js b/api/tests/acceptance/application/assessments/assessment-controller-auto-validate-next-challenge_test.js index 4d1da65cd64..ff28f167f4b 100644 --- a/api/tests/acceptance/application/assessments/assessment-controller-auto-validate-next-challenge_test.js +++ b/api/tests/acceptance/application/assessments/assessment-controller-auto-validate-next-challenge_test.js @@ -1,4 +1,4 @@ -const { +import { expect, databaseBuilder, knex, @@ -6,10 +6,11 @@ const { learningContentBuilder, insertUserWithRoleSuperAdmin, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); -const settings = require('../../../../lib/config'); -const createServer = require('../../../../server'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +} from '../../../test-helper.js'; + +import { config as settings } from '../../../../lib/config.js'; +import { createServer } from '../../../../server.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; const lastChallengeAnswer = 'last challenge answer'; const lastChallengeId = 'lastChallengeId'; @@ -55,7 +56,7 @@ describe('Acceptance | API | assessment-controller-auto-validate-next-challenge' settings.featureToggles.isAlwaysOkValidateNextChallengeEndpointEnabled = true; server = await createServer(); - const learningContentObjects = learningContentBuilder.buildLearningContent(learningContent); + const learningContentObjects = learningContentBuilder(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/acceptance/application/assessments/assessment-controller-complete-assessment_test.js b/api/tests/acceptance/application/assessments/assessment-controller-complete-assessment_test.js index 4e2c0db7e46..c8041c8af87 100644 --- a/api/tests/acceptance/application/assessments/assessment-controller-complete-assessment_test.js +++ b/api/tests/acceptance/application/assessments/assessment-controller-complete-assessment_test.js @@ -1,15 +1,16 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, knex, mockLearningContent, learningContentBuilder, -} = require('../../../test-helper'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const badgeAcquisitionRepository = require('../../../../lib/infrastructure/repositories/badge-acquisition-repository'); -const createServer = require('../../../../server'); -const TrainingTrigger = require('../../../../lib/domain/models/TrainingTrigger'); +} from '../../../test-helper.js'; + +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import * as badgeAcquisitionRepository from '../../../../lib/infrastructure/repositories/badge-acquisition-repository.js'; +import { createServer } from '../../../../server.js'; +import { TrainingTrigger } from '../../../../lib/domain/models/TrainingTrigger.js'; describe('Acceptance | Controller | assessment-controller-complete-assessment', function () { let options; @@ -150,7 +151,7 @@ describe('Acceptance | Controller | assessment-controller-complete-assessment', ]; beforeEach(async function () { - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); server = await createServer(); diff --git a/api/tests/acceptance/application/assessments/assessment-controller-find-competence-evaluations_test.js b/api/tests/acceptance/application/assessments/assessment-controller-find-competence-evaluations_test.js index 5af1ae471d0..f1c03e56f88 100644 --- a/api/tests/acceptance/application/assessments/assessment-controller-find-competence-evaluations_test.js +++ b/api/tests/acceptance/application/assessments/assessment-controller-find-competence-evaluations_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | API | assessment-controller-find-competence-evaluations', function () { let server; diff --git a/api/tests/acceptance/application/assessments/assessment-controller-get-challenge-for-pix-button_test.js b/api/tests/acceptance/application/assessments/assessment-controller-get-challenge-for-pix-button_test.js index 263c4377ae2..31f9caee1f2 100644 --- a/api/tests/acceptance/application/assessments/assessment-controller-get-challenge-for-pix-button_test.js +++ b/api/tests/acceptance/application/assessments/assessment-controller-get-challenge-for-pix-button_test.js @@ -1,4 +1,4 @@ -const { +import { expect, databaseBuilder, knex, @@ -6,9 +6,10 @@ const { learningContentBuilder, insertUserWithRoleSuperAdmin, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; const lastChallengeAnswer = 'last challenge answer'; const lastChallengeId = 'lastChallengeId'; @@ -50,7 +51,8 @@ describe('Acceptance | API | assessment-controller-get-challenge-answer-for-pix- beforeEach(async function () { server = await createServer(); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + learningContentBuilder.fromAreas; + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/acceptance/application/assessments/assessment-controller-get-last-challenge-id_test.js b/api/tests/acceptance/application/assessments/assessment-controller-get-last-challenge-id_test.js index 787ab6fb214..27bdb49d011 100644 --- a/api/tests/acceptance/application/assessments/assessment-controller-get-last-challenge-id_test.js +++ b/api/tests/acceptance/application/assessments/assessment-controller-get-last-challenge-id_test.js @@ -1,12 +1,13 @@ -const { +import { expect, databaseBuilder, knex, insertUserWithRoleSuperAdmin, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; describe('Acceptance | API | assessment-controller-get-last-challenge-id', function () { let server; diff --git a/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-for-campaign-assessment_test.js b/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-for-campaign-assessment_test.js index 39ae4dff0cc..7346d30857e 100644 --- a/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-for-campaign-assessment_test.js +++ b/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-for-campaign-assessment_test.js @@ -1,4 +1,4 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, @@ -6,9 +6,10 @@ const { learningContentBuilder, knex, sinon, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; const competenceId = 'recCompetence'; const skillWeb1Id = 'recAcquisWeb1'; @@ -69,7 +70,7 @@ describe('Acceptance | API | assessment-controller-get-next-challenge-for-campai beforeEach(async function () { server = await createServer(); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-for-competence-evaluation_test.js b/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-for-competence-evaluation_test.js index 56964525c1a..e82e1b512f1 100644 --- a/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-for-competence-evaluation_test.js +++ b/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-for-competence-evaluation_test.js @@ -1,4 +1,4 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, @@ -6,10 +6,11 @@ const { learningContentBuilder, knex, sinon, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; const competenceId = 'recCompetence'; const skillWeb1Id = 'recAcquisWeb1'; @@ -70,7 +71,7 @@ describe('Acceptance | API | assessment-controller-get-next-challenge-for-compet beforeEach(async function () { server = await createServer(); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-for-demo_test.js b/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-for-demo_test.js index f56ff4bf0e4..03b99b3d6e0 100644 --- a/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-for-demo_test.js +++ b/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-for-demo_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, mockLearningContent, learningContentBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, mockLearningContent, learningContentBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | API | assessment-controller-get-next-challenge-for-demo', function () { let server; @@ -40,7 +40,7 @@ describe('Acceptance | API | assessment-controller-get-next-challenge-for-demo', }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-locale-management.js b/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-locale-management.js index 0e9b603abe6..066bb5bc9bb 100644 --- a/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-locale-management.js +++ b/api/tests/acceptance/application/assessments/assessment-controller-get-next-challenge-locale-management.js @@ -1,14 +1,16 @@ -const { +import { learningContentBuilder, mockLearningContent, databaseBuilder, expect, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; -const Assessment = require('../../../../lib/domain/models/Assessment'); -const { FRENCH_FRANCE } = require('../../../../lib/domain/constants').LOCALE; +import { createServer } from '../../../../server.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { FRENCH_FRANCE } = LOCALE; const competenceId = 'recCompetence'; const frenchSpokenChallengeId = 'recFrenchSpokenChallengeId'; @@ -68,7 +70,7 @@ describe('Acceptance | API | assessment-controller-get-next-challenge-locale-man context('when assessment is a competence evaluation', function () { context('when there is one challenge in the accepted language (fr-fr)', function () { beforeEach(async function () { - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); databaseBuilder.factory.buildUser({ id: userId }); diff --git a/api/tests/acceptance/application/assessments/assessment-controller-get_test.js b/api/tests/acceptance/application/assessments/assessment-controller-get_test.js index e2a5acd90f0..8be93c86252 100644 --- a/api/tests/acceptance/application/assessments/assessment-controller-get_test.js +++ b/api/tests/acceptance/application/assessments/assessment-controller-get_test.js @@ -1,7 +1,10 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const { FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; -const Assessment = require('../../../../lib/domain/models/Assessment'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { FRENCH_SPOKEN } = LOCALE; + +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; describe('Acceptance | API | assessment-controller-get', function () { let server; diff --git a/api/tests/acceptance/application/assessments/assessment-controller-post_test.js b/api/tests/acceptance/application/assessments/assessment-controller-post_test.js index 78fcc6fad52..b1d663cf513 100644 --- a/api/tests/acceptance/application/assessments/assessment-controller-post_test.js +++ b/api/tests/acceptance/application/assessments/assessment-controller-post_test.js @@ -1,6 +1,6 @@ -const { expect, knex, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const BookshelfAssessment = require('../../../../lib/infrastructure/orm-models/Assessment'); +import { expect, knex, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import { BookshelfAssessment } from '../../../../lib/infrastructure/orm-models/Assessment.js'; describe('Acceptance | API | Assessments POST', function () { let server; diff --git a/api/tests/acceptance/application/assessments/assessment-controller-update-last-challenge-state_test.js b/api/tests/acceptance/application/assessments/assessment-controller-update-last-challenge-state_test.js index 79aba94e817..5fa969b9e54 100644 --- a/api/tests/acceptance/application/assessments/assessment-controller-update-last-challenge-state_test.js +++ b/api/tests/acceptance/application/assessments/assessment-controller-update-last-challenge-state_test.js @@ -1,13 +1,14 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, mockLearningContent, learningContentBuilder, knex, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; const competenceId = 'recCompetence'; const skillWeb2Id = 'recAcquisWeb2'; @@ -56,7 +57,7 @@ describe('Acceptance | API | assessment-controller-update-last-challenge-state', beforeEach(async function () { server = await createServer(); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/acceptance/application/authentication/authentication-route_test.js b/api/tests/acceptance/application/authentication/authentication-route_test.js index ab8cca963b5..1dbf616480d 100644 --- a/api/tests/acceptance/application/authentication/authentication-route_test.js +++ b/api/tests/acceptance/application/authentication/authentication-route_test.js @@ -1,10 +1,12 @@ -const querystring = require('querystring'); -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const tokenService = require('../../../../lib/domain/services/token-service'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); -const { ROLES } = require('../../../../lib/domain/constants').PIX_ADMIN; +import querystring from 'querystring'; +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { tokenService } from '../../../../lib/domain/services/token-service.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; +import { PIX_ADMIN } from '../../../../lib/domain/constants.js'; -const createServer = require('../../../../server'); +const { ROLES } = PIX_ADMIN; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | authentication-controller', function () { afterEach(async function () { diff --git a/api/tests/acceptance/application/authentication/oidc/authentication-url-route-get_test.js b/api/tests/acceptance/application/authentication/oidc/authentication-url-route-get_test.js index 75e61cd3194..4d0fb49793d 100644 --- a/api/tests/acceptance/application/authentication/oidc/authentication-url-route-get_test.js +++ b/api/tests/acceptance/application/authentication/oidc/authentication-url-route-get_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../../test-helper'); -const createServer = require('../../../../../server'); -const OidcIdentityProviders = require('../../../../../lib/domain/constants/oidc-identity-providers'); -const querystring = require('querystring'); +import { expect } from '../../../../test-helper.js'; +import { createServer } from '../../../../../server.js'; +import * as OidcIdentityProviders from '../../../../../lib/domain/constants/oidc-identity-providers.js'; +import querystring from 'querystring'; describe('Acceptance | Route | oidc authentication url', function () { let server; diff --git a/api/tests/acceptance/application/authentication/oidc/check-reconciliation-route-post_test.js b/api/tests/acceptance/application/authentication/oidc/check-reconciliation-route-post_test.js index f995c112aea..8f453af9419 100644 --- a/api/tests/acceptance/application/authentication/oidc/check-reconciliation-route-post_test.js +++ b/api/tests/acceptance/application/authentication/oidc/check-reconciliation-route-post_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, knex } = require('../../../../test-helper'); -const createServer = require('../../../../../server'); -const jsonwebtoken = require('jsonwebtoken'); -const authenticationSessionService = require('../../../../../lib/domain/services/authentication/authentication-session-service'); +import { expect, databaseBuilder, knex } from '../../../../test-helper.js'; +import { createServer } from '../../../../../server.js'; +import jsonwebtoken from 'jsonwebtoken'; +import * as authenticationSessionService from '../../../../../lib/domain/services/authentication/authentication-session-service.js'; describe('Acceptance | Application | Oidc | Routes', function () { describe('POST /api/oidc/user/check-reconciliation', function () { diff --git a/api/tests/acceptance/application/authentication/oidc/reconcile-route-post_test.js b/api/tests/acceptance/application/authentication/oidc/reconcile-route-post_test.js index 186dc6490b5..65ee08b5925 100644 --- a/api/tests/acceptance/application/authentication/oidc/reconcile-route-post_test.js +++ b/api/tests/acceptance/application/authentication/oidc/reconcile-route-post_test.js @@ -1,8 +1,8 @@ -const { expect, databaseBuilder } = require('../../../../test-helper'); -const createServer = require('../../../../../server'); -const jsonwebtoken = require('jsonwebtoken'); -const authenticationSessionService = require('../../../../../lib/domain/services/authentication/authentication-session-service'); -const OidcIdentityProviders = require('../../../../../lib/domain/constants/oidc-identity-providers'); +import { expect, databaseBuilder } from '../../../../test-helper.js'; +import { createServer } from '../../../../../server.js'; +import jsonwebtoken from 'jsonwebtoken'; +import * as authenticationSessionService from '../../../../../lib/domain/services/authentication/authentication-session-service.js'; +import * as OidcIdentityProviders from '../../../../../lib/domain/constants/oidc-identity-providers.js'; describe('Acceptance | Application | Oidc | Routes', function () { describe('POST /api/oidc/user/reconcile', function () { diff --git a/api/tests/acceptance/application/authentication/oidc/token-route-post_test.js b/api/tests/acceptance/application/authentication/oidc/token-route-post_test.js index c0063ef5dee..29ca83db740 100644 --- a/api/tests/acceptance/application/authentication/oidc/token-route-post_test.js +++ b/api/tests/acceptance/application/authentication/oidc/token-route-post_test.js @@ -1,18 +1,19 @@ -const jsonwebtoken = require('jsonwebtoken'); -const { +import jsonwebtoken from 'jsonwebtoken'; + +import { expect, databaseBuilder, knex, nock, sinon, generateValidRequestAuthorizationHeader, -} = require('../../../../test-helper'); +} from '../../../../test-helper.js'; -const createServer = require('../../../../../server'); -const settings = require('../../../../../lib/config'); -const AuthenticationSessionContent = require('../../../../../lib/domain/models/AuthenticationSessionContent'); -const authenticationSessionService = require('../../../../../lib/domain/services/authentication/authentication-session-service'); -const OidcIdentityProviders = require('../../../../../lib/domain/constants/oidc-identity-providers'); +import { createServer } from '../../../../../server.js'; +import { config as settings } from '../../../../../lib/config.js'; +import { AuthenticationSessionContent } from '../../../../../lib/domain/models/AuthenticationSessionContent.js'; +import * as authenticationSessionService from '../../../../../lib/domain/services/authentication/authentication-session-service.js'; +import * as OidcIdentityProviders from '../../../../../lib/domain/constants/oidc-identity-providers.js'; const uuidPattern = new RegExp(/^[0-9A-F]{8}-[0-9A-F]{4}-4[0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/i); diff --git a/api/tests/acceptance/application/authentication/oidc/users-route-post_test.js b/api/tests/acceptance/application/authentication/oidc/users-route-post_test.js index 3c83ed744bf..6b34c186828 100644 --- a/api/tests/acceptance/application/authentication/oidc/users-route-post_test.js +++ b/api/tests/acceptance/application/authentication/oidc/users-route-post_test.js @@ -1,9 +1,9 @@ -const jsonwebtoken = require('jsonwebtoken'); -const { expect, knex } = require('../../../../test-helper'); -const authenticationSessionService = require('../../../../../lib/domain/services/authentication/authentication-session-service'); -const createServer = require('../../../../../server'); -const AuthenticationSessionContent = require('../../../../../lib/domain/models/AuthenticationSessionContent'); -const OidcIdentityProviders = require('../../../../../lib/domain/constants/oidc-identity-providers'); +import jsonwebtoken from 'jsonwebtoken'; +import { expect, knex } from '../../../../test-helper.js'; +import * as authenticationSessionService from '../../../../../lib/domain/services/authentication/authentication-session-service.js'; +import { createServer } from '../../../../../server.js'; +import { AuthenticationSessionContent } from '../../../../../lib/domain/models/AuthenticationSessionContent.js'; +import * as OidcIdentityProviders from '../../../../../lib/domain/constants/oidc-identity-providers.js'; describe('Acceptance | Route | oidc users', function () { let server; diff --git a/api/tests/acceptance/application/badges/badge-controller_test.js b/api/tests/acceptance/application/badges/badge-controller_test.js index 7d05afe3f97..7ec7731073c 100644 --- a/api/tests/acceptance/application/badges/badge-controller_test.js +++ b/api/tests/acceptance/application/badges/badge-controller_test.js @@ -1,11 +1,12 @@ -const createServer = require('../../../../server'); -const { +import { createServer } from '../../../../server.js'; + +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, knex, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; describe('Acceptance | API | Badges', function () { let server, options, userId, badge; diff --git a/api/tests/acceptance/application/cache/cache-controller_test.js b/api/tests/acceptance/application/cache/cache-controller_test.js index f52d61eb3c2..18adf6b06f5 100644 --- a/api/tests/acceptance/application/cache/cache-controller_test.js +++ b/api/tests/acceptance/application/cache/cache-controller_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | cache-controller', function () { let server; diff --git a/api/tests/acceptance/application/campaign-administration/archive-campaigns_test.js b/api/tests/acceptance/application/campaign-administration/archive-campaigns_test.js index 942f19a3d85..e8b57319d88 100644 --- a/api/tests/acceptance/application/campaign-administration/archive-campaigns_test.js +++ b/api/tests/acceptance/application/campaign-administration/archive-campaigns_test.js @@ -1,7 +1,9 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import { PIX_ADMIN } from '../../../../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; -const createServer = require('../../../../server'); -const { ROLES } = require('../../../../lib/domain/constants').PIX_ADMIN; let server; describe('Acceptance | Application | campaign-controller-archive-campaigns', function () { diff --git a/api/tests/acceptance/application/campaign-participations/campaign-participation-controller_test.js b/api/tests/acceptance/application/campaign-participations/campaign-participation-controller_test.js index 686c15a4578..8a083abbdab 100644 --- a/api/tests/acceptance/application/campaign-participations/campaign-participation-controller_test.js +++ b/api/tests/acceptance/application/campaign-participations/campaign-participation-controller_test.js @@ -1,7 +1,8 @@ -const createServer = require('../../../../server'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); -const { +import { createServer } from '../../../../server.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; + +import { expect, databaseBuilder, mockLearningContent, @@ -9,7 +10,7 @@ const { generateValidRequestAuthorizationHeader, knex, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; const { SHARED, STARTED } = CampaignParticipationStatuses; @@ -53,7 +54,7 @@ describe('Acceptance | API | Campaign Participations', function () { ], }, ]; - const learningObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningObjects); options = { @@ -309,7 +310,7 @@ describe('Acceptance | API | Campaign Participations', function () { describe('GET /api/campaigns/{campaignId}/profiles-collection-participations/{campaignParticipationId}', function () { beforeEach(function () { - const learningObjects = learningContentBuilder.buildLearningContent.fromAreas([]); + const learningObjects = learningContentBuilder.fromAreas([]); mockLearningContent(learningObjects); }); diff --git a/api/tests/acceptance/application/campaign-participations/campaign-participations-controller-analyses_test.js b/api/tests/acceptance/application/campaign-participations/campaign-participations-controller-analyses_test.js index 63042cb9322..b8e2abb245f 100644 --- a/api/tests/acceptance/application/campaign-participations/campaign-participations-controller-analyses_test.js +++ b/api/tests/acceptance/application/campaign-participations/campaign-participations-controller-analyses_test.js @@ -1,12 +1,13 @@ -const createServer = require('../../../../server'); -const Membership = require('../../../../lib/domain/models/Membership'); -const { +import { createServer } from '../../../../server.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; + +import { expect, databaseBuilder, mockLearningContent, learningContentBuilder, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; describe('Acceptance | API | Campaign Participations | Analyses', function () { let server, options, userId, organization, campaign, campaignParticipation; @@ -82,7 +83,7 @@ describe('Acceptance | API | Campaign Participations | Analyses', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/acceptance/application/campaign-participations/campaign-participations-controller-find-shared-participations_test.js b/api/tests/acceptance/application/campaign-participations/campaign-participations-controller-find-shared-participations_test.js index 9bb6ddcccfc..e200293db75 100644 --- a/api/tests/acceptance/application/campaign-participations/campaign-participations-controller-find-shared-participations_test.js +++ b/api/tests/acceptance/application/campaign-participations/campaign-participations-controller-find-shared-participations_test.js @@ -1,11 +1,12 @@ -const createServer = require('../../../../server'); -const { +import { createServer } from '../../../../server.js'; + +import { expect, databaseBuilder, mockLearningContent, learningContentBuilder, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; describe('Acceptance | API | Campaign Participations | Results', function () { let server; @@ -45,7 +46,7 @@ describe('Acceptance | API | Campaign Participations | Results', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); campaign = databaseBuilder.factory.buildAssessmentCampaignForSkills({ organizationId: organization.id }, [skill]); diff --git a/api/tests/acceptance/application/campaigns/campaign-controller_test.js b/api/tests/acceptance/application/campaigns/campaign-controller_test.js index 9b5c02d64de..c68cdeda842 100644 --- a/api/tests/acceptance/application/campaigns/campaign-controller_test.js +++ b/api/tests/acceptance/application/campaigns/campaign-controller_test.js @@ -1,21 +1,21 @@ -const jwt = require('jsonwebtoken'); +import jwt from 'jsonwebtoken'; -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED } = CampaignParticipationStatuses; -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, knex, learningContentBuilder, mockLearningContent, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; -const settings = require('../../../../lib/config'); -const Membership = require('../../../../lib/domain/models/Membership'); -const createServer = require('../../../../server'); +import { config as settings } from '../../../../lib/config.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | API | Campaign Controller', function () { let campaign; @@ -136,7 +136,7 @@ describe('Acceptance | API | Campaign Controller', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -250,7 +250,7 @@ describe('Acceptance | API | Campaign Controller', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -339,7 +339,7 @@ describe('Acceptance | API | Campaign Controller', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -437,7 +437,7 @@ describe('Acceptance | API | Campaign Controller', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -579,7 +579,7 @@ describe('Acceptance | API | Campaign Controller', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -691,7 +691,7 @@ describe('Acceptance | API | Campaign Controller', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); // when @@ -815,7 +815,7 @@ describe('Acceptance | API | Campaign Controller', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); // when @@ -882,7 +882,7 @@ describe('Acceptance | API | Campaign Controller', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -1297,7 +1297,7 @@ describe('Acceptance | API | Campaign Controller', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/acceptance/application/campaigns/campaign-management-controller_test.js b/api/tests/acceptance/application/campaigns/campaign-management-controller_test.js index 5623a659757..44daa54808c 100644 --- a/api/tests/acceptance/application/campaigns/campaign-management-controller_test.js +++ b/api/tests/acceptance/application/campaigns/campaign-management-controller_test.js @@ -1,5 +1,5 @@ -const { databaseBuilder, expect, generateValidRequestAuthorizationHeader, knex } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, knex } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | API | Campaign Management Controller', function () { let server; diff --git a/api/tests/acceptance/application/campaigns/campaign-stats-controller_test.js b/api/tests/acceptance/application/campaigns/campaign-stats-controller_test.js index d2bcdd4ad3f..11d7e735141 100644 --- a/api/tests/acceptance/application/campaigns/campaign-stats-controller_test.js +++ b/api/tests/acceptance/application/campaigns/campaign-stats-controller_test.js @@ -1,12 +1,12 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, learningContentBuilder, mockLearningContent, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; -const createServer = require('../../../../server'); +import { createServer } from '../../../../server.js'; describe('Acceptance | API | Campaign Stats Controller', function () { let server; @@ -18,7 +18,7 @@ describe('Acceptance | API | Campaign Stats Controller', function () { describe('GET /api/campaigns/{id}/stats/participations-by-stage', function () { it('should return the campaign by id', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([ + const learningContentObjects = learningContentBuilder.fromAreas([ { id: 'recArea1', title_i18n: { diff --git a/api/tests/acceptance/application/certification-candidates/certification-candidates-controller_test.js b/api/tests/acceptance/application/certification-candidates/certification-candidates-controller_test.js index 09f26cb91d1..6db296bfd5f 100644 --- a/api/tests/acceptance/application/certification-candidates/certification-candidates-controller_test.js +++ b/api/tests/acceptance/application/certification-candidates/certification-candidates-controller_test.js @@ -1,6 +1,6 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const ComplementaryCertification = require('../../../../lib/domain/models/ComplementaryCertification'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import { ComplementaryCertification } from '../../../../lib/domain/models/ComplementaryCertification.js'; describe('Acceptance | API | Certifications candidates', function () { describe('POST /api/certification-candidates/:id/authorize-to-start', function () { diff --git a/api/tests/acceptance/application/certification-center-invitations/index_test.js b/api/tests/acceptance/application/certification-center-invitations/index_test.js index 3473daa4107..3663479a3d3 100644 --- a/api/tests/acceptance/application/certification-center-invitations/index_test.js +++ b/api/tests/acceptance/application/certification-center-invitations/index_test.js @@ -1,12 +1,13 @@ -const { +import { databaseBuilder, expect, knex, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const CertificationCenterInvitation = require('../../../../lib/domain/models/CertificationCenterInvitation'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { CertificationCenterInvitation } from '../../../../lib/domain/models/CertificationCenterInvitation.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | API | Certification center invitations', function () { let server; diff --git a/api/tests/acceptance/application/certification-center-memberships/certification-center-membership-controller_test.js b/api/tests/acceptance/application/certification-center-memberships/certification-center-membership-controller_test.js index a7952dc36f1..c40962b3dba 100644 --- a/api/tests/acceptance/application/certification-center-memberships/certification-center-membership-controller_test.js +++ b/api/tests/acceptance/application/certification-center-memberships/certification-center-membership-controller_test.js @@ -1,11 +1,12 @@ -const { +import { expect, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, databaseBuilder, sinon, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | API | Certification Center Membership', function () { let server; diff --git a/api/tests/acceptance/application/certification-centers/certification-center-controller-get-import-template_test.js b/api/tests/acceptance/application/certification-centers/certification-center-controller-get-import-template_test.js index bab6a504560..1b8e1a3bab3 100644 --- a/api/tests/acceptance/application/certification-centers/certification-center-controller-get-import-template_test.js +++ b/api/tests/acceptance/application/certification-centers/certification-center-controller-get-import-template_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | certification-center-controller-get-import-template', function () { let server; diff --git a/api/tests/acceptance/application/certification-centers/certification-center-controller_test.js b/api/tests/acceptance/application/certification-centers/certification-center-controller_test.js index dfaab8e2aae..dd474b392a1 100644 --- a/api/tests/acceptance/application/certification-centers/certification-center-controller_test.js +++ b/api/tests/acceptance/application/certification-centers/certification-center-controller_test.js @@ -1,14 +1,14 @@ -const _ = require('lodash'); +import _ from 'lodash'; -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, knex, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; -const createServer = require('../../../../server'); +import { createServer } from '../../../../server.js'; describe('Acceptance | API | Certification Center', function () { let server, request; diff --git a/api/tests/acceptance/application/certification-centers/certification-centers-route-get_test.js b/api/tests/acceptance/application/certification-centers/certification-centers-route-get_test.js index a2fdfd33e98..5751ec0d15a 100644 --- a/api/tests/acceptance/application/certification-centers/certification-centers-route-get_test.js +++ b/api/tests/acceptance/application/certification-centers/certification-centers-route-get_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Application | Certification-centers | Routes', function () { describe('GET /api/certification-centers/{certificationCenterId}/members', function () { diff --git a/api/tests/acceptance/application/certification-centers/certification-centers-route-post-session_test.js b/api/tests/acceptance/application/certification-centers/certification-centers-route-post-session_test.js index 3a49e5f31ff..e149e12e0d0 100644 --- a/api/tests/acceptance/application/certification-centers/certification-centers-route-post-session_test.js +++ b/api/tests/acceptance/application/certification-centers/certification-centers-route-post-session_test.js @@ -1,5 +1,5 @@ -const { expect, knex, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, knex, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | certification-centers-controller-post-session', function () { let server; diff --git a/api/tests/acceptance/application/certification-centers/index_test.js b/api/tests/acceptance/application/certification-centers/index_test.js index 747ac513852..76306e40e19 100644 --- a/api/tests/acceptance/application/certification-centers/index_test.js +++ b/api/tests/acceptance/application/certification-centers/index_test.js @@ -1,12 +1,13 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, knex, sinon, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | Certification Centers', function () { let server; diff --git a/api/tests/acceptance/application/certification-centers/sessions-mass-import/certification-centers-controller-post-create-sessions_test.js b/api/tests/acceptance/application/certification-centers/sessions-mass-import/certification-centers-controller-post-create-sessions_test.js index f9fbeaff618..5eeff4a422e 100644 --- a/api/tests/acceptance/application/certification-centers/sessions-mass-import/certification-centers-controller-post-create-sessions_test.js +++ b/api/tests/acceptance/application/certification-centers/sessions-mass-import/certification-centers-controller-post-create-sessions_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, knex, generateValidRequestAuthorizationHeader } = require('../../../../test-helper'); -const createServer = require('../../../../../server'); -const temporarySessionsStorageForMassImportService = require('../../../../../lib/domain/services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service'); +import { expect, databaseBuilder, knex, generateValidRequestAuthorizationHeader } from '../../../../test-helper.js'; +import { createServer } from '../../../../../server.js'; +import * as temporarySessionsStorageForMassImportService from '../../../../../lib/domain/services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service.js'; describe('Acceptance | Controller | certification-centers-controller-post-create-sessions', function () { describe('POST /api/certification-centers/{certificationCenterId}/sessions/confirm-for-mass-import', function () { diff --git a/api/tests/acceptance/application/certification-centers/sessions-mass-import/certification-centers-controller-post-validate-sessions_test.js b/api/tests/acceptance/application/certification-centers/sessions-mass-import/certification-centers-controller-post-validate-sessions_test.js index 1b58613fe12..630dd452a24 100644 --- a/api/tests/acceptance/application/certification-centers/sessions-mass-import/certification-centers-controller-post-validate-sessions_test.js +++ b/api/tests/acceptance/application/certification-centers/sessions-mass-import/certification-centers-controller-post-validate-sessions_test.js @@ -1,12 +1,15 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, knex, sinon, -} = require('../../../../test-helper'); -const createServer = require('../../../../../server'); -const { omit } = require('lodash'); +} from '../../../../test-helper.js'; + +import { createServer } from '../../../../../server.js'; +import lodash from 'lodash'; + +const { omit } = lodash; describe('Acceptance | Controller | certification-centers-controller-post-validate-sessions', function () { let server; diff --git a/api/tests/acceptance/application/certification-courses/certification-course-controller_test.js b/api/tests/acceptance/application/certification-courses/certification-course-controller_test.js index 37159ff3cb0..deebd91e88b 100644 --- a/api/tests/acceptance/application/certification-courses/certification-course-controller_test.js +++ b/api/tests/acceptance/application/certification-courses/certification-course-controller_test.js @@ -1,4 +1,4 @@ -const { +import { expect, databaseBuilder, knex, @@ -6,14 +6,13 @@ const { mockLearningContent, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const { - CertificationIssueReportCategories, -} = require('../../../../lib/domain/models/CertificationIssueReportCategory'); -const CertificationAssessment = require('../../../../lib/domain/models/CertificationAssessment'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const ComplementaryCertificationCourseResult = require('../../../../lib/domain/models/ComplementaryCertificationCourseResult'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { CertificationIssueReportCategory } from '../../../../lib/domain/models/CertificationIssueReportCategory.js'; +import { CertificationAssessment } from '../../../../lib/domain/models/CertificationAssessment.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { ComplementaryCertificationCourseResult } from '../../../../lib/domain/models/ComplementaryCertificationCourseResult.js'; describe('Acceptance | API | Certification Course', function () { let server; @@ -58,7 +57,7 @@ describe('Acceptance | API | Certification Course', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); databaseBuilder.factory.buildCertificationCourse({ id: 1234, isV2Certification: true }); @@ -133,7 +132,7 @@ describe('Acceptance | API | Certification Course', function () { const user = databaseBuilder.factory.buildUser({}); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); databaseBuilder.factory.buildCertificationCourse({ id: 1234, isV2Certification: true, userId: user.id }); @@ -535,7 +534,7 @@ describe('Acceptance | API | Certification Course', function () { userId = certificationCourse.userId; databaseBuilder.factory.buildCertificationIssueReport({ certificationCourseId: certificationCourse.id, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, description: "il s'est enfuit de la session", }); @@ -841,7 +840,7 @@ describe('Acceptance | API | Certification Course', function () { context('when locale is fr-fr', function () { beforeEach(async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); certificationCandidate = databaseBuilder.factory.buildCertificationCandidate({ sessionId, @@ -902,7 +901,7 @@ describe('Acceptance | API | Certification Course', function () { context('when locale is en', function () { beforeEach(async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); certificationCandidate = databaseBuilder.factory.buildCertificationCandidate({ sessionId, diff --git a/api/tests/acceptance/application/certification-issue-reports/certification-issue-report-controller_test.js b/api/tests/acceptance/application/certification-issue-reports/certification-issue-report-controller_test.js index faff0888786..d3c43dfe3d5 100644 --- a/api/tests/acceptance/application/certification-issue-reports/certification-issue-report-controller_test.js +++ b/api/tests/acceptance/application/certification-issue-reports/certification-issue-report-controller_test.js @@ -1,11 +1,12 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, knex, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | certification-issue-report-controller', function () { describe('DELETE /api/certification-issue-reports/{id}', function () { diff --git a/api/tests/acceptance/application/certification-point-of-contacts/certification-point-of-contacts_test.js b/api/tests/acceptance/application/certification-point-of-contacts/certification-point-of-contacts_test.js index 8d91e96c22c..debbed8a847 100644 --- a/api/tests/acceptance/application/certification-point-of-contacts/certification-point-of-contacts_test.js +++ b/api/tests/acceptance/application/certification-point-of-contacts/certification-point-of-contacts_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | CertificationPointOfContact', function () { let server; diff --git a/api/tests/acceptance/application/certification-reports/certification-report-controller_test.js b/api/tests/acceptance/application/certification-reports/certification-report-controller_test.js index ae284c92481..b38dd62e6ce 100644 --- a/api/tests/acceptance/application/certification-reports/certification-report-controller_test.js +++ b/api/tests/acceptance/application/certification-reports/certification-report-controller_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, knex, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, knex, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | certification-report-controller', function () { let server, certificationCourseId, userId, sessionId, certificationCenterId; diff --git a/api/tests/acceptance/application/certifications-livret-scolaire/certification-controller_test.js b/api/tests/acceptance/application/certifications-livret-scolaire/certification-controller_test.js index 236742395eb..4365a52fa14 100644 --- a/api/tests/acceptance/application/certifications-livret-scolaire/certification-controller_test.js +++ b/api/tests/acceptance/application/certifications-livret-scolaire/certification-controller_test.js @@ -1,18 +1,20 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, generateValidRequestAuthorizationHeaderForApplication, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const { +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; + +import { buildOrganization, buildValidatedPublishedCertificationData, mockLearningContentCompetences, buildUser, buildOrganizationLearner, -} = require('../../../../tests/tooling/domain-builder/factory/build-certifications-results-for-ls'); +} from '../../../../tests/tooling/domain-builder/factory/build-certifications-results-for-ls.js'; describe('Acceptance | API | Certifications', function () { let server, options; diff --git a/api/tests/acceptance/application/certifications/index_test.js b/api/tests/acceptance/application/certifications/index_test.js index 9b3adb4dc95..f5eb4d6ff94 100644 --- a/api/tests/acceptance/application/certifications/index_test.js +++ b/api/tests/acceptance/application/certifications/index_test.js @@ -1,17 +1,16 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, mockLearningContent, learningContentBuilder, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const { - generateCertificateVerificationCode, -} = require('../../../../lib/domain/services/verify-certificate-code-service'); -const CertificationCenterInvitation = require('../../../../lib/domain/models/CertificationCenterInvitation'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { generateCertificateVerificationCode } from '../../../../lib/domain/services/verify-certificate-code-service.js'; +import { CertificationCenterInvitation } from '../../../../lib/domain/models/CertificationCenterInvitation.js'; describe('Acceptance | API | Certifications', function () { let server, options; @@ -138,7 +137,7 @@ describe('Acceptance | API | Certifications', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); return databaseBuilder.commit(); diff --git a/api/tests/acceptance/application/challenges/challenge-controller_test.js b/api/tests/acceptance/application/challenges/challenge-controller_test.js index a39698f2330..c544ebf5b76 100644 --- a/api/tests/acceptance/application/challenges/challenge-controller_test.js +++ b/api/tests/acceptance/application/challenges/challenge-controller_test.js @@ -1,5 +1,5 @@ -const { learningContentBuilder, expect, mockLearningContent } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { learningContentBuilder, expect, mockLearningContent } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | API | ChallengeController', function () { let server; @@ -51,7 +51,7 @@ describe('Acceptance | API | ChallengeController', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/acceptance/application/competence-evaluations/competence-evaluation-controller_test.js b/api/tests/acceptance/application/competence-evaluations/competence-evaluation-controller_test.js index 822d704e819..2fe8245c532 100644 --- a/api/tests/acceptance/application/competence-evaluations/competence-evaluation-controller_test.js +++ b/api/tests/acceptance/application/competence-evaluations/competence-evaluation-controller_test.js @@ -1,13 +1,15 @@ -const createServer = require('../../../../server'); -const { +import { createServer } from '../../../../server.js'; + +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder, knex, mockLearningContent, learningContentBuilder, -} = require('../../../test-helper'); -const { MAX_REACHABLE_PIX_BY_COMPETENCE } = require('../../../../lib/domain/constants'); +} from '../../../test-helper.js'; + +import { MAX_REACHABLE_PIX_BY_COMPETENCE } from '../../../../lib/domain/constants.js'; describe('Acceptance | API | Competence Evaluations', function () { let server; @@ -36,7 +38,7 @@ describe('Acceptance | API | Competence Evaluations', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/acceptance/application/complementary-certification-course-results/complementary-certification-course-results-controller_test.js b/api/tests/acceptance/application/complementary-certification-course-results/complementary-certification-course-results-controller_test.js index 26b84646909..d1c664965a7 100644 --- a/api/tests/acceptance/application/complementary-certification-course-results/complementary-certification-course-results-controller_test.js +++ b/api/tests/acceptance/application/complementary-certification-course-results/complementary-certification-course-results-controller_test.js @@ -1,11 +1,12 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const ComplementaryCertificationCourseResult = require('../../../../lib/domain/models/ComplementaryCertificationCourseResult'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { ComplementaryCertificationCourseResult } from '../../../../lib/domain/models/ComplementaryCertificationCourseResult.js'; describe('Acceptance | API | Certifications', function () { describe('POST /api/admin/complementary-certification-course-results', function () { diff --git a/api/tests/acceptance/application/complementary-certifications/complementary-certification-controller_test.js b/api/tests/acceptance/application/complementary-certifications/complementary-certification-controller_test.js index 7fd01541829..ac6da6f18d9 100644 --- a/api/tests/acceptance/application/complementary-certifications/complementary-certification-controller_test.js +++ b/api/tests/acceptance/application/complementary-certifications/complementary-certification-controller_test.js @@ -1,11 +1,12 @@ -const { +import { expect, databaseBuilder, insertUserWithRoleSuperAdmin, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const { CLEA, PIX_PLUS_EDU_1ER_DEGRE } = require('../../../../lib/domain/models/ComplementaryCertification'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { CLEA, PIX_PLUS_EDU_1ER_DEGRE } from '../../../../lib/domain/models/ComplementaryCertification.js'; describe('Acceptance | API | complementary-certification-controller', function () { let server; diff --git a/api/tests/acceptance/application/countries/countries-controller_test.js b/api/tests/acceptance/application/countries/countries-controller_test.js index ec0b87fd1db..077779f182c 100644 --- a/api/tests/acceptance/application/countries/countries-controller_test.js +++ b/api/tests/acceptance/application/countries/countries-controller_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | API | countries-controller', function () { let server; diff --git a/api/tests/acceptance/application/courses/course-controller_test.js b/api/tests/acceptance/application/courses/course-controller_test.js index 9ed94ef7c18..e4e93be81fc 100644 --- a/api/tests/acceptance/application/courses/course-controller_test.js +++ b/api/tests/acceptance/application/courses/course-controller_test.js @@ -1,11 +1,12 @@ -const { +import { expect, nock, generateValidRequestAuthorizationHeader, mockLearningContent, learningContentBuilder, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | API | Courses', function () { let server; @@ -47,7 +48,7 @@ describe('Acceptance | API | Courses', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/acceptance/application/feature-toggles/feature-toggle-controller_test.js b/api/tests/acceptance/application/feature-toggles/feature-toggle-controller_test.js index 91f27b7f13e..c3133d7e9e8 100644 --- a/api/tests/acceptance/application/feature-toggles/feature-toggle-controller_test.js +++ b/api/tests/acceptance/application/feature-toggles/feature-toggle-controller_test.js @@ -1,6 +1,5 @@ -const { expect } = require('../../../test-helper'); - -const createServer = require('../../../../server'); +import { expect } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | feature-toggle-controller', function () { let server; diff --git a/api/tests/acceptance/application/feedbacks/feedback-controller_test.js b/api/tests/acceptance/application/feedbacks/feedback-controller_test.js index 8b7d5699be9..0105f9b63b8 100644 --- a/api/tests/acceptance/application/feedbacks/feedback-controller_test.js +++ b/api/tests/acceptance/application/feedbacks/feedback-controller_test.js @@ -1,6 +1,6 @@ -const { expect, knex, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const Feedback = require('../../../../lib/infrastructure/orm-models/Feedback'); +import { expect, knex, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import { Feedback } from '../../../../lib/infrastructure/orm-models/Feedback.js'; describe('Acceptance | Controller | feedback-controller', function () { let server; diff --git a/api/tests/acceptance/application/finalized-session/finalized-session-controller-find-finalized-sessions-to-publish_test.js b/api/tests/acceptance/application/finalized-session/finalized-session-controller-find-finalized-sessions-to-publish_test.js index b0d27f0de95..75f90031464 100644 --- a/api/tests/acceptance/application/finalized-session/finalized-session-controller-find-finalized-sessions-to-publish_test.js +++ b/api/tests/acceptance/application/finalized-session/finalized-session-controller-find-finalized-sessions-to-publish_test.js @@ -1,10 +1,11 @@ -const { +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | finalized-session-controller-find-finalized-sessions-to-publish', function () { let server, options; diff --git a/api/tests/acceptance/application/finalized-session/finalized-session-controller-find-finalized-sessions-with-required-action_test.js b/api/tests/acceptance/application/finalized-session/finalized-session-controller-find-finalized-sessions-with-required-action_test.js index 5a33ac5d2b5..54c81bd9403 100644 --- a/api/tests/acceptance/application/finalized-session/finalized-session-controller-find-finalized-sessions-with-required-action_test.js +++ b/api/tests/acceptance/application/finalized-session/finalized-session-controller-find-finalized-sessions-with-required-action_test.js @@ -1,10 +1,11 @@ -const { +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | finalized-session-controller-find-finalized-sessions-with-required-action', function () { describe('GET /api/admin/sessions/with-required-action', function () { diff --git a/api/tests/acceptance/application/frameworks/frameworks-controller_test.js b/api/tests/acceptance/application/frameworks/frameworks-controller_test.js index 60b2e0f4907..6e428f9e85d 100644 --- a/api/tests/acceptance/application/frameworks/frameworks-controller_test.js +++ b/api/tests/acceptance/application/frameworks/frameworks-controller_test.js @@ -1,10 +1,11 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, mockLearningContent, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | frameworks-controller', function () { let server; diff --git a/api/tests/acceptance/application/memberships/membership-controller_test.js b/api/tests/acceptance/application/memberships/membership-controller_test.js index 842b978555f..119420d8195 100644 --- a/api/tests/acceptance/application/memberships/membership-controller_test.js +++ b/api/tests/acceptance/application/memberships/membership-controller_test.js @@ -1,8 +1,7 @@ -const _ = require('lodash'); -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader, knex } = require('../../../test-helper'); - -const createServer = require('../../../../server'); -const Membership = require('../../../../lib/domain/models/Membership'); +import _ from 'lodash'; +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, knex } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; describe('Acceptance | Controller | membership-controller', function () { let server; diff --git a/api/tests/acceptance/application/organization-invitations/organization-invitation-controller_test.js b/api/tests/acceptance/application/organization-invitations/organization-invitation-controller_test.js index 1c6c20eff93..8a3790ec369 100644 --- a/api/tests/acceptance/application/organization-invitations/organization-invitation-controller_test.js +++ b/api/tests/acceptance/application/organization-invitations/organization-invitation-controller_test.js @@ -1,9 +1,7 @@ -const { expect, knex, databaseBuilder } = require('../../../test-helper'); - -const Membership = require('../../../../lib/domain/models/Membership'); -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); - -const createServer = require('../../../../server'); +import { expect, knex, databaseBuilder } from '../../../test-helper.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Application | organization-invitation-controller', function () { let server; diff --git a/api/tests/acceptance/application/organization-learners/organization-learner-controller_test.js b/api/tests/acceptance/application/organization-learners/organization-learner-controller_test.js index f90b6657638..425cf4a27d9 100644 --- a/api/tests/acceptance/application/organization-learners/organization-learner-controller_test.js +++ b/api/tests/acceptance/application/organization-learners/organization-learner-controller_test.js @@ -1,12 +1,12 @@ -const { +import { databaseBuilder, expect, insertUserWithRoleSuperAdmin, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; -const createServer = require('../../../../server'); -const Membership = require('../../../../lib/domain/models/Membership'); +import { createServer } from '../../../../server.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; describe('Acceptance | Controller | organization-learner', function () { let server; diff --git a/api/tests/acceptance/application/organizations-administration/organization-administration-get_test.js b/api/tests/acceptance/application/organizations-administration/organization-administration-get_test.js index 81af934311f..5658d311a26 100644 --- a/api/tests/acceptance/application/organizations-administration/organization-administration-get_test.js +++ b/api/tests/acceptance/application/organizations-administration/organization-administration-get_test.js @@ -1,11 +1,11 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; -const createServer = require('../../../../server'); +import { createServer } from '../../../../server.js'; describe('Acceptance | Routes | organization-administration-controller', function () { let server; diff --git a/api/tests/acceptance/application/organizations-administration/organization-administration-patch_test.js b/api/tests/acceptance/application/organizations-administration/organization-administration-patch_test.js index 578b6bb0b50..65caaf0a0c5 100644 --- a/api/tests/acceptance/application/organizations-administration/organization-administration-patch_test.js +++ b/api/tests/acceptance/application/organizations-administration/organization-administration-patch_test.js @@ -1,12 +1,12 @@ -const { +import { expect, knex, databaseBuilder, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; -const createServer = require('../../../../server'); +import { createServer } from '../../../../server.js'; describe('Acceptance | Routes | organization-administration-controller', function () { let server; diff --git a/api/tests/acceptance/application/organizations/cancel-organization-invitation-delete_test.js b/api/tests/acceptance/application/organizations/cancel-organization-invitation-delete_test.js index fcef19cebf2..b07190b33b3 100644 --- a/api/tests/acceptance/application/organizations/cancel-organization-invitation-delete_test.js +++ b/api/tests/acceptance/application/organizations/cancel-organization-invitation-delete_test.js @@ -1,12 +1,13 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, insertOrganizationUserWithRoleAdmin, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; describe('Acceptance | Route | Organizations', function () { describe('DELETE /api/organizations/{id}/invitations/{invitationId}', function () { diff --git a/api/tests/acceptance/application/organizations/create-organization-places-lot_test.js b/api/tests/acceptance/application/organizations/create-organization-places-lot_test.js index 6c504d49c18..20edf59c0e4 100644 --- a/api/tests/acceptance/application/organizations/create-organization-places-lot_test.js +++ b/api/tests/acceptance/application/organizations/create-organization-places-lot_test.js @@ -1,12 +1,13 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, knex, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const organizationPlacesCategories = require('../../../../lib/domain/constants/organization-places-categories'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import * as organizationPlacesCategories from '../../../../lib/domain/constants/organization-places-categories.js'; describe('Acceptance | Route | Organizations', function () { describe('POST /api/admin/organizations/{id}/places', function () { diff --git a/api/tests/acceptance/application/organizations/delete-organization-places-lot_test.js b/api/tests/acceptance/application/organizations/delete-organization-places-lot_test.js index c2a65f40067..760a83fc930 100644 --- a/api/tests/acceptance/application/organizations/delete-organization-places-lot_test.js +++ b/api/tests/acceptance/application/organizations/delete-organization-places-lot_test.js @@ -1,10 +1,11 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | Organizations', function () { describe('DELETE /api/admin/organizations/{id}/places/{placeId}', function () { diff --git a/api/tests/acceptance/application/organizations/find-organization-places_test.js b/api/tests/acceptance/application/organizations/find-organization-places_test.js index 0eed3db688e..67458f9115d 100644 --- a/api/tests/acceptance/application/organizations/find-organization-places_test.js +++ b/api/tests/acceptance/application/organizations/find-organization-places_test.js @@ -1,11 +1,12 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const organizationPlacesLotCategories = require('../../../../lib/domain/constants/organization-places-categories'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import * as organizationPlacesLotCategories from '../../../../lib/domain/constants/organization-places-categories.js'; describe('Acceptance | Route | Organizations', function () { describe('GET /api/admin/organizations/{id}/places', function () { diff --git a/api/tests/acceptance/application/organizations/get-organization-places-capacity_test.js b/api/tests/acceptance/application/organizations/get-organization-places-capacity_test.js index e5a943ec2bd..0796900102a 100644 --- a/api/tests/acceptance/application/organizations/get-organization-places-capacity_test.js +++ b/api/tests/acceptance/application/organizations/get-organization-places-capacity_test.js @@ -1,11 +1,12 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const categories = require('../../../../lib/domain/constants/organization-places-categories'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import * as categories from '../../../../lib/domain/constants/organization-places-categories.js'; describe('Acceptance | Route | Organizations', function () { describe('GET /api/admin/organizations/{id}/places/capacity', function () { diff --git a/api/tests/acceptance/application/organizations/organization-controller-import-sco-organization-learners_test.js b/api/tests/acceptance/application/organizations/organization-controller-import-sco-organization-learners_test.js index 22ec2820ae8..1ec9cb9c11a 100644 --- a/api/tests/acceptance/application/organizations/organization-controller-import-sco-organization-learners_test.js +++ b/api/tests/acceptance/application/organizations/organization-controller-import-sco-organization-learners_test.js @@ -1,13 +1,13 @@ -const _ = require('lodash'); -const iconv = require('iconv-lite'); -const { expect, knex, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); - -const createServer = require('../../../../server'); -require('events').EventEmitter.defaultMaxListeners = 60; - -const Membership = require('../../../../lib/domain/models/Membership'); -const OrganizationLearnerImportHeader = require('../../../../lib/infrastructure/serializers/csv/organization-learner-import-header'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +import _ from 'lodash'; +import iconv from 'iconv-lite'; +import { expect, knex, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import { EventEmitter } from 'events'; +EventEmitter.defaultMaxListeners = 60; + +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { OrganizationLearnerImportHeader } from '../../../../lib/infrastructure/serializers/csv/organization-learner-import-header.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; const i18n = getI18n(); const organizationLearnerCsvColumns = new OrganizationLearnerImportHeader(i18n).columns diff --git a/api/tests/acceptance/application/organizations/organization-controller-import-sup-organization-learners_test.js b/api/tests/acceptance/application/organizations/organization-controller-import-sup-organization-learners_test.js index 7fae2079789..58ffa4eccf3 100644 --- a/api/tests/acceptance/application/organizations/organization-controller-import-sup-organization-learners_test.js +++ b/api/tests/acceptance/application/organizations/organization-controller-import-sup-organization-learners_test.js @@ -1,9 +1,8 @@ -const { expect, knex, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const Membership = require('../../../../lib/domain/models/Membership'); -const SupOrganizationLearnerImportHeader = require('../../../../lib/infrastructure/serializers/csv/sup-organization-learner-import-header'); - -const { getI18n } = require('../../../../tests/tooling/i18n/i18n'); -const createServer = require('../../../../server'); +import { expect, knex, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { SupOrganizationLearnerImportHeader } from '../../../../lib/infrastructure/serializers/csv/sup-organization-learner-import-header.js'; +import { getI18n } from '../../../../tests/tooling/i18n/i18n.js'; +import { createServer } from '../../../../server.js'; const i18n = getI18n(); const supOrganizationLearnerImportHeader = new SupOrganizationLearnerImportHeader(i18n).columns diff --git a/api/tests/acceptance/application/organizations/organization-controller-replace-sup-organization-learners_test.js b/api/tests/acceptance/application/organizations/organization-controller-replace-sup-organization-learners_test.js index 594d1595039..cea666894b6 100644 --- a/api/tests/acceptance/application/organizations/organization-controller-replace-sup-organization-learners_test.js +++ b/api/tests/acceptance/application/organizations/organization-controller-replace-sup-organization-learners_test.js @@ -1,9 +1,8 @@ -const { expect, knex, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const Membership = require('../../../../lib/domain/models/Membership'); -const SupOrganizationLearnerImportHeader = require('../../../../lib/infrastructure/serializers/csv/sup-organization-learner-import-header'); - -const { getI18n } = require('../../../../tests/tooling/i18n/i18n'); -const createServer = require('../../../../server'); +import { expect, knex, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { SupOrganizationLearnerImportHeader } from '../../../../lib/infrastructure/serializers/csv/sup-organization-learner-import-header.js'; +import { getI18n } from '../../../../tests/tooling/i18n/i18n.js'; +import { createServer } from '../../../../server.js'; const i18n = getI18n(); const supOrganizationLearnerImportHeader = new SupOrganizationLearnerImportHeader(i18n).columns diff --git a/api/tests/acceptance/application/organizations/organization-controller_test.js b/api/tests/acceptance/application/organizations/organization-controller_test.js index 0ba56270e25..5b59150d86a 100644 --- a/api/tests/acceptance/application/organizations/organization-controller_test.js +++ b/api/tests/acceptance/application/organizations/organization-controller_test.js @@ -1,7 +1,7 @@ -const _map = require('lodash/map'); -const _omit = require('lodash/omit'); +import lodash from 'lodash'; +const { map: _map, omit: _omit } = lodash; -const { +import { expect, knex, learningContentBuilder, @@ -10,15 +10,14 @@ const { generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, sinon, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; -const createServer = require('../../../../server'); - -const Membership = require('../../../../lib/domain/models/Membership'); -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const AssessmentResult = require('../../../../lib/domain/models/AssessmentResult'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); +import { createServer } from '../../../../server.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { AssessmentResult } from '../../../../lib/domain/models/AssessmentResult.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; describe('Acceptance | Application | organization-controller', function () { let server; @@ -1537,7 +1536,7 @@ describe('Acceptance | Application | organization-controller', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); user = databaseBuilder.factory.buildUser({}); @@ -1821,7 +1820,7 @@ describe('Acceptance | Application | organization-controller', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/acceptance/application/organizations/send-invitation-by-lang-and-role-route-post_test.js b/api/tests/acceptance/application/organizations/send-invitation-by-lang-and-role-route-post_test.js index f9f6f7f0734..90bc2eeecd7 100644 --- a/api/tests/acceptance/application/organizations/send-invitation-by-lang-and-role-route-post_test.js +++ b/api/tests/acceptance/application/organizations/send-invitation-by-lang-and-role-route-post_test.js @@ -1,12 +1,13 @@ -const { +import { databaseBuilder, expect, knex, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const Membership = require('../../../../lib/domain/models/Membership'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; describe('Acceptance | Route | Organizations', function () { describe('POST /api/admin/organizations/{id}/invitations', function () { diff --git a/api/tests/acceptance/application/passwords/password-controller_test.js b/api/tests/acceptance/application/passwords/password-controller_test.js index c616c288380..be58d8e14ee 100644 --- a/api/tests/acceptance/application/passwords/password-controller_test.js +++ b/api/tests/acceptance/application/passwords/password-controller_test.js @@ -1,11 +1,9 @@ -const { databaseBuilder, expect, knex, sinon } = require('../../../test-helper'); -const tokenService = require('../../../../lib/domain/services/token-service'); -const resetPasswordService = require('../../../../lib/domain/services/reset-password-service'); -const resetPasswordDemandRepository = require('../../../../lib/infrastructure/repositories/reset-password-demands-repository'); +import { databaseBuilder, expect, knex } from '../../../test-helper.js'; +import { tokenService } from '../../../../lib/domain/services/token-service.js'; +import * as resetPasswordService from '../../../../lib/domain/services/reset-password-service.js'; -const config = require('../../../../lib/config'); - -const createServer = require('../../../../server'); +import { config } from '../../../../lib/config.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | password-controller', function () { const email = 'user@example.net'; @@ -63,19 +61,6 @@ describe('Acceptance | Controller | password-controller', function () { expect(response.statusCode).to.equal(201); }); }); - - context('when existing email is provided, but some internal error has occurred', function () { - it('should reply with 500', async function () { - // given - sinon.stub(resetPasswordDemandRepository, 'create').rejects(new Error()); - - // when - const response = await server.inject(options); - - // then - expect(response.statusCode).to.equal(500); - }); - }); }); describe('GET /api/password-reset-demands/{temporaryKey}', function () { @@ -115,19 +100,6 @@ describe('Acceptance | Controller | password-controller', function () { }); }); - context('when something going wrong', function () { - it('should reply with 500 status code', async function () { - // given - sinon.stub(resetPasswordService, 'verifyDemand').rejects(new Error()); - - // when - const response = await server.inject(options); - - // then - expect(response.statusCode).to.equal(500); - }); - }); - context('when temporaryKey is linked to a password reset demand', function () { beforeEach(async function () { databaseBuilder.factory.buildUser({ email }); diff --git a/api/tests/acceptance/application/pole-emploi/envois-route-get_test.js b/api/tests/acceptance/application/pole-emploi/envois-route-get_test.js index 17043745aab..fc41d9f2ad3 100644 --- a/api/tests/acceptance/application/pole-emploi/envois-route-get_test.js +++ b/api/tests/acceptance/application/pole-emploi/envois-route-get_test.js @@ -1,13 +1,14 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeaderForApplication, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; + const poleEmploiSendingFactory = databaseBuilder.factory.poleEmploiSendingFactory; -const createServer = require('../../../../server'); -const settings = require('../../../../lib/config'); +import { createServer } from '../../../../server.js'; +import { config as settings } from '../../../../lib/config.js'; describe('Acceptance | API | Pole Emploi envois', function () { let server, options; diff --git a/api/tests/acceptance/application/prescribers/prescriber-controller_test.js b/api/tests/acceptance/application/prescribers/prescriber-controller_test.js index bf728d62171..ca416717375 100644 --- a/api/tests/acceptance/application/prescribers/prescriber-controller_test.js +++ b/api/tests/acceptance/application/prescribers/prescriber-controller_test.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); +import _ from 'lodash'; -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | Prescriber-controller', function () { let user; diff --git a/api/tests/acceptance/application/progressions/progression-controller_test.js b/api/tests/acceptance/application/progressions/progression-controller_test.js index 4cf2fa72285..ecdf83d8eab 100644 --- a/api/tests/acceptance/application/progressions/progression-controller_test.js +++ b/api/tests/acceptance/application/progressions/progression-controller_test.js @@ -1,11 +1,12 @@ -const { +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder, mockLearningContent, learningContentBuilder, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | API | Progressions', function () { let server; @@ -41,7 +42,7 @@ describe('Acceptance | API | Progressions', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); userId = databaseBuilder.factory.buildUser({}).id; diff --git a/api/tests/acceptance/application/saml/saml-controller_test.js b/api/tests/acceptance/application/saml/saml-controller_test.js index fdeb76c5a15..e245ded67c6 100644 --- a/api/tests/acceptance/application/saml/saml-controller_test.js +++ b/api/tests/acceptance/application/saml/saml-controller_test.js @@ -1,10 +1,10 @@ -const _ = require('lodash'); +import _ from 'lodash'; -const { databaseBuilder, expect, sinon } = require('../../../test-helper'); +import { databaseBuilder, expect, sinon } from '../../../test-helper.js'; -const samlify = require('samlify'); -const createServer = require('../../../../server'); -const settings = require('../../../../lib/config'); +import samlify from 'samlify'; +import { createServer } from '../../../../server.js'; +import { config as settings } from '../../../../lib/config.js'; const testCertificate = `MIICCzCCAXQCCQD2MlHh/QmGmjANBgkqhkiG9w0BAQsFADBKMQswCQYDVQQGEwJG UjEPMA0GA1UECAwGRlJBTkNFMQ4wDAYDVQQHDAVQQVJJUzEMMAoGA1UECgwDUElY diff --git a/api/tests/acceptance/application/sco-organization-learners/sco-organization-learner-controller_test.js b/api/tests/acceptance/application/sco-organization-learners/sco-organization-learner-controller_test.js index 29fa9d04005..1a02b5f7e99 100644 --- a/api/tests/acceptance/application/sco-organization-learners/sco-organization-learner-controller_test.js +++ b/api/tests/acceptance/application/sco-organization-learners/sco-organization-learner-controller_test.js @@ -1,13 +1,13 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, knex, generateIdTokenForExternalUser, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; -const createServer = require('../../../../server'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); +import { createServer } from '../../../../server.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; describe('Acceptance | Controller | sco-organization-learners', function () { let server; diff --git a/api/tests/acceptance/application/scorecards/scorecard-controller_test.js b/api/tests/acceptance/application/scorecards/scorecard-controller_test.js index 91c1a332b49..0a84d709092 100644 --- a/api/tests/acceptance/application/scorecards/scorecard-controller_test.js +++ b/api/tests/acceptance/application/scorecards/scorecard-controller_test.js @@ -1,14 +1,17 @@ -const { +import { databaseBuilder, expect, knex, generateValidRequestAuthorizationHeader, mockLearningContent, -} = require('../../../test-helper'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const { FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +} from '../../../test-helper.js'; -const createServer = require('../../../../server'); +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { FRENCH_SPOKEN } = LOCALE; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | scorecard-controller', function () { let options; diff --git a/api/tests/acceptance/application/scoring-simulator/scoring-simulator-controller_test.js b/api/tests/acceptance/application/scoring-simulator/scoring-simulator-controller_test.js index 3af35bc07dc..1d8af0b10e5 100644 --- a/api/tests/acceptance/application/scoring-simulator/scoring-simulator-controller_test.js +++ b/api/tests/acceptance/application/scoring-simulator/scoring-simulator-controller_test.js @@ -1,13 +1,14 @@ -const { expect } = require('chai'); -const createServer = require('../../../../server'); -const { - databaseBuilder, - generateValidRequestAuthorizationHeader, - mockLearningContent, -} = require('../../../test-helper'); -const { - ROLES: { SUPER_ADMIN }, -} = require('../../../../lib/domain/constants').PIX_ADMIN; +import chai from 'chai'; + +const { expect } = chai; + +import { createServer } from '../../../../server.js'; + +import { databaseBuilder, generateValidRequestAuthorizationHeader, mockLearningContent } from '../../../test-helper.js'; + +import { PIX_ADMIN } from '../../../../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; const isoDateFormat = /^\d\d\d\d-\d\d-\d\dT\d\d:\d\d:\d\d\.\d\d\d.*$/; @@ -19,7 +20,7 @@ describe('Acceptance | Controller | scoring-simulator-controller', function () { server = await createServer(); const { id: adminId } = databaseBuilder.factory.buildUser.withRole({ - role: SUPER_ADMIN, + role: ROLES.SUPER_ADMIN, }); adminAuthorization = generateValidRequestAuthorizationHeader(adminId); await databaseBuilder.commit(); diff --git a/api/tests/acceptance/application/security-pre-handlers_test.js b/api/tests/acceptance/application/security-pre-handlers_test.js index 11e97f46a8f..088a65ec57c 100644 --- a/api/tests/acceptance/application/security-pre-handlers_test.js +++ b/api/tests/acceptance/application/security-pre-handlers_test.js @@ -1,7 +1,7 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../test-helper'); -const createServer = require('../../../server'); -const Membership = require('../../../lib/domain/models/Membership'); -const securityPreHandlers = require('../../../lib/application/security-pre-handlers'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../test-helper.js'; +import { createServer } from '../../../server.js'; +import { Membership } from '../../../lib/domain/models/Membership.js'; +import { securityPreHandlers } from '../../../lib/application/security-pre-handlers.js'; describe('Acceptance | Application | SecurityPreHandlers', function () { const jsonApiError403 = { diff --git a/api/tests/acceptance/application/session/session-controller-create-certification-candidate-participation_test.js b/api/tests/acceptance/application/session/session-controller-create-certification-candidate-participation_test.js index e5e7b773873..e61b380baa4 100644 --- a/api/tests/acceptance/application/session/session-controller-create-certification-candidate-participation_test.js +++ b/api/tests/acceptance/application/session/session-controller-create-certification-candidate-participation_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const _ = require('lodash'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import _ from 'lodash'; describe('Acceptance | Controller | session-controller-create-certification-candidate-participation', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-delete-certification-candidate_test.js b/api/tests/acceptance/application/session/session-controller-delete-certification-candidate_test.js index 94223657349..1765d46a3e7 100644 --- a/api/tests/acceptance/application/session/session-controller-delete-certification-candidate_test.js +++ b/api/tests/acceptance/application/session/session-controller-delete-certification-candidate_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | session-controller-delete-certification-candidate', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-delete-comment_test.js b/api/tests/acceptance/application/session/session-controller-delete-comment_test.js index dd67d721f1f..90a92cdb12b 100644 --- a/api/tests/acceptance/application/session/session-controller-delete-comment_test.js +++ b/api/tests/acceptance/application/session/session-controller-delete-comment_test.js @@ -1,10 +1,11 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | sessions-controller', function () { describe('DELETE /sessions/{id}/comment', function () { diff --git a/api/tests/acceptance/application/session/session-controller-delete_test.js b/api/tests/acceptance/application/session/session-controller-delete_test.js index d52d25b5672..1a5b4288726 100644 --- a/api/tests/acceptance/application/session/session-controller-delete_test.js +++ b/api/tests/acceptance/application/session/session-controller-delete_test.js @@ -1,5 +1,5 @@ -const { knex, expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { knex, expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | sessions-controller', function () { describe('DELETE /sessions/{id}', function () { diff --git a/api/tests/acceptance/application/session/session-controller-enroll-students_test.js b/api/tests/acceptance/application/session/session-controller-enroll-students_test.js index 055afc01c45..495471b686d 100644 --- a/api/tests/acceptance/application/session/session-controller-enroll-students_test.js +++ b/api/tests/acceptance/application/session/session-controller-enroll-students_test.js @@ -1,11 +1,6 @@ -const { - sinon, - expect, - databaseBuilder, - generateValidRequestAuthorizationHeader, - knex, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { sinon, expect, databaseBuilder, generateValidRequestAuthorizationHeader, knex } from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | session-controller-enrol-students-to-session', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-generate-session-results-download-link_test.js b/api/tests/acceptance/application/session/session-controller-generate-session-results-download-link_test.js index a6653f7e9e0..81cac1a5481 100644 --- a/api/tests/acceptance/application/session/session-controller-generate-session-results-download-link_test.js +++ b/api/tests/acceptance/application/session/session-controller-generate-session-results-download-link_test.js @@ -1,10 +1,11 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | session-controller-generate-session-results-download-link', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-get-attendance-sheet_test.js b/api/tests/acceptance/application/session/session-controller-get-attendance-sheet_test.js index 293b9590477..da2d83fe5c3 100644 --- a/api/tests/acceptance/application/session/session-controller-get-attendance-sheet_test.js +++ b/api/tests/acceptance/application/session/session-controller-get-attendance-sheet_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | session-controller-get-attendance-sheet', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-get-candidates-import-sheet_test.js b/api/tests/acceptance/application/session/session-controller-get-candidates-import-sheet_test.js index 82266b12ed2..915dbbbb58d 100644 --- a/api/tests/acceptance/application/session/session-controller-get-candidates-import-sheet_test.js +++ b/api/tests/acceptance/application/session/session-controller-get-candidates-import-sheet_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | session-controller-get-candidates-import-sheet', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-get-certification-candidates_test.js b/api/tests/acceptance/application/session/session-controller-get-certification-candidates_test.js index 8dcbe312c9c..2a12d350efc 100644 --- a/api/tests/acceptance/application/session/session-controller-get-certification-candidates_test.js +++ b/api/tests/acceptance/application/session/session-controller-get-certification-candidates_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const _ = require('lodash'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import _ from 'lodash'; describe('Acceptance | Controller | session-controller-get-certification-candidates', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-get-certification-reports_test.js b/api/tests/acceptance/application/session/session-controller-get-certification-reports_test.js index 4b18d176e8a..f5e81bc0f60 100644 --- a/api/tests/acceptance/application/session/session-controller-get-certification-reports_test.js +++ b/api/tests/acceptance/application/session/session-controller-get-certification-reports_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | session-controller-get-certification-reports', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-get-jury-certification-summaries_test.js b/api/tests/acceptance/application/session/session-controller-get-jury-certification-summaries_test.js index 78330b9e6e8..04bb1a32852 100644 --- a/api/tests/acceptance/application/session/session-controller-get-jury-certification-summaries_test.js +++ b/api/tests/acceptance/application/session/session-controller-get-jury-certification-summaries_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const { CLEA } = require('../../../../lib/domain/models/ComplementaryCertification'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import { CLEA } from '../../../../lib/domain/models/ComplementaryCertification.js'; describe('Acceptance | Controller | session-controller-get-jury-certification-summaries', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-get-jury-session_test.js b/api/tests/acceptance/application/session/session-controller-get-jury-session_test.js index bacb8773b85..7f5e7efaf26 100644 --- a/api/tests/acceptance/application/session/session-controller-get-jury-session_test.js +++ b/api/tests/acceptance/application/session/session-controller-get-jury-session_test.js @@ -1,10 +1,11 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | session-controller-get-jury-session', function () { let server, options; diff --git a/api/tests/acceptance/application/session/session-controller-get-session-results-by-result-recipient-email_test.js b/api/tests/acceptance/application/session/session-controller-get-session-results-by-result-recipient-email_test.js index 22d46532759..8e85d40ebff 100644 --- a/api/tests/acceptance/application/session/session-controller-get-session-results-by-result-recipient-email_test.js +++ b/api/tests/acceptance/application/session/session-controller-get-session-results-by-result-recipient-email_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const jsonwebtoken = require('jsonwebtoken'); -const settings = require('../../../../lib/config'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import jsonwebtoken from 'jsonwebtoken'; +import { config as settings } from '../../../../lib/config.js'; describe('Acceptance | Controller | session-controller-get-session-results-by-result-recipient-email', function () { describe('GET /api/sessions/download-results/{token}', function () { diff --git a/api/tests/acceptance/application/session/session-controller-get-session-results-to-download_test.js b/api/tests/acceptance/application/session/session-controller-get-session-results-to-download_test.js index fb277e14e69..129b82d7f89 100644 --- a/api/tests/acceptance/application/session/session-controller-get-session-results-to-download_test.js +++ b/api/tests/acceptance/application/session/session-controller-get-session-results-to-download_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const jsonwebtoken = require('jsonwebtoken'); -const settings = require('../../../../lib/config'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import jsonwebtoken from 'jsonwebtoken'; +import { config as settings } from '../../../../lib/config.js'; describe('Acceptance | Controller | session-controller-get-session-results-to-download', function () { describe('GET /api/sessions/download-all-results/{token}', function () { diff --git a/api/tests/acceptance/application/session/session-controller-get-supervisor-kit-PDF_test.js b/api/tests/acceptance/application/session/session-controller-get-supervisor-kit-PDF_test.js index 2fb7b47e5a2..838a0e3f88c 100644 --- a/api/tests/acceptance/application/session/session-controller-get-supervisor-kit-PDF_test.js +++ b/api/tests/acceptance/application/session/session-controller-get-supervisor-kit-PDF_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | session-controller-get-supervisor-kit-pdf', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-get_test.js b/api/tests/acceptance/application/session/session-controller-get_test.js index a7024046173..3a2a06d2e25 100644 --- a/api/tests/acceptance/application/session/session-controller-get_test.js +++ b/api/tests/acceptance/application/session/session-controller-get_test.js @@ -1,10 +1,11 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | session-controller-get', function () { let server, options; diff --git a/api/tests/acceptance/application/session/session-controller-import-certification-candidates-from-attendance-sheet_reports_categorization_test.js b/api/tests/acceptance/application/session/session-controller-import-certification-candidates-from-attendance-sheet_reports_categorization_test.js index 4c60671cb6e..84fa9a3f973 100644 --- a/api/tests/acceptance/application/session/session-controller-import-certification-candidates-from-attendance-sheet_reports_categorization_test.js +++ b/api/tests/acceptance/application/session/session-controller-import-certification-candidates-from-attendance-sheet_reports_categorization_test.js @@ -1,6 +1,8 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader, knex } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const fs = require('fs'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, knex } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import fs from 'fs'; +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Acceptance | Controller | session-controller-import-certification-candidates-from-attendance-sheet', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-patch-publish-session_test.js b/api/tests/acceptance/application/session/session-controller-patch-publish-session_test.js index f900dfb24a7..373054d96cc 100644 --- a/api/tests/acceptance/application/session/session-controller-patch-publish-session_test.js +++ b/api/tests/acceptance/application/session/session-controller-patch-publish-session_test.js @@ -1,6 +1,6 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder, knex } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const { status } = require('../../../../lib/domain/models/AssessmentResult'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder, knex } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import { status } from '../../../../lib/domain/models/AssessmentResult.js'; describe('PATCH /api/admin/sessions/:id/publish', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-patch-unpublish-session_test.js b/api/tests/acceptance/application/session/session-controller-patch-unpublish-session_test.js index 5f2be18441a..0a06167b272 100644 --- a/api/tests/acceptance/application/session/session-controller-patch-unpublish-session_test.js +++ b/api/tests/acceptance/application/session/session-controller-patch-unpublish-session_test.js @@ -1,6 +1,6 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder, knex } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const { status } = require('../../../../lib/domain/models/AssessmentResult'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder, knex } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import { status } from '../../../../lib/domain/models/AssessmentResult.js'; describe('PATCH /api/admin/sessions/:id/unpublish', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-patch-user-assignment_test.js b/api/tests/acceptance/application/session/session-controller-patch-user-assignment_test.js index d35fea1e6be..7ac6a87674c 100644 --- a/api/tests/acceptance/application/session/session-controller-patch-user-assignment_test.js +++ b/api/tests/acceptance/application/session/session-controller-patch-user-assignment_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('PATCH /api/admin/sessions/:id/certification-officer-assignment', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-patch_test.js b/api/tests/acceptance/application/session/session-controller-patch_test.js index 2f9e4fcb643..a289622100c 100644 --- a/api/tests/acceptance/application/session/session-controller-patch_test.js +++ b/api/tests/acceptance/application/session/session-controller-patch_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | session-controller-patch', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-post-certification-candidates_test.js b/api/tests/acceptance/application/session/session-controller-post-certification-candidates_test.js index 08b5f532315..7448f826d3f 100644 --- a/api/tests/acceptance/application/session/session-controller-post-certification-candidates_test.js +++ b/api/tests/acceptance/application/session/session-controller-post-certification-candidates_test.js @@ -1,12 +1,14 @@ -const _ = require('lodash'); -const { +import _ from 'lodash'; + +import { expect, databaseBuilder, domainBuilder, generateValidRequestAuthorizationHeader, knex, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | session-controller-post-certification-candidates', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-publish-session-in-batch_test.js b/api/tests/acceptance/application/session/session-controller-publish-session-in-batch_test.js index 5f2b97fd839..a4d13120b80 100644 --- a/api/tests/acceptance/application/session/session-controller-publish-session-in-batch_test.js +++ b/api/tests/acceptance/application/session/session-controller-publish-session-in-batch_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('POST /api/admin/sessions/publish-in-batch', function () { let server; diff --git a/api/tests/acceptance/application/session/session-controller-put-comment_test.js b/api/tests/acceptance/application/session/session-controller-put-comment_test.js index af9be2eea20..f47872e95ca 100644 --- a/api/tests/acceptance/application/session/session-controller-put-comment_test.js +++ b/api/tests/acceptance/application/session/session-controller-put-comment_test.js @@ -1,10 +1,11 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | sessions-controller', function () { describe('PUT /sessions/{id}/comment', function () { diff --git a/api/tests/acceptance/application/session/session-controller-put-finalization_test.js b/api/tests/acceptance/application/session/session-controller-put-finalization_test.js index 3a561866f18..cf1d4530978 100644 --- a/api/tests/acceptance/application/session/session-controller-put-finalization_test.js +++ b/api/tests/acceptance/application/session/session-controller-put-finalization_test.js @@ -1,18 +1,19 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, knex, learningContentBuilder, mockLearningContent, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const { - CertificationIssueReportCategories, +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { + CertificationIssueReportCategory, CertificationIssueReportSubcategories, -} = require('../../../../lib/domain/models/CertificationIssueReportCategory'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const CertificationResult = require('../../../../lib/domain/models/CertificationResult'); +} from '../../../../lib/domain/models/CertificationIssueReportCategory.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { CertificationResult } from '../../../../lib/domain/models/CertificationResult.js'; describe('Acceptance | Controller | sessions-controller', function () { let options; @@ -149,7 +150,7 @@ describe('Acceptance | Controller | sessions-controller', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); const userId = databaseBuilder.factory.buildUser().id; @@ -167,7 +168,7 @@ describe('Acceptance | Controller | sessions-controller', function () { const assessmentId = databaseBuilder.factory.buildAssessment({ certificationCourseId }).id; databaseBuilder.factory.buildCertificationIssueReport({ certificationCourseId, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, description: '', subcategory: CertificationIssueReportSubcategories.WEBSITE_BLOCKED, questionNumber: 1, @@ -265,7 +266,7 @@ describe('Acceptance | Controller | sessions-controller', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); const userId = databaseBuilder.factory.buildUser().id; @@ -286,7 +287,7 @@ describe('Acceptance | Controller | sessions-controller', function () { const assessmentId = databaseBuilder.factory.buildAssessment({ certificationCourseId }).id; databaseBuilder.factory.buildCertificationIssueReport({ certificationCourseId, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, description: '', subcategory: CertificationIssueReportSubcategories.WEBSITE_BLOCKED, questionNumber: 1, @@ -371,7 +372,7 @@ describe('Acceptance | Controller | sessions-controller', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); const userId = databaseBuilder.factory.buildUser().id; @@ -394,7 +395,7 @@ describe('Acceptance | Controller | sessions-controller', function () { const assessmentId = databaseBuilder.factory.buildAssessment({ certificationCourseId, userId }).id; databaseBuilder.factory.buildCertificationIssueReport({ certificationCourseId, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, description: '', subcategory: CertificationIssueReportSubcategories.WEBSITE_BLOCKED, questionNumber: 1, diff --git a/api/tests/acceptance/application/session/session-controller-put-results-sent-to-prescriber_test.js b/api/tests/acceptance/application/session/session-controller-put-results-sent-to-prescriber_test.js index eee7df249dc..544c503a46b 100644 --- a/api/tests/acceptance/application/session/session-controller-put-results-sent-to-prescriber_test.js +++ b/api/tests/acceptance/application/session/session-controller-put-results-sent-to-prescriber_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('PUT /api/admin/sessions/:id/results-sent-to-prescriber', function () { let server; diff --git a/api/tests/acceptance/application/session/session-for-supervising-controller-get_test.js b/api/tests/acceptance/application/session/session-for-supervising-controller-get_test.js index 45f95c58c8e..8b8c4ea083b 100644 --- a/api/tests/acceptance/application/session/session-for-supervising-controller-get_test.js +++ b/api/tests/acceptance/application/session/session-for-supervising-controller-get_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | session-for-supervising-controller-get', function () { let server; diff --git a/api/tests/acceptance/application/session/session-for-supervising-controller-supervise_test.js b/api/tests/acceptance/application/session/session-for-supervising-controller-supervise_test.js index 8b3bb070131..722be8562ee 100644 --- a/api/tests/acceptance/application/session/session-for-supervising-controller-supervise_test.js +++ b/api/tests/acceptance/application/session/session-for-supervising-controller-supervise_test.js @@ -1,11 +1,12 @@ -const { +import { expect, databaseBuilder, domainBuilder, generateValidRequestAuthorizationHeader, knex, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | session-for-supervising-controller-supervise', function () { let server; diff --git a/api/tests/acceptance/application/session/session-with-clea-certified-candidate-controller-get-clea-certified-candidate-data-csv.js b/api/tests/acceptance/application/session/session-with-clea-certified-candidate-controller-get-clea-certified-candidate-data-csv.js index b241435d5bd..52a67de537a 100644 --- a/api/tests/acceptance/application/session/session-with-clea-certified-candidate-controller-get-clea-certified-candidate-data-csv.js +++ b/api/tests/acceptance/application/session/session-with-clea-certified-candidate-controller-get-clea-certified-candidate-data-csv.js @@ -1,6 +1,6 @@ -const { databaseBuilder, expect, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const { CLEA } = require('../../../../lib/domain/models/ComplementaryCertification'); +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import { CLEA } from '../../../../lib/domain/models/ComplementaryCertification.js'; describe('Acceptance | Controller | session-with-clea-certified-candidate', function () { describe('GET /api/sessions/{id}/certified-clea-candidate-data', function () { diff --git a/api/tests/acceptance/application/sup-organization-learners/sup-organization-learner-controller_test.js b/api/tests/acceptance/application/sup-organization-learners/sup-organization-learner-controller_test.js index 1faa567e682..915d9ff1667 100644 --- a/api/tests/acceptance/application/sup-organization-learners/sup-organization-learner-controller_test.js +++ b/api/tests/acceptance/application/sup-organization-learners/sup-organization-learner-controller_test.js @@ -1,7 +1,6 @@ -const { databaseBuilder, expect, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); - -const createServer = require('../../../../server'); -const Membership = require('../../../../lib/domain/models/Membership'); +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; describe('Acceptance | Controller | sup-organization-learners', function () { let server; diff --git a/api/tests/acceptance/application/swagger_test.js b/api/tests/acceptance/application/swagger_test.js index b56a8319c16..3b8ec3df66c 100644 --- a/api/tests/acceptance/application/swagger_test.js +++ b/api/tests/acceptance/application/swagger_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../test-helper'); -const createServer = require('../../../server'); +import { expect } from '../../test-helper.js'; +import { createServer } from '../../../server.js'; describe('Acceptance | Controller | swagger', function () { let server; diff --git a/api/tests/acceptance/application/tags/tag-api_test.js b/api/tests/acceptance/application/tags/tag-api_test.js index bd7614e19a1..9707b793c55 100644 --- a/api/tests/acceptance/application/tags/tag-api_test.js +++ b/api/tests/acceptance/application/tags/tag-api_test.js @@ -1,13 +1,15 @@ -const _ = require('lodash'); -const { +import _ from 'lodash'; + +import { expect, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, insertUserWithRoleCertif, databaseBuilder, knex, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | tag-router', function () { describe('POST /api/admin/tags', function () { diff --git a/api/tests/acceptance/application/target-profiles/index_test.js b/api/tests/acceptance/application/target-profiles/index_test.js index e774b84a74f..53e0c3879a7 100644 --- a/api/tests/acceptance/application/target-profiles/index_test.js +++ b/api/tests/acceptance/application/target-profiles/index_test.js @@ -1,4 +1,4 @@ -const { +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder, @@ -6,9 +6,11 @@ const { mockLearningContent, learningContentBuilder, MockDate, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const omit = require('lodash/omit'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import lodash from 'lodash'; +const { omit } = lodash; describe('Acceptance | Route | target-profiles', function () { let server; @@ -168,7 +170,7 @@ describe('Acceptance | Route | target-profiles', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); targetProfileId = databaseBuilder.factory.buildTargetProfile().id; user = databaseBuilder.factory.buildUser.withRole(); diff --git a/api/tests/acceptance/application/target-profiles/simplified-access-route-put_test.js b/api/tests/acceptance/application/target-profiles/simplified-access-route-put_test.js index c9dcfd90cb6..17557c78a17 100644 --- a/api/tests/acceptance/application/target-profiles/simplified-access-route-put_test.js +++ b/api/tests/acceptance/application/target-profiles/simplified-access-route-put_test.js @@ -1,10 +1,11 @@ -const { +import { databaseBuilder, expect, insertUserWithRoleSuperAdmin, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | Target-profiles', function () { describe('PUT /api/admin/target-profiles/{id}/simplified-access', function () { diff --git a/api/tests/acceptance/application/trainings/training-controller_test.js b/api/tests/acceptance/application/trainings/training-controller_test.js index 79053571c5e..6242bc39280 100644 --- a/api/tests/acceptance/application/trainings/training-controller_test.js +++ b/api/tests/acceptance/application/trainings/training-controller_test.js @@ -1,4 +1,4 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, @@ -6,8 +6,9 @@ const { knex, learningContentBuilder, mockLearningContent, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | training-controller', function () { let server; @@ -66,7 +67,7 @@ describe('Acceptance | Controller | training-controller', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent(learningContent); + const learningContentObjects = learningContentBuilder(learningContent); mockLearningContent(learningContentObjects); }); @@ -370,7 +371,7 @@ describe('Acceptance | Controller | training-controller', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent(learningContent); + const learningContentObjects = learningContentBuilder(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/acceptance/application/tutorials/tutorial-evaluations-controller_test.js b/api/tests/acceptance/application/tutorials/tutorial-evaluations-controller_test.js index 8b5d84a08e4..7f608629737 100644 --- a/api/tests/acceptance/application/tutorials/tutorial-evaluations-controller_test.js +++ b/api/tests/acceptance/application/tutorials/tutorial-evaluations-controller_test.js @@ -1,12 +1,13 @@ -const { +import { mockLearningContent, databaseBuilder, expect, knex, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const TutorialEvaluation = require('../../../../lib/domain/models/TutorialEvaluation'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { TutorialEvaluation } from '../../../../lib/domain/models/TutorialEvaluation.js'; describe('Acceptance | Controller | tutorial-evaluations-controller', function () { let server; diff --git a/api/tests/acceptance/application/tutorials/user-tutorials-controller_test.js b/api/tests/acceptance/application/tutorials/user-tutorials-controller_test.js index 4055e0dc20f..a8b9088a485 100644 --- a/api/tests/acceptance/application/tutorials/user-tutorials-controller_test.js +++ b/api/tests/acceptance/application/tutorials/user-tutorials-controller_test.js @@ -1,15 +1,16 @@ -const { +import { expect, generateValidRequestAuthorizationHeader, mockLearningContent, learningContentBuilder, databaseBuilder, knex, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const { learningContentCache } = require('../../../../lib/infrastructure/caches/learning-content-cache'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const nock = require('nock'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { learningContentCache } from '../../../../lib/infrastructure/caches/learning-content-cache.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import nock from 'nock'; describe('Acceptance | Controller | user-tutorial-controller', function () { let server; @@ -160,7 +161,7 @@ describe('Acceptance | Controller | user-tutorial-controller', function () { }, }; - learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([ + learningContentObjects = learningContentBuilder.fromAreas([ { id: 'recArea1', title_i18n: { diff --git a/api/tests/acceptance/application/user-orga-settings/user-orga-settings-controller_test.js b/api/tests/acceptance/application/user-orga-settings/user-orga-settings-controller_test.js index 81f06045a52..a1a66df3c52 100644 --- a/api/tests/acceptance/application/user-orga-settings/user-orga-settings-controller_test.js +++ b/api/tests/acceptance/application/user-orga-settings/user-orga-settings-controller_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, generateValidRequestAuthorizationHeader, knex } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, knex } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | user-orga-settings-controller', function () { let server; diff --git a/api/tests/acceptance/application/users/accept-pix-certif-terms-of-service_test.js b/api/tests/acceptance/application/users/accept-pix-certif-terms-of-service_test.js index 9263562b11b..1e66f4bbcc1 100644 --- a/api/tests/acceptance/application/users/accept-pix-certif-terms-of-service_test.js +++ b/api/tests/acceptance/application/users/accept-pix-certif-terms-of-service_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | users-controller-accept-pix-certif-terms-of-service', function () { let server; diff --git a/api/tests/acceptance/application/users/accept-pix-orga-terms-of-service_test.js b/api/tests/acceptance/application/users/accept-pix-orga-terms-of-service_test.js index fd12bdd958d..9cf40d2ab99 100644 --- a/api/tests/acceptance/application/users/accept-pix-orga-terms-of-service_test.js +++ b/api/tests/acceptance/application/users/accept-pix-orga-terms-of-service_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | users-controller-accept-pix-orga-terms-of-service', function () { let server; diff --git a/api/tests/acceptance/application/users/accept-pix-terms-of-service_test.js b/api/tests/acceptance/application/users/accept-pix-terms-of-service_test.js index 1e2a0ba5b9f..599023a5fd0 100644 --- a/api/tests/acceptance/application/users/accept-pix-terms-of-service_test.js +++ b/api/tests/acceptance/application/users/accept-pix-terms-of-service_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | users-controller-accept-pix-terms-of-service', function () { let server; diff --git a/api/tests/acceptance/application/users/add-pix-authentication-method-by-email-route-post_test.js b/api/tests/acceptance/application/users/add-pix-authentication-method-by-email-route-post_test.js index adc9e9908b2..1b68b71cea4 100644 --- a/api/tests/acceptance/application/users/add-pix-authentication-method-by-email-route-post_test.js +++ b/api/tests/acceptance/application/users/add-pix-authentication-method-by-email-route-post_test.js @@ -1,11 +1,12 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, knex, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | Users', function () { afterEach(function () { diff --git a/api/tests/acceptance/application/users/change-lang_test.js b/api/tests/acceptance/application/users/change-lang_test.js index 188be6b7039..365e950ffa0 100644 --- a/api/tests/acceptance/application/users/change-lang_test.js +++ b/api/tests/acceptance/application/users/change-lang_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | change-lang', function () { let server; diff --git a/api/tests/acceptance/application/users/find-campaign-participations-for-user-management_test.js b/api/tests/acceptance/application/users/find-campaign-participations-for-user-management_test.js index 39de2b6ffaa..0e5b6127434 100644 --- a/api/tests/acceptance/application/users/find-campaign-participations-for-user-management_test.js +++ b/api/tests/acceptance/application/users/find-campaign-participations-for-user-management_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | GET /api/admin/users/{id}/participations', function () { let server; diff --git a/api/tests/acceptance/application/users/find-user-certification-centers-for-admin-route-get_test.js b/api/tests/acceptance/application/users/find-user-certification-centers-for-admin-route-get_test.js index b04e3069598..e69cbf7eb38 100644 --- a/api/tests/acceptance/application/users/find-user-certification-centers-for-admin-route-get_test.js +++ b/api/tests/acceptance/application/users/find-user-certification-centers-for-admin-route-get_test.js @@ -1,5 +1,5 @@ -const { databaseBuilder, expect, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | Users', function () { describe('GET /api/admin/users/{id}/certification-center-memberships', function () { diff --git a/api/tests/acceptance/application/users/find-user-organizations-for-admin-route-get_test.js b/api/tests/acceptance/application/users/find-user-organizations-for-admin-route-get_test.js index a07c71f7e6d..cb487ffe24c 100644 --- a/api/tests/acceptance/application/users/find-user-organizations-for-admin-route-get_test.js +++ b/api/tests/acceptance/application/users/find-user-organizations-for-admin-route-get_test.js @@ -1,5 +1,5 @@ -const { databaseBuilder, expect, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | Users', function () { describe('GET /api/admin/users/{id}/organizations', function () { diff --git a/api/tests/acceptance/application/users/get-user-authentication-methods-route-get_test.js b/api/tests/acceptance/application/users/get-user-authentication-methods-route-get_test.js index 4c13ae11059..1ade35798e6 100644 --- a/api/tests/acceptance/application/users/get-user-authentication-methods-route-get_test.js +++ b/api/tests/acceptance/application/users/get-user-authentication-methods-route-get_test.js @@ -1,6 +1,6 @@ -const { databaseBuilder, expect, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); -const createServer = require('../../../../server'); +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | Users', function () { describe('GET /api/users/{id}/authentication-methods', function () { diff --git a/api/tests/acceptance/application/users/get-user-campaign-assessment-result_test.js b/api/tests/acceptance/application/users/get-user-campaign-assessment-result_test.js index 295cdd70bdf..6fec55df14a 100644 --- a/api/tests/acceptance/application/users/get-user-campaign-assessment-result_test.js +++ b/api/tests/acceptance/application/users/get-user-campaign-assessment-result_test.js @@ -1,13 +1,15 @@ -const createServer = require('../../../../server'); -const { +import { createServer } from '../../../../server.js'; + +import { expect, databaseBuilder, mockLearningContent, learningContentBuilder, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); -const _ = require('lodash'); -const BadgeCriterion = require('../../../../lib/domain/models/BadgeCriterion'); +} from '../../../test-helper.js'; + +import _ from 'lodash'; +import { BadgeCriterion } from '../../../../lib/domain/models/BadgeCriterion.js'; describe('Acceptance | API | Campaign Assessment Result', function () { const JAFFA_COLOR = 'jaffa'; @@ -172,7 +174,7 @@ describe('Acceptance | API | Campaign Assessment Result', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); await databaseBuilder.commit(); }); diff --git a/api/tests/acceptance/application/users/get-user-campaign-participation-to-campaign_test.js b/api/tests/acceptance/application/users/get-user-campaign-participation-to-campaign_test.js index 7e7be65bd14..0d51ca77f49 100644 --- a/api/tests/acceptance/application/users/get-user-campaign-participation-to-campaign_test.js +++ b/api/tests/acceptance/application/users/get-user-campaign-participation-to-campaign_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | GET /users/id/campaigns/id/campaign-participations', function () { let userId; diff --git a/api/tests/acceptance/application/users/reassign-authentication-methods-route-put_test.js b/api/tests/acceptance/application/users/reassign-authentication-methods-route-put_test.js index 1445885eb9b..130edc937d3 100644 --- a/api/tests/acceptance/application/users/reassign-authentication-methods-route-put_test.js +++ b/api/tests/acceptance/application/users/reassign-authentication-methods-route-put_test.js @@ -1,11 +1,12 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; describe('Acceptance | Route | Users', function () { describe('POST /api/admin/users/{userId}/authentication-methods/{authenticationMethodId}', function () { diff --git a/api/tests/acceptance/application/users/remember-user-has-seen-assessment-instructions_test.js b/api/tests/acceptance/application/users/remember-user-has-seen-assessment-instructions_test.js index 44d7409988a..c2cd14ba7f9 100644 --- a/api/tests/acceptance/application/users/remember-user-has-seen-assessment-instructions_test.js +++ b/api/tests/acceptance/application/users/remember-user-has-seen-assessment-instructions_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | users-controller-remember-user-has-seen-assessment-instructions', function () { let server; diff --git a/api/tests/acceptance/application/users/remember-user-has-seen-challenge-tooltip_test.js b/api/tests/acceptance/application/users/remember-user-has-seen-challenge-tooltip_test.js index e82851bf246..44fe296caa6 100644 --- a/api/tests/acceptance/application/users/remember-user-has-seen-challenge-tooltip_test.js +++ b/api/tests/acceptance/application/users/remember-user-has-seen-challenge-tooltip_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | users-controller-has-seen-challenge-tooltip', function () { let server; diff --git a/api/tests/acceptance/application/users/remember-user-has-seen-last-data-protection-policy-information_test.js b/api/tests/acceptance/application/users/remember-user-has-seen-last-data-protection-policy-information_test.js index 17162622467..112fee54395 100644 --- a/api/tests/acceptance/application/users/remember-user-has-seen-last-data-protection-policy-information_test.js +++ b/api/tests/acceptance/application/users/remember-user-has-seen-last-data-protection-policy-information_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder, sinon } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder, sinon } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | remember-user-has-seen-last-data-protection-policy-information', function () { describe('Success case', function () { diff --git a/api/tests/acceptance/application/users/remember-user-has-seen-new-dashboard-info_test.js b/api/tests/acceptance/application/users/remember-user-has-seen-new-dashboard-info_test.js index a9925ee7c89..4abd178f74e 100644 --- a/api/tests/acceptance/application/users/remember-user-has-seen-new-dashboard-info_test.js +++ b/api/tests/acceptance/application/users/remember-user-has-seen-new-dashboard-info_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | users-controller-has-seen-new-dashboard-info', function () { let server; diff --git a/api/tests/acceptance/application/users/send-verification-code-route-put_test.js b/api/tests/acceptance/application/users/send-verification-code-route-put_test.js index 5ca6cff7ab3..3575305a797 100644 --- a/api/tests/acceptance/application/users/send-verification-code-route-put_test.js +++ b/api/tests/acceptance/application/users/send-verification-code-route-put_test.js @@ -1,5 +1,5 @@ -const { databaseBuilder, expect, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | Users', function () { describe('PUT /api/users/{id}/email/verification-code', function () { diff --git a/api/tests/acceptance/application/users/update-user-details-for-administration_test.js b/api/tests/acceptance/application/users/update-user-details-for-administration_test.js index e5becc0eda6..152139ee338 100644 --- a/api/tests/acceptance/application/users/update-user-details-for-administration_test.js +++ b/api/tests/acceptance/application/users/update-user-details-for-administration_test.js @@ -1,12 +1,12 @@ -const { +import { expect, databaseBuilder, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, knex, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; -const createServer = require('../../../../server'); +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | users-controller-update-user-details-for-administration', function () { let server; diff --git a/api/tests/acceptance/application/users/update-user-email-with-validation-route-post_test.js b/api/tests/acceptance/application/users/update-user-email-with-validation-route-post_test.js index 1c63e2e4da3..95f5ae469c3 100644 --- a/api/tests/acceptance/application/users/update-user-email-with-validation-route-post_test.js +++ b/api/tests/acceptance/application/users/update-user-email-with-validation-route-post_test.js @@ -1,6 +1,6 @@ -const { databaseBuilder, expect, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const createServer = require('../../../../server'); -const userEmailRepository = require('../../../../lib/infrastructure/repositories/user-email-repository'); +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import * as userEmailRepository from '../../../../lib/infrastructure/repositories/user-email-repository.js'; describe('Acceptance | Route | Users', function () { describe('POST /api/users/{id}/update-email', function () { diff --git a/api/tests/acceptance/application/users/users-controller-find-paginated-user-recommended-trainings_test.js b/api/tests/acceptance/application/users/users-controller-find-paginated-user-recommended-trainings_test.js index eacdcc6ecb6..8dd448c01eb 100644 --- a/api/tests/acceptance/application/users/users-controller-find-paginated-user-recommended-trainings_test.js +++ b/api/tests/acceptance/application/users/users-controller-find-paginated-user-recommended-trainings_test.js @@ -1,6 +1,5 @@ -const { databaseBuilder, expect, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); - -const createServer = require('../../../../server'); +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | users-controller-find-paginated-user-recommended-trainings', function () { let options; diff --git a/api/tests/acceptance/application/users/users-controller-find-users_test.js b/api/tests/acceptance/application/users/users-controller-find-users_test.js index 07e7c15a7a0..3217caff779 100644 --- a/api/tests/acceptance/application/users/users-controller-find-users_test.js +++ b/api/tests/acceptance/application/users/users-controller-find-users_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | users-controller-find-users', function () { let server; diff --git a/api/tests/acceptance/application/users/users-controller-get-campaign-participation-overviews_test.js b/api/tests/acceptance/application/users/users-controller-get-campaign-participation-overviews_test.js index 41da6079579..5b7db86f542 100644 --- a/api/tests/acceptance/application/users/users-controller-get-campaign-participation-overviews_test.js +++ b/api/tests/acceptance/application/users/users-controller-get-campaign-participation-overviews_test.js @@ -1,11 +1,12 @@ -const { +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder, mockLearningContent, learningContentBuilder, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | users-controller-get-campaign-participation-overviews', function () { let server; @@ -42,7 +43,7 @@ describe('Acceptance | Controller | users-controller-get-campaign-participation- ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); return databaseBuilder.commit(); diff --git a/api/tests/acceptance/application/users/users-controller-get-campaign-participations_test.js b/api/tests/acceptance/application/users/users-controller-get-campaign-participations_test.js index 1c3cd03114e..0bce96693da 100644 --- a/api/tests/acceptance/application/users/users-controller-get-campaign-participations_test.js +++ b/api/tests/acceptance/application/users/users-controller-get-campaign-participations_test.js @@ -1,5 +1,5 @@ -const { expect, generateValidRequestAuthorizationHeader, databaseBuilder } = require('../../../test-helper'); -const createServer = require('../../../../server'); +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | GET /user/id/campaign-participations', function () { let userId; diff --git a/api/tests/acceptance/application/users/users-controller-get-current-user_test.js b/api/tests/acceptance/application/users/users-controller-get-current-user_test.js index dfef382c874..6c3a5a5595d 100644 --- a/api/tests/acceptance/application/users/users-controller-get-current-user_test.js +++ b/api/tests/acceptance/application/users/users-controller-get-current-user_test.js @@ -1,6 +1,5 @@ -const { databaseBuilder, expect, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); - -const createServer = require('../../../../server'); +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | users-controller-get-current-user', function () { let options; diff --git a/api/tests/acceptance/application/users/users-controller-get-user-details-for-admin_test.js b/api/tests/acceptance/application/users/users-controller-get-user-details-for-admin_test.js index a6fc13af51f..63b143b2290 100644 --- a/api/tests/acceptance/application/users/users-controller-get-user-details-for-admin_test.js +++ b/api/tests/acceptance/application/users/users-controller-get-user-details-for-admin_test.js @@ -1,12 +1,12 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, sinon, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; -const createServer = require('../../../../server'); +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | users-controller-get-user-details-for-admin', function () { let clock; diff --git a/api/tests/acceptance/application/users/users-controller-get-user-profile-for-admin_test.js b/api/tests/acceptance/application/users/users-controller-get-user-profile-for-admin_test.js index 33c92c2b957..c0e81c8c720 100644 --- a/api/tests/acceptance/application/users/users-controller-get-user-profile-for-admin_test.js +++ b/api/tests/acceptance/application/users/users-controller-get-user-profile-for-admin_test.js @@ -1,13 +1,13 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, mockLearningContent, insertUserWithRoleSuperAdmin, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; -const createServer = require('../../../../server'); -const { constants } = require('../../../../lib/domain/constants'); +import { createServer } from '../../../../server.js'; +import { constants } from '../../../../lib/domain/constants.js'; describe('Acceptance | Controller | users-controller-get-user-profile-for-admin', function () { let options; diff --git a/api/tests/acceptance/application/users/users-controller-get-user-profile_test.js b/api/tests/acceptance/application/users/users-controller-get-user-profile_test.js index e00221bac9a..336b1de05b7 100644 --- a/api/tests/acceptance/application/users/users-controller-get-user-profile_test.js +++ b/api/tests/acceptance/application/users/users-controller-get-user-profile_test.js @@ -1,12 +1,12 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, mockLearningContent, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; -const createServer = require('../../../../server'); -const { constants } = require('../../../../lib/domain/constants'); +import { createServer } from '../../../../server.js'; +import { constants } from '../../../../lib/domain/constants.js'; describe('Acceptance | Controller | users-controller-get-user-profile', function () { let options; diff --git a/api/tests/acceptance/application/users/users-controller-is-certifiable_test.js b/api/tests/acceptance/application/users/users-controller-is-certifiable_test.js index 870e2f0feeb..1c491870524 100644 --- a/api/tests/acceptance/application/users/users-controller-is-certifiable_test.js +++ b/api/tests/acceptance/application/users/users-controller-is-certifiable_test.js @@ -1,11 +1,12 @@ -const { +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder, mockLearningContent, learningContentBuilder, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | users-controller-is-certifiable', function () { let server; @@ -17,7 +18,7 @@ describe('Acceptance | users-controller-is-certifiable', function () { user = databaseBuilder.factory.buildUser(); - const learningContent = learningContentBuilder.buildLearningContent.fromAreas([ + const learningContent = learningContentBuilder.fromAreas([ { id: 'recvoGdo7z2z7pXWa', title_i18n: { diff --git a/api/tests/acceptance/application/users/users-controller-remove-authentication-method_test.js b/api/tests/acceptance/application/users/users-controller-remove-authentication-method_test.js index 39386e52c8f..5330f127e51 100644 --- a/api/tests/acceptance/application/users/users-controller-remove-authentication-method_test.js +++ b/api/tests/acceptance/application/users/users-controller-remove-authentication-method_test.js @@ -1,12 +1,13 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, knex, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; describe('Acceptance | Controller | users-controller-remove-authentication-method', function () { let server; diff --git a/api/tests/acceptance/application/users/users-controller-reset-scorecard_test.js b/api/tests/acceptance/application/users/users-controller-reset-scorecard_test.js index c829a199dae..05a19322062 100644 --- a/api/tests/acceptance/application/users/users-controller-reset-scorecard_test.js +++ b/api/tests/acceptance/application/users/users-controller-reset-scorecard_test.js @@ -1,5 +1,6 @@ -const _ = require('lodash'); -const { +import _ from 'lodash'; + +import { knex, databaseBuilder, expect, @@ -7,9 +8,10 @@ const { sinon, mockLearningContent, learningContentBuilder, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED } = CampaignParticipationStatuses; @@ -98,7 +100,7 @@ describe('Acceptance | Controller | users-controller-reset-scorecard', function ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); server = await createServer(); diff --git a/api/tests/acceptance/application/users/users-controller-save_test.js b/api/tests/acceptance/application/users/users-controller-save_test.js index de0a6e49933..e09f374fc91 100644 --- a/api/tests/acceptance/application/users/users-controller-save_test.js +++ b/api/tests/acceptance/application/users/users-controller-save_test.js @@ -1,10 +1,11 @@ -const pick = require('lodash/pick'); +import lodash from 'lodash'; +const { pick } = lodash; -const { domainBuilder, expect, knex, nock } = require('../../../test-helper'); +import { domainBuilder, expect, knex, nock } from '../../../test-helper.js'; -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; -const createServer = require('../../../../server'); +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | users-controller', function () { let server; diff --git a/api/tests/acceptance/application/users/users-controller-update-password_test.js b/api/tests/acceptance/application/users/users-controller-update-password_test.js index 2510a485c5e..f38e0ac8020 100644 --- a/api/tests/acceptance/application/users/users-controller-update-password_test.js +++ b/api/tests/acceptance/application/users/users-controller-update-password_test.js @@ -1,7 +1,6 @@ -const { expect, hFake, knex, databaseBuilder } = require('../../../test-helper'); - -const authenticationController = require('../../../../lib/application/authentication/authentication-controller'); -const createServer = require('../../../../server'); +import { expect, hFake, knex, databaseBuilder } from '../../../test-helper.js'; +import { authenticationController } from '../../../../lib/application/authentication/authentication-controller.js'; +import { createServer } from '../../../../server.js'; describe('Acceptance | Controller | users-controller-update-password', function () { const temporaryKey = 'good-temporary-key'; diff --git a/api/tests/acceptance/application/users/users-get-shared-profile-for-campaign_test.js b/api/tests/acceptance/application/users/users-get-shared-profile-for-campaign_test.js index e55c7ae888a..5d131b2b602 100644 --- a/api/tests/acceptance/application/users/users-get-shared-profile-for-campaign_test.js +++ b/api/tests/acceptance/application/users/users-get-shared-profile-for-campaign_test.js @@ -1,11 +1,13 @@ -const _ = require('lodash'); -const { +import _ from 'lodash'; + +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder, mockLearningContent, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | GET /users/{userId}/campaigns/{campaignId}/profile', function () { const userId = 100; diff --git a/api/tests/acceptance/application/users/users-route_test.js b/api/tests/acceptance/application/users/users-route_test.js index 0e5de982c03..ab057c17f99 100644 --- a/api/tests/acceptance/application/users/users-route_test.js +++ b/api/tests/acceptance/application/users/users-route_test.js @@ -1,11 +1,12 @@ -const { +import { databaseBuilder, expect, generateValidRequestAuthorizationHeader, insertUserWithRoleSuperAdmin, knex, -} = require('../../../test-helper'); -const createServer = require('../../../../server'); +} from '../../../test-helper.js'; + +import { createServer } from '../../../../server.js'; describe('Acceptance | Route | users', function () { describe('POST /admin/users/:id/anonymize', function () { let server; diff --git a/api/tests/acceptance/database/configuration.js b/api/tests/acceptance/database/configuration.cjs similarity index 92% rename from api/tests/acceptance/database/configuration.js rename to api/tests/acceptance/database/configuration.cjs index c2aad7876f8..e3bfe01afb0 100644 --- a/api/tests/acceptance/database/configuration.js +++ b/api/tests/acceptance/database/configuration.cjs @@ -1,5 +1,4 @@ -const dotenv = require('dotenv'); -dotenv.config(); +require('dotenv').config(); const parsePostgresqlConnectionString = require('pg-connection-string').parse; const databaseToLint = { diff --git a/api/tests/acceptance/db/migrations/20220721115757_alter-answers-id-from-int-to-bigint_test.js b/api/tests/acceptance/db/migrations/20220721115757_alter-answers-id-from-int-to-bigint_test.js index f9d4e722772..7726c08c9ce 100644 --- a/api/tests/acceptance/db/migrations/20220721115757_alter-answers-id-from-int-to-bigint_test.js +++ b/api/tests/acceptance/db/migrations/20220721115757_alter-answers-id-from-int-to-bigint_test.js @@ -1,4 +1,4 @@ -const { expect, knex, databaseBuilder } = require('../../../test-helper'); +import { expect, knex, databaseBuilder } from '../../../test-helper.js'; describe('#changeAnswerIdTypeToBigint', function () { it('should insert answer with an id bigger than the maximum integer type value', async function () { diff --git a/api/tests/acceptance/scripts/_template.test.js b/api/tests/acceptance/scripts/_template.test.js index 4b225cdc10e..8ecc203aaf8 100644 --- a/api/tests/acceptance/scripts/_template.test.js +++ b/api/tests/acceptance/scripts/_template.test.js @@ -1,5 +1,5 @@ -const { expect, catchErr, databaseBuilder } = require('../../test-helper'); -const { doSomething } = require('../../../scripts/_template'); +import { expect, catchErr, databaseBuilder } from '../../test-helper.js'; +import { doSomething } from '../../../scripts/_template.js'; describe('#doSomething', function () { describe('#if throwError is false', function () { diff --git a/api/tests/acceptance/scripts/add-many-divisions-and-students-to-sco-organization_test.js b/api/tests/acceptance/scripts/add-many-divisions-and-students-to-sco-organization_test.js index 7a0610e267e..976ee9199ac 100644 --- a/api/tests/acceptance/scripts/add-many-divisions-and-students-to-sco-organization_test.js +++ b/api/tests/acceptance/scripts/add-many-divisions-and-students-to-sco-organization_test.js @@ -1,13 +1,8 @@ -const { expect } = require('../../test-helper'); -const { SCO_MIDDLE_SCHOOL_ID } = require('../../../db/seeds/data/organizations-sco-builder'); - -const { knex } = require('../../../lib/infrastructure/bookshelf'); -const BookshelfOrganizationLearner = require('../../../lib/infrastructure/orm-models/OrganizationLearner'); -const { databaseBuilder } = require('../../test-helper'); - -const { - addManyDivisionsAndStudentsToScoCertificationCenter, -} = require('../../../scripts/data-generation/add-many-divisions-and-students-to-sco-organization'); +import { expect, databaseBuilder } from '../../test-helper.js'; +import { SCO_MIDDLE_SCHOOL_ID } from '../../../db/seeds/data/organizations-sco-builder.js'; +import { knex } from '../../../lib/infrastructure/bookshelf.js'; +import { BookshelfOrganizationLearner } from '../../../lib/infrastructure/orm-models/OrganizationLearner.js'; +import { addManyDivisionsAndStudentsToScoCertificationCenter } from '../../../scripts/data-generation/add-many-divisions-and-students-to-sco-organization.js'; describe('Acceptance | Scripts | add-many-divisions-and-students-to-sco-organization', function () { describe('#addManyDivisionsAndStudentsToScoCertificationCenter', function () { diff --git a/api/tests/acceptance/scripts/add-many-fake-members-related-to-one-organization_test.js b/api/tests/acceptance/scripts/add-many-fake-members-related-to-one-organization_test.js index f87855151b3..762dde54e39 100644 --- a/api/tests/acceptance/scripts/add-many-fake-members-related-to-one-organization_test.js +++ b/api/tests/acceptance/scripts/add-many-fake-members-related-to-one-organization_test.js @@ -1,8 +1,6 @@ -const { expect, sinon, knex, databaseBuilder, catchErr } = require('../../test-helper'); -const { - addManyMembersToExistingOrganization, -} = require('../../../scripts/data-generation/add-many-fake-members-related-to-one-organization'); -const { ForbiddenAccess } = require('../../../lib/domain/errors'); +import { expect, sinon, knex, databaseBuilder, catchErr } from '../../test-helper.js'; +import { addManyMembersToExistingOrganization } from '../../../scripts/data-generation/add-many-fake-members-related-to-one-organization.js'; +import { ForbiddenAccess } from '../../../lib/domain/errors.js'; describe('Acceptance | Scripts | add-many-divisions-and-students-to-sco-organization', function () { it('should throw an error when env is production', async function () { diff --git a/api/tests/acceptance/scripts/add-many-students-to-sco-certification-center_test.js b/api/tests/acceptance/scripts/add-many-students-to-sco-certification-center_test.js index 7a82a413f65..1510d59cc63 100644 --- a/api/tests/acceptance/scripts/add-many-students-to-sco-certification-center_test.js +++ b/api/tests/acceptance/scripts/add-many-students-to-sco-certification-center_test.js @@ -1,13 +1,8 @@ -const { expect } = require('../../test-helper'); -const { SCO_MIDDLE_SCHOOL_ID } = require('../../../db/seeds/data/organizations-sco-builder'); - -const { knex } = require('../../../lib/infrastructure/bookshelf'); -const BookshelfOrganizationLearner = require('../../../lib/infrastructure/orm-models/OrganizationLearner'); -const { databaseBuilder } = require('../../test-helper'); - -const { - addManyStudentsToScoCertificationCenter, -} = require('../../../scripts/data-generation/add-many-students-to-sco-certification-center'); +import { expect, databaseBuilder } from '../../test-helper.js'; +import { SCO_MIDDLE_SCHOOL_ID } from '../../../db/seeds/data/organizations-sco-builder.js'; +import { knex } from '../../../lib/infrastructure/bookshelf.js'; +import { BookshelfOrganizationLearner } from '../../../lib/infrastructure/orm-models/OrganizationLearner.js'; +import { addManyStudentsToScoCertificationCenter } from '../../../scripts/data-generation/add-many-students-to-sco-certification-center.js'; describe('Acceptance | Scripts | add-many-students-to-sco-certification-centers.js', function () { describe('#addManyStudentsToScoCertificationCenter', function () { diff --git a/api/tests/acceptance/scripts/certification/import-certifications-from-csv_test.js b/api/tests/acceptance/scripts/certification/import-certifications-from-csv_test.js index 50e15ed3ca1..566e2a8278e 100644 --- a/api/tests/acceptance/scripts/certification/import-certifications-from-csv_test.js +++ b/api/tests/acceptance/scripts/certification/import-certifications-from-csv_test.js @@ -1,5 +1,8 @@ -const { expect, nock } = require('../../../test-helper'); -const script = require('../../../../scripts/certification/import-certifications-from-csv'); +import { expect, nock } from '../../../test-helper.js'; +import * as script from '../../../../scripts/certification/import-certifications-from-csv.js'; +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Acceptance | Scripts | import-certifications-from-csv.js', function () { describe('#assertFileValidity', function () { diff --git a/api/tests/acceptance/scripts/certification/update-certification-infos_test.js b/api/tests/acceptance/scripts/certification/update-certification-infos_test.js index cf6fff837ac..32dc1434e2d 100644 --- a/api/tests/acceptance/scripts/certification/update-certification-infos_test.js +++ b/api/tests/acceptance/scripts/certification/update-certification-infos_test.js @@ -1,8 +1,12 @@ -const { expect, databaseBuilder, knex, sinon } = require('../../../test-helper'); -const { writeFile, rm } = require('fs/promises'); -const values = require('lodash/values'); -const logger = require('../../../../lib/infrastructure/logger'); -const { updateCertificationInfos, headers } = require('../../../../scripts/certification/update-certification-infos'); +import { expect, databaseBuilder, knex, sinon } from '../../../test-helper.js'; +import { writeFile, rm } from 'fs/promises'; +import lodash from 'lodash'; +const { values } = lodash; +import { logger } from '../../../../lib/infrastructure/logger.js'; +import { updateCertificationInfos, headers } from '../../../../scripts/certification/update-certification-infos.js'; +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); + const dataFile = `${__dirname}/data.csv`; const sessionIdsFile = `${__dirname}/sessionIds.csv`; diff --git a/api/tests/acceptance/scripts/create-or-update-sco-organizations_test.js b/api/tests/acceptance/scripts/create-or-update-sco-organizations_test.js index 5570148e4ef..a89daabf2fe 100644 --- a/api/tests/acceptance/scripts/create-or-update-sco-organizations_test.js +++ b/api/tests/acceptance/scripts/create-or-update-sco-organizations_test.js @@ -1,7 +1,6 @@ -const { expect, nock } = require('../../test-helper'); - -const { checkData, createOrUpdateOrganizations } = require('../../../scripts/create-or-update-sco-organizations'); -const logoUrl = require('../../../scripts/logo/default-sco-organization-logo-base64'); +import { expect, nock } from '../../test-helper.js'; +import { checkData, createOrUpdateOrganizations } from '../../../scripts/create-or-update-sco-organizations.js'; +import { logoUrl } from '../../../scripts/logo/default-sco-organization-logo-base64.js'; describe('Acceptance | Scripts | create-or-update-sco-organizations.js', function () { describe('#createOrUpdateOrganizations', function () { diff --git a/api/tests/acceptance/scripts/create-sco-certification-centers_test.js b/api/tests/acceptance/scripts/create-sco-certification-centers_test.js index 69525014d1e..5a9a573b505 100644 --- a/api/tests/acceptance/scripts/create-sco-certification-centers_test.js +++ b/api/tests/acceptance/scripts/create-sco-certification-centers_test.js @@ -1,8 +1,6 @@ -const { expect, knex } = require('../../test-helper'); - -const BookshelfCertificationCenter = require('../../../lib/infrastructure/orm-models/CertificationCenter'); - -const { createScoCertificationCenters } = require('../../../scripts/create-sco-certification-centers'); +import { expect, knex } from '../../test-helper.js'; +import { BookshelfCertificationCenter } from '../../../lib/infrastructure/orm-models/CertificationCenter.js'; +import { createScoCertificationCenters } from '../../../scripts/create-sco-certification-centers.js'; describe('Acceptance | Scripts | create-sco-certification-centers.js', function () { describe('#createScoCertificationCenters', function () { diff --git a/api/tests/acceptance/scripts/create-users-accounts-for-contest_test.js b/api/tests/acceptance/scripts/create-users-accounts-for-contest_test.js index a7b4b11984f..354809bc2aa 100644 --- a/api/tests/acceptance/scripts/create-users-accounts-for-contest_test.js +++ b/api/tests/acceptance/scripts/create-users-accounts-for-contest_test.js @@ -1,6 +1,6 @@ -const { expect, knex } = require('../../test-helper'); -const { createUsers } = require('../../../scripts/create-users-accounts-for-contest'); -const sinon = require('sinon'); +import { expect, knex } from '../../test-helper.js'; +import { createUsers } from '../../../scripts/create-users-accounts-for-contest.js'; +import sinon from 'sinon'; describe('Acceptance | Scripts | create-users-accounts-for-contest', function () { describe('#createUsers', function () { diff --git a/api/tests/acceptance/scripts/target-profile-migrations/convert-badges_test.js b/api/tests/acceptance/scripts/target-profile-migrations/convert-badges_test.js index 19d7a8a1c03..1a599d4ac4d 100644 --- a/api/tests/acceptance/scripts/target-profile-migrations/convert-badges_test.js +++ b/api/tests/acceptance/scripts/target-profile-migrations/convert-badges_test.js @@ -1,9 +1,8 @@ -const _ = require('lodash'); -const { expect, databaseBuilder, sinon, mockLearningContent } = require('../../../test-helper'); -const { knex } = require('../../../../db/knex-database-connection'); -const logger = require('../../../../lib/infrastructure/logger'); - -const { doJob } = require('../../../../scripts/prod/target-profile-migrations/convert-badges'); +import _ from 'lodash'; +import { expect, databaseBuilder, sinon, mockLearningContent } from '../../../test-helper.js'; +import { knex } from '../../../../db/knex-database-connection.js'; +import { logger } from '../../../../lib/infrastructure/logger.js'; +import { doJob } from '../../../../scripts/prod/target-profile-migrations/convert-badges.js'; describe('Acceptance | Scripts | convert-badges', function () { it('should execute the script as expected', async function () { diff --git a/api/tests/acceptance/scripts/update-sco-organizations-with-province-code-and-external-id_test.js b/api/tests/acceptance/scripts/update-sco-organizations-with-province-code-and-external-id_test.js index 5f82ce75dcb..79e14e96102 100644 --- a/api/tests/acceptance/scripts/update-sco-organizations-with-province-code-and-external-id_test.js +++ b/api/tests/acceptance/scripts/update-sco-organizations-with-province-code-and-external-id_test.js @@ -1,5 +1,8 @@ -const { expect, sinon, nock } = require('../../test-helper'); -const script = require('../../../scripts/update-sco-organizations-with-province-code-and-external-id'); +import { expect, sinon, nock } from '../../test-helper.js'; +import * as script from '../../../scripts/update-sco-organizations-with-province-code-and-external-id.js'; +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Acceptance | Scripts | update-sco-organizations-with-province-code-and-external-id.js', function () { describe('#assertFileValidity', function () { diff --git a/api/tests/docs/jsonapi-serializer.test.js b/api/tests/docs/jsonapi-serializer.test.js index b41579f8f2b..f3dc4b1aa52 100644 --- a/api/tests/docs/jsonapi-serializer.test.js +++ b/api/tests/docs/jsonapi-serializer.test.js @@ -1,9 +1,8 @@ -// https://jsonapi.org/ -// https://github.com/SeyZ/jsonapi-serializer +import { expect } from '../test-helper.js'; +import jsonapiSerializer from 'jsonapi-serializer'; -const { expect } = require('../test-helper'); +const { Serializer } = jsonapiSerializer; -const Serializer = require('jsonapi-serializer').Serializer; const resourceType = 'users'; describe('Docs | jsonapi-serializer', function () { diff --git a/api/tests/integration/application/.eslintrc.js b/api/tests/integration/application/.eslintrc.cjs similarity index 81% rename from api/tests/integration/application/.eslintrc.js rename to api/tests/integration/application/.eslintrc.cjs index 3086f4d3114..65d1a3802ea 100644 --- a/api/tests/integration/application/.eslintrc.js +++ b/api/tests/integration/application/.eslintrc.cjs @@ -1,3 +1,5 @@ +// eslint-disable-next-line eslint-comments/disable-enable-pair +/* eslint-disable no-undef */ module.exports = { extends: '../../.eslintrc.yaml', rules: { diff --git a/api/tests/integration/application/account-recovery/account-recovery-controller_test.js b/api/tests/integration/application/account-recovery/account-recovery-controller_test.js index df98bdc9322..00df12369cb 100644 --- a/api/tests/integration/application/account-recovery/account-recovery-controller_test.js +++ b/api/tests/integration/application/account-recovery/account-recovery-controller_test.js @@ -1,8 +1,7 @@ -const { expect, sinon, HttpTestServer } = require('../../../test-helper'); -const { NotFoundError, UserNotFoundError } = require('../../../../lib/domain/errors'); -const usecases = require('../../../../lib/domain/usecases/index.js'); - -const moduleUnderTest = require('../../../../lib/application/account-recovery'); +import { expect, sinon, HttpTestServer } from '../../../test-helper.js'; +import { NotFoundError, UserNotFoundError } from '../../../../lib/domain/errors.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import * as moduleUnderTest from '../../../../lib/application/account-recovery/index.js'; describe('Integration | Application | Account-Recovery | account-recovery-controller', function () { let httpTestServer; diff --git a/api/tests/integration/application/assessments/assessment-controller_test.js b/api/tests/integration/application/assessments/assessment-controller_test.js index 5697c16b235..73b57327b19 100644 --- a/api/tests/integration/application/assessments/assessment-controller_test.js +++ b/api/tests/integration/application/assessments/assessment-controller_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder, HttpTestServer } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const assessmentAuthorization = require('../../../../lib/application/preHandlers/assessment-authorization'); -const moduleUnderTest = require('../../../../lib/application/assessments'); +import { expect, sinon, domainBuilder, HttpTestServer } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { assessmentAuthorization } from '../../../../lib/application/preHandlers/assessment-authorization.js'; +import * as moduleUnderTest from '../../../../lib/application/assessments/index.js'; describe('Integration | Application | Assessments | assessment-controller', function () { let assessment; diff --git a/api/tests/integration/application/authentication/index_test.js b/api/tests/integration/application/authentication/index_test.js index c22c31d2917..c0d0d434abe 100644 --- a/api/tests/integration/application/authentication/index_test.js +++ b/api/tests/integration/application/authentication/index_test.js @@ -1,11 +1,8 @@ -const querystring = require('querystring'); +import querystring from 'querystring'; -const { expect, sinon } = require('../../../test-helper'); - -// eslint-disable-next-line no-restricted-modules -const createServer = require('../../../../server'); - -const authenticationController = require('../../../../lib/application/authentication/authentication-controller'); +import { expect, sinon } from '../../../test-helper.js'; +import { createServer } from '../../../../server.js'; +import { authenticationController } from '../../../../lib/application/authentication/authentication-controller.js'; describe('Integration | Application | Route | AuthenticationRouter', function () { let server; diff --git a/api/tests/integration/application/authentication/oidc/index_test.js b/api/tests/integration/application/authentication/oidc/index_test.js index cb81951ad24..f88fd6daf6a 100644 --- a/api/tests/integration/application/authentication/oidc/index_test.js +++ b/api/tests/integration/application/authentication/oidc/index_test.js @@ -1,11 +1,12 @@ -const { expect, sinon, HttpTestServer, generateValidRequestAuthorizationHeader } = require('../../../../test-helper'); -const oidcController = require('../../../../../lib/application/authentication/oidc/oidc-controller'); -const moduleUnderTest = require('../../../../../lib/application/authentication/oidc'); -const { +import { expect, sinon, HttpTestServer, generateValidRequestAuthorizationHeader } from '../../../../test-helper.js'; +import { oidcController } from '../../../../../lib/application/authentication/oidc/oidc-controller.js'; +import * as moduleUnderTest from '../../../../../lib/application/authentication/oidc/index.js'; + +import { UserNotFoundError, AuthenticationKeyExpired, DifferentExternalIdentifierError, -} = require('../../../../../lib/domain/errors'); +} from '../../../../../lib/domain/errors.js'; describe('Integration | Application | Route | OidcRouter', function () { let server; diff --git a/api/tests/integration/application/campaignParticipations/index_test.js b/api/tests/integration/application/campaignParticipations/index_test.js index 3d8f18e8455..5bcec8845de 100644 --- a/api/tests/integration/application/campaignParticipations/index_test.js +++ b/api/tests/integration/application/campaignParticipations/index_test.js @@ -1,8 +1,6 @@ -const { expect, sinon, HttpTestServer } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/campaign-participations'); - -const campaignParticipationController = require('../../../../lib/application/campaign-participations/campaign-participation-controller'); +import { expect, sinon, HttpTestServer } from '../../../test-helper.js'; +import * as moduleUnderTest from '../../../../lib/application/campaign-participations/index.js'; +import { campaignParticipationController } from '../../../../lib/application/campaign-participations/campaign-participation-controller.js'; describe('Integration | Application | Route | campaignParticipationRouter', function () { let httpTestServer; diff --git a/api/tests/integration/application/campaigns/index_test.js b/api/tests/integration/application/campaigns/index_test.js index a96c234549e..1a9ddb38621 100644 --- a/api/tests/integration/application/campaigns/index_test.js +++ b/api/tests/integration/application/campaigns/index_test.js @@ -1,8 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/campaigns'); - -const campaignController = require('../../../../lib/application/campaigns/campaign-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { campaignController } from '../../../../lib/application/campaigns/campaign-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/campaigns/index.js'; describe('Integration | Application | Route | campaignRouter', function () { let httpTestServer; diff --git a/api/tests/integration/application/certifications/index_test.js b/api/tests/integration/application/certifications/index_test.js index 463e7c83acb..399f1748ba2 100644 --- a/api/tests/integration/application/certifications/index_test.js +++ b/api/tests/integration/application/certifications/index_test.js @@ -1,10 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); - -const moduleUnderTest = require('../../../../lib/application/certifications'); - -const certificationController = require('../../../../lib/application/certifications/certification-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { certificationController } from '../../../../lib/application/certifications/certification-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/certifications/index.js'; describe('Integration | Application | Route | Certifications', function () { let httpTestServer; diff --git a/api/tests/integration/application/complementary-certification-course-results/complementary-certification-course-results-controller_test.js b/api/tests/integration/application/complementary-certification-course-results/complementary-certification-course-results-controller_test.js index 46c114d40a4..3b63952548f 100644 --- a/api/tests/integration/application/complementary-certification-course-results/complementary-certification-course-results-controller_test.js +++ b/api/tests/integration/application/complementary-certification-course-results/complementary-certification-course-results-controller_test.js @@ -1,8 +1,8 @@ -const { expect, sinon, HttpTestServer } = require('../../../test-helper'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const { InvalidJuryLevelError } = require('../../../../lib/domain/errors'); -const moduleUnderTest = require('../../../../lib/application/complementary-certification-course-results'); +import { expect, sinon, HttpTestServer } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { InvalidJuryLevelError } from '../../../../lib/domain/errors.js'; +import * as moduleUnderTest from '../../../../lib/application/complementary-certification-course-results/index.js'; describe('Integration | Application | complementary-certification-course-results | complementary-certification-course-results-controller', function () { let sandbox; diff --git a/api/tests/integration/application/complementary-certification-course-results/index_test.js b/api/tests/integration/application/complementary-certification-course-results/index_test.js index 127d125be5e..da73b10c58f 100644 --- a/api/tests/integration/application/complementary-certification-course-results/index_test.js +++ b/api/tests/integration/application/complementary-certification-course-results/index_test.js @@ -1,7 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const moduleUnderTest = require('../../../../lib/application/complementary-certification-course-results'); -const complementaryCertificationCourseResultsController = require('../../../../lib/application/complementary-certification-course-results/complementary-certification-course-results-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as moduleUnderTest from '../../../../lib/application/complementary-certification-course-results/index.js'; +import { complementaryCertificationCourseResultsController } from '../../../../lib/application/complementary-certification-course-results/complementary-certification-course-results-controller.js'; describe('Integration | Application | Route | Certifications', function () { let httpTestServer; diff --git a/api/tests/integration/application/error-manager_test.js b/api/tests/integration/application/error-manager_test.js index 45ae5ee0365..84277e79c29 100644 --- a/api/tests/integration/application/error-manager_test.js +++ b/api/tests/integration/application/error-manager_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, HttpTestServer } = require('../../test-helper'); -const DomainErrors = require('../../../lib/domain/errors'); +import { expect, sinon, HttpTestServer } from '../../test-helper.js'; +import * as DomainErrors from '../../../lib/domain/errors.js'; describe('Integration | API | Controller Error', function () { let server; diff --git a/api/tests/integration/application/healthcheck/index_test.js b/api/tests/integration/application/healthcheck/index_test.js index 221f4ebe220..57faddfed6e 100644 --- a/api/tests/integration/application/healthcheck/index_test.js +++ b/api/tests/integration/application/healthcheck/index_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, HttpTestServer } = require('../../../test-helper'); -const moduleUnderTest = require('../../../../lib/application/healthcheck'); -const healthCheckController = require('../../../../lib/application/healthcheck/healthcheck-controller'); +import { expect, sinon, HttpTestServer } from '../../../test-helper.js'; +import { healthcheckController as healthCheckController } from '../../../../lib/application/healthcheck/healthcheck-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/healthcheck/index.js'; describe('Integration | Application | Route | healthcheckRouter', function () { let httpTestServer; diff --git a/api/tests/integration/application/memberships/membership-controller_test.js b/api/tests/integration/application/memberships/membership-controller_test.js index 09c81fd9912..1b754ae7288 100644 --- a/api/tests/integration/application/memberships/membership-controller_test.js +++ b/api/tests/integration/application/memberships/membership-controller_test.js @@ -1,9 +1,9 @@ -const { expect, sinon, domainBuilder, HttpTestServer } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const Membership = require('../../../../lib/domain/models/Membership'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const moduleUnderTest = require('../../../../lib/application/memberships'); -const { InvalidMembershipOrganizationRoleError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, HttpTestServer } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as moduleUnderTest from '../../../../lib/application/memberships/index.js'; +import { InvalidMembershipOrganizationRoleError } from '../../../../lib/domain/errors.js'; describe('Integration | Application | Memberships | membership-controller', function () { let httpTestServer; diff --git a/api/tests/integration/application/organization-invitations/index_test.js b/api/tests/integration/application/organization-invitations/index_test.js index 3ef6ecdab62..7b2366c67a7 100644 --- a/api/tests/integration/application/organization-invitations/index_test.js +++ b/api/tests/integration/application/organization-invitations/index_test.js @@ -1,19 +1,17 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/organization-invitations/index'); - -const organisationInvitationController = require('../../../../lib/application/organization-invitations/organization-invitation-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { organizationInvitationController } from '../../../../lib/application/organization-invitations/organization-invitation-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/organization-invitations/index.js'; describe('Integration | Application | Organization-invitations | Routes', function () { let httpTestServer; beforeEach(async function () { sinon - .stub(organisationInvitationController, 'acceptOrganizationInvitation') + .stub(organizationInvitationController, 'acceptOrganizationInvitation') .callsFake((request, h) => h.response().code(204)); - sinon.stub(organisationInvitationController, 'sendScoInvitation').callsFake((request, h) => h.response().code(201)); + sinon.stub(organizationInvitationController, 'sendScoInvitation').callsFake((request, h) => h.response().code(201)); sinon - .stub(organisationInvitationController, 'getOrganizationInvitation') + .stub(organizationInvitationController, 'getOrganizationInvitation') .callsFake((request, h) => h.response().code(200)); httpTestServer = new HttpTestServer(); diff --git a/api/tests/integration/application/organization-invitations/organization-invitation-controller_test.js b/api/tests/integration/application/organization-invitations/organization-invitation-controller_test.js index 70733f7cbb3..2534a9a199b 100644 --- a/api/tests/integration/application/organization-invitations/organization-invitation-controller_test.js +++ b/api/tests/integration/application/organization-invitations/organization-invitation-controller_test.js @@ -1,10 +1,9 @@ -const { expect, sinon, HttpTestServer } = require('../../../test-helper'); +import { expect, sinon, HttpTestServer } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { serializer as scoOrganizationInvitationSerializer } from '../../../../lib/infrastructure/serializers/jsonapi/sco-organization-invitation-serializer.js'; +import * as moduleUnderTest from '../../../../lib/application/organization-invitations/index.js'; -const usecases = require('../../../../lib/domain/usecases/index.js'); -const scoOrganizationInvitationSerializer = require('../../../../lib/infrastructure/serializers/jsonapi/sco-organization-invitation-serializer'); -const moduleUnderTest = require('../../../../lib/application/organization-invitations'); - -const { +import { AlreadyExistingInvitationError, NotFoundError, UserNotFoundError, @@ -12,7 +11,7 @@ const { OrganizationNotFoundError, ManyOrganizationsFoundError, OrganizationArchivedError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Integration | Application | Organization-invitations | organization-invitation-controller', function () { let sandbox; diff --git a/api/tests/integration/application/organizations-administration/_files/logo-3mb.js b/api/tests/integration/application/organizations-administration/_files/logo-3mb.js index 2163cb1d41a..3dfa492095c 100644 --- a/api/tests/integration/application/organizations-administration/_files/logo-3mb.js +++ b/api/tests/integration/application/organizations-administration/_files/logo-3mb.js @@ -1,4 +1,4 @@ const logo3Mb = 'data:image/png;base64,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dEYjUmx0AAAAAAAAAAAAAAAAUnNsdFVudEYjUHhsQHLAAAAAAAAAAAAKdmVjdG9yRGF0YWJvb2wBAAAAAFBnUHNlbnVtAAAAAFBnUHMAAAAAUGdQQwAAAABMZWZ0VW50RiNSbHQAAAAAAAAAAAAAAABUb3AgVW50RiNSbHQAAAAAAAAAAAAAAABTY2wgVW50RiNQcmNAWQAAAAAAAAAAABBjcm9wV2hlblByaW50aW5nYm9vbAAAAAAOY3JvcFJlY3RCb3R0b21sb25nAAAAAAAAAAxjcm9wUmVjdExlZnRsb25nAAAAAAAAAA1jcm9wUmVjdFJpZ2h0bG9uZwAAAAAAAAALY3JvcFJlY3RUb3Bsb25nAAAAAAA4QklNA+0AAAAAABABLAAAAAEAAgEsAAAAAQACOEJJTQQmAAAAAAAOAAAAAAAAAAAAAD+AAAA4QklNBA0AAAAAAAQAAAAeOEJJTQQZAAAAAAAEAAAAHjhCSU0D8wAAAAAACQAAAAAAAAAAAQA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9mZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4AAAAAABwAAD/////////////////////////////A+gAAAAA/////////////////////////////wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////A+gAADhCSU0ECAAAAAAAEAAAAAEAAAJAAAACQAAAAAA4QklNBB4AAAAAAAQAAAAAOEJJTQQaAAAAAANZAAAABgAAAAAAAAAAAAAFoAAACgAAAAASAFAAcgBpAGMAZQBfADIANQA2ADAAeAAxADQANAAwAF8AVgAyAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAoAAAAFoAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAABAAAAABAAAAAAAAbnVsbAAAAAIAAAAGYm91bmRzT2JqYwAAAAEAAAAAAABSY3QxAAAABAAAAABUb3AgbG9uZwAAAAAAAAAATGVmdGxvbmcAAAAAAAAAAEJ0b21sb25nAAAFoAAAAABSZ2h0bG9uZwAACgAAAAAGc2xpY2VzVmxMcwAAAAFPYmpjAAAAAQAAAAAABXNsaWNlAAAAEgAAAAdzbGljZUlEbG9uZwAAAAAAAAAHZ3JvdXBJRGxvbmcAAAAAAAAABm9yaWdpbmVudW0AAAAMRVNsaWNlT3JpZ2luAAAADWF1dG9HZW5lcmF0ZWQAAAAAVHlwZWVudW0AAAAKRVNsaWNlVHlwZQAAAABJbWcgAAAABmJvdW5kc09iamMAAAABAAAAAAAAUmN0MQAAAAQAAAAAVG9wIGxvbmcAAAAAAAAAAExlZnRsb25nAAAAAAAAAABCdG9tbG9uZwAABaAAAAAAUmdodGxvbmcAAAoAAAAAA3VybFRFWFQAAAABAAAAAAAAbnVsbFRFWFQAAAABAAAAAAAATXNnZVRFWFQAAAABAAAAAAAGYWx0VGFnVEVYVAAAAAEAAAAAAA5jZWxsVGV4dElzSFRNTGJvb2wBAAAACGNlbGxUZXh0VEVYVAAAAAEAAAAAAAlob3J6QWxpZ25lbnVtAAAAD0VTbGljZUhvcnpBbGlnbgAAAAdkZWZhdWx0AAAACXZlcnRBbGlnbmVudW0AAAAPRVNsaWNlVmVydEFsaWduAAAAB2RlZmF1bHQAAAALYmdDb2xvclR5cGVlbnVtAAAAEUVTbGljZUJHQ29sb3JUeXBlAAAAAE5vbmUAAAAJdG9wT3V0c2V0bG9uZwAAAAAAAAAKbGVmdE91dHNldGxvbmcAAAAAAAAADGJvdHRvbU91dHNldGxvbmcAAAAAAAAAC3JpZ2h0T3V0c2V0bG9uZwAAAAAAOEJJTQQoAAAAAAAMAAAAAj/wAAAAAAAAOEJJTQQUAAAAAAAEAAAAAThCSU0EDAAAAAARtQAAAAEAAACgAAAAWgAAAeAAAKjAAAARmQAYAAH/2P/tAAxBZG9iZV9DTQAB/+4ADkFkb2JlAGSAAAAAAf/bAIQADAgICAkIDAkJDBELCgsRFQ8MDA8VGBMTFRMTGBEMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAENCwsNDg0QDg4QFA4ODhQUDg4ODhQRDAwMDAwREQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM/8AAEQgAWgCgAwEiAAIRAQMRAf/dAAQACv/EAT8AAAEFAQEBAQEBAAAAAAAAAAMAAQIEBQYHCAkKCwEAAQUBAQEBAQEAAAAAAAAAAQACAwQFBgcICQoLEAABBAEDAgQCBQcGCAUDDDMBAAIRAwQhEjEFQVFhEyJxgTIGFJGhsUIjJBVSwWIzNHKC0UMHJZJT8OHxY3M1FqKygyZEk1RkRcKjdDYX0lXiZfKzhMPTdePzRieUpIW0lcTU5PSltcXV5fVWZnaGlqa2xtbm9jdHV2d3h5ent8fX5/cRAAICAQIEBAMEBQYHBwYFNQEAAhEDITESBEFRYXEiEwUygZEUobFCI8FS0fAzJGLhcoKSQ1MVY3M08SUGFqKygwcmNcLSRJNUoxdkRVU2dGXi8rOEw9N14/NGlKSFtJXE1OT0pbXF1eX1VmZ2hpamtsbW5vYnN0dXZ3eHl6e3x//aAAwDAQACEQMRAD8A6gx6cvIa1pkvcYAEfvO9q5P63b3Z7aqLq6NtLbLDZPp2B2sPftsY/wBlVStZGdmdRoc2m4V1tJcwxDXkfR9P/CXf1nfobVz/AFjODcm6i1k1vdZVW3SA1gDvoR+dkfzn/XFk8ty5jPjJ9VVTHEOVf1K7D9WvGdULr9puspYRXsbJ9Ftdu71d7jvuse1BzOr52dSKsi5wYI3VtkNJH5zmKm+51r5LnEvMvJDdT/moN2waMBjxPP37VpRiO2vdkXu2lmntPaf3fIKv7R2k/glM9k2qepcudHPyhMNfEwn3EDRS1AHmDKSmW0ta3tukhIaqW+wUwDIa7VpEiPcNVEEGS0RHI8EkqKSSSSlJJJJKWTpu6dJSkkkklLpJBJJT/9DWGV0/Fii/Y2+0ktxccm1+0CfeR+ip2tb+/wDQXEde6bZndXtsxw7dY8ubroI+l/I2s/krcswL8FtV11w9ex53PA1aQD6dY2/zDNzv0zfe/wD4xBsqdVe7KsO1tjdmOC0h7y4y9+xvv2b2u3/Tes3B6ZWJcVivD/BQ8s/6tZ+7Yy1hdO2A4n3d2Sxp9yg76qdcaHb62NAO0brGtk/yd0bls2dUqwi79E+Gg7aKQDkR+ccnKcH/AGL1n/mNp+17P8HR+iWcPrR1Gyx3p3jprXaBmO303A/+GrfWzH8/Sfkq8DM9l1NO36rdeqa15xHFjvovaZGv8pVbelZ9IHqVRImNwlaGTU3Le63Issvt5Nlr3PcfPdY5zkM2twNaMj0/+DJ3tPjvos3Mcn2VU0RhZEQa9pPBP+9OcLJraS5mkEjX5LdwvrB07Jb6GXWMYu9oe0TRJP0vd+lx+f31Zz8CtuOXUu3bJLh2A8v7P/QQtDmdIw6cnFuqcz9LRNm6TGw/T3x7vZ/I/wCuIL+mvF+xzQ3d7SWGefztP7L9qJitfVkV3NeavSG5j2cyDvfx7fo/9b/0i0xTfdZccp2yxw9V1jfa0BoP6R28tYxJLy2vfQ906bU+48u1Pz1Wx9V/q1kfWTOuwse+vHfTSb3PtDiCA9lW39H7v8Iipz+n4j8/qGLgMcGWZl9eO17tQ02vbU1zo/NbuXTf8w8ez9ojE6u293TqXu9P0QLH5Ff2zfg2VtyH+g/Z02y1j/f+is/mv36nXvqp1v6pZGJn+oy1jbGPozaWktZew+rXXYy5vtf7PUr3/o7lMf4wvrYbYpuqYHkAY9WOwMdIsa6r0gP0vr2ZFlr2O+nekhZ/1JvNubTjZjLrcN2G2sWNFLbPttX2v3W2XFtHoNG3/Cesrg/xdl2DTmM6mHb6Bdaz0Pol2LZ1OtlT/X/TNc2l1Xqfov8Ai1e+wfWvqFWb0/Ptwce21tFGZU/GaX+2ll2K59tdf9Jx6Mn0/U/wP5iDTn/Wpv1cxupszMQYmJQLBinHaTZXWx/Tm05Ttn6w37M+yv3vUR5jCJGJl6gRCqPzT+ULeON1fWmvnfUHAwXFmR1l7S3qNXS3O+yN2iy5jMll285v8wyiz9J/L/7cXPdd6T+xep2dMfeMi6hlf2hzWw1tr2NttoYd9nqNo3+n6vs/4taGNnfWr62ZTul0luVdkZX7SsljWtbZXWMb1rbY21Y1dOyrY78/Z/hbFldZyeoZHUsl/U6xVmm15yG7BW4WPdL/AFAP3fzFMuawSXS/Wn6i531YwqsvJy6chtt3oBlTXhwO19u4+p7f8GuaQS//0ehyemstp9UMN1wPsc6w1O44dd6WR6n7v6WmyxY+IMyz6119I6gaXYtuO57qKWuDXOYN1NV+VYX5uRU2f5t76Md//cZdTW2auNS7Q/JY3VMSjH690vq0mu59n2K0AxvZYHel/brtWFyeasojL5SPP1IB0eV+szntzzjbRTjUAVtcxoDoIc5myv2Mr3O9lrv5zYshuLih+RdfWHsub7A9z3iiC19jmTs3/Q9Ove//AAq6f62srd1EWNG6t5iBqd353u/rLB6pRHTnX6V1tEuB8f8Avz1siXRkAsW5XTjWa797TFUmseAP5j04xsYtINMvcHNLwdrmvOrLWaO3f2lcxsI4mBkfaWFuQ9zdD+bIFnpu/ltZs3/9toWO4PeQIdoPbOundG9SqtA5t2O4FrXEkj6ZOoOv7v5q0uiZF49XGLfWx2sdtbMPZydte79HZU7/AEF3/oPbRYpZdINe6APgqdF7sb1w3R9jCARoQjdoIS0uxq8pzqsptXpO1Y8mt0j+Ttf7v6iB1jqj82+wVFzMZ4bLTAL9v5z2s9u3f7m1/wDoxZ/L3PjU6fck7U6+CVIYDVdv/ik/8UOd/wCEHf8An6hcSR966L6kdYy+jdQzM3Fwf2jGI4XV+qKdlYey51+9zbN+30voIqfRh9YumZ/X+p/U/rFVZBeKscP0ZexzGW/Z7Pd+jzK3u3Y9rNm//B7L6/0tTo31K6F9VMjM65nZQtoxSXY114j7PWfz7Gt/n87c70KfSb+k/wADX6136Pz7rf7V691x3U6sJ1D+qj7TjUixrjsqY1rrG2/ovo+lv9zK0TqfVvrb9ZMfpmJlzfU6t78NrS1nrmn1GXZeRuf+kyam1WVb7dn/AAX6S6z1Ch7Ho/Wquu5fUOq01uoqyMwNrreQX7aqMehjrNvtbZY2ve+v/B/Q/SfTWXjsNn1DZU0ibcUVgngF93pgu/k7nrE6F17L6F02onB9ejOvfZj3G0MDnNFdNlW3Zbt2bfz9n01YZ1Tq2J0k9Hf0sl+F6OPbY64QLLbPtWL6lbW/4bZs9t3/AFytZk+VynNKQj6Tlxz3j8kOLiLAccjImtOIH6B7W6/oH+LXojcetv2vPyCC9shluS9vtdbY+LPs2HR7vQr9+z/hb7LrlX+sPQOk/XvpFXW+h2NGeBtY58MLyyC/Azxr6WTT/grfofy/s1ldq8+6pR9YusdXsvz63XZ+TkuxdgczS1gDjjVN9Q7Kaa7G/wDA/wDCK19VeofWDoOVVnYWOb8TLrtfbiueGtvqxdzsl3O+m7F9/pW7PU/42r1K1ps723+N9wd0PEI4OdP31WryjVdf9bvrXmfWDo1Ad037HjVZQIv9dtwNnpF3ohja6tv6K71N65AapJf/0u0oHt2nndp9yxfrx6VfRhb6gZdVbXZTEyXNdOkf9Ut64trFcDkwO3Zcl/jAddldPe2lzfTpq3vhwkO3ezj97asOPLiGeML1iYni/wCciq0cnKzm5pbkMdq8btzY0J/Mb+9tf9J6z+odWbiux2X1U5hof678W3Wp0NdWys+n+kf/AKb6Xp+qz/CLBo6hdTjPbW8wCHtg8A9vztm1yDXjX573EP2Mb9KfLyC2BHa+i+J6d3pcj60dOz6MxwoO/LsN5D3Aeja8/pG+r/had381b/o1g05GIbdzHCt9YO1wkflQmdFyIG+YnVzNrtCAY9z2KFvSMinWw7CeN0BOoJuXZ3rDXbTuYdzTBB7ahYWTc05Dy2A2YJKhTm3UUHHkwHTHxCA0vsc8TDGtLnnxA8UAEE2zoLX1ncQCHGPgnyQGXQDptaZ+IQaXOa07PpN4Pf8Alf8ARUnOGQ57t3uLSTA7j/XenISZLXMvsaR+cfyoJgjUd9Fv9exMc0WZjRtsaWajh24tbqFzzyYB7GQgNVFctaew1Sga6cp9UyKlEDU9zylAjgJJSkpYgeAT7RB0SlOPJJSwAGsJ0kgElP8A/9PsOq3iltBJjd6kN5Ltrd3s/lry3rWdZlurZb+iNgcLbJ9pA/SPyPTp9v6LdXV/wtj1o52dm39V6hnvv9RxtpfiallbKWkvw6nPt2+k2zdY3I9lf6X1P8L7Fn9Z9avqGJl9NxLnMDA+8PaXVBxc65uNj+7Z6WLS2quqz/D2/plRjjvNKfWQjX+DBB3eZocWWWNIgD6QaZ0Bg7Xf2lpdNfSy4syP0W9sVmSQXfym/Sf++q2dg5dJffdQ/wBJ4a6m0uY7aJH03U/otjmfQ2/8EqrcktA9rHCNokageX9ZXKtcDRt1MrJ6rUduLkONZJdNWnOkT/5klcLfswysq823OGrHawY/OWbR1C6oFu47XcjkFDuyLMhwLiXO4gd4hKl3EtL7Xkt1ceUpLK3sJndyG/8AfnJ6C0NscXQTtA+BPuT0urdcC7QA+1nn2lFYw2Ee10iPpNOnycncwgh7RroAD2P5uisHV7oDXawQeCTH+rUd2MGiywODWjWJAcIG0D3O9z9rt+xC0uh1ovsxMlzGkVMdW5w/dD9ljPb9LZtesXHrNrdjQJLuXGB5LpsQ9V+3WZmK4YVT2+oy+kh9grrZxPue1lfp+k/+Y9X9J/pFj1g5lt1gxqmG2wPLaWANG5u7ZXTu/V693v8AZ7GfzdaBlQ10UT1c6wRY9sztcRI4MFRTvBFjw7kOIcPOU3dOUsSmTuUUlLpwmlOOUlLpDwSKR4lJT//U5fF6vXhk05Qf9n2uxntIIAxnlza/bussrtpfX67Gu/nVDPxmYTqyMxwZa0/ZS14NRZGz7TU+G7fUe6z2/wA5/wBc/Rqp1fhnP823+c+l/NU/0j/u1/3z1F0X+LT+ed/QeXf0r+k/nf8AJP8Awf8Apv8AhlAOGzW9q6vP05Njnhlt5fXD2sglwEh/o2HZ6r/50P3+p+lQv2Xm5O8UjdiD9J9psDgz3HYx7NN9j7Hv9L9G3Zv/AO3F231/5p+jyz+mfzn0x/O/90/9N/wSoH+azv5/+Zd/O/R/nMb6f/B/9wf+C9JSD6J0ebZg4gqFVDW3ZBcGAOMPLjEttocKranO+ixrbL/0n6P/AAqOOn4pr22XyLfaxtTXPZulo2i1wZX6tO731WMZZ+kQ+ofzI/nf5t3/ACj/ADv02/0D/h/31as/nHfS+jg/z3852+n/AMP/AKP/ALq+gipx+oVhlppbVBbZZvgHe73FnuDi/b6exQayo11227Kme72CdxLNsF5P7znfQYtHI4H0ufzvp/R7/wAr/Sf8L6yoZP8AO4v0eXfT+j9P/CI9FdV6HVXWOawmxx3ua1rCS4n2w4j3bfznoeY7IssYLK3VNYAxgeC3X895/lPcrd39Ft447fS/N/mP/Ryz28s/nefz/opuvRTLFuu/m/UcGfu7jB/srVxSCDleptcwtrmA5xn81rY99v8AX/waxa+3xWl0n6Vv0eR9L6X0T/Nfy0zP8hWT+UtZzKjc/wBQuhznE2N2gN1Pu9E/m/261DIx30PDS5r2u1ZYzVjm/vNmHf163/pav8KtUfRZ/M8/4Tn+yszM/pln83z/AIH6PH/nz/SKUbBcELmkiUNT7KJRUoDSVIaFI9kySWRCXgm/NTn6SCn/2QA4QklNBCEAAAAAAFcAAAABAQAAAA8AQQBkAG8AYgBlACAAUABoAG8AdABvAHMAaABvAHAAAAAUAEEAZABvAGIAZQAgAFAAaABvAHQAbwBzAGgAbwBwACAAMgAwADIAMgAAAAEAOEJJTQQGAAAAAAAHAAgBAQABAQD/4Q5WaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLwA8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/PiA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJBZG9iZSBYTVAgQ29yZSA3LjEtYzAwMCA3OS5iMGY4YmU5MCwgMjAyMS8xMi8xNS0yMToyNToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOnBob3Rvc2hvcD0iaHR0cDovL25zLmFkb2JlLmNvbS9waG90b3Nob3AvMS4wLyIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIDIzLjIgKE1hY2ludG9zaCkiIHhtcDpDcmVhdGVEYXRlPSIyMDIyLTA3LTA2VDE1OjM3OjMzKzAyOjAwIiB4bXA6TW9kaWZ5RGF0ZT0iMjAyMi0wNy0wNlQxNzo1NTozMyswMjowMCIgeG1wOk1ldGFkYXRhRGF0ZT0iMjAyMi0wNy0wNlQxNzo1NTozMyswMjowMCIgZGM6Zm9ybWF0PSJpbWFnZS9qcGVnIiBwaG90b3Nob3A6Q29sb3JNb2RlPSIzIiBwaG90b3Nob3A6SUNDUHJvZmlsZT0ic1JHQiBJRUM2MTk2Ni0yLjEiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6YTk3MzBlZmEtOTIzOS00YjAyLWEwMDMtMjQ1MWQxYTQ3MDc3IiB4bXBNTTpEb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6MDI0YmJhMTUtNjA2OC1iMDQwLTliNTUtNWI3MmQ0N2IxNjY4IiB4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ9InhtcC5kaWQ6YzYwMDYyMDYtNjM1Yi00MDdlLWI2N2EtZjlkMzI1YjRjZjA0Ij4gPHhtcE1NOkhpc3Rvcnk+IDxyZGY6U2VxPiA8cmRmOmxpIHN0RXZ0OmFjdGlvbj0iY3JlYXRlZCIgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDpjNjAwNjIwNi02MzViLTQwN2UtYjY3YS1mOWQzMjViNGNmMDQiIHN0RXZ0OndoZW49IjIwMjItMDctMDZUMTU6Mzc6MzMrMDI6MDAiIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkFkb2JlIFBob3Rvc2hvcCAyMy4yIChNYWNpbnRvc2gpIi8+IDxyZGY6bGkgc3RFdnQ6YWN0aW9uPSJjb252ZXJ0ZWQiIHN0RXZ0OnBhcmFtZXRlcnM9ImZyb20gaW1hZ2UvcG5nIHRvIGltYWdlL2pwZWciLz4gPHJkZjpsaSBzdEV2dDphY3Rpb249InNhdmVkIiBzdEV2dDppbnN0YW5jZUlEPSJ4bXAuaWlkOmE5NzMwZWZhLTkyMzktNGIwMi1hMDAzLTI0NTFkMWE0NzA3NyIgc3RFdnQ6d2hlbj0iMjAyMi0wNy0wNlQxNzo1NTozMyswMjowMCIgc3RFdnQ6c29mdHdhcmVBZ2VudD0iQWRvYmUgUGhvdG9zaG9wIDIzLjIgKE1hY2ludG9zaCkiIHN0RXZ0OmNoYW5nZWQ9Ii8iLz4gPC9yZGY6U2VxPiA8L3htcE1NOkhpc3Rvcnk+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw/eHBhY2tl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'; -module.exports = { logo3Mb }; +export { logo3Mb }; diff --git a/api/tests/integration/application/organizations-administration/index_test.js b/api/tests/integration/application/organizations-administration/index_test.js index 6452fda0a0b..4ccd95d709e 100644 --- a/api/tests/integration/application/organizations-administration/index_test.js +++ b/api/tests/integration/application/organizations-administration/index_test.js @@ -1,13 +1,14 @@ -const { +import { expect, sinon, HttpTestServer, databaseBuilder, generateValidRequestAuthorizationHeader, -} = require('../../../test-helper'); -const organizationAdministrationController = require('../../../../lib/application/organizations-administration/organization-administration-controller'); -const moduleUnderTest = require('../../../../lib/application/organizations-administration'); -const { logo3Mb } = require('./_files/logo-3mb'); +} from '../../../test-helper.js'; + +import { organizationAdministrationController } from '../../../../lib/application/organizations-administration/organization-administration-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/organizations-administration/index.js'; +import { logo3Mb } from './_files/logo-3mb.js'; describe('Integration | Application | Organization Administration | Routes', function () { describe('PATCH /api/admin/organizations/{:id}', function () { diff --git a/api/tests/integration/application/organizations-administration/organization-administration-controller_test.js b/api/tests/integration/application/organizations-administration/organization-administration-controller_test.js index a500fa02ed5..86e064426fa 100644 --- a/api/tests/integration/application/organizations-administration/organization-administration-controller_test.js +++ b/api/tests/integration/application/organizations-administration/organization-administration-controller_test.js @@ -1,7 +1,7 @@ -const { expect, hFake, databaseBuilder, knex } = require('../../../test-helper'); -const organizationAdministrationController = require('../../../../lib/application/organizations-administration/organization-administration-controller.js'); -const dragonLogo = require('../../../../db/seeds/src/dragonAndCoBase64'); -const apps = require('../../../../lib/domain/constants.js'); +import { expect, hFake, databaseBuilder, knex } from '../../../test-helper.js'; +import * as organizationAdministrationController from '../../../../lib/application/organizations-administration/organization-administration-controller.js'; +import * as dragonLogo from '../../../../db/seeds/src/dragonAndCoBase64.js'; +import * as apps from '../../../../lib/domain/constants.js'; describe('Integration | Application | Controller | organization-administration-controller', function () { let organization; let featureId; diff --git a/api/tests/integration/application/organizations/index_test.js b/api/tests/integration/application/organizations/index_test.js index 98cd2b2da18..63ebd5366c1 100644 --- a/api/tests/integration/application/organizations/index_test.js +++ b/api/tests/integration/application/organizations/index_test.js @@ -1,8 +1,7 @@ -const { expect, sinon, HttpTestServer } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const organizationController = require('../../../../lib/application/organizations/organization-controller'); -const moduleUnderTest = require('../../../../lib/application/organizations'); +import { expect, sinon, HttpTestServer } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { organizationController } from '../../../../lib/application/organizations/organization-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/organizations/index.js'; describe('Integration | Application | Organizations | Routes', function () { describe('POST /api/admin/organizations', function () { diff --git a/api/tests/integration/application/organizations/organization-controller_test.js b/api/tests/integration/application/organizations/organization-controller_test.js index 5d189caa9bf..e588d761f1f 100644 --- a/api/tests/integration/application/organizations/organization-controller_test.js +++ b/api/tests/integration/application/organizations/organization-controller_test.js @@ -1,14 +1,12 @@ -const { expect, sinon, domainBuilder, HttpTestServer } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); -const ScoOrganizationParticipant = require('../../../../lib/domain/read-models/ScoOrganizationParticipant'); -const SupOrganizationParticipant = require('../../../../lib/domain/read-models/SupOrganizationParticipant'); -const certificationAttestationPdf = require('../../../../lib/infrastructure/utils/pdf/certification-attestation-pdf'); - -const moduleUnderTest = require('../../../../lib/application/organizations'); -const { NoCertificationAttestationForDivisionError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, HttpTestServer } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; +import { ScoOrganizationParticipant } from '../../../../lib/domain/read-models/ScoOrganizationParticipant.js'; +import { SupOrganizationParticipant } from '../../../../lib/domain/read-models/SupOrganizationParticipant.js'; +import { getCertificationAttestationsPdf as certificationAttestationPdf } from '../../../../lib/infrastructure/utils/pdf/certification-attestation-pdf.js'; +import * as moduleUnderTest from '../../../../lib/application/organizations/index.js'; +import { NoCertificationAttestationForDivisionError } from '../../../../lib/domain/errors.js'; describe('Integration | Application | Organizations | organization-controller', function () { let sandbox; @@ -23,8 +21,8 @@ describe('Integration | Application | Organizations | organization-controller', sandbox.stub(usecases, 'acceptOrganizationInvitation'); sandbox.stub(usecases, 'findPendingOrganizationInvitations'); sandbox.stub(usecases, 'findCertificationAttestationsForDivision'); - sandbox.stub(usecases, 'findGroupsByOrganization'); sandbox.stub(usecases, 'findDivisionsByOrganization'); + sandbox.stub(usecases, 'findGroupsByOrganization'); sandbox.stub(usecases, 'getPaginatedParticipantsForAnOrganization'); sandbox.stub(usecases, 'findOrganizationPlacesLot'); diff --git a/api/tests/integration/application/passwords/index_test.js b/api/tests/integration/application/passwords/index_test.js index 6f7729afb07..968c33cc441 100644 --- a/api/tests/integration/application/passwords/index_test.js +++ b/api/tests/integration/application/passwords/index_test.js @@ -1,8 +1,6 @@ -const { expect, sinon, HttpTestServer } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/passwords'); - -const passwordController = require('../../../../lib/application/passwords/password-controller'); +import { expect, sinon, HttpTestServer } from '../../../test-helper.js'; +import { passwordController } from '../../../../lib/application/passwords/password-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/passwords/index.js'; describe('Integration | Application | Password | Routes', function () { let httpTestServer; diff --git a/api/tests/integration/application/passwords/password-controller_test.js b/api/tests/integration/application/passwords/password-controller_test.js index b42049ab33b..18b3989b18c 100644 --- a/api/tests/integration/application/passwords/password-controller_test.js +++ b/api/tests/integration/application/passwords/password-controller_test.js @@ -1,14 +1,14 @@ -const { domainBuilder, expect, sinon, HttpTestServer } = require('../../../test-helper'); +import { domainBuilder, expect, sinon, HttpTestServer } from '../../../test-helper.js'; -const { +import { ForbiddenAccess, InvalidTemporaryKeyError, PasswordResetDemandNotFoundError, UserNotFoundError, -} = require('../../../../lib/domain/errors'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +} from '../../../../lib/domain/errors.js'; -const moduleUnderTest = require('../../../../lib/application/passwords'); +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import * as moduleUnderTest from '../../../../lib/application/passwords/index.js'; describe('Integration | Application | Passwords | password-controller', function () { let httpTestServer; diff --git a/api/tests/integration/application/pre-response-utils_test.js b/api/tests/integration/application/pre-response-utils_test.js index c5b8d8f2753..5eb3538549f 100644 --- a/api/tests/integration/application/pre-response-utils_test.js +++ b/api/tests/integration/application/pre-response-utils_test.js @@ -1,6 +1,6 @@ -const { expect, hFake } = require('../../test-helper'); +import { expect, hFake } from '../../test-helper.js'; -const { +import { BadRequestError, ConflictError, ForbiddenError, @@ -10,11 +10,10 @@ const { PreconditionFailedError, UnauthorizedError, UnprocessableEntityError, -} = require('../../../lib/application/http-errors'); +} from '../../../lib/application/http-errors.js'; -const { EntityValidationError } = require('../../../lib/domain/errors'); - -const { handleDomainAndHttpErrors } = require('../../../lib/application/pre-response-utils'); +import { EntityValidationError } from '../../../lib/domain/errors.js'; +import { handleDomainAndHttpErrors } from '../../../lib/application/pre-response-utils.js'; describe('Integration | Application | PreResponse-utils', function () { describe('#handleDomainAndHttpErrors', function () { diff --git a/api/tests/integration/application/prescribers/index_test.js b/api/tests/integration/application/prescribers/index_test.js index 156ada148d9..96704074eef 100644 --- a/api/tests/integration/application/prescribers/index_test.js +++ b/api/tests/integration/application/prescribers/index_test.js @@ -1,8 +1,7 @@ -const { expect, sinon, HttpTestServer } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const prescriberController = require('../../../../lib/application/prescribers/prescriber-controller'); -const moduleUnderTest = require('../../../../lib/application/prescribers'); +import { expect, sinon, HttpTestServer } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { prescriberController } from '../../../../lib/application/prescribers/prescriber-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/prescribers/index.js'; describe('Integration | Application | Prescribers | Routes', function () { let httpTestServer; diff --git a/api/tests/integration/application/prescribers/prescriber-controller_test.js b/api/tests/integration/application/prescribers/prescriber-controller_test.js index f2e71ea43be..6a68ae66452 100644 --- a/api/tests/integration/application/prescribers/prescriber-controller_test.js +++ b/api/tests/integration/application/prescribers/prescriber-controller_test.js @@ -1,9 +1,7 @@ -const { expect, sinon, domainBuilder, HttpTestServer } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const usecases = require('../../../../lib/domain/usecases/index.js'); - -const moduleUnderTest = require('../../../../lib/application/prescribers'); +import { expect, sinon, domainBuilder, HttpTestServer } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import * as moduleUnderTest from '../../../../lib/application/prescribers/index.js'; describe('Integration | Application | Prescribers | prescriber-controller', function () { let sandbox; diff --git a/api/tests/integration/application/sco-organization-learners/index_test.js b/api/tests/integration/application/sco-organization-learners/index_test.js index 3c4bc101328..1a79cc7858e 100644 --- a/api/tests/integration/application/sco-organization-learners/index_test.js +++ b/api/tests/integration/application/sco-organization-learners/index_test.js @@ -1,8 +1,7 @@ -const { expect, sinon, HttpTestServer } = require('../../../test-helper'); - -const scoOrganizationLearnerController = require('../../../../lib/application/sco-organization-learners/sco-organization-learner-controller'); -const moduleUnderTest = require('../../../../lib/application/sco-organization-learners'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); +import { expect, sinon, HttpTestServer } from '../../../test-helper.js'; +import { scoOrganizationLearnerController } from '../../../../lib/application/sco-organization-learners/sco-organization-learner-controller.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as moduleUnderTest from '../../../../lib/application/sco-organization-learners/index.js'; describe('Integration | Application | Route | sco-organization-learners', function () { let httpTestServer; diff --git a/api/tests/integration/application/sco-organization-learners/sco-organization-learner-controller_test.js b/api/tests/integration/application/sco-organization-learners/sco-organization-learner-controller_test.js index 4bbdf05ae06..626af687cff 100644 --- a/api/tests/integration/application/sco-organization-learners/sco-organization-learner-controller_test.js +++ b/api/tests/integration/application/sco-organization-learners/sco-organization-learner-controller_test.js @@ -1,14 +1,13 @@ -const { expect, sinon, domainBuilder, HttpTestServer } = require('../../../test-helper'); +import { expect, sinon, domainBuilder, HttpTestServer } from '../../../test-helper.js'; +import * as moduleUnderTest from '../../../../lib/application/sco-organization-learners/index.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; -const moduleUnderTest = require('../../../../lib/application/sco-organization-learners'); - -const usecases = require('../../../../lib/domain/usecases/index.js'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const { +import { NotFoundError, UserNotAuthorizedToUpdatePasswordError, UserNotAuthorizedToGenerateUsernamePasswordError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Integration | Application | sco-organization-learners | sco-organization-learner-controller', function () { let sandbox; diff --git a/api/tests/integration/application/scoring-simulator/scoring-simulator-controller_test.js b/api/tests/integration/application/scoring-simulator/scoring-simulator-controller_test.js index 62e2f94d479..e08f5eda928 100644 --- a/api/tests/integration/application/scoring-simulator/scoring-simulator-controller_test.js +++ b/api/tests/integration/application/scoring-simulator/scoring-simulator-controller_test.js @@ -1,11 +1,11 @@ -const { expect, sinon, HttpTestServer } = require('../../../test-helper'); -const ScoringSimulationResult = require('../../../../lib/domain/models/ScoringSimulationResult'); -const ScoringSimulation = require('../../../../lib/domain/models/ScoringSimulation'); -const Answer = require('../../../../lib/domain/models/Answer'); -const ScoringSimulationContext = require('../../../../lib/domain/models/ScoringSimulationContext'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const moduleUnderTest = require('../../../../lib/application/scoring-simulator'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); +import { expect, sinon, HttpTestServer } from '../../../test-helper.js'; +import { ScoringSimulationResult } from '../../../../lib/domain/models/ScoringSimulationResult.js'; +import { ScoringSimulation } from '../../../../lib/domain/models/ScoringSimulation.js'; +import { Answer } from '../../../../lib/domain/models/Answer.js'; +import { ScoringSimulationContext } from '../../../../lib/domain/models/ScoringSimulationContext.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as moduleUnderTest from '../../../../lib/application/scoring-simulator/index.js'; describe('Integration | Application | Scoring-simulator | scoring-simulator-controller', function () { let httpTestServer; diff --git a/api/tests/integration/application/security-pre-handlers_test.js b/api/tests/integration/application/security-pre-handlers_test.js index a454eef2b9d..c127373e870 100644 --- a/api/tests/integration/application/security-pre-handlers_test.js +++ b/api/tests/integration/application/security-pre-handlers_test.js @@ -1,13 +1,16 @@ -const { +import { expect, generateValidRequestAuthorizationHeader, databaseBuilder, HttpTestServer, sinon, -} = require('../../test-helper'); -const securityPreHandlers = require('../../../lib/application/security-pre-handlers'); -const settings = require('../../../lib/config'); -const { ROLES } = require('../../../lib/domain/constants').PIX_ADMIN; +} from '../../test-helper.js'; + +import { securityPreHandlers } from '../../../lib/application/security-pre-handlers.js'; +import { config as settings } from '../../../lib/config.js'; +import { PIX_ADMIN } from '../../../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; describe('Integration | Application | SecurityPreHandlers', function () { describe('check admin member roles for pix admin routes', function () { diff --git a/api/tests/integration/application/stage-collections/stage-collection-controller_test.js b/api/tests/integration/application/stage-collections/stage-collection-controller_test.js index 91ee3dc2c8c..3ad20627629 100644 --- a/api/tests/integration/application/stage-collections/stage-collection-controller_test.js +++ b/api/tests/integration/application/stage-collections/stage-collection-controller_test.js @@ -1,6 +1,6 @@ -const { expect, knex, databaseBuilder, hFake } = require('../../../test-helper'); -const controller = require('../../../../lib/application/stage-collections/stage-collection-controller'); -const stageCollectionRepository = require('../../../../lib/infrastructure/repositories/target-profile-management/stage-collection-repository'); +import { expect, knex, databaseBuilder, hFake } from '../../../test-helper.js'; +import { stageCollectionController } from '../../../../lib/application/stage-collections/stage-collection-controller.js'; +import * as stageCollectionRepository from '../../../../lib/infrastructure/repositories/target-profile-management/stage-collection-repository.js'; describe('Integration | Application | stage-collection-controller', function () { context('update', function () { @@ -99,60 +99,60 @@ describe('Integration | Application | stage-collection-controller', function () }; // when - await controller.update(request, hFake); + await stageCollectionController.update(request, hFake); // then const currentStageCollection = await stageCollectionRepository.getByTargetProfileId(targetProfileId); + const currentStages = currentStageCollection.toDTO(); const newStageIds = currentStageCollection.stages .map(({ id }) => id) .filter((value) => ![123, 456, 789].includes(value)) .sort(); - expect(currentStageCollection.toDTO()).to.deep.equal({ - id: targetProfileId, - targetProfileId, - stages: [ - { - id: newStageIds[0], - level: 2, - threshold: null, - isFirstSkill: false, - title: 'Palier niveau 2 titre', - message: 'Palier niveau 2 message', - prescriberTitle: 'Palier niveau 2 titre prescripteur', - prescriberDescription: 'Palier niveau 2 description prescripteur', - }, - { - id: newStageIds[1], - level: null, - threshold: null, - isFirstSkill: true, - title: 'Palier premier acquis titre', - message: 'Palier premier acquis message', - prescriberTitle: 'Palier premier acquis titre prescripteur', - prescriberDescription: 'Palier premier acquis description prescripteur', - }, - { - id: 123, - level: 0, - threshold: null, - isFirstSkill: false, - title: 'Palier niveau 0 titre', - message: 'Palier niveau 0 message', - prescriberTitle: 'Palier niveau 0 titre prescripteur', - prescriberDescription: 'Palier niveau 0 description prescripteur', - }, - { - id: 456, - level: 1, - threshold: null, - isFirstSkill: false, - title: 'Palier niveau 1 titre', - message: 'Palier niveau 1 message', - prescriberTitle: 'Palier niveau 1 titre prescripteur', - prescriberDescription: 'Palier niveau 1 description prescripteur', - }, - ], - }); + + expect(currentStages.id).to.equal(targetProfileId); + expect(currentStages.targetProfileId).to.equal(targetProfileId); + expect(currentStages.stages).to.have.deep.members([ + { + id: newStageIds[0], + level: 2, + threshold: null, + isFirstSkill: false, + title: 'Palier niveau 2 titre', + message: 'Palier niveau 2 message', + prescriberTitle: 'Palier niveau 2 titre prescripteur', + prescriberDescription: 'Palier niveau 2 description prescripteur', + }, + { + id: newStageIds[1], + level: null, + threshold: null, + isFirstSkill: true, + title: 'Palier premier acquis titre', + message: 'Palier premier acquis message', + prescriberTitle: 'Palier premier acquis titre prescripteur', + prescriberDescription: 'Palier premier acquis description prescripteur', + }, + { + id: 123, + level: 0, + threshold: null, + isFirstSkill: false, + title: 'Palier niveau 0 titre', + message: 'Palier niveau 0 message', + prescriberTitle: 'Palier niveau 0 titre prescripteur', + prescriberDescription: 'Palier niveau 0 description prescripteur', + }, + { + id: 456, + level: 1, + threshold: null, + isFirstSkill: false, + title: 'Palier niveau 1 titre', + message: 'Palier niveau 1 message', + prescriberTitle: 'Palier niveau 1 titre prescripteur', + prescriberDescription: 'Palier niveau 1 description prescripteur', + }, + ]); }); }); }); diff --git a/api/tests/integration/application/sup-organization-learners/index_test.js b/api/tests/integration/application/sup-organization-learners/index_test.js index a117ec09186..10c8541c4c4 100644 --- a/api/tests/integration/application/sup-organization-learners/index_test.js +++ b/api/tests/integration/application/sup-organization-learners/index_test.js @@ -1,8 +1,7 @@ -const { expect, sinon, HttpTestServer, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); - -const supOrganizationLearnerController = require('../../../../lib/application/sup-organization-learners/sup-organization-learner-controller'); -const moduleUnderTest = require('../../../../lib/application/sup-organization-learners'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); +import { expect, sinon, HttpTestServer, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { supOrganizationLearnerController } from '../../../../lib/application/sup-organization-learners/sup-organization-learner-controller.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as moduleUnderTest from '../../../../lib/application/sup-organization-learners/index.js'; describe('Integration | Application | Route | sup-organization-learners', function () { let httpTestServer; diff --git a/api/tests/integration/application/target-profile/presenter/pdf/learning-content-pdf-presenter_test.js b/api/tests/integration/application/target-profile/presenter/pdf/learning-content-pdf-presenter_test.js index 7f37c4b2f03..b5094de9993 100644 --- a/api/tests/integration/application/target-profile/presenter/pdf/learning-content-pdf-presenter_test.js +++ b/api/tests/integration/application/target-profile/presenter/pdf/learning-content-pdf-presenter_test.js @@ -1,7 +1,11 @@ -const { domainBuilder, expect, MockDate } = require('../../../../../test-helper'); -const { isSameBinary } = require('../../../../../tooling/binary-comparator'); -const learningContentPDFPresenter = require('../../../../../../lib/application/target-profiles/presenter/pdf/learning-content-pdf-presenter'); -const { addRandomSuffix } = require('pdf-lib/cjs/utils'); +import { domainBuilder, expect, MockDate, sinon } from '../../../../../test-helper.js'; +import { isSameBinary } from '../../../../../tooling/binary-comparator.js'; +import * as learningContentPDFPresenter from '../../../../../../lib/application/target-profiles/presenter/pdf/learning-content-pdf-presenter.js'; +import { writeFile } from 'fs/promises'; +import * as url from 'url'; +import pdfLibUtils from 'pdf-lib/cjs/utils/index.js'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); const REWRITE_REFERENCE_FILE = false; @@ -14,7 +18,6 @@ describe('Integration | Application | Target-Profiles | Presenter | PDF | Learni }); afterEach(function () { - _restorePdfLib(); MockDate.reset(); }); @@ -64,7 +67,6 @@ describe('Integration | Application | Target-Profiles | Presenter | PDF | Learni async function _writeFile(buffer, outputFilename) { // Note: to update the reference pdf, set REWRITE_REFERENCE_FILE to true. if (REWRITE_REFERENCE_FILE) { - const { writeFile } = require('fs/promises'); await writeFile(`${__dirname}/${outputFilename}`, buffer); } } @@ -83,11 +85,7 @@ function _makePdfLibPredictable() { return prefix + '-' + Math.floor(suffix); } - require('pdf-lib/cjs/utils').addRandomSuffix = autoIncrementSuffixByPrefix; -} - -function _restorePdfLib() { - require('pdf-lib/cjs/utils').addRandomSuffix = addRandomSuffix; + sinon.stub(pdfLibUtils, 'addRandomSuffix').callsFake(autoIncrementSuffixByPrefix); } function _buildRichLearningContent() { diff --git a/api/tests/integration/application/usecases/checkAuthorizationToManageCampaign_test.js b/api/tests/integration/application/usecases/checkAuthorizationToManageCampaign_test.js index 7800bc8f114..5f7b40bda8e 100644 --- a/api/tests/integration/application/usecases/checkAuthorizationToManageCampaign_test.js +++ b/api/tests/integration/application/usecases/checkAuthorizationToManageCampaign_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const checkAuthorizationToManageCampaign = require('../../../../lib/application/usecases/checkAuthorizationToManageCampaign'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as checkAuthorizationToManageCampaign from '../../../../lib/application/usecases/checkAuthorizationToManageCampaign.js'; describe('Integration | API | checkAuthorizationToManageCampaign', function () { describe('when the user is member in organization and owner of the campaign', function () { diff --git a/api/tests/integration/application/usecases/checkUserIsAdminAndManagingStudentsForOrganization_test.js b/api/tests/integration/application/usecases/checkUserIsAdminAndManagingStudentsForOrganization_test.js index 73baaf3e51a..d235c5b4d17 100644 --- a/api/tests/integration/application/usecases/checkUserIsAdminAndManagingStudentsForOrganization_test.js +++ b/api/tests/integration/application/usecases/checkUserIsAdminAndManagingStudentsForOrganization_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const checkUserIsAdminAndManagingStudentsForOrganization = require('../../../../lib/application/usecases/checkUserIsAdminAndManagingStudentsForOrganization'); -const Membership = require('../../../../lib/domain/models/Membership'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as checkUserIsAdminAndManagingStudentsForOrganization from '../../../../lib/application/usecases/checkUserIsAdminAndManagingStudentsForOrganization.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; describe('Integration | API | checkUserIsAdminAndManagingStudentsForOrganization', function () { describe('when the user does not belongs to the organization', function () { diff --git a/api/tests/integration/application/users/index_test.js b/api/tests/integration/application/users/index_test.js index 69f43a69b17..3a7a7563b02 100644 --- a/api/tests/integration/application/users/index_test.js +++ b/api/tests/integration/application/users/index_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, HttpTestServer, knex } = require('../../../test-helper'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const userController = require('../../../../lib/application/users/user-controller'); -const moduleUnderTest = require('../../../../lib/application/users'); +import { expect, sinon, HttpTestServer, knex } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { userController } from '../../../../lib/application/users/user-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/users/index.js'; describe('Integration | Application | Users | Routes', function () { const methodGET = 'GET'; diff --git a/api/tests/integration/application/users/user-controller_test.js b/api/tests/integration/application/users/user-controller_test.js index f4e9c633366..e2ff51e7933 100644 --- a/api/tests/integration/application/users/user-controller_test.js +++ b/api/tests/integration/application/users/user-controller_test.js @@ -1,10 +1,9 @@ -const { expect, sinon, domainBuilder, HttpTestServer } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const { UserNotAuthorizedToRemoveAuthenticationMethod } = require('../../../../lib/domain/errors'); -const AssessmentResult = require('../../../../lib/domain/read-models/participant-results/AssessmentResult'); -const moduleUnderTest = require('../../../../lib/application/users'); +import { expect, sinon, domainBuilder, HttpTestServer } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { UserNotAuthorizedToRemoveAuthenticationMethod } from '../../../../lib/domain/errors.js'; +import { AssessmentResult } from '../../../../lib/domain/read-models/participant-results/AssessmentResult.js'; +import * as moduleUnderTest from '../../../../lib/application/users/index.js'; describe('Integration | Application | Users | user-controller', function () { let sandbox; diff --git a/api/tests/integration/domain/event/handle-pole-emploi-participation-finished_test.js b/api/tests/integration/domain/event/handle-pole-emploi-participation-finished_test.js index 5c646826e01..c565b8264b3 100644 --- a/api/tests/integration/domain/event/handle-pole-emploi-participation-finished_test.js +++ b/api/tests/integration/domain/event/handle-pole-emploi-participation-finished_test.js @@ -1,20 +1,21 @@ -const { +import { expect, databaseBuilder, knex, mockLearningContent, learningContentBuilder, sinon, -} = require('../../../test-helper'); -const handlePoleEmploiParticipationFinished = require('../../../../lib/domain/events/handle-pole-emploi-participation-finished'); -const assessmentRepository = require('../../../../lib/infrastructure/repositories/assessment-repository'); -const campaignRepository = require('../../../../lib/infrastructure/repositories/campaign-repository'); -const campaignParticipationRepository = require('../../../../lib/infrastructure/repositories/campaign-participation-repository'); -const organizationRepository = require('../../../../lib/infrastructure/repositories/organization-repository'); -const poleEmploiSendingRepository = require('../../../../lib/infrastructure/repositories/pole-emploi-sending-repository'); -const targetProfileRepository = require('../../../../lib/infrastructure/repositories/target-profile-repository'); -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); -const AsessmentCompletedEvent = require('../../../../lib/domain/events/AssessmentCompleted'); +} from '../../../test-helper.js'; + +import { handlePoleEmploiParticipationFinished } from '../../../../lib/domain/events/handle-pole-emploi-participation-finished.js'; +import * as assessmentRepository from '../../../../lib/infrastructure/repositories/assessment-repository.js'; +import * as campaignRepository from '../../../../lib/infrastructure/repositories/campaign-repository.js'; +import * as campaignParticipationRepository from '../../../../lib/infrastructure/repositories/campaign-participation-repository.js'; +import * as organizationRepository from '../../../../lib/infrastructure/repositories/organization-repository.js'; +import * as poleEmploiSendingRepository from '../../../../lib/infrastructure/repositories/pole-emploi-sending-repository.js'; +import * as targetProfileRepository from '../../../../lib/infrastructure/repositories/target-profile-repository.js'; +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; +import { AssessmentCompleted as AsessmentCompletedEvent } from '../../../../lib/domain/events/AssessmentCompleted.js'; describe('Integration | Event | Handle Pole emploi participation finished', function () { let campaignParticipationId, userId, event, poleEmploiNotifier, responseCode; @@ -37,7 +38,7 @@ describe('Integration | Event | Handle Pole emploi participation finished', func event = new AsessmentCompletedEvent(); event.campaignParticipationId = campaignParticipationId; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([]); + const learningContentObjects = learningContentBuilder.fromAreas([]); mockLearningContent(learningContentObjects); return databaseBuilder.commit(); diff --git a/api/tests/integration/domain/event/handle-pole-emploi-participation-started_test.js b/api/tests/integration/domain/event/handle-pole-emploi-participation-started_test.js index e3d4815fea7..43e64f4240e 100644 --- a/api/tests/integration/domain/event/handle-pole-emploi-participation-started_test.js +++ b/api/tests/integration/domain/event/handle-pole-emploi-participation-started_test.js @@ -1,20 +1,21 @@ -const { +import { expect, databaseBuilder, knex, mockLearningContent, learningContentBuilder, sinon, -} = require('../../../test-helper'); -const handlePoleEmploiParticipationStarted = require('../../../../lib/domain/events/handle-pole-emploi-participation-started'); -const assessmentRepository = require('../../../../lib/infrastructure/repositories/assessment-repository'); -const campaignRepository = require('../../../../lib/infrastructure/repositories/campaign-repository'); -const campaignParticipationRepository = require('../../../../lib/infrastructure/repositories/campaign-participation-repository'); -const organizationRepository = require('../../../../lib/infrastructure/repositories/organization-repository'); -const poleEmploiSendingRepository = require('../../../../lib/infrastructure/repositories/pole-emploi-sending-repository'); -const targetProfileRepository = require('../../../../lib/infrastructure/repositories/target-profile-repository'); -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); -const CampaignParticipationStartedEvent = require('../../../../lib/domain/events/CampaignParticipationStarted'); +} from '../../../test-helper.js'; + +import { handlePoleEmploiParticipationStarted } from '../../../../lib/domain/events/handle-pole-emploi-participation-started.js'; +import * as assessmentRepository from '../../../../lib/infrastructure/repositories/assessment-repository.js'; +import * as campaignRepository from '../../../../lib/infrastructure/repositories/campaign-repository.js'; +import * as campaignParticipationRepository from '../../../../lib/infrastructure/repositories/campaign-participation-repository.js'; +import * as organizationRepository from '../../../../lib/infrastructure/repositories/organization-repository.js'; +import * as poleEmploiSendingRepository from '../../../../lib/infrastructure/repositories/pole-emploi-sending-repository.js'; +import * as targetProfileRepository from '../../../../lib/infrastructure/repositories/target-profile-repository.js'; +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; +import { CampaignParticipationStarted as CampaignParticipationStartedEvent } from '../../../../lib/domain/events/CampaignParticipationStarted.js'; describe('Integration | Event | Handle Pole emploi participation started', function () { let campaignParticipationId, userId, event, poleEmploiNotifier, responseCode; @@ -37,7 +38,7 @@ describe('Integration | Event | Handle Pole emploi participation started', funct event = new CampaignParticipationStartedEvent(); event.campaignParticipationId = campaignParticipationId; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([]); + const learningContentObjects = learningContentBuilder.fromAreas([]); mockLearningContent(learningContentObjects); return databaseBuilder.commit(); diff --git a/api/tests/integration/domain/services/algorithm-methods/flash_test.js b/api/tests/integration/domain/services/algorithm-methods/flash_test.js index 0a5e48ba226..d5b9f212158 100644 --- a/api/tests/integration/domain/services/algorithm-methods/flash_test.js +++ b/api/tests/integration/domain/services/algorithm-methods/flash_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const flash = require('../../../../../lib/domain/services/algorithm-methods/flash'); -const AnswerStatus = require('../../../../../lib/domain/models/AnswerStatus'); -const config = require('../../../../../lib/config'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as flash from '../../../../../lib/domain/services/algorithm-methods/flash.js'; +import { AnswerStatus } from '../../../../../lib/domain/models/AnswerStatus.js'; +import { config } from '../../../../../lib/config.js'; describe('Integration | Domain | Algorithm-methods | Flash', function () { describe('#getPossibleNextChallenge', function () { diff --git a/api/tests/integration/domain/services/algorithm-methods/smart-random_test.js b/api/tests/integration/domain/services/algorithm-methods/smart-random_test.js index 3b3b6cf7cec..569ce711160 100644 --- a/api/tests/integration/domain/services/algorithm-methods/smart-random_test.js +++ b/api/tests/integration/domain/services/algorithm-methods/smart-random_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const AnswerStatus = require('../../../../../lib/domain/models/AnswerStatus'); -const SmartRandom = require('../../../../../lib/domain/services/algorithm-methods/smart-random'); -const _ = require('lodash'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import { AnswerStatus } from '../../../../../lib/domain/models/AnswerStatus.js'; +import * as SmartRandom from '../../../../../lib/domain/services/algorithm-methods/smart-random.js'; +import _ from 'lodash'; const KNOWLEDGE_ELEMENT_STATUS = { VALIDATED: 'validated', diff --git a/api/tests/integration/domain/services/authentication/fwb-oidc-authentication-service_test.js b/api/tests/integration/domain/services/authentication/fwb-oidc-authentication-service_test.js index a31450fcb43..8a6989131e3 100644 --- a/api/tests/integration/domain/services/authentication/fwb-oidc-authentication-service_test.js +++ b/api/tests/integration/domain/services/authentication/fwb-oidc-authentication-service_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const { temporaryStorage } = require('../../../../../lib/infrastructure/temporary-storage'); -const FwbOidcAuthenticationService = require('../../../../../lib/domain/services/authentication/fwb-oidc-authentication-service'); +import { expect } from '../../../../test-helper.js'; +import { temporaryStorage } from '../../../../../lib/infrastructure/temporary-storage/index.js'; +import { FwbOidcAuthenticationService } from '../../../../../lib/domain/services/authentication/fwb-oidc-authentication-service.js'; const logoutUrlTemporaryStorage = temporaryStorage.withPrefix('logout-url:'); diff --git a/api/tests/integration/domain/services/authentication/pole-emploi-oidc-authentication-service_test.js b/api/tests/integration/domain/services/authentication/pole-emploi-oidc-authentication-service_test.js index ecb4b909513..b2cb4693995 100644 --- a/api/tests/integration/domain/services/authentication/pole-emploi-oidc-authentication-service_test.js +++ b/api/tests/integration/domain/services/authentication/pole-emploi-oidc-authentication-service_test.js @@ -1,10 +1,10 @@ -const { expect, knex } = require('../../../../test-helper'); -const { temporaryStorage } = require('../../../../../lib/infrastructure/temporary-storage'); -const authenticationMethodRepository = require('../../../../../lib/infrastructure/repositories/authentication-method-repository'); -const userToCreateRepository = require('../../../../../lib/infrastructure/repositories/user-to-create-repository'); -const PoleEmploiOidcAuthenticationService = require('../../../../../lib/domain/services/authentication/pole-emploi-oidc-authentication-service'); -const UserToCreate = require('../../../../../lib/domain/models/UserToCreate'); -const OidcIdentityProviders = require('../../../../../lib/domain/constants/oidc-identity-providers'); +import { expect, knex } from '../../../../test-helper.js'; +import { temporaryStorage } from '../../../../../lib/infrastructure/temporary-storage/index.js'; +import * as authenticationMethodRepository from '../../../../../lib/infrastructure/repositories/authentication-method-repository.js'; +import * as userToCreateRepository from '../../../../../lib/infrastructure/repositories/user-to-create-repository.js'; +import { PoleEmploiOidcAuthenticationService } from '../../../../../lib/domain/services/authentication/pole-emploi-oidc-authentication-service.js'; +import { UserToCreate } from '../../../../../lib/domain/models/UserToCreate.js'; +import * as OidcIdentityProviders from '../../../../../lib/domain/constants/oidc-identity-providers.js'; const logoutUrlTemporaryStorage = temporaryStorage.withPrefix('logout-url:'); diff --git a/api/tests/integration/domain/services/certification-badges-service_test.js b/api/tests/integration/domain/services/certification-badges-service_test.js index 25c05dd268a..3c2a03244d3 100644 --- a/api/tests/integration/domain/services/certification-badges-service_test.js +++ b/api/tests/integration/domain/services/certification-badges-service_test.js @@ -1,13 +1,14 @@ -const { +import { expect, databaseBuilder, mockLearningContent, learningContentBuilder, domainBuilder, -} = require('../../../test-helper'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +} from '../../../test-helper.js'; -const certificationBadgesService = require('../../../../lib/domain/services/certification-badges-service'); +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; + +import * as certificationBadgesService from '../../../../lib/domain/services/certification-badges-service.js'; const listSkill = ['web1', 'web2', 'web3', 'web4']; const learningContent = [ @@ -93,7 +94,7 @@ describe('Integration | Service | Certification-Badges Service', function () { threshold: 40, }); await databaseBuilder.commit(); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); // when diff --git a/api/tests/integration/domain/services/certification-candidates-ods-service/certification-candidates-ods-service_test.js b/api/tests/integration/domain/services/certification-candidates-ods-service/certification-candidates-ods-service_test.js index daf978e1b2f..b76e9fac84a 100644 --- a/api/tests/integration/domain/services/certification-candidates-ods-service/certification-candidates-ods-service_test.js +++ b/api/tests/integration/domain/services/certification-candidates-ods-service/certification-candidates-ods-service_test.js @@ -1,23 +1,31 @@ -const { expect, databaseBuilder, catchErr, domainBuilder } = require('../../../../test-helper'); -const { +import { expect, databaseBuilder, catchErr, domainBuilder } from '../../../../test-helper.js'; +import { CLEA, PIX_PLUS_DROIT, PIX_PLUS_EDU_1ER_DEGRE, PIX_PLUS_EDU_2ND_DEGRE, -} = require('../../../../../lib/domain/models/ComplementaryCertification'); -const certificationCandidatesOdsService = require('../../../../../lib/domain/services/certification-candidates-ods-service'); -const certificationCpfService = require('../../../../../lib/domain/services/certification-cpf-service'); -const certificationCpfCountryRepository = require('../../../../../lib/infrastructure/repositories/certification-cpf-country-repository'); -const certificationCpfCityRepository = require('../../../../../lib/infrastructure/repositories/certification-cpf-city-repository'); -const certificationCenterRepository = require('../../../../../lib/infrastructure/repositories/certification-center-repository'); -const complementaryCertificationRepository = require('../../../../../lib/infrastructure/repositories/complementary-certification-repository'); -const CertificationCandidate = require('../../../../../lib/domain/models/CertificationCandidate'); -const { CertificationCandidatesImportError } = require('../../../../../lib/domain/errors'); -const { readFile } = require('fs').promises; -const _ = require('lodash'); -const { getI18n } = require('../../../../tooling/i18n/i18n'); +} from '../../../../../lib/domain/models/ComplementaryCertification.js'; +import * as certificationCandidatesOdsService from '../../../../../lib/domain/services/certification-candidates-ods-service.js'; +import * as certificationCpfService from '../../../../../lib/domain/services/certification-cpf-service.js'; +import * as certificationCpfCountryRepository from '../../../../../lib/infrastructure/repositories/certification-cpf-country-repository.js'; +import * as certificationCpfCityRepository from '../../../../../lib/infrastructure/repositories/certification-cpf-city-repository.js'; +import * as certificationCenterRepository from '../../../../../lib/infrastructure/repositories/certification-center-repository.js'; +import * as complementaryCertificationRepository from '../../../../../lib/infrastructure/repositories/complementary-certification-repository.js'; +import { CertificationCandidate } from '../../../../../lib/domain/models/CertificationCandidate.js'; +import { CertificationCandidatesImportError } from '../../../../../lib/domain/errors.js'; +import fs from 'fs'; + +const { promises } = fs; + +const { readFile } = promises; + +import _ from 'lodash'; +import { getI18n } from '../../../../tooling/i18n/i18n.js'; const i18n = getI18n(); +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); + describe('Integration | Services | extractCertificationCandidatesFromCandidatesImportSheet', function () { let userId; let sessionId; diff --git a/api/tests/integration/domain/services/organization-invitation-service_test.js b/api/tests/integration/domain/services/organization-invitation-service_test.js index 3e86fa88a89..316e209821b 100644 --- a/api/tests/integration/domain/services/organization-invitation-service_test.js +++ b/api/tests/integration/domain/services/organization-invitation-service_test.js @@ -1,18 +1,15 @@ -const _ = require('lodash'); -const { expect, databaseBuilder, knex, sinon, catchErr } = require('../../../test-helper'); +import _ from 'lodash'; +import { expect, databaseBuilder, knex, sinon, catchErr } from '../../../test-helper.js'; -const organizationInvitationRepository = require('../../../../lib/infrastructure/repositories/organization-invitation-repository'); -const organizationRepository = require('../../../../lib/infrastructure/repositories/organization-repository'); -const mailService = require('../../../../lib/domain/services/mail-service'); +import * as organizationInvitationRepository from '../../../../lib/infrastructure/repositories/organization-invitation-repository.js'; +import * as organizationRepository from '../../../../lib/infrastructure/repositories/organization-repository.js'; +import { mailService } from '../../../../lib/domain/services/mail-service.js'; -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); -const Membership = require('../../../../lib/domain/models/Membership'); - -const { - createOrUpdateOrganizationInvitation, -} = require('../../../../lib/domain/services/organization-invitation-service'); -const EmailingAttempt = require('../../../../lib/domain/models/EmailingAttempt'); -const { SendingEmailError } = require('../../../../lib/domain/errors'); +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { createOrUpdateOrganizationInvitation } from '../../../../lib/domain/services/organization-invitation-service.js'; +import { EmailingAttempt } from '../../../../lib/domain/models/EmailingAttempt.js'; +import { SendingEmailError } from '../../../../lib/domain/errors.js'; describe('Integration | Service | Organization-Invitation Service', function () { describe('#createOrUpdateOrganizationInvitation', function () { @@ -100,6 +97,9 @@ describe('Integration | Service | Organization-Invitation Service', function () email, organizationRepository, organizationInvitationRepository, + dependencies: { + mailService, + }, }); // then diff --git a/api/tests/integration/domain/services/organization-learners-csv-service_test.js b/api/tests/integration/domain/services/organization-learners-csv-service_test.js index 4089aa67d2b..1141737c3d8 100644 --- a/api/tests/integration/domain/services/organization-learners-csv-service_test.js +++ b/api/tests/integration/domain/services/organization-learners-csv-service_test.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const { expect, catchErr } = require('../../../test-helper'); -const { CsvImportError } = require('../../../../lib/domain/errors'); -const organizationLearnersCsvService = require('../../../../lib/domain/services/organization-learners-csv-service'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +import _ from 'lodash'; +import { expect, catchErr } from '../../../test-helper.js'; +import { CsvImportError } from '../../../../lib/domain/errors.js'; +import { extractOrganizationLearnersInformation } from '../../../../lib/domain/services/organization-learners-csv-service.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; const i18n = getI18n(); describe('Integration | Services | organization-learners-csv-service', function () { @@ -49,11 +49,7 @@ describe('Integration | Services | organization-learners-csv-service', function ]; // when - const results = await organizationLearnersCsvService.extractOrganizationLearnersInformation( - path, - organization, - i18n - ); + const results = await extractOrganizationLearnersInformation(path, organization, i18n); //then const actualResult = _.map(results, (result) => @@ -67,11 +63,7 @@ describe('Integration | Services | organization-learners-csv-service', function const organization = { id: 123, isAgriculture: true }; const path = `${process.cwd()}/tests/tooling/fixtures/siecle-file/siecle-csv-with-unknown-encoding.csv`; // when - const error = await catchErr(organizationLearnersCsvService.extractOrganizationLearnersInformation)( - path, - organization, - i18n - ); + const error = await catchErr(extractOrganizationLearnersInformation)(path, organization, i18n); //then expect(error).to.be.instanceof(CsvImportError); @@ -83,11 +75,7 @@ describe('Integration | Services | organization-learners-csv-service', function const organization = { id: 123, isAgriculture: true }; const path = `${process.cwd()}/tests/tooling/fixtures/siecle-file/siecle-csv-with-duplicate-national-student-id.csv`; // when - const error = await catchErr(organizationLearnersCsvService.extractOrganizationLearnersInformation)( - path, - organization, - i18n - ); + const error = await catchErr(extractOrganizationLearnersInformation)(path, organization, i18n); //then expect(error).to.be.instanceof(CsvImportError); @@ -100,11 +88,7 @@ describe('Integration | Services | organization-learners-csv-service', function const organization = { id: 123, isAgriculture: true }; const path = `${process.cwd()}/tests/tooling/fixtures/siecle-file/siecle-csv-with-no-national-student-id.csv`; // when - const error = await catchErr(organizationLearnersCsvService.extractOrganizationLearnersInformation)( - path, - organization, - i18n - ); + const error = await catchErr(extractOrganizationLearnersInformation)(path, organization, i18n); //then expect(error).to.be.instanceof(CsvImportError); diff --git a/api/tests/integration/domain/services/organization-learners-xml-service_test.js b/api/tests/integration/domain/services/organization-learners-xml-service_test.js index 0652192706e..4fde2549bb0 100644 --- a/api/tests/integration/domain/services/organization-learners-xml-service_test.js +++ b/api/tests/integration/domain/services/organization-learners-xml-service_test.js @@ -1,6 +1,6 @@ -const { expect, catchErr } = require('../../../test-helper'); -const { SiecleXmlImportError } = require('../../../../lib/domain/errors'); -const organizationLearnersXmlService = require('../../../../lib/domain/services/organization-learners-xml-service'); +import { expect, catchErr } from '../../../test-helper.js'; +import { SiecleXmlImportError } from '../../../../lib/domain/errors.js'; +import * as organizationLearnersXmlService from '../../../../lib/domain/services/organization-learners-xml-service.js'; describe('Integration | Services | organization-learnerz-xml-service', function () { describe('extractOrganizationLearnersInformationFromSIECLE', function () { diff --git a/api/tests/integration/domain/services/pick-certification-challenge_test.js b/api/tests/integration/domain/services/pick-certification-challenge_test.js index 1c10fb59566..a15315bb1eb 100644 --- a/api/tests/integration/domain/services/pick-certification-challenge_test.js +++ b/api/tests/integration/domain/services/pick-certification-challenge_test.js @@ -1,10 +1,10 @@ -const { expect, databaseBuilder, mockLearningContent } = require('../../../test-helper'); -const placementProfileService = require('../../../../lib/domain/services/placement-profile-service'); -const certificationChallengesService = require('../../../../lib/domain/services/certification-challenges-service'); -const knowledgeElementRepository = require('../../../../lib/infrastructure/repositories/knowledge-element-repository'); -const answerRepository = require('../../../../lib/infrastructure/repositories/answer-repository'); -const challengeRepository = require('../../../../lib/infrastructure/repositories/challenge-repository'); -const { PIX_COUNT_BY_LEVEL } = require('../../../../lib/domain/constants'); +import { expect, databaseBuilder, mockLearningContent } from '../../../test-helper.js'; +import * as placementProfileService from '../../../../lib/domain/services/placement-profile-service.js'; +import * as certificationChallengesService from '../../../../lib/domain/services/certification-challenges-service.js'; +import * as knowledgeElementRepository from '../../../../lib/infrastructure/repositories/knowledge-element-repository.js'; +import * as answerRepository from '../../../../lib/infrastructure/repositories/answer-repository.js'; +import * as challengeRepository from '../../../../lib/infrastructure/repositories/challenge-repository.js'; +import { PIX_COUNT_BY_LEVEL } from '../../../../lib/domain/constants.js'; describe('Integration | CertificationChallengeService | pickCertificationChallenge', function () { const placementDate = new Date('2020-01-01'); diff --git a/api/tests/integration/domain/services/placement-profile-service_test.js b/api/tests/integration/domain/services/placement-profile-service_test.js index 2793328f99f..29d9a512bdb 100644 --- a/api/tests/integration/domain/services/placement-profile-service_test.js +++ b/api/tests/integration/domain/services/placement-profile-service_test.js @@ -1,7 +1,9 @@ -const { expect, databaseBuilder, mockLearningContent, learningContentBuilder } = require('../../../test-helper'); -const placementProfileService = require('../../../../lib/domain/services/placement-profile-service'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const { ENGLISH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +import { expect, databaseBuilder, mockLearningContent, learningContentBuilder } from '../../../test-helper.js'; +import * as placementProfileService from '../../../../lib/domain/services/placement-profile-service.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { ENGLISH_SPOKEN } = LOCALE; describe('Integration | Service | Placement Profile Service', function () { let userId, assessmentId; @@ -86,7 +88,7 @@ describe('Integration | Service | Placement Profile Service', function () { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); userId = databaseBuilder.factory.buildUser().id; diff --git a/api/tests/integration/domain/services/reset-password-service_test.js b/api/tests/integration/domain/services/reset-password-service_test.js index 12160c0f078..e38b5352c2d 100644 --- a/api/tests/integration/domain/services/reset-password-service_test.js +++ b/api/tests/integration/domain/services/reset-password-service_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const resetPasswordService = require('../../../../lib/domain/services/reset-password-service'); +import { expect } from '../../../test-helper.js'; +import * as resetPasswordService from '../../../../lib/domain/services/reset-password-service.js'; describe('Integration | Service | Password Service', function () { describe('#generateTemporaryKey', function () { diff --git a/api/tests/integration/domain/services/token-service_test.js b/api/tests/integration/domain/services/token-service_test.js index 274be527814..30a76af7905 100644 --- a/api/tests/integration/domain/services/token-service_test.js +++ b/api/tests/integration/domain/services/token-service_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const tokenService = require('../../../../lib/domain/services/token-service'); -const settings = require('../../../../lib/config'); +import { expect } from '../../../test-helper.js'; +import { tokenService } from '../../../../lib/domain/services/token-service.js'; +import { config as settings } from '../../../../lib/config.js'; describe('Integration | Domain | Services | TokenService', function () { describe('#createAccessTokenForSaml', function () { diff --git a/api/tests/integration/domain/services/tube-service_test.js b/api/tests/integration/domain/services/tube-service_test.js index 039b487f428..897bfc78ea4 100644 --- a/api/tests/integration/domain/services/tube-service_test.js +++ b/api/tests/integration/domain/services/tube-service_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../test-helper'); -const Skill = require('../../../../lib/domain/models/Skill'); -const Tube = require('../../../../lib/domain/models/Tube'); -const { computeTubesFromSkills } = require('../../../../lib/domain/services/tube-service'); +import { expect } from '../../../test-helper.js'; +import { Skill } from '../../../../lib/domain/models/Skill.js'; +import { Tube } from '../../../../lib/domain/models/Tube.js'; +import { computeTubesFromSkills } from '../../../../lib/domain/services/tube-service.js'; describe('Integration | Domain | Services | TubeService', function () { describe('#computeTubesFromSkills', function () { diff --git a/api/tests/integration/domain/services/user-service_test.js b/api/tests/integration/domain/services/user-service_test.js index 1ed6b1e69f4..1dc74caca88 100644 --- a/api/tests/integration/domain/services/user-service_test.js +++ b/api/tests/integration/domain/services/user-service_test.js @@ -1,16 +1,17 @@ -const pick = require('lodash/pick'); +import lodash from 'lodash'; +const { pick } = lodash; -const { catchErr, domainBuilder, databaseBuilder, expect, knex } = require('../../../test-helper'); +import { catchErr, domainBuilder, databaseBuilder, expect, knex } from '../../../test-helper.js'; -const authenticationMethodRepository = require('../../../../lib/infrastructure/repositories/authentication-method-repository'); -const organizationLearnerRepository = require('../../../../lib/infrastructure/repositories/organization-learner-repository'); -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); -const userToCreateRepository = require('../../../../lib/infrastructure/repositories/user-to-create-repository'); +import * as authenticationMethodRepository from '../../../../lib/infrastructure/repositories/authentication-method-repository.js'; +import * as organizationLearnerRepository from '../../../../lib/infrastructure/repositories/organization-learner-repository.js'; +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; +import * as userToCreateRepository from '../../../../lib/infrastructure/repositories/user-to-create-repository.js'; -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); -const { OrganizationLearnerNotFound } = require('../../../../lib/domain/errors'); +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; +import { OrganizationLearnerNotFound } from '../../../../lib/domain/errors.js'; -const userService = require('../../../../lib/domain/services/user-service'); +import * as userService from '../../../../lib/domain/services/user-service.js'; describe('Integration | Domain | Services | user-service', function () { const hashedPassword = 'Abcdef1234'; diff --git a/api/tests/integration/domain/usecases/abort-certification-course_test.js b/api/tests/integration/domain/usecases/abort-certification-course_test.js index 4d0ca5bb6dc..d6b402127a3 100644 --- a/api/tests/integration/domain/usecases/abort-certification-course_test.js +++ b/api/tests/integration/domain/usecases/abort-certification-course_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const abortCertificationCourse = require('../../../../lib/domain/usecases/abort-certification-course'); -const certificationCourseRepository = require('../../../../lib/infrastructure/repositories/certification-course-repository'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { abortCertificationCourse } from '../../../../lib/domain/usecases/abort-certification-course.js'; +import * as certificationCourseRepository from '../../../../lib/infrastructure/repositories/certification-course-repository.js'; describe('Integration | UseCase | abort-certification-course', function () { context('when abort reason is valid', function () { diff --git a/api/tests/integration/domain/usecases/account-recovery/update-user-for-account-recovery_test.js b/api/tests/integration/domain/usecases/account-recovery/update-user-for-account-recovery_test.js index db0f9c9fb6c..5e7c4ba5252 100644 --- a/api/tests/integration/domain/usecases/account-recovery/update-user-for-account-recovery_test.js +++ b/api/tests/integration/domain/usecases/account-recovery/update-user-for-account-recovery_test.js @@ -1,12 +1,12 @@ -const { catchErr, databaseBuilder, expect, knex } = require('../../../../test-helper'); -const DomainTransaction = require('../../../../../lib/infrastructure/DomainTransaction'); +import { catchErr, databaseBuilder, expect, knex } from '../../../../test-helper.js'; +import { DomainTransaction } from '../../../../../lib/infrastructure/DomainTransaction.js'; -const authenticationMethodRepository = require('../../../../../lib/infrastructure/repositories/authentication-method-repository'); -const accountRecoveryDemandRepository = require('../../../../../lib/infrastructure/repositories/account-recovery-demand-repository'); -const userRepository = require('../../../../../lib/infrastructure/repositories/user-repository'); -const encryptionService = require('../../../../../lib/domain/services/encryption-service'); +import * as authenticationMethodRepository from '../../../../../lib/infrastructure/repositories/authentication-method-repository.js'; +import * as accountRecoveryDemandRepository from '../../../../../lib/infrastructure/repositories/account-recovery-demand-repository.js'; +import * as userRepository from '../../../../../lib/infrastructure/repositories/user-repository.js'; +import * as encryptionService from '../../../../../lib/domain/services/encryption-service.js'; -const updateUserForAccountRecovery = require('../../../../../lib/domain/usecases/account-recovery/update-user-for-account-recovery'); +import { updateUserForAccountRecovery } from '../../../../../lib/domain/usecases/account-recovery/update-user-for-account-recovery.js'; describe('Integration | UseCases | Account-recovery | updateUserForAccountRecovery', function () { it('should rollback update user account when domain transaction throw an error', async function () { diff --git a/api/tests/integration/domain/usecases/add-pix-authentication-method-by-email_test.js b/api/tests/integration/domain/usecases/add-pix-authentication-method-by-email_test.js index 17c50485551..bcf829c7523 100644 --- a/api/tests/integration/domain/usecases/add-pix-authentication-method-by-email_test.js +++ b/api/tests/integration/domain/usecases/add-pix-authentication-method-by-email_test.js @@ -1,8 +1,8 @@ -const { databaseBuilder, expect, catchErr } = require('../../../test-helper'); -const addPixAuthenticationMethodByEmail = require('../../../../lib/domain/usecases/add-pix-authentication-method-by-email'); -const { AuthenticationMethodAlreadyExistsError } = require('../../../../lib/domain/errors'); -const authenticationMethodRepository = require('../../../../lib/infrastructure/repositories/authentication-method-repository'); -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); +import { databaseBuilder, expect, catchErr } from '../../../test-helper.js'; +import { addPixAuthenticationMethodByEmail } from '../../../../lib/domain/usecases/add-pix-authentication-method-by-email.js'; +import { AuthenticationMethodAlreadyExistsError } from '../../../../lib/domain/errors.js'; +import * as authenticationMethodRepository from '../../../../lib/infrastructure/repositories/authentication-method-repository.js'; +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; describe('Integration | UseCase | add-pix-authentication-method-by-email', function () { context('when user have already Pix authentication method', function () { diff --git a/api/tests/integration/domain/usecases/attach-organizations-from-existing-target-profile_test.js b/api/tests/integration/domain/usecases/attach-organizations-from-existing-target-profile_test.js index b9c706bec96..ff5a5ab3881 100644 --- a/api/tests/integration/domain/usecases/attach-organizations-from-existing-target-profile_test.js +++ b/api/tests/integration/domain/usecases/attach-organizations-from-existing-target-profile_test.js @@ -1,9 +1,9 @@ -const { expect, sinon, databaseBuilder, knex, catchErr } = require('../../../test-helper'); -const { NoOrganizationToAttach, NotFoundError } = require('../../../../lib/domain/errors'); -const attachOrganizationsFromExistingTargetProfile = require('../../../../lib/domain/usecases/attach-organizations-from-existing-target-profile'); -const organizationsToAttachToTargetProfileRepository = require('../../../../lib/infrastructure/repositories/organizations-to-attach-to-target-profile-repository'); -const targetProfileRepository = require('../../../../lib/infrastructure/repositories/target-profile-repository'); -const { skillDatasource } = require('../../../../lib/infrastructure/datasources/learning-content/skill-datasource'); +import { expect, sinon, databaseBuilder, knex, catchErr } from '../../../test-helper.js'; +import { NoOrganizationToAttach, NotFoundError } from '../../../../lib/domain/errors.js'; +import { attachOrganizationsFromExistingTargetProfile } from '../../../../lib/domain/usecases/attach-organizations-from-existing-target-profile.js'; +import * as organizationsToAttachToTargetProfileRepository from '../../../../lib/infrastructure/repositories/organizations-to-attach-to-target-profile-repository.js'; +import * as targetProfileRepository from '../../../../lib/infrastructure/repositories/target-profile-repository.js'; +import { skillDatasource } from '../../../../lib/infrastructure/datasources/learning-content/skill-datasource.js'; describe('Integration | UseCase | attach-organizations-from-existing-target-profile', function () { beforeEach(function () { diff --git a/api/tests/integration/domain/usecases/attach-organizations-to-target-profile_test.js b/api/tests/integration/domain/usecases/attach-organizations-to-target-profile_test.js index 803698b2c7a..7d9dda66947 100644 --- a/api/tests/integration/domain/usecases/attach-organizations-to-target-profile_test.js +++ b/api/tests/integration/domain/usecases/attach-organizations-to-target-profile_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, databaseBuilder, knex } = require('../../../test-helper'); -const attachOrganizationsToTargetProfile = require('../../../../lib/domain/usecases/attach-organizations-to-target-profile'); -const organizationsToAttachToTargetProfileRepository = require('../../../../lib/infrastructure/repositories/organizations-to-attach-to-target-profile-repository'); -const { skillDatasource } = require('../../../../lib/infrastructure/datasources/learning-content/skill-datasource'); +import { expect, sinon, databaseBuilder, knex } from '../../../test-helper.js'; +import { attachOrganizationsToTargetProfile } from '../../../../lib/domain/usecases/attach-organizations-to-target-profile.js'; +import * as organizationsToAttachToTargetProfileRepository from '../../../../lib/infrastructure/repositories/organizations-to-attach-to-target-profile-repository.js'; +import { skillDatasource } from '../../../../lib/infrastructure/datasources/learning-content/skill-datasource.js'; describe('Integration | UseCase | attach-organizations-to-target-profile', function () { beforeEach(function () { diff --git a/api/tests/integration/domain/usecases/begin-campaign-participation-improvement_test.js b/api/tests/integration/domain/usecases/begin-campaign-participation-improvement_test.js index 6f02efb7f07..8093b594847 100644 --- a/api/tests/integration/domain/usecases/begin-campaign-participation-improvement_test.js +++ b/api/tests/integration/domain/usecases/begin-campaign-participation-improvement_test.js @@ -1,8 +1,8 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const beginCampaignParticipationImprovement = require('../../../../lib/domain/usecases/begin-campaign-participation-improvement'); -const assessmentRepository = require('../../../../lib/infrastructure/repositories/assessment-repository'); -const campaignParticipationRepository = require('../../../../lib/infrastructure/repositories/campaign-participation-repository'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { beginCampaignParticipationImprovement } from '../../../../lib/domain/usecases/begin-campaign-participation-improvement.js'; +import * as assessmentRepository from '../../../../lib/infrastructure/repositories/assessment-repository.js'; +import * as campaignParticipationRepository from '../../../../lib/infrastructure/repositories/campaign-participation-repository.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED, TO_SHARE } = CampaignParticipationStatuses; diff --git a/api/tests/integration/domain/usecases/cancel-certification-center-invitation_test.js b/api/tests/integration/domain/usecases/cancel-certification-center-invitation_test.js index 3baa2c78f50..2a006b69e6d 100644 --- a/api/tests/integration/domain/usecases/cancel-certification-center-invitation_test.js +++ b/api/tests/integration/domain/usecases/cancel-certification-center-invitation_test.js @@ -1,11 +1,9 @@ -const { catchErr, databaseBuilder, expect } = require('../../../test-helper'); -const sinon = require('sinon'); +import { catchErr, databaseBuilder, expect } from '../../../test-helper.js'; +import sinon from 'sinon'; -const useCases = require('../../../../lib/domain/usecases/index.js'); - -const CertificationCenterInvitation = require('../../../../lib/domain/models/CertificationCenterInvitation'); - -const { NotFoundError, UncancellableCertificationCenterInvitationError } = require('../../../../lib/domain/errors'); +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { CertificationCenterInvitation } from '../../../../lib/domain/models/CertificationCenterInvitation.js'; +import { NotFoundError, UncancellableCertificationCenterInvitationError } from '../../../../lib/domain/errors.js'; describe('Integration | UseCases | cancel-certification-center-invitation', function () { describe('when the invitation exists', function () { @@ -42,7 +40,7 @@ describe('Integration | UseCases | cancel-certification-center-invitation', func await databaseBuilder.commit(); // when - const result = await useCases.cancelCertificationCenterInvitation({ + const result = await usecases.cancelCertificationCenterInvitation({ certificationCenterInvitationId: certificationCenterInvitation.id, }); @@ -73,7 +71,7 @@ describe('Integration | UseCases | cancel-certification-center-invitation', func await databaseBuilder.commit(); // when - const error = await catchErr(useCases.cancelCertificationCenterInvitation)({ + const error = await catchErr(usecases.cancelCertificationCenterInvitation)({ certificationCenterInvitationId: acceptedInvitation.id, }); @@ -90,7 +88,7 @@ describe('Integration | UseCases | cancel-certification-center-invitation', func const certificationCenterInvitationId = 123; // when - const error = await catchErr(useCases.cancelCertificationCenterInvitation)({ + const error = await catchErr(usecases.cancelCertificationCenterInvitation)({ certificationCenterInvitationId, }); diff --git a/api/tests/integration/domain/usecases/complete-assessment_test.js b/api/tests/integration/domain/usecases/complete-assessment_test.js index 23431bd27c9..0eec0592619 100644 --- a/api/tests/integration/domain/usecases/complete-assessment_test.js +++ b/api/tests/integration/domain/usecases/complete-assessment_test.js @@ -1,10 +1,12 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const completeAssessment = require('../../../../lib/domain/usecases/complete-assessment'); -const assessmentRepository = require('../../../../lib/infrastructure/repositories/assessment-repository'); -const campaignParticipationRepository = require('../../../../lib/infrastructure/repositories/campaign-participation-repository'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const { TO_SHARE, STARTED } = require('../../../../lib/domain/models/CampaignParticipationStatuses'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { completeAssessment } from '../../../../lib/domain/usecases/complete-assessment.js'; +import * as assessmentRepository from '../../../../lib/infrastructure/repositories/assessment-repository.js'; +import * as campaignParticipationRepository from '../../../../lib/infrastructure/repositories/campaign-participation-repository.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; + +const { TO_SHARE, STARTED } = CampaignParticipationStatuses; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; describe('Integration | Usecase | Complete Assessment', function () { let userId, assessmentId, campaignParticipationId; diff --git a/api/tests/integration/domain/usecases/create-and-reconcile-user-to-organization-learner_test.js b/api/tests/integration/domain/usecases/create-and-reconcile-user-to-organization-learner_test.js index ef3c07ed69b..ebc71164ae6 100644 --- a/api/tests/integration/domain/usecases/create-and-reconcile-user-to-organization-learner_test.js +++ b/api/tests/integration/domain/usecases/create-and-reconcile-user-to-organization-learner_test.js @@ -1,29 +1,28 @@ -const pick = require('lodash/pick'); - -const { catchErr, databaseBuilder, expect, knex } = require('../../../test-helper'); - -const authenticationMethodRepository = require('../../../../lib/infrastructure/repositories/authentication-method-repository'); -const campaignRepository = require('../../../../lib/infrastructure/repositories/campaign-repository'); -const organizationLearnerRepository = require('../../../../lib/infrastructure/repositories/organization-learner-repository'); -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); -const userToCreateRepository = require('../../../../lib/infrastructure/repositories/user-to-create-repository'); - -const encryptionService = require('../../../../lib/domain/services/encryption-service'); -const mailService = require('../../../../lib/domain/services/mail-service'); -const obfuscationService = require('../../../../lib/domain/services/obfuscation-service'); -const userReconciliationService = require('../../../../lib/domain/services/user-reconciliation-service'); -const userService = require('../../../../lib/domain/services/user-service'); -const createAndReconcileUserToOrganizationLearner = require('../../../../lib/domain/usecases/create-and-reconcile-user-to-organization-learner'); - -const passwordValidator = require('../../../../lib/domain/validators/password-validator'); -const userValidator = require('../../../../lib/domain/validators/user-validator'); - -const { +import lodash from 'lodash'; +const { pick } = lodash; + +import { catchErr, databaseBuilder, expect, knex } from '../../../test-helper.js'; + +import * as authenticationMethodRepository from '../../../../lib/infrastructure/repositories/authentication-method-repository.js'; +import * as campaignRepository from '../../../../lib/infrastructure/repositories/campaign-repository.js'; +import * as organizationLearnerRepository from '../../../../lib/infrastructure/repositories/organization-learner-repository.js'; +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; +import * as userToCreateRepository from '../../../../lib/infrastructure/repositories/user-to-create-repository.js'; +import * as encryptionService from '../../../../lib/domain/services/encryption-service.js'; +import * as mailService from '../../../../lib/domain/services/mail-service.js'; +import * as obfuscationService from '../../../../lib/domain/services/obfuscation-service.js'; +import * as userReconciliationService from '../../../../lib/domain/services/user-reconciliation-service.js'; +import * as userService from '../../../../lib/domain/services/user-service.js'; +import { createAndReconcileUserToOrganizationLearner } from '../../../../lib/domain/usecases/create-and-reconcile-user-to-organization-learner.js'; +import * as passwordValidator from '../../../../lib/domain/validators/password-validator.js'; +import * as userValidator from '../../../../lib/domain/validators/user-validator.js'; + +import { CampaignCodeError, EntityValidationError, NotFoundError, OrganizationLearnerAlreadyLinkedToUserError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Integration | UseCases | create-and-reconcile-user-to-organization-learner', function () { const pickUserAttributes = ['firstName', 'lastName', 'email', 'username', 'cgu']; diff --git a/api/tests/integration/domain/usecases/create-badge_test.js b/api/tests/integration/domain/usecases/create-badge_test.js index f36cf5021d0..e64e8e727bf 100644 --- a/api/tests/integration/domain/usecases/create-badge_test.js +++ b/api/tests/integration/domain/usecases/create-badge_test.js @@ -1,19 +1,20 @@ -const _ = require('lodash'); +import _ from 'lodash'; -const { expect, databaseBuilder, mockLearningContent, knex, catchErr, sinon } = require('../../../test-helper'); +import { expect, databaseBuilder, mockLearningContent, knex, catchErr, sinon } from '../../../test-helper.js'; -const badgeRepository = require('../../../../lib/infrastructure/repositories/badge-repository'); -const badgeCriteriaRepository = require('../../../../lib/infrastructure/repositories/badge-criteria-repository'); -const skillSetRepository = require('../../../../lib/infrastructure/repositories/skill-set-repository'); -const targetProfileRepository = require('../../../../lib/infrastructure/repositories/target-profile-repository'); -const createBadge = require('../../../../lib/domain/usecases/create-badge'); -const Badge = require('../../../../lib/domain/models/Badge'); -const { +import * as badgeRepository from '../../../../lib/infrastructure/repositories/badge-repository.js'; +import * as badgeCriteriaRepository from '../../../../lib/infrastructure/repositories/badge-criteria-repository.js'; +import * as skillSetRepository from '../../../../lib/infrastructure/repositories/skill-set-repository.js'; +import * as targetProfileRepository from '../../../../lib/infrastructure/repositories/target-profile-repository.js'; +import { createBadge } from '../../../../lib/domain/usecases/create-badge.js'; +import { Badge } from '../../../../lib/domain/models/Badge.js'; + +import { AlreadyExistingEntityError, NotFoundError, InvalidSkillSetError, MissingBadgeCriterionError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Integration | UseCases | create-badge', function () { let targetProfileId; diff --git a/api/tests/integration/domain/usecases/create-campaign_test.js b/api/tests/integration/domain/usecases/create-campaign_test.js index 122f1fbb8ac..bd2846138d1 100644 --- a/api/tests/integration/domain/usecases/create-campaign_test.js +++ b/api/tests/integration/domain/usecases/create-campaign_test.js @@ -1,15 +1,13 @@ -const { expect, databaseBuilder, mockLearningContent, knex } = require('../../../test-helper'); -const _ = require('lodash'); +import { expect, databaseBuilder, mockLearningContent, knex } from '../../../test-helper.js'; +import _ from 'lodash'; -const campaignRepository = require('../../../../lib/infrastructure/repositories/campaign-repository'); -const campaignCreatorRepository = require('../../../../lib/infrastructure/repositories/campaign-creator-repository'); +import * as campaignRepository from '../../../../lib/infrastructure/repositories/campaign-repository.js'; +import * as campaignCreatorRepository from '../../../../lib/infrastructure/repositories/campaign-creator-repository.js'; -const createCampaign = require('../../../../lib/domain/usecases/create-campaign'); - -const Campaign = require('../../../../lib/domain/models/Campaign'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); - -const campaignCodeGenerator = require('../../../../lib/domain/services/campaigns/campaign-code-generator'); +import { createCampaign } from '../../../../lib/domain/usecases/create-campaign.js'; +import { Campaign } from '../../../../lib/domain/models/Campaign.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import * as campaignCodeGenerator from '../../../../lib/domain/services/campaigns/campaign-code-generator.js'; describe('Integration | UseCases | create-campaign', function () { let userId; diff --git a/api/tests/integration/domain/usecases/create-certification-center-membership-by-email_test.js b/api/tests/integration/domain/usecases/create-certification-center-membership-by-email_test.js index 8fc597ee43c..fd33857ecbe 100644 --- a/api/tests/integration/domain/usecases/create-certification-center-membership-by-email_test.js +++ b/api/tests/integration/domain/usecases/create-certification-center-membership-by-email_test.js @@ -1,13 +1,11 @@ -const { catchErr, databaseBuilder, expect, knex } = require('../../../test-helper'); +import { catchErr, databaseBuilder, expect, knex } from '../../../test-helper.js'; +import { UserNotFoundError, AlreadyExistingEntityError } from '../../../../lib/domain/errors.js'; +import { CertificationCenterMembership } from '../../../../lib/domain/models/CertificationCenterMembership.js'; -const { UserNotFoundError, AlreadyExistingEntityError } = require('../../../../lib/domain/errors'); +import * as certificationCenterMembershipRepository from '../../../../lib/infrastructure/repositories/certification-center-membership-repository.js'; +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; -const CertificationCenterMembership = require('../../../../lib/domain/models/CertificationCenterMembership'); - -const certificationCenterMembershipRepository = require('../../../../lib/infrastructure/repositories/certification-center-membership-repository'); -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); - -const createCertificationCenterMembershipByEmail = require('../../../../lib/domain/usecases/create-certification-center-membership-by-email'); +import { createCertificationCenterMembershipByEmail } from '../../../../lib/domain/usecases/create-certification-center-membership-by-email.js'; describe('Integration | UseCases | create-certification-center-membership-by-email', function () { let certificationCenterId; diff --git a/api/tests/integration/domain/usecases/create-certification-center-membership-for-sco-organization-member_test.js b/api/tests/integration/domain/usecases/create-certification-center-membership-for-sco-organization-member_test.js index 3bca1d42d01..8c008e030b5 100644 --- a/api/tests/integration/domain/usecases/create-certification-center-membership-for-sco-organization-member_test.js +++ b/api/tests/integration/domain/usecases/create-certification-center-membership-for-sco-organization-member_test.js @@ -1,12 +1,11 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; -const membershipRepository = require('../../../../lib/infrastructure/repositories/membership-repository'); -const certificationCenterRepository = require('../../../../lib/infrastructure/repositories/certification-center-repository'); -const certificationCenterMembershipRepository = require('../../../../lib/infrastructure/repositories/certification-center-membership-repository'); +import * as membershipRepository from '../../../../lib/infrastructure/repositories/membership-repository.js'; +import * as certificationCenterRepository from '../../../../lib/infrastructure/repositories/certification-center-repository.js'; +import * as certificationCenterMembershipRepository from '../../../../lib/infrastructure/repositories/certification-center-membership-repository.js'; -const Membership = require('../../../../lib/domain/models/Membership'); - -const createCertificationCenterMembershipForScoOrganizationMember = require('../../../../lib/domain/usecases/create-certification-center-membership-for-sco-organization-member'); +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { createCertificationCenterMembershipForScoOrganizationMember } from '../../../../lib/domain/usecases/create-certification-center-membership-for-sco-organization-member.js'; describe('Integration | UseCases | create-certification-center-membership-for-sco-organization-member', function () { afterEach(function () { diff --git a/api/tests/integration/domain/usecases/create-or-update-certification-center-invitation-for-admin_test.js b/api/tests/integration/domain/usecases/create-or-update-certification-center-invitation-for-admin_test.js index 117f235900a..5ecdd2e9f0a 100644 --- a/api/tests/integration/domain/usecases/create-or-update-certification-center-invitation-for-admin_test.js +++ b/api/tests/integration/domain/usecases/create-or-update-certification-center-invitation-for-admin_test.js @@ -1,9 +1,9 @@ -const { expect, databaseBuilder, knex, sinon, catchErr } = require('../../../test-helper'); -const useCases = require('../../../../lib/domain/usecases/index.js'); -const CertificationCenterInvitation = require('../../../../lib/domain/models/CertificationCenterInvitation'); -const mailService = require('../../../../lib/domain/services/mail-service'); -const { SendingEmailError, SendingEmailToInvalidDomainError } = require('../../../../lib/domain/errors'); -const EmailingAttempt = require('../../../../lib/domain/models/EmailingAttempt'); +import { expect, databaseBuilder, knex, sinon, catchErr } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { CertificationCenterInvitation } from '../../../../lib/domain/models/CertificationCenterInvitation.js'; +import { mailService } from '../../../../lib/domain/services/mail-service.js'; +import { SendingEmailError, SendingEmailToInvalidDomainError } from '../../../../lib/domain/errors.js'; +import { EmailingAttempt } from '../../../../lib/domain/models/EmailingAttempt.js'; describe('Integration | UseCase | create-or-update-certification-center-invitation-for-admin', function () { let clock; @@ -39,7 +39,7 @@ describe('Integration | UseCase | create-or-update-certification-center-invitati await databaseBuilder.commit(); // when - const result = await useCases.createOrUpdateCertificationCenterInvitationForAdmin({ + const result = await usecases.createOrUpdateCertificationCenterInvitationForAdmin({ email, certificationCenterId, mailService, @@ -81,7 +81,7 @@ describe('Integration | UseCase | create-or-update-certification-center-invitati await databaseBuilder.commit(); // when - const result = await useCases.createOrUpdateCertificationCenterInvitationForAdmin({ + const result = await usecases.createOrUpdateCertificationCenterInvitationForAdmin({ email, certificationCenterId, mailService, @@ -116,7 +116,7 @@ describe('Integration | UseCase | create-or-update-certification-center-invitati await databaseBuilder.commit(); // when - await useCases.createOrUpdateCertificationCenterInvitationForAdmin({ + await usecases.createOrUpdateCertificationCenterInvitationForAdmin({ email, locale: 'en', certificationCenterId, @@ -150,7 +150,7 @@ describe('Integration | UseCase | create-or-update-certification-center-invitati mailService.sendCertificationCenterInvitationEmail.resolves(mailerResponse); // when - const result = await catchErr(useCases.createOrUpdateCertificationCenterInvitationForAdmin)({ + const result = await catchErr(usecases.createOrUpdateCertificationCenterInvitationForAdmin)({ email, locale: 'fr', certificationCenterId, @@ -177,7 +177,7 @@ describe('Integration | UseCase | create-or-update-certification-center-invitati mailService.sendCertificationCenterInvitationEmail.resolves(emailAttemptFailure); // when - const error = await catchErr(useCases.createOrUpdateCertificationCenterInvitationForAdmin)({ + const error = await catchErr(usecases.createOrUpdateCertificationCenterInvitationForAdmin)({ email, locale: 'fr', certificationCenterId, diff --git a/api/tests/integration/domain/usecases/create-organization_test.js b/api/tests/integration/domain/usecases/create-organization_test.js index 870a7be4919..6beab0e51fe 100644 --- a/api/tests/integration/domain/usecases/create-organization_test.js +++ b/api/tests/integration/domain/usecases/create-organization_test.js @@ -1,11 +1,10 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; -const organizationForAdminRepository = require('../../../../lib/infrastructure/repositories/organization-for-admin-repository'); -const dataProtectionOfficerRepository = require('../../../../lib/infrastructure/repositories/data-protection-officer-repository'); -const organizationCreationValidator = require('../../../../lib/domain/validators/organization-creation-validator.js'); -const OrganizationForAdmin = require('../../../../lib/domain/models/organizations-administration/Organization'); - -const createOrganization = require('../../../../lib/domain/usecases/create-organization'); +import * as organizationForAdminRepository from '../../../../lib/infrastructure/repositories/organization-for-admin-repository.js'; +import * as dataProtectionOfficerRepository from '../../../../lib/infrastructure/repositories/data-protection-officer-repository.js'; +import { OrganizationForAdmin } from '../../../../lib/domain/models/organizations-administration/Organization.js'; +import * as organizationCreationValidator from '../../../../lib/domain/validators/organization-creation-validator.js'; +import { createOrganization } from '../../../../lib/domain/usecases/create-organization.js'; describe('Integration | UseCases | create-organization', function () { afterEach(async function () { diff --git a/api/tests/integration/domain/usecases/create-organizations-with-tags-and-target-profiles_test.js b/api/tests/integration/domain/usecases/create-organizations-with-tags-and-target-profiles_test.js index 6d5afdc36c9..6d2d62c9f85 100644 --- a/api/tests/integration/domain/usecases/create-organizations-with-tags-and-target-profiles_test.js +++ b/api/tests/integration/domain/usecases/create-organizations-with-tags-and-target-profiles_test.js @@ -1,25 +1,29 @@ -const { catchErr, expect, databaseBuilder, knex } = require('../../../test-helper'); -const { omit } = require('lodash'); - -const domainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const organizationInvitationRepository = require('../../../../lib/infrastructure/repositories/organization-invitation-repository'); -const organizationRepository = require('../../../../lib/infrastructure/repositories/organization-repository'); -const organizationTagRepository = require('../../../../lib/infrastructure/repositories/organization-tag-repository'); -const targetProfileShareRepository = require('../../../../lib/infrastructure/repositories/target-profile-share-repository'); -const dataProtectionOfficerRepository = require('../../../../lib/infrastructure/repositories/data-protection-officer-repository'); -const tagRepository = require('../../../../lib/infrastructure/repositories/tag-repository'); -const organizationValidator = require('../../../../lib/domain/validators/organization-with-tags-and-target-profiles-script.js'); -const organizationInvitationService = require('../../../../lib/domain/services/organization-invitation-service.js'); -const { +import { catchErr, expect, databaseBuilder, knex } from '../../../test-helper.js'; +import lodash from 'lodash'; + +const { omit } = lodash; + +import { DomainTransaction as domainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import * as organizationInvitationRepository from '../../../../lib/infrastructure/repositories/organization-invitation-repository.js'; +import * as organizationRepository from '../../../../lib/infrastructure/repositories/organization-repository.js'; +import * as organizationTagRepository from '../../../../lib/infrastructure/repositories/organization-tag-repository.js'; +import * as targetProfileShareRepository from '../../../../lib/infrastructure/repositories/target-profile-share-repository.js'; +import * as dataProtectionOfficerRepository from '../../../../lib/infrastructure/repositories/data-protection-officer-repository.js'; +import * as tagRepository from '../../../../lib/infrastructure/repositories/tag-repository.js'; +import * as organizationValidator from '../../../../lib/domain/validators/organization-with-tags-and-target-profiles-script.js'; +import * as organizationInvitationService from '../../../../lib/domain/services/organization-invitation-service.js'; + +import { OrganizationTagNotFound, ManyOrganizationsFoundError, OrganizationAlreadyExistError, EntityValidationError, ObjectValidationError, TargetProfileInvalidError, -} = require('../../../../lib/domain/errors'); -const createOrganizationsWithTagsAndTargetProfiles = require('../../../../lib/domain/usecases/create-organizations-with-tags-and-target-profiles'); -const Membership = require('../../../../lib/domain/models/Membership'); +} from '../../../../lib/domain/errors.js'; + +import { createOrganizationsWithTagsAndTargetProfiles } from '../../../../lib/domain/usecases/create-organizations-with-tags-and-target-profiles.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; describe('Integration | UseCases | create-organizations-with-tags-and-target-profiles', function () { let userId; diff --git a/api/tests/integration/domain/usecases/create-password-reset-demand_test.js b/api/tests/integration/domain/usecases/create-password-reset-demand_test.js index 9fd47281cf8..c6bf2946bac 100644 --- a/api/tests/integration/domain/usecases/create-password-reset-demand_test.js +++ b/api/tests/integration/domain/usecases/create-password-reset-demand_test.js @@ -1,13 +1,12 @@ -const { catchErr, databaseBuilder, expect, knex } = require('../../../test-helper'); +import { catchErr, databaseBuilder, expect, knex } from '../../../test-helper.js'; -const mailService = require('../../../../lib/domain/services/mail-service'); -const resetPasswordService = require('../../../../lib/domain/services/reset-password-service'); -const resetPasswordDemandRepository = require('../../../../lib/infrastructure/repositories/reset-password-demands-repository'); -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); +import * as mailService from '../../../../lib/domain/services/mail-service.js'; +import * as resetPasswordService from '../../../../lib/domain/services/reset-password-service.js'; +import * as resetPasswordDemandRepository from '../../../../lib/infrastructure/repositories/reset-password-demands-repository.js'; +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; -const { UserNotFoundError } = require('../../../../lib/domain/errors'); - -const createPasswordResetDemand = require('../../../../lib/domain/usecases/create-password-reset-demand'); +import { UserNotFoundError } from '../../../../lib/domain/errors.js'; +import { createPasswordResetDemand } from '../../../../lib/domain/usecases/create-password-reset-demand.js'; describe('Integration | UseCases | create-password-reset-demand', function () { const email = 'user@example.net'; diff --git a/api/tests/integration/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user_test.js b/api/tests/integration/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user_test.js index 0d3a2ef4130..5f078f4469a 100644 --- a/api/tests/integration/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user_test.js +++ b/api/tests/integration/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user_test.js @@ -1,27 +1,26 @@ -const { catchErr, databaseBuilder, expect, knex } = require('../../../test-helper'); - -const campaignRepository = require('../../../../lib/infrastructure/repositories/campaign-repository'); -const organizationLearnerRepository = require('../../../../lib/infrastructure/repositories/organization-learner-repository'); -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); -const userToCreateRepository = require('../../../../lib/infrastructure/repositories/user-to-create-repository'); -const studentRepository = require('../../../../lib/infrastructure/repositories/student-repository'); -const authenticationMethodRepository = require('../../../../lib/infrastructure/repositories/authentication-method-repository'); - -const obfuscationService = require('../../../../lib/domain/services/obfuscation-service'); -const tokenService = require('../../../../lib/domain/services/token-service'); -const userReconciliationService = require('../../../../lib/domain/services/user-reconciliation-service'); -const userService = require('../../../../lib/domain/services/user-service'); - -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); - -const { +import { catchErr, databaseBuilder, expect, knex } from '../../../test-helper.js'; + +import * as campaignRepository from '../../../../lib/infrastructure/repositories/campaign-repository.js'; +import * as organizationLearnerRepository from '../../../../lib/infrastructure/repositories/organization-learner-repository.js'; +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; +import * as userToCreateRepository from '../../../../lib/infrastructure/repositories/user-to-create-repository.js'; +import * as studentRepository from '../../../../lib/infrastructure/repositories/student-repository.js'; +import * as authenticationMethodRepository from '../../../../lib/infrastructure/repositories/authentication-method-repository.js'; +import * as obfuscationService from '../../../../lib/domain/services/obfuscation-service.js'; +import { tokenService } from '../../../../lib/domain/services/token-service.js'; +import * as userReconciliationService from '../../../../lib/domain/services/user-reconciliation-service.js'; +import * as userService from '../../../../lib/domain/services/user-service.js'; + +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; + +import { CampaignCodeError, NotFoundError, ObjectValidationError, OrganizationLearnerAlreadyLinkedToUserError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; -const createUserAndReconcileToOrganizationLearnerByExternalUser = require('../../../../lib/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user'); +import { createUserAndReconcileToOrganizationLearnerFromExternalUser as createUserAndReconcileToOrganizationLearnerByExternalUser } from '../../../../lib/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user.js'; describe('Integration | UseCases | create-user-and-reconcile-to-organization-learner-from-external-user', function () { context('When there is no campaign with the given code', function () { diff --git a/api/tests/integration/domain/usecases/delete-campaign-participation-for-admin_test.js b/api/tests/integration/domain/usecases/delete-campaign-participation-for-admin_test.js index 75be05e0d54..7c87a295852 100644 --- a/api/tests/integration/domain/usecases/delete-campaign-participation-for-admin_test.js +++ b/api/tests/integration/domain/usecases/delete-campaign-participation-for-admin_test.js @@ -1,9 +1,9 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const campaignParticipationRepository = require('../../../../lib/infrastructure/repositories/campaign-participation-repository'); -const campaignRepository = require('../../../../lib/infrastructure/repositories/campaign-repository'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import * as campaignParticipationRepository from '../../../../lib/infrastructure/repositories/campaign-participation-repository.js'; +import * as campaignRepository from '../../../../lib/infrastructure/repositories/campaign-repository.js'; -const deleteCampaignParticipationForAdmin = require('../../../../lib/domain/usecases/delete-campaign-participation-for-admin'); +import { deleteCampaignParticipationForAdmin } from '../../../../lib/domain/usecases/delete-campaign-participation-for-admin.js'; describe('Integration | UseCases | delete-campaign-participation-for-admin', function () { it('should delete all campaignParticipations', async function () { diff --git a/api/tests/integration/domain/usecases/delete-campaign-participation_test.js b/api/tests/integration/domain/usecases/delete-campaign-participation_test.js index 6efbacf0b44..ce2e2990cb1 100644 --- a/api/tests/integration/domain/usecases/delete-campaign-participation_test.js +++ b/api/tests/integration/domain/usecases/delete-campaign-participation_test.js @@ -1,8 +1,8 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const campaignParticipationRepository = require('../../../../lib/infrastructure/repositories/campaign-participation-repository'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import * as campaignParticipationRepository from '../../../../lib/infrastructure/repositories/campaign-participation-repository.js'; -const deleteCampaignParticipation = require('../../../../lib/domain/usecases/delete-campaign-participation'); +import { deleteCampaignParticipation } from '../../../../lib/domain/usecases/delete-campaign-participation.js'; describe('Integration | UseCases | delete-campaign-participation', function () { it('should delete all campaignParticipations', async function () { diff --git a/api/tests/integration/domain/usecases/find-assessment-participation-result-list_test.js b/api/tests/integration/domain/usecases/find-assessment-participation-result-list_test.js index 3dbf62c27a7..5255088316c 100644 --- a/api/tests/integration/domain/usecases/find-assessment-participation-result-list_test.js +++ b/api/tests/integration/domain/usecases/find-assessment-participation-result-list_test.js @@ -1,5 +1,5 @@ -const { expect, mockLearningContent, databaseBuilder } = require('../../../test-helper'); -const useCases = require('../../../../lib/domain/usecases/index.js'); +import { expect, mockLearningContent, databaseBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Integration | UseCase | find-assessment-participation-result-list', function () { let organizationId; @@ -28,7 +28,7 @@ describe('Integration | UseCase | find-assessment-participation-result-list', fu context('when there are filters', function () { it('returns the assessmentParticipationResultMinimal list filtered by the search', async function () { - const { participations } = await useCases.findAssessmentParticipationResultList({ + const { participations } = await usecases.findAssessmentParticipationResultList({ campaignId, filters: { search: 'Tonari N' }, page, diff --git a/api/tests/integration/domain/usecases/find-campaign-profiles-collection-participation-summaries_test.js b/api/tests/integration/domain/usecases/find-campaign-profiles-collection-participation-summaries_test.js index 987128902c8..e29a8b0126d 100644 --- a/api/tests/integration/domain/usecases/find-campaign-profiles-collection-participation-summaries_test.js +++ b/api/tests/integration/domain/usecases/find-campaign-profiles-collection-participation-summaries_test.js @@ -1,5 +1,5 @@ -const { expect, mockLearningContent, databaseBuilder } = require('../../../test-helper'); -const useCases = require('../../../../lib/domain/usecases/index.js'); +import { expect, mockLearningContent, databaseBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Integration | UseCase | find-campaign-profiles-collection-participation-summaries', function () { let organizationId; @@ -33,7 +33,7 @@ describe('Integration | UseCase | find-campaign-profiles-collection-participatio await databaseBuilder.commit(); }); it('returns the list filtered by the search', async function () { - const { data } = await useCases.findCampaignProfilesCollectionParticipationSummaries({ + const { data } = await usecases.findCampaignProfilesCollectionParticipationSummaries({ userId, campaignId, filters: { search: 'Tonari N' }, diff --git a/api/tests/integration/domain/usecases/find-certification-center-memberships-by-certification-center_test.js b/api/tests/integration/domain/usecases/find-certification-center-memberships-by-certification-center_test.js index 04032fdf4b7..50bc6993f38 100644 --- a/api/tests/integration/domain/usecases/find-certification-center-memberships-by-certification-center_test.js +++ b/api/tests/integration/domain/usecases/find-certification-center-memberships-by-certification-center_test.js @@ -1,9 +1,10 @@ -const { databaseBuilder, expect } = require('../../../test-helper'); +import { databaseBuilder, expect } from '../../../test-helper.js'; -const certificationCenterMembershipRepository = require('../../../../lib/infrastructure/repositories/certification-center-membership-repository'); -const CertificationCenterMembership = require('../../../../lib/domain/models/CertificationCenterMembership'); +import * as certificationCenterMembershipRepository from '../../../../lib/infrastructure/repositories/certification-center-membership-repository.js'; +import { CertificationCenterMembership } from '../../../../lib/domain/models/CertificationCenterMembership.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; -const { findCertificationCenterMembershipsByCertificationCenter } = require('../../../../lib/domain/usecases/index'); +const { findCertificationCenterMembershipsByCertificationCenter } = usecases; describe('Integration | UseCase | find-certification-center-memberships-by-certification-center', function () { it('should return certification center memberships', async function () { diff --git a/api/tests/integration/domain/usecases/find-paginated-campaign-participant-activities_test.js b/api/tests/integration/domain/usecases/find-paginated-campaign-participant-activities_test.js index 9bbb64849c7..27ed9a765d6 100644 --- a/api/tests/integration/domain/usecases/find-paginated-campaign-participant-activities_test.js +++ b/api/tests/integration/domain/usecases/find-paginated-campaign-participant-activities_test.js @@ -1,6 +1,6 @@ -const { expect, catchErr, databaseBuilder } = require('../../../test-helper'); -const useCases = require('../../../../lib/domain/usecases/index.js'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); +import { expect, catchErr, databaseBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; describe('Integration | UseCase | find-paginated-campaign-participants-activities', function () { let organizationId; @@ -17,7 +17,7 @@ describe('Integration | UseCase | find-paginated-campaign-participants-activitie context('when requesting user is not allowed to access campaign informations', function () { it('should throw a UserNotAuthorizedToAccessEntityError error', async function () { // when - const error = await catchErr(useCases.findPaginatedCampaignParticipantsActivities)({ + const error = await catchErr(usecases.findPaginatedCampaignParticipantsActivities)({ userId, campaignId, }); @@ -39,7 +39,7 @@ describe('Integration | UseCase | find-paginated-campaign-participants-activitie }); it('returns the campaignParticipantsActivites of the participants of the campaign', async function () { - const { campaignParticipantsActivities } = await useCases.findPaginatedCampaignParticipantsActivities({ + const { campaignParticipantsActivities } = await usecases.findPaginatedCampaignParticipantsActivities({ userId, campaignId, page, @@ -65,7 +65,7 @@ describe('Integration | UseCase | find-paginated-campaign-participants-activitie }); it('returns the campaignParticipantsActivities for the participants for the division', async function () { - const { campaignParticipantsActivities } = await useCases.findPaginatedCampaignParticipantsActivities({ + const { campaignParticipantsActivities } = await usecases.findPaginatedCampaignParticipantsActivities({ userId, campaignId, filters: { divisions: ['6eme'] }, @@ -75,7 +75,7 @@ describe('Integration | UseCase | find-paginated-campaign-participants-activitie }); it('returns the campaignParticipantsActivities filtered by the search', async function () { - const { campaignParticipantsActivities } = await useCases.findPaginatedCampaignParticipantsActivities({ + const { campaignParticipantsActivities } = await usecases.findPaginatedCampaignParticipantsActivities({ userId, campaignId, filters: { search: 'Tonari N' }, diff --git a/api/tests/integration/domain/usecases/find-pending-certification-center-invitations_test.js b/api/tests/integration/domain/usecases/find-pending-certification-center-invitations_test.js index ac3d0870b86..d1309984cd5 100644 --- a/api/tests/integration/domain/usecases/find-pending-certification-center-invitations_test.js +++ b/api/tests/integration/domain/usecases/find-pending-certification-center-invitations_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const useCases = require('../../../../lib/domain/usecases/index.js'); -const CertificationCenterInvitation = require('../../../../lib/domain/models/CertificationCenterInvitation'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { CertificationCenterInvitation } from '../../../../lib/domain/models/CertificationCenterInvitation.js'; describe('Integration | UseCase | find-pending-certification-center-invitations', function () { it('should find only pending certification center invitations for a given certification center', async function () { @@ -33,7 +33,7 @@ describe('Integration | UseCase | find-pending-certification-center-invitations' await databaseBuilder.commit(); // when - const certificationCenterInvitations = await useCases.findPendingCertificationCenterInvitations({ + const certificationCenterInvitations = await usecases.findPendingCertificationCenterInvitations({ certificationCenterId, }); @@ -88,7 +88,7 @@ describe('Integration | UseCase | find-pending-certification-center-invitations' await databaseBuilder.commit(); // when - const certificationCenterInvitations = await useCases.findPendingCertificationCenterInvitations({ + const certificationCenterInvitations = await usecases.findPendingCertificationCenterInvitations({ certificationCenterId, }); @@ -107,7 +107,7 @@ describe('Integration | UseCase | find-pending-certification-center-invitations' await databaseBuilder.commit(); // when - const certificationCenterInvitations = await useCases.findPendingCertificationCenterInvitations({ + const certificationCenterInvitations = await usecases.findPendingCertificationCenterInvitations({ certificationCenterId, }); diff --git a/api/tests/integration/domain/usecases/get-attendance-sheet/get-attendance-sheet_test.js b/api/tests/integration/domain/usecases/get-attendance-sheet/get-attendance-sheet_test.js index 5486b46cfcc..ae8c29b7769 100644 --- a/api/tests/integration/domain/usecases/get-attendance-sheet/get-attendance-sheet_test.js +++ b/api/tests/integration/domain/usecases/get-attendance-sheet/get-attendance-sheet_test.js @@ -1,12 +1,19 @@ -const { unlink, writeFile } = require('fs').promises; -const _ = require('lodash'); -const { expect, databaseBuilder } = require('../../../../test-helper'); -const readOdsUtils = require('../../../../../lib/infrastructure/utils/ods/read-ods-utils'); -const writeOdsUtils = require('../../../../../lib/infrastructure/utils/ods/write-ods-utils'); -const sessionXmlService = require('../../../../../lib/domain/services/session-xml-service'); -const sessionRepository = require('../../../../../lib/infrastructure/repositories/sessions/session-repository'); -const sessionForAttendanceSheetRepository = require('../../../../../lib/infrastructure/repositories/sessions/session-for-attendance-sheet-repository'); -const getAttendanceSheet = require('../../../../../lib/domain/usecases/get-attendance-sheet'); +import fs from 'fs'; + +const { promises } = fs; + +const { unlink, writeFile } = promises; + +import _ from 'lodash'; +import { expect, databaseBuilder } from '../../../../test-helper.js'; +import * as writeOdsUtils from '../../../../../lib/infrastructure/utils/ods/write-ods-utils.js'; +import * as sessionXmlService from '../../../../../lib/domain/services/session-xml-service.js'; +import * as readOdsUtils from '../../../../../lib/infrastructure/utils/ods/read-ods-utils.js'; +import * as sessionRepository from '../../../../../lib/infrastructure/repositories/sessions/session-repository.js'; +import * as sessionForAttendanceSheetRepository from '../../../../../lib/infrastructure/repositories/sessions/session-for-attendance-sheet-repository.js'; +import { getAttendanceSheet } from '../../../../../lib/domain/usecases/get-attendance-sheet.js'; +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Integration | UseCases | getAttendanceSheet', function () { describe('when certification center is not sco', function () { diff --git a/api/tests/integration/domain/usecases/get-campaign-participations-activity-by-day_test.js b/api/tests/integration/domain/usecases/get-campaign-participations-activity-by-day_test.js index 08b6193ab60..f56631bbaf5 100644 --- a/api/tests/integration/domain/usecases/get-campaign-participations-activity-by-day_test.js +++ b/api/tests/integration/domain/usecases/get-campaign-participations-activity-by-day_test.js @@ -1,7 +1,7 @@ -const { expect, catchErr, databaseBuilder } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, catchErr, databaseBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/domain/usecases/get-campaign-participations-counts-by-stage_test.js b/api/tests/integration/domain/usecases/get-campaign-participations-counts-by-stage_test.js index f66cd2cf228..656796b4c93 100644 --- a/api/tests/integration/domain/usecases/get-campaign-participations-counts-by-stage_test.js +++ b/api/tests/integration/domain/usecases/get-campaign-participations-counts-by-stage_test.js @@ -1,12 +1,13 @@ -const { +import { expect, catchErr, databaseBuilder, learningContentBuilder, mockLearningContent, -} = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const { UserNotAuthorizedToAccessEntityError, NoStagesForCampaign } = require('../../../../lib/domain/errors'); +} from '../../../test-helper.js'; + +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { UserNotAuthorizedToAccessEntityError, NoStagesForCampaign } from '../../../../lib/domain/errors.js'; describe('Integration | UseCase | get-campaign-participations-counts-by-stage', function () { let organizationId; @@ -15,7 +16,7 @@ describe('Integration | UseCase | get-campaign-participations-counts-by-stage', let stage1, stage2, stage3; beforeEach(async function () { - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([ + const learningContentObjects = learningContentBuilder.fromAreas([ { id: 'recArea1', title_i18n: { diff --git a/api/tests/integration/domain/usecases/get-campaign-participations-counts-by-status_test.js b/api/tests/integration/domain/usecases/get-campaign-participations-counts-by-status_test.js index 84d46797d08..cfb2c060eb5 100644 --- a/api/tests/integration/domain/usecases/get-campaign-participations-counts-by-status_test.js +++ b/api/tests/integration/domain/usecases/get-campaign-participations-counts-by-status_test.js @@ -1,7 +1,7 @@ -const { expect, catchErr, databaseBuilder } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, catchErr, databaseBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED, TO_SHARE } = CampaignParticipationStatuses; diff --git a/api/tests/integration/domain/usecases/get-campaign-profile_test.js b/api/tests/integration/domain/usecases/get-campaign-profile_test.js index 20e2be94214..ce3a8a5a19d 100644 --- a/api/tests/integration/domain/usecases/get-campaign-profile_test.js +++ b/api/tests/integration/domain/usecases/get-campaign-profile_test.js @@ -1,6 +1,8 @@ -const { expect, databaseBuilder, mockLearningContent } = require('../../../test-helper'); -const useCases = require('../../../../lib/domain/usecases/index.js'); -const { FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +import { expect, databaseBuilder, mockLearningContent } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { FRENCH_SPOKEN } = LOCALE; describe('Integration | UseCase | get-campaign-profile', function () { const locale = FRENCH_SPOKEN; @@ -21,7 +23,7 @@ describe('Integration | UseCase | get-campaign-profile', function () { await databaseBuilder.commit(); // when - const profile = await useCases.getCampaignProfile({ + const profile = await usecases.getCampaignProfile({ userId, campaignId, campaignParticipationId, diff --git a/api/tests/integration/domain/usecases/get-campaign_test.js b/api/tests/integration/domain/usecases/get-campaign_test.js index 36d2e40c33c..ee4512f596b 100644 --- a/api/tests/integration/domain/usecases/get-campaign_test.js +++ b/api/tests/integration/domain/usecases/get-campaign_test.js @@ -1,10 +1,9 @@ -const { expect, databaseBuilder, catchErr, mockLearningContent } = require('../../../test-helper'); -const { NotFoundError, UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); - -const getCampaign = require('../../../../lib/domain/usecases/get-campaign'); -const badgeRepository = require('../../../../lib/infrastructure/repositories/badge-repository'); -const campaignRepository = require('../../../../lib/infrastructure/repositories/campaign-repository'); -const campaignReportRepository = require('../../../../lib/infrastructure/repositories/campaign-report-repository'); +import { expect, databaseBuilder, catchErr, mockLearningContent } from '../../../test-helper.js'; +import { NotFoundError, UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; +import { getCampaign } from '../../../../lib/domain/usecases/get-campaign.js'; +import * as badgeRepository from '../../../../lib/infrastructure/repositories/badge-repository.js'; +import * as campaignRepository from '../../../../lib/infrastructure/repositories/campaign-repository.js'; +import * as campaignReportRepository from '../../../../lib/infrastructure/repositories/campaign-report-repository.js'; describe('Integration | UseCase | get-campaign', function () { context('Error case', function () { diff --git a/api/tests/integration/domain/usecases/get-certification-center-invitation_test.js b/api/tests/integration/domain/usecases/get-certification-center-invitation_test.js index 8787107cdc6..ea8d6aa3b73 100644 --- a/api/tests/integration/domain/usecases/get-certification-center-invitation_test.js +++ b/api/tests/integration/domain/usecases/get-certification-center-invitation_test.js @@ -1,11 +1,11 @@ -const { expect, databaseBuilder, catchErr } = require('../../../test-helper'); -const useCases = require('../../../../lib/domain/usecases/index.js'); -const CertificationCenterInvitation = require('../../../../lib/domain/models/CertificationCenterInvitation'); -const { +import { expect, databaseBuilder, catchErr } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { CertificationCenterInvitation } from '../../../../lib/domain/models/CertificationCenterInvitation.js'; +import { NotFoundError, AlreadyExistingInvitationError, CancelledInvitationError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Integration | API | getCertificationCenterInvitation', function () { describe('when an invitation exists', function () { @@ -30,7 +30,7 @@ describe('Integration | API | getCertificationCenterInvitation', function () { await databaseBuilder.commit(); // when - const result = await useCases.getCertificationCenterInvitation({ + const result = await usecases.getCertificationCenterInvitation({ certificationCenterInvitationId: konohaInvitation.id, certificationCenterInvitationCode: 'PAIN999', }); @@ -62,7 +62,7 @@ describe('Integration | API | getCertificationCenterInvitation', function () { await databaseBuilder.commit(); // when - const error = await catchErr(useCases.getCertificationCenterInvitation)({ + const error = await catchErr(usecases.getCertificationCenterInvitation)({ certificationCenterInvitationId: konohaInvitation.id, certificationCenterInvitationCode: 'WRONGCODE01', }); @@ -88,7 +88,7 @@ describe('Integration | API | getCertificationCenterInvitation', function () { await databaseBuilder.commit(); // when - const error = await catchErr(useCases.getCertificationCenterInvitation)({ + const error = await catchErr(usecases.getCertificationCenterInvitation)({ certificationCenterInvitationId: killuaInvitation.id, certificationCenterInvitationCode: 'HXH456', }); @@ -114,7 +114,7 @@ describe('Integration | API | getCertificationCenterInvitation', function () { await databaseBuilder.commit(); // when - const error = await catchErr(useCases.getCertificationCenterInvitation)({ + const error = await catchErr(usecases.getCertificationCenterInvitation)({ certificationCenterInvitationId: dekuInvitation.id, certificationCenterInvitationCode: 'MHA789', }); diff --git a/api/tests/integration/domain/usecases/get-next-challenge-for-campaign-assessment_test.js b/api/tests/integration/domain/usecases/get-next-challenge-for-campaign-assessment_test.js index 9ce3f4830ab..8b0f25a30a2 100644 --- a/api/tests/integration/domain/usecases/get-next-challenge-for-campaign-assessment_test.js +++ b/api/tests/integration/domain/usecases/get-next-challenge-for-campaign-assessment_test.js @@ -1,10 +1,10 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getNextChallengeForCampaignAssessment } from '../../../../lib/domain/usecases/get-next-challenge-for-campaign-assessment.js'; +import * as dataFetcher from '../../../../lib/domain/services/algorithm-methods/data-fetcher.js'; -const getNextChallengeForCampaignAssessment = require('../../../../lib/domain/usecases/get-next-challenge-for-campaign-assessment'); -const flash = require('../../../../lib/domain/services/algorithm-methods/flash'); -const smartRandom = require('../../../../lib/domain/services/algorithm-methods/smart-random'); -const dataFetcher = require('../../../../lib/domain/services/algorithm-methods/data-fetcher'); -const { FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { FRENCH_SPOKEN } = LOCALE; describe('Integration | Domain | Use Cases | get-next-challenge-for-campaign-assessment', function () { describe('#getNextChallengeForCampaignAssessment : case for SMART RANDOM', function () { @@ -29,6 +29,7 @@ describe('Integration | Domain | Use Cases | get-next-challenge-for-campaign-ass challengeWeb21, challengeWeb22, possibleSkillsForNextChallenge, + smartRandom, locale; beforeEach(async function () { @@ -78,10 +79,12 @@ describe('Integration | Domain | Use Cases | get-next-challenge-for-campaign-ass locale = FRENCH_SPOKEN; possibleSkillsForNextChallenge = [web2, url2, search2]; - sinon.stub(smartRandom, 'getPossibleSkillsForNextChallenge').returns({ - hasAssessmentEnded: false, - possibleSkillsForNextChallenge, - }); + smartRandom = { + getPossibleSkillsForNextChallenge: sinon.stub().returns({ + hasAssessmentEnded: false, + possibleSkillsForNextChallenge, + }), + }; actualNextChallenge = await getNextChallengeForCampaignAssessment({ assessment, @@ -94,7 +97,6 @@ describe('Integration | Domain | Use Cases | get-next-challenge-for-campaign-ass pickChallengeService, locale, smartRandom, - flash, dataFetcher, }); }); diff --git a/api/tests/integration/domain/usecases/get-organization-learner_test.js b/api/tests/integration/domain/usecases/get-organization-learner_test.js index 43e1aec5ef1..f41dae256f6 100644 --- a/api/tests/integration/domain/usecases/get-organization-learner_test.js +++ b/api/tests/integration/domain/usecases/get-organization-learner_test.js @@ -1,8 +1,8 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); +import { expect, databaseBuilder } from '../../../test-helper.js'; -const organizationLearnerRepository = require('../../../../lib/infrastructure/repositories/organization-learner-follow-up/organization-learner-repository'); -const OrganizationLearner = require('../../../../lib/domain/read-models/organization-learner-follow-up/OrganizationLearner'); -const getOrganizationLearner = require('../../../../lib/domain/usecases/get-organization-learner'); +import * as organizationLearnerRepository from '../../../../lib/infrastructure/repositories/organization-learner-follow-up/organization-learner-repository.js'; +import { OrganizationLearner } from '../../../../lib/domain/read-models/organization-learner-follow-up/OrganizationLearner.js'; +import { getOrganizationLearner } from '../../../../lib/domain/usecases/get-organization-learner.js'; describe('Integration | UseCases | get-organization-learner', function () { it('should return organization learner given organizationLearnerId', async function () { diff --git a/api/tests/integration/domain/usecases/get-paginated-participants-for-an-organization_test.js b/api/tests/integration/domain/usecases/get-paginated-participants-for-an-organization_test.js index eff994604e6..ed2dded0a19 100644 --- a/api/tests/integration/domain/usecases/get-paginated-participants-for-an-organization_test.js +++ b/api/tests/integration/domain/usecases/get-paginated-participants-for-an-organization_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const organizationParticipantRepository = require('../../../../lib/infrastructure/repositories/organization-participant-repository'); -const getPaginatedParticipantsForAnOrganization = require('../../../../lib/domain/usecases/get-paginated-participants-for-an-organization'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as organizationParticipantRepository from '../../../../lib/infrastructure/repositories/organization-participant-repository.js'; +import { getPaginatedParticipantsForAnOrganization } from '../../../../lib/domain/usecases/get-paginated-participants-for-an-organization.js'; describe('Integration | UseCases | get-paginated-participants-for-an-organization', function () { it('should get all participations for an organization', async function () { diff --git a/api/tests/integration/domain/usecases/get-participants-division_test.js b/api/tests/integration/domain/usecases/get-participants-division_test.js index 2a1f3e289ce..0d2b76a4825 100644 --- a/api/tests/integration/domain/usecases/get-participants-division_test.js +++ b/api/tests/integration/domain/usecases/get-participants-division_test.js @@ -1,6 +1,8 @@ -const { expect, databaseBuilder, catchErr } = require('../../../test-helper'); -const { getParticipantsDivision } = require('../../../../lib/domain/usecases/index'); -const { ForbiddenAccess } = require('../../../../lib/domain/errors'); +import { expect, databaseBuilder, catchErr } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { ForbiddenAccess } from '../../../../lib/domain/errors.js'; + +const { getParticipantsDivision } = usecases; describe('Integration | UseCase | get-participants-division', function () { context('when the use has access to the campaign', function () { diff --git a/api/tests/integration/domain/usecases/get-participants-group_test.js b/api/tests/integration/domain/usecases/get-participants-group_test.js index bc52d43dc65..ffc38b67f19 100644 --- a/api/tests/integration/domain/usecases/get-participants-group_test.js +++ b/api/tests/integration/domain/usecases/get-participants-group_test.js @@ -1,6 +1,8 @@ -const { expect, databaseBuilder, catchErr } = require('../../../test-helper'); -const { getParticipantsGroup } = require('../../../../lib/domain/usecases/index'); -const { ForbiddenAccess } = require('../../../../lib/domain/errors'); +import { expect, databaseBuilder, catchErr } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { ForbiddenAccess } from '../../../../lib/domain/errors.js'; + +const { getParticipantsGroup } = usecases; describe('Integration | UseCase | get-participants-group', function () { context('when the use has access to the campaign', function () { diff --git a/api/tests/integration/domain/usecases/get-pole-emploi-sendings_test.js b/api/tests/integration/domain/usecases/get-pole-emploi-sendings_test.js index b7af56e040f..5c46141ecda 100644 --- a/api/tests/integration/domain/usecases/get-pole-emploi-sendings_test.js +++ b/api/tests/integration/domain/usecases/get-pole-emploi-sendings_test.js @@ -1,8 +1,8 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const poleEmploiService = require('../../../../lib/domain/services/pole-emploi-service'); -const poleEmploiSendingRepository = require('../../../../lib/infrastructure/repositories/pole-emploi-sending-repository'); -const settings = require('../../../../lib/config'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import * as poleEmploiService from '../../../../lib/domain/services/pole-emploi-service.js'; +import * as poleEmploiSendingRepository from '../../../../lib/infrastructure/repositories/pole-emploi-sending-repository.js'; +import { config as settings } from '../../../../lib/config.js'; const poleEmploiSendingFactory = databaseBuilder.factory.poleEmploiSendingFactory; describe('Integration | UseCase | get-campaign-participations-counts-by-stage', function () { diff --git a/api/tests/integration/domain/usecases/get-prescriber_test.js b/api/tests/integration/domain/usecases/get-prescriber_test.js index f6cf8e90a57..84adf8ec629 100644 --- a/api/tests/integration/domain/usecases/get-prescriber_test.js +++ b/api/tests/integration/domain/usecases/get-prescriber_test.js @@ -1,10 +1,10 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; -const prescriberRepository = require('../../../../lib/infrastructure/repositories/prescriber-repository'); -const membershipRepository = require('../../../../lib/infrastructure/repositories/membership-repository'); -const userOrgaSettingsRepository = require('../../../../lib/infrastructure/repositories/user-orga-settings-repository'); +import * as prescriberRepository from '../../../../lib/infrastructure/repositories/prescriber-repository.js'; +import * as membershipRepository from '../../../../lib/infrastructure/repositories/membership-repository.js'; +import * as userOrgaSettingsRepository from '../../../../lib/infrastructure/repositories/user-orga-settings-repository.js'; -const getPrescriber = require('../../../../lib/domain/usecases/get-prescriber'); +import { getPrescriber } from '../../../../lib/domain/usecases/get-prescriber.js'; describe('Integration | UseCases | get-prescriber', function () { context('When prescriber does not have a userOrgaSettings', function () { diff --git a/api/tests/integration/domain/usecases/get-recently-used-tags_test.js b/api/tests/integration/domain/usecases/get-recently-used-tags_test.js index 1362c0727b3..81618437165 100644 --- a/api/tests/integration/domain/usecases/get-recently-used-tags_test.js +++ b/api/tests/integration/domain/usecases/get-recently-used-tags_test.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const { expect, databaseBuilder } = require('../../../test-helper'); -const getRecentlyUsedTags = require('../../../../lib/domain/usecases/get-recently-used-tags'); -const Tag = require('../../../../lib/domain/models/Tag'); -const organizationTagRepository = require('../../../../lib/infrastructure/repositories/organization-tag-repository'); +import _ from 'lodash'; +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { getRecentlyUsedTags } from '../../../../lib/domain/usecases/get-recently-used-tags.js'; +import { Tag } from '../../../../lib/domain/models/Tag.js'; +import * as organizationTagRepository from '../../../../lib/infrastructure/repositories/organization-tag-repository.js'; describe('Integration | UseCase | get-recently-used-tags', function () { it('returns 10 recently used tags based on a tag id and ordered by the most used first', async function () { diff --git a/api/tests/integration/domain/usecases/get-user-by-reset-password-demand_test.js b/api/tests/integration/domain/usecases/get-user-by-reset-password-demand_test.js index 40648cfe8c3..bf8054bc66b 100644 --- a/api/tests/integration/domain/usecases/get-user-by-reset-password-demand_test.js +++ b/api/tests/integration/domain/usecases/get-user-by-reset-password-demand_test.js @@ -1,18 +1,19 @@ -const { catchErr, expect, databaseBuilder } = require('../../../test-helper'); +import { catchErr, expect, databaseBuilder } from '../../../test-helper.js'; -const resetPasswordService = require('../../../../lib/domain/services/reset-password-service'); -const tokenService = require('../../../../lib/domain/services/token-service'); +import * as resetPasswordService from '../../../../lib/domain/services/reset-password-service.js'; +import { tokenService } from '../../../../lib/domain/services/token-service.js'; -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; -const User = require('../../../../lib/domain/models/User'); -const { +import { User } from '../../../../lib/domain/models/User.js'; + +import { InvalidTemporaryKeyError, PasswordResetDemandNotFoundError, UserNotFoundError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; -const getUserByResetPasswordDemand = require('../../../../lib/domain/usecases/get-user-by-reset-password-demand'); +import { getUserByResetPasswordDemand } from '../../../../lib/domain/usecases/get-user-by-reset-password-demand.js'; describe('Integration | UseCases | get-user-by-reset-password-demand', function () { const email = 'user@example.net'; diff --git a/api/tests/integration/domain/usecases/handle-badge-acquisition_test.js b/api/tests/integration/domain/usecases/handle-badge-acquisition_test.js index 1d3a4db03ad..0b9788508ce 100644 --- a/api/tests/integration/domain/usecases/handle-badge-acquisition_test.js +++ b/api/tests/integration/domain/usecases/handle-badge-acquisition_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, knex, mockLearningContent, learningContentBuilder } = require('../../../test-helper'); -const useCases = require('../../../../lib/domain/usecases/index.js'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +import { expect, databaseBuilder, knex, mockLearningContent, learningContentBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; describe('Integration | Usecase | Handle Badge Acquisition', function () { let userId, assessment, badgeCompleted; @@ -103,7 +103,7 @@ describe('Integration | Usecase | Handle Badge Acquisition', function () { type: Assessment.types.CAMPAIGN, }); - const learningContentObjects = learningContentBuilder.buildLearningContent(learningContent); + const learningContentObjects = learningContentBuilder(learningContent); mockLearningContent(learningContentObjects); return databaseBuilder.commit(); @@ -117,7 +117,7 @@ describe('Integration | Usecase | Handle Badge Acquisition', function () { it('should not affect the database', async function () { await DomainTransaction.execute(async (domainTransaction) => { // when - await useCases.handleBadgeAcquisition({ + await usecases.handleBadgeAcquisition({ assessment, domainTransaction, }); diff --git a/api/tests/integration/domain/usecases/import-sup-organization-learners_test.js b/api/tests/integration/domain/usecases/import-sup-organization-learners_test.js index 4f51ee0d0a3..b3faedff964 100644 --- a/api/tests/integration/domain/usecases/import-sup-organization-learners_test.js +++ b/api/tests/integration/domain/usecases/import-sup-organization-learners_test.js @@ -1,11 +1,11 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const iconv = require('iconv-lite'); - -const importSupOrganizationLearner = require('../../../../lib/domain/usecases/import-sup-organization-learners'); -const supOrganizationLearnerRepository = require('../../../../lib/infrastructure/repositories/sup-organization-learner-repository'); -const SupOrganizationLearnerParser = require('../../../../lib/infrastructure/serializers/csv/sup-organization-learner-parser'); -const SupOrganizationLearnerImportHeader = require('../../../../lib/infrastructure/serializers/csv/sup-organization-learner-import-header'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import iconv from 'iconv-lite'; + +import { importSupOrganizationLearners as importSupOrganizationLearner } from '../../../../lib/domain/usecases/import-sup-organization-learners.js'; +import * as supOrganizationLearnerRepository from '../../../../lib/infrastructure/repositories/sup-organization-learner-repository.js'; +import { SupOrganizationLearnerParser } from '../../../../lib/infrastructure/serializers/csv/sup-organization-learner-parser.js'; +import { SupOrganizationLearnerImportHeader } from '../../../../lib/infrastructure/serializers/csv/sup-organization-learner-import-header.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; const i18n = getI18n(); diff --git a/api/tests/integration/domain/usecases/improve-competence-evaluation_test.js b/api/tests/integration/domain/usecases/improve-competence-evaluation_test.js index 519f495e57b..3e748a64d54 100644 --- a/api/tests/integration/domain/usecases/improve-competence-evaluation_test.js +++ b/api/tests/integration/domain/usecases/improve-competence-evaluation_test.js @@ -1,9 +1,9 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const improveCompetenceEvaluation = require('../../../../lib/domain/usecases/improve-competence-evaluation'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { improveCompetenceEvaluation } from '../../../../lib/domain/usecases/improve-competence-evaluation.js'; -const competenceEvaluationRepository = require('../../../../lib/infrastructure/repositories/competence-evaluation-repository'); -const assessmentRepository = require('../../../../lib/infrastructure/repositories/assessment-repository'); -const getCompetenceLevel = require('../../../../lib/domain/services/get-competence-level'); +import * as competenceEvaluationRepository from '../../../../lib/infrastructure/repositories/competence-evaluation-repository.js'; +import * as assessmentRepository from '../../../../lib/infrastructure/repositories/assessment-repository.js'; +import { getCompetenceLevel } from '../../../../lib/domain/services/get-competence-level.js'; describe('Integration | UseCase | Improve Competence Evaluation', function () { const competenceId = 'recCompetenceId'; diff --git a/api/tests/integration/domain/usecases/reconcile-sup-organization-learner_test.js b/api/tests/integration/domain/usecases/reconcile-sup-organization-learner_test.js index 589187b002c..5f53906f9d9 100644 --- a/api/tests/integration/domain/usecases/reconcile-sup-organization-learner_test.js +++ b/api/tests/integration/domain/usecases/reconcile-sup-organization-learner_test.js @@ -1,11 +1,10 @@ -const { expect, databaseBuilder, knex, catchErr } = require('../../../test-helper'); -const userReconciliationService = require('../../../../lib/domain/services/user-reconciliation-service'); -const campaignRepository = require('../../../../lib/infrastructure/repositories/campaign-repository'); -const supOrganizationLearnerRepository = require('../../../../lib/infrastructure/repositories/sup-organization-learner-repository'); -const organizationLearnerRepository = require('../../../../lib/infrastructure/repositories/organization-learner-repository'); -const { NotFoundError, OrganizationLearnerAlreadyLinkedToUserError } = require('../../../../lib/domain/errors'); - -const reconcileSupOrganizationLearner = require('../../../../lib/domain/usecases/reconcile-sup-organization-learner'); +import { expect, databaseBuilder, knex, catchErr } from '../../../test-helper.js'; +import * as userReconciliationService from '../../../../lib/domain/services/user-reconciliation-service.js'; +import * as campaignRepository from '../../../../lib/infrastructure/repositories/campaign-repository.js'; +import * as supOrganizationLearnerRepository from '../../../../lib/infrastructure/repositories/sup-organization-learner-repository.js'; +import * as organizationLearnerRepository from '../../../../lib/infrastructure/repositories/organization-learner-repository.js'; +import { NotFoundError, OrganizationLearnerAlreadyLinkedToUserError } from '../../../../lib/domain/errors.js'; +import { reconcileSupOrganizationLearner } from '../../../../lib/domain/usecases/reconcile-sup-organization-learner.js'; describe('Integration | UseCases | reconcile-sup-organization-learner', function () { let userId; diff --git a/api/tests/integration/domain/usecases/save-admin-member_test.js b/api/tests/integration/domain/usecases/save-admin-member_test.js index 28e36e793a2..e9cf35b5592 100644 --- a/api/tests/integration/domain/usecases/save-admin-member_test.js +++ b/api/tests/integration/domain/usecases/save-admin-member_test.js @@ -1,8 +1,11 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const saveAdminMember = require('../../../../lib/domain/usecases/save-admin-member'); -const { ROLES } = require('../../../../lib/domain/constants').PIX_ADMIN; -const adminMemberRepository = require('../../../../lib/infrastructure/repositories/admin-member-repository'); -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { saveAdminMember } from '../../../../lib/domain/usecases/save-admin-member.js'; +import { PIX_ADMIN } from '../../../../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; + +import * as adminMemberRepository from '../../../../lib/infrastructure/repositories/admin-member-repository.js'; +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; describe('Integration | UseCases | save-admin-member', function () { context('when admin member exists and is disabled', function () { diff --git a/api/tests/integration/domain/usecases/send-shared-participation-results-to-pole-emploi_test.js b/api/tests/integration/domain/usecases/send-shared-participation-results-to-pole-emploi_test.js index e52af3d8a77..349fbf6a15a 100644 --- a/api/tests/integration/domain/usecases/send-shared-participation-results-to-pole-emploi_test.js +++ b/api/tests/integration/domain/usecases/send-shared-participation-results-to-pole-emploi_test.js @@ -1,21 +1,23 @@ -const { +import { expect, databaseBuilder, knex, mockLearningContent, learningContentBuilder, sinon, -} = require('../../../test-helper'); -const useCases = require('../../../../lib/domain/usecases/index.js'); -const poleEmploiNotifier = require('../../../../lib/infrastructure/externals/pole-emploi/pole-emploi-notifier.js'); +} from '../../../test-helper.js'; + +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Integration | Domain | UseCases | send-shared-participation-results-to-pole-emploi', function () { let campaignParticipationId, userId, responseCode; + let poleEmploiNotifier; beforeEach(async function () { responseCode = Symbol('responseCode'); - sinon.stub(poleEmploiNotifier, 'notify'); - poleEmploiNotifier.notify.resolves({ isSuccessful: true, code: responseCode }); + poleEmploiNotifier = { + notify: sinon.stub(), + }; userId = databaseBuilder.factory.buildUser().id; databaseBuilder.factory.buildAuthenticationMethod.withPoleEmploiAsIdentityProvider({ userId }); @@ -27,7 +29,7 @@ describe('Integration | Domain | UseCases | send-shared-participation-results-to databaseBuilder.factory.buildCampaignSkill({ campaignId }); campaignParticipationId = databaseBuilder.factory.buildCampaignParticipation({ campaignId, userId }).id; databaseBuilder.factory.buildAssessment({ campaignParticipationId, userId }); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([]); + const learningContentObjects = learningContentBuilder.fromAreas([]); mockLearningContent(learningContentObjects); return databaseBuilder.commit(); }); @@ -36,9 +38,14 @@ describe('Integration | Domain | UseCases | send-shared-participation-results-to await knex('pole-emploi-sendings').delete(); }); - it('should notify pole emploi and save success of this notification', async function () { - await useCases.sendSharedParticipationResultsToPoleEmploi({ campaignParticipationId }); + it('should save success of this notification', async function () { + // given + poleEmploiNotifier.notify.resolves({ isSuccessful: true, code: responseCode }); + + // when + await usecases.sendSharedParticipationResultsToPoleEmploi({ campaignParticipationId, poleEmploiNotifier }); + // then const poleEmploiSendings = await knex('pole-emploi-sendings').where({ campaignParticipationId }); expect(poleEmploiSendings.length).to.equal(1); expect(poleEmploiSendings[0].responseCode).to.equal(responseCode.toString()); diff --git a/api/tests/integration/domain/usecases/simulate-flash-scoring_test.js b/api/tests/integration/domain/usecases/simulate-flash-scoring_test.js index 37c3d2d850e..264707aa0d5 100644 --- a/api/tests/integration/domain/usecases/simulate-flash-scoring_test.js +++ b/api/tests/integration/domain/usecases/simulate-flash-scoring_test.js @@ -1,9 +1,9 @@ -const { expect, mockLearningContent, domainBuilder } = require('../../../test-helper'); -const ScoringSimulationContext = require('../../../../lib/domain/models/ScoringSimulationContext'); -const ScoringSimulation = require('../../../../lib/domain/models/ScoringSimulation'); -const ScoringSimulationResult = require('../../../../lib/domain/models/ScoringSimulationResult'); -const usecases = require('../../../../lib/domain/usecases/'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); +import { expect, mockLearningContent, domainBuilder } from '../../../test-helper.js'; +import { ScoringSimulationContext } from '../../../../lib/domain/models/ScoringSimulationContext.js'; +import { ScoringSimulation } from '../../../../lib/domain/models/ScoringSimulation.js'; +import { ScoringSimulationResult } from '../../../../lib/domain/models/ScoringSimulationResult.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; describe('Integration | UseCases | simulateFlashScoring', function () { const locale = 'fr-fr'; diff --git a/api/tests/integration/domain/usecases/simulate-old-scoring_test.js b/api/tests/integration/domain/usecases/simulate-old-scoring_test.js index 90452194f2e..46a5faa2660 100644 --- a/api/tests/integration/domain/usecases/simulate-old-scoring_test.js +++ b/api/tests/integration/domain/usecases/simulate-old-scoring_test.js @@ -1,7 +1,7 @@ -const { expect, mockLearningContent, domainBuilder } = require('../../../test-helper'); -const ScoringSimulation = require('../../../../lib/domain/models/ScoringSimulation'); -const ScoringSimulationResult = require('../../../../lib/domain/models/ScoringSimulationResult'); -const usecases = require('../../../../lib/domain/usecases/'); +import { expect, mockLearningContent, domainBuilder } from '../../../test-helper.js'; +import { ScoringSimulation } from '../../../../lib/domain/models/ScoringSimulation.js'; +import { ScoringSimulationResult } from '../../../../lib/domain/models/ScoringSimulationResult.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Integration | UseCases | simulateOldScoring', function () { beforeEach(function () { diff --git a/api/tests/integration/domain/usecases/start-campaign-participation_test.js b/api/tests/integration/domain/usecases/start-campaign-participation_test.js index 178b179fd7c..ea7ddc41f5f 100644 --- a/api/tests/integration/domain/usecases/start-campaign-participation_test.js +++ b/api/tests/integration/domain/usecases/start-campaign-participation_test.js @@ -1,7 +1,6 @@ -const { expect, databaseBuilder, knex, mockLearningContent } = require('../../../test-helper'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); - -const usecases = require('../../../../lib/domain/usecases/'); +import { expect, databaseBuilder, knex, mockLearningContent } from '../../../test-helper.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Integration | UseCases | startCampaignParticipation', function () { afterEach(async function () { diff --git a/api/tests/integration/domain/usecases/start-writing-campaign-assessment-results-to-stream_test.js b/api/tests/integration/domain/usecases/start-writing-campaign-assessment-results-to-stream_test.js index 27279e79906..c6ef6fa300d 100644 --- a/api/tests/integration/domain/usecases/start-writing-campaign-assessment-results-to-stream_test.js +++ b/api/tests/integration/domain/usecases/start-writing-campaign-assessment-results-to-stream_test.js @@ -1,9 +1,11 @@ -const { PassThrough } = require('stream'); -const { expect, mockLearningContent, databaseBuilder, streamToPromise } = require('../../../test-helper'); +import stream from 'stream'; -const usecases = require('../../../../lib/domain/usecases/index.js'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +const { PassThrough } = stream; + +import { expect, mockLearningContent, databaseBuilder, streamToPromise } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; describe('Integration | Domain | Use Cases | start-writing-campaign-assessment-results-to-stream', function () { describe('#startWritingCampaignAssessmentResultsToStream', function () { diff --git a/api/tests/integration/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream_test.js b/api/tests/integration/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream_test.js index 97b76c1f7e5..5758f5416fb 100644 --- a/api/tests/integration/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream_test.js +++ b/api/tests/integration/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream_test.js @@ -1,15 +1,17 @@ -const { PassThrough } = require('stream'); -const { expect, mockLearningContent, databaseBuilder, streamToPromise } = require('../../../test-helper'); - -const startWritingCampaignProfilesCollectionResultsToStream = require('../../../../lib/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream'); - -const campaignRepository = require('../../../../lib/infrastructure/repositories/campaign-repository'); -const campaignParticipationRepository = require('../../../../lib/infrastructure/repositories/campaign-participation-repository'); -const competenceRepository = require('../../../../lib/infrastructure/repositories/competence-repository'); -const organizationRepository = require('../../../../lib/infrastructure/repositories/organization-repository'); -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); -const placementProfileService = require('../../../../lib/domain/services/placement-profile-service'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +import stream from 'stream'; + +const { PassThrough } = stream; + +import { expect, mockLearningContent, databaseBuilder, streamToPromise } from '../../../test-helper.js'; +import { startWritingCampaignProfilesCollectionResultsToStream } from '../../../../lib/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream.js'; + +import * as campaignRepository from '../../../../lib/infrastructure/repositories/campaign-repository.js'; +import * as campaignParticipationRepository from '../../../../lib/infrastructure/repositories/campaign-participation-repository.js'; +import * as competenceRepository from '../../../../lib/infrastructure/repositories/competence-repository.js'; +import * as organizationRepository from '../../../../lib/infrastructure/repositories/organization-repository.js'; +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; +import * as placementProfileService from '../../../../lib/domain/services/placement-profile-service.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; describe('Integration | Domain | Use Cases | start-writing-profiles-collection-campaign-results-to-stream', function () { describe('#startWritingCampaignProfilesCollectionResultsToStream', function () { diff --git a/api/tests/integration/domain/usecases/unblock-user-account_test.js b/api/tests/integration/domain/usecases/unblock-user-account_test.js index 4d99e697683..296ae324405 100644 --- a/api/tests/integration/domain/usecases/unblock-user-account_test.js +++ b/api/tests/integration/domain/usecases/unblock-user-account_test.js @@ -1,7 +1,6 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); - -const usecases = require('../../../../lib/domain/usecases/index.js'); -const UserLogin = require('../../../../lib/domain/models/UserLogin'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { UserLogin } from '../../../../lib/domain/models/UserLogin.js'; describe('Integration | UseCases | unblockUserAccount', function () { it('should reset failure count, temporary blocked until date and blocked at date', async function () { diff --git a/api/tests/integration/domain/usecases/update-campaign-details-management_test.js b/api/tests/integration/domain/usecases/update-campaign-details-management_test.js index b44ad67d1a9..e68f321415e 100644 --- a/api/tests/integration/domain/usecases/update-campaign-details-management_test.js +++ b/api/tests/integration/domain/usecases/update-campaign-details-management_test.js @@ -1,10 +1,10 @@ -const { expect, databaseBuilder, mockLearningContent, knex, catchErr } = require('../../../test-helper'); +import { expect, databaseBuilder, mockLearningContent, knex, catchErr } from '../../../test-helper.js'; -const campaignManagementRepository = require('../../../../lib/infrastructure/repositories/campaign-management-repository'); -const campaignValidator = require('../../../../lib/domain/validators/campaign-validator.js'); -const updateCampaignDetailsManagement = require('../../../../lib/domain/usecases/update-campaign-details-management'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); +import * as campaignManagementRepository from '../../../../lib/infrastructure/repositories/campaign-management-repository.js'; +import * as campaignValidator from '../../../../lib/domain/validators/campaign-validator.js'; +import { updateCampaignDetailsManagement } from '../../../../lib/domain/usecases/update-campaign-details-management.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; const { SHARED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/domain/usecases/update-certification-center-data-protection-officer-information_test.js b/api/tests/integration/domain/usecases/update-certification-center-data-protection-officer-information_test.js index bb4d29de564..c28b35329e4 100644 --- a/api/tests/integration/domain/usecases/update-certification-center-data-protection-officer-information_test.js +++ b/api/tests/integration/domain/usecases/update-certification-center-data-protection-officer-information_test.js @@ -1,7 +1,7 @@ -const { knex, expect, databaseBuilder } = require('../../../test-helper'); -const DataProtectionOfficer = require('../../../../lib/domain/models/DataProtectionOfficer'); -const updateCertificationCenterDataProtectionOfficerInformation = require('../../../../lib/domain/usecases/update-certification-center-data-protection-officer-information'); -const dataProtectionOfficerRepository = require('../../../../lib/infrastructure/repositories/data-protection-officer-repository'); +import { knex, expect, databaseBuilder } from '../../../test-helper.js'; +import { DataProtectionOfficer } from '../../../../lib/domain/models/DataProtectionOfficer.js'; +import { updateCertificationCenterDataProtectionOfficerInformation } from '../../../../lib/domain/usecases/update-certification-center-data-protection-officer-information.js'; +import * as dataProtectionOfficerRepository from '../../../../lib/infrastructure/repositories/data-protection-officer-repository.js'; describe('Integration | UseCases | update-certification-center-data-protection-officer-information', function () { afterEach(async function () { diff --git a/api/tests/integration/domain/usecases/update-certification-center_test.js b/api/tests/integration/domain/usecases/update-certification-center_test.js index 784ee9c7dc4..fcff69f7c89 100644 --- a/api/tests/integration/domain/usecases/update-certification-center_test.js +++ b/api/tests/integration/domain/usecases/update-certification-center_test.js @@ -1,9 +1,9 @@ -const { databaseBuilder, domainBuilder, expect, knex } = require('../../../test-helper'); -const CertificationCenterForAdmin = require('../../../../lib/domain/models/CertificationCenterForAdmin'); -const updateCertificationCenter = require('../../../../lib/domain/usecases/update-certification-center'); -const certificationCenterForAdminRepository = require('../../../../lib/infrastructure/repositories/certification-center-for-admin-repository'); -const complementaryCertificationHabilitationRepository = require('../../../../lib/infrastructure/repositories/complementary-certification-habilitation-repository'); -const dataProtectionOfficerRepository = require('../../../../lib/infrastructure/repositories/data-protection-officer-repository'); +import { databaseBuilder, domainBuilder, expect, knex } from '../../../test-helper.js'; +import { CertificationCenterForAdmin } from '../../../../lib/domain/models/CertificationCenterForAdmin.js'; +import { updateCertificationCenter } from '../../../../lib/domain/usecases/update-certification-center.js'; +import * as certificationCenterForAdminRepository from '../../../../lib/infrastructure/repositories/certification-center-for-admin-repository.js'; +import * as complementaryCertificationHabilitationRepository from '../../../../lib/infrastructure/repositories/complementary-certification-habilitation-repository.js'; +import * as dataProtectionOfficerRepository from '../../../../lib/infrastructure/repositories/data-protection-officer-repository.js'; describe('Integration | UseCases | update-certification-center', function () { afterEach(async function () { diff --git a/api/tests/integration/domain/usecases/update-membership_test.js b/api/tests/integration/domain/usecases/update-membership_test.js index 1c3ff66bdc5..da91e99682a 100644 --- a/api/tests/integration/domain/usecases/update-membership_test.js +++ b/api/tests/integration/domain/usecases/update-membership_test.js @@ -1,8 +1,8 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); +import { expect, databaseBuilder } from '../../../test-helper.js'; -const membershipRepository = require('../../../../lib/infrastructure/repositories/membership-repository'); -const Membership = require('../../../../lib/domain/models/Membership'); -const updateMembership = require('../../../../lib/domain/usecases/update-membership'); +import * as membershipRepository from '../../../../lib/infrastructure/repositories/membership-repository.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { updateMembership } from '../../../../lib/domain/usecases/update-membership.js'; describe('Integration | UseCases | update-membership', function () { it('should update membership', async function () { diff --git a/api/tests/integration/domain/usecases/update-organization-data-protection-officer-information_test.js b/api/tests/integration/domain/usecases/update-organization-data-protection-officer-information_test.js index 5cfabe912b2..349461b6d0d 100644 --- a/api/tests/integration/domain/usecases/update-organization-data-protection-officer-information_test.js +++ b/api/tests/integration/domain/usecases/update-organization-data-protection-officer-information_test.js @@ -1,7 +1,7 @@ -const { knex, expect, databaseBuilder } = require('../../../test-helper'); -const DataProtectionOfficer = require('../../../../lib/domain/models/DataProtectionOfficer'); -const updateOrganizationDataProtectionOfficerInformation = require('../../../../lib/domain/usecases/update-organization-data-protection-officer-information'); -const dataProtectionOfficerRepository = require('../../../../lib/infrastructure/repositories/data-protection-officer-repository'); +import { knex, expect, databaseBuilder } from '../../../test-helper.js'; +import { DataProtectionOfficer } from '../../../../lib/domain/models/DataProtectionOfficer.js'; +import { updateOrganizationDataProtectionOfficerInformation } from '../../../../lib/domain/usecases/update-organization-data-protection-officer-information.js'; +import * as dataProtectionOfficerRepository from '../../../../lib/infrastructure/repositories/data-protection-officer-repository.js'; describe('Integration | UseCases | update-organization-data-protection-officer-information', function () { afterEach(async function () { diff --git a/api/tests/integration/domain/usecases/update-user-details-for-administration_test.js b/api/tests/integration/domain/usecases/update-user-details-for-administration_test.js index 8fec78c5cc7..1350a2cdda2 100644 --- a/api/tests/integration/domain/usecases/update-user-details-for-administration_test.js +++ b/api/tests/integration/domain/usecases/update-user-details-for-administration_test.js @@ -1,11 +1,9 @@ -const { expect, catchErr, databaseBuilder } = require('../../../test-helper'); +import { expect, catchErr, databaseBuilder } from '../../../test-helper.js'; +import { AlreadyRegisteredEmailError, AlreadyRegisteredUsernameError } from '../../../../lib/domain/errors.js'; -const { AlreadyRegisteredEmailError, AlreadyRegisteredUsernameError } = require('../../../../lib/domain/errors'); - -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); -const UserDetailsForAdmin = require('../../../../lib/domain/models/UserDetailsForAdmin'); - -const updateUserDetailsForAdministration = require('../../../../lib/domain/usecases/update-user-details-for-administration'); +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; +import { UserDetailsForAdmin } from '../../../../lib/domain/models/UserDetailsForAdmin.js'; +import { updateUserDetailsForAdministration } from '../../../../lib/domain/usecases/update-user-details-for-administration.js'; describe('Integration | UseCases | updateUserDetailsForAdministration', function () { let userId; diff --git a/api/tests/integration/infrastructure/event-dispatcher-logger_test.js b/api/tests/integration/infrastructure/event-dispatcher-logger_test.js index 4bc88ed02d0..3a39f1f73ab 100644 --- a/api/tests/integration/infrastructure/event-dispatcher-logger_test.js +++ b/api/tests/integration/infrastructure/event-dispatcher-logger_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../test-helper'); -const EventDispatcherLogger = require('../../../lib/infrastructure/events/EventDispatcherLogger'); +import { expect, sinon } from '../../test-helper.js'; +import { EventDispatcherLogger } from '../../../lib/infrastructure/events/EventDispatcherLogger.js'; describe('Integration | Infrastructure | EventHandlerLogger', function () { context('when logging on event dispatch start is enabled', function () { diff --git a/api/tests/integration/infrastructure/event-dispatcher_test.js b/api/tests/integration/infrastructure/event-dispatcher_test.js index 6a240aa110c..6612d793a41 100644 --- a/api/tests/integration/infrastructure/event-dispatcher_test.js +++ b/api/tests/integration/infrastructure/event-dispatcher_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../test-helper'); -const EventDispatcher = require('../../../lib/infrastructure/events/EventDispatcher'); +import { expect, sinon } from '../../test-helper.js'; +import { EventDispatcher } from '../../../lib/infrastructure/events/EventDispatcher.js'; function getEventHandlerMock() { return sinon.stub(); diff --git a/api/tests/integration/infrastructure/jobs/JobQueue_test.js b/api/tests/integration/infrastructure/jobs/JobQueue_test.js index d82673db9de..a4eaa173682 100644 --- a/api/tests/integration/infrastructure/jobs/JobQueue_test.js +++ b/api/tests/integration/infrastructure/jobs/JobQueue_test.js @@ -1,7 +1,7 @@ -const { expect, knex } = require('../../../test-helper'); -const JobQueue = require('../../../../lib/infrastructure/jobs/JobQueue'); -const Job = require('../../../../lib/infrastructure/jobs/JobPgBoss'); -const PgBoss = require('pg-boss'); +import { expect, knex } from '../../../test-helper.js'; +import { JobQueue } from '../../../../lib/infrastructure/jobs/JobQueue.js'; +import { JobPgBoss as Job } from '../../../../lib/infrastructure/jobs/JobPgBoss.js'; +import PgBoss from 'pg-boss'; describe('Integration | Infrastructure | Jobs | JobQueue', function () { it('executes job when a job is added to the queue', async function () { diff --git a/api/tests/integration/infrastructure/jobs/campaign-result/ParticipationResultCalculationJob_test.js b/api/tests/integration/infrastructure/jobs/campaign-result/ParticipationResultCalculationJob_test.js index f78dee00d1b..67f51ddc5f3 100644 --- a/api/tests/integration/infrastructure/jobs/campaign-result/ParticipationResultCalculationJob_test.js +++ b/api/tests/integration/infrastructure/jobs/campaign-result/ParticipationResultCalculationJob_test.js @@ -1,5 +1,5 @@ -const { expect, knex } = require('../../../../test-helper'); -const ParticipationResultCalculationJob = require('../../../../../lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJob'); +import { expect, knex } from '../../../../test-helper.js'; +import { ParticipationResultCalculationJob } from '../../../../../lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJob.js'; describe('Integration | Infrastructure | Jobs | CampaignResult | ParticipationResultCalculation', function () { afterEach(async function () { diff --git a/api/tests/integration/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob_test.js b/api/tests/integration/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob_test.js index 81b95237674..8025807a25a 100644 --- a/api/tests/integration/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob_test.js +++ b/api/tests/integration/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob_test.js @@ -1,5 +1,5 @@ -const { expect, knex } = require('../../../../test-helper'); -const SendSharedParticipationResultsToPoleEmploiJob = require('../../../../../lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob'); +import { expect, knex } from '../../../../test-helper.js'; +import { SendSharedParticipationResultsToPoleEmploiJob } from '../../../../../lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob.js'; describe('Integration | Infrastructure | Jobs | CampaignResult | ParticipationResultCalculation', function () { afterEach(async function () { diff --git a/api/tests/integration/infrastructure/jobs/cpf-export/handlers/create-and-upload_test.js b/api/tests/integration/infrastructure/jobs/cpf-export/handlers/create-and-upload_test.js index ce26d1280fc..871e1d18ffc 100644 --- a/api/tests/integration/infrastructure/jobs/cpf-export/handlers/create-and-upload_test.js +++ b/api/tests/integration/infrastructure/jobs/cpf-export/handlers/create-and-upload_test.js @@ -1,16 +1,22 @@ -const { domainBuilder, expect, sinon } = require('../../../../../test-helper'); -const createAndUpload = require('../../../../../../lib/infrastructure/jobs/cpf-export/handlers/create-and-upload'); -const { createUnzip } = require('node:zlib'); -const fs = require('fs'); -const noop = require('lodash/noop'); -const proxyquire = require('proxyquire'); -const dayjs = require('dayjs'); -const utc = require('dayjs/plugin/utc'); -const timezone = require('dayjs/plugin/timezone'); +import { domainBuilder, expect, sinon } from '../../../../../test-helper.js'; +import { createAndUpload } from '../../../../../../lib/infrastructure/jobs/cpf-export/handlers/create-and-upload.js'; +import * as cpfCertificationXmlExportService from '../../../../../../lib/domain/services/cpf-certification-xml-export-service.js'; +import { createUnzip } from 'node:zlib'; + +import fs from 'fs'; +import lodash from 'lodash'; +const { noop } = lodash; +import dayjs from 'dayjs'; +import utc from 'dayjs/plugin/utc.js'; +import timezone from 'dayjs/plugin/timezone.js'; dayjs.extend(utc); dayjs.extend(timezone); -const { PassThrough } = require('stream'); +import stream from 'stream'; +const { PassThrough } = stream; + +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Integration | Infrastructure | jobs | cpf-export | create-and-upload', function () { let cpfCertificationResultRepository; @@ -18,11 +24,13 @@ describe('Integration | Infrastructure | jobs | cpf-export | create-and-upload', let clock; const expectedFileName = 'pix-cpf-export-20220102-114327.xml.gz'; let logger; + let uuidService; beforeEach(function () { const now = dayjs('2022-01-02T10:43:27Z').tz('Europe/Paris').toDate(); clock = sinon.useFakeTimers(now); logger = { error: noop, info: noop }; + uuidService = { v4: sinon.stub() }; }); afterEach(function () { @@ -49,14 +57,7 @@ describe('Integration | Infrastructure | jobs | cpf-export | create-and-upload', cpfCertificationResultRepository.findByBatchId.withArgs(batchId).resolves(cpfCertificationResults); - const cpfCertificationXmlExportService = proxyquire( - '../../../../../../lib/domain/services/cpf-certification-xml-export-service', - { - uuid: { - v4: () => 'xxx-yyy-zzz', - }, - } - ); + uuidService.v4.returns('xxx-yyy-zzz'); cpfExternalStorage.upload .withArgs({ @@ -77,6 +78,7 @@ describe('Integration | Infrastructure | jobs | cpf-export | create-and-upload', cpfCertificationXmlExportService, cpfExternalStorage, logger, + uuidService, }); // then diff --git a/api/tests/integration/infrastructure/knex-database-connection_test.js b/api/tests/integration/infrastructure/knex-database-connection_test.js index aa9fd42f17f..3d3d2a4dd73 100644 --- a/api/tests/integration/infrastructure/knex-database-connection_test.js +++ b/api/tests/integration/infrastructure/knex-database-connection_test.js @@ -1,10 +1,8 @@ -const { expect, databaseBuilder } = require('../../test-helper'); +import { expect, databaseBuilder } from '../../test-helper.js'; +import { knex, emptyAllTables } from '../../../db/knex-database-connection.js'; -const knexDatabaseConnection = require('../../../db/knex-database-connection'); -const knex = knexDatabaseConnection.knex; - -const { UserNotFoundError } = require('../../../lib/domain/errors'); -const userRepository = require('../../../lib/infrastructure/repositories/user-repository'); +import { UserNotFoundError } from '../../../lib/domain/errors.js'; +import * as userRepository from '../../../lib/infrastructure/repositories/user-repository.js'; describe('Integration | Infrastructure | knex-database-connection', function () { it('should connect to the database', async function () { @@ -21,7 +19,7 @@ describe('Integration | Infrastructure | knex-database-connection', function () await databaseBuilder.commit(); // when - await knexDatabaseConnection.emptyAllTables(); + await emptyAllTables(); // then await expect(userRepository.get(id)).to.be.rejectedWith(UserNotFoundError); diff --git a/api/tests/integration/infrastructure/knex-database-performance-monitoring_test.js b/api/tests/integration/infrastructure/knex-database-performance-monitoring_test.js index eaa1ebdebac..a464cec9a68 100644 --- a/api/tests/integration/infrastructure/knex-database-performance-monitoring_test.js +++ b/api/tests/integration/infrastructure/knex-database-performance-monitoring_test.js @@ -1,8 +1,7 @@ -const { expect, sinon } = require('../../test-helper'); -const knexDatabaseConnection = require('../../../db/knex-database-connection'); -const knex = knexDatabaseConnection.knex; -const { asyncLocalStorageForTests: asyncLocalStorage } = require('../../../lib/infrastructure/monitoring-tools.js'); -const config = require('../../../lib/config'); +import { expect, sinon } from '../../test-helper.js'; +import { knex } from '../../../db/knex-database-connection.js'; +import { asyncLocalStorage } from '../../../lib/infrastructure/monitoring-tools.js'; +import { config } from '../../../lib/config.js'; const selectQuery = knex.raw('SELECT 1 as value'); describe('Integration | Infrastructure | knex-database-performance-monitoring', function () { diff --git a/api/tests/integration/infrastructure/plugins/pino_test.js b/api/tests/integration/infrastructure/plugins/pino_test.js index 859add6e2e0..6441df28c26 100644 --- a/api/tests/integration/infrastructure/plugins/pino_test.js +++ b/api/tests/integration/infrastructure/plugins/pino_test.js @@ -1,9 +1,9 @@ -const split = require('split2'); -const writeStream = require('flush-write-stream'); -const config = require('../../../../lib/config'); -const { expect, HttpTestServer, generateValidRequestAuthorizationHeader, sinon } = require('../../../test-helper'); -const pinoPlugin = require('../../../../lib/infrastructure/plugins/pino'); -const monitoringTools = require('../../../../lib/infrastructure/monitoring-tools'); +import split from 'split2'; +import writeStream from 'flush-write-stream'; +import { config } from '../../../../lib/config.js'; +import { expect, HttpTestServer, generateValidRequestAuthorizationHeader, sinon } from '../../../test-helper.js'; +import * as pinoPlugin from '../../../../lib/infrastructure/plugins/pino.js'; +import { monitoringTools } from '../../../../lib/infrastructure/monitoring-tools.js'; function sink(func) { const result = split(JSON.parse); diff --git a/api/tests/integration/infrastructure/repositories/account-recovery-demand-repository_test.js b/api/tests/integration/infrastructure/repositories/account-recovery-demand-repository_test.js index 7ab2b2882c8..1dd9a2b9ce9 100644 --- a/api/tests/integration/infrastructure/repositories/account-recovery-demand-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/account-recovery-demand-repository_test.js @@ -1,9 +1,10 @@ -const { expect, knex, databaseBuilder, domainBuilder, catchErr } = require('../../../test-helper'); -const accountRecoveryDemandRepository = require('../../../../lib/infrastructure/repositories/account-recovery-demand-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const AccountRecoveryDemand = require('../../../../lib/domain/models/AccountRecoveryDemand'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const omit = require('lodash/omit'); +import { expect, knex, databaseBuilder, domainBuilder, catchErr } from '../../../test-helper.js'; +import * as accountRecoveryDemandRepository from '../../../../lib/infrastructure/repositories/account-recovery-demand-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { AccountRecoveryDemand } from '../../../../lib/domain/models/AccountRecoveryDemand.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import lodash from 'lodash'; +const { omit } = lodash; describe('Integration | Infrastructure | Repository | account-recovery-demand-repository', function () { afterEach(function () { diff --git a/api/tests/integration/infrastructure/repositories/admin-member-repository_test.js b/api/tests/integration/infrastructure/repositories/admin-member-repository_test.js index f20ae34fe73..d67c210c40d 100644 --- a/api/tests/integration/infrastructure/repositories/admin-member-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/admin-member-repository_test.js @@ -1,9 +1,12 @@ -const sinon = require('sinon'); -const { expect, databaseBuilder, knex, catchErr } = require('../../../test-helper'); -const { ROLES } = require('../../../../lib/domain/constants').PIX_ADMIN; -const adminMemberRepository = require('../../../../lib/infrastructure/repositories/admin-member-repository'); -const AdminMember = require('../../../../lib/domain/models/AdminMember'); -const { AdminMemberError } = require('../../../../lib/domain/errors'); +import sinon from 'sinon'; +import { expect, databaseBuilder, knex, catchErr } from '../../../test-helper.js'; +import { PIX_ADMIN } from '../../../../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; + +import * as adminMemberRepository from '../../../../lib/infrastructure/repositories/admin-member-repository.js'; +import { AdminMember } from '../../../../lib/domain/models/AdminMember.js'; +import { AdminMemberError } from '../../../../lib/domain/errors.js'; describe('Integration | Infrastructure | Repository | adminMemberRepository', function () { describe('#findAll', function () { diff --git a/api/tests/integration/infrastructure/repositories/answer-repository_test.js b/api/tests/integration/infrastructure/repositories/answer-repository_test.js index 5f675d67651..ac6aa01781a 100644 --- a/api/tests/integration/infrastructure/repositories/answer-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/answer-repository_test.js @@ -1,8 +1,8 @@ -const { expect, knex, domainBuilder, databaseBuilder, catchErr } = require('../../../test-helper'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const { ChallengeAlreadyAnsweredError, NotFoundError } = require('../../../../lib/domain/errors'); -const answerRepository = require('../../../../lib/infrastructure/repositories/answer-repository'); +import { expect, knex, domainBuilder, databaseBuilder, catchErr } from '../../../test-helper.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { ChallengeAlreadyAnsweredError, NotFoundError } from '../../../../lib/domain/errors.js'; +import * as answerRepository from '../../../../lib/infrastructure/repositories/answer-repository.js'; describe('Integration | Repository | answerRepository', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/area-repository_test.js b/api/tests/integration/infrastructure/repositories/area-repository_test.js index 722bdb4f653..a5e17ad6716 100644 --- a/api/tests/integration/infrastructure/repositories/area-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/area-repository_test.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const { expect, domainBuilder, mockLearningContent, catchErr } = require('../../../test-helper'); -const Area = require('../../../../lib/domain/models/Area'); -const areaRepository = require('../../../../lib/infrastructure/repositories/area-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import _ from 'lodash'; +import { expect, domainBuilder, mockLearningContent, catchErr } from '../../../test-helper.js'; +import { Area } from '../../../../lib/domain/models/Area.js'; +import * as areaRepository from '../../../../lib/infrastructure/repositories/area-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | area-repository', function () { describe('#list', function () { diff --git a/api/tests/integration/infrastructure/repositories/assessment-repository_test.js b/api/tests/integration/infrastructure/repositories/assessment-repository_test.js index f5ead258730..04331d0435c 100644 --- a/api/tests/integration/infrastructure/repositories/assessment-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/assessment-repository_test.js @@ -1,11 +1,11 @@ -const { expect, knex, databaseBuilder, domainBuilder, catchErr } = require('../../../test-helper'); -const _ = require('lodash'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const assessmentRepository = require('../../../../lib/infrastructure/repositories/assessment-repository'); -const Answer = require('../../../../lib/domain/models/Answer'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const AssessmentResult = require('../../../../lib/domain/models/AssessmentResult'); +import { expect, knex, databaseBuilder, domainBuilder, catchErr } from '../../../test-helper.js'; +import _ from 'lodash'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import * as assessmentRepository from '../../../../lib/infrastructure/repositories/assessment-repository.js'; +import { Answer } from '../../../../lib/domain/models/Answer.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { AssessmentResult } from '../../../../lib/domain/models/AssessmentResult.js'; describe('Integration | Infrastructure | Repositories | assessment-repository', function () { afterEach(async function () { diff --git a/api/tests/integration/infrastructure/repositories/assessment-result-repository_test.js b/api/tests/integration/infrastructure/repositories/assessment-result-repository_test.js index fa644bc2283..ddbc2b4e633 100644 --- a/api/tests/integration/infrastructure/repositories/assessment-result-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/assessment-result-repository_test.js @@ -1,8 +1,8 @@ -const { expect, knex, databaseBuilder, domainBuilder, catchErr } = require('../../../test-helper'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const AssessmentResult = require('../../../../lib/domain/models/AssessmentResult'); -const assessmentResultRepository = require('../../../../lib/infrastructure/repositories/assessment-result-repository'); -const { MissingAssessmentId } = require('../../../../lib/domain/errors'); +import { expect, knex, databaseBuilder, domainBuilder, catchErr } from '../../../test-helper.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { AssessmentResult } from '../../../../lib/domain/models/AssessmentResult.js'; +import * as assessmentResultRepository from '../../../../lib/infrastructure/repositories/assessment-result-repository.js'; +import { MissingAssessmentId } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | AssessmentResult', function () { describe('#save', function () { diff --git a/api/tests/integration/infrastructure/repositories/authentication-method-repository_test.js b/api/tests/integration/infrastructure/repositories/authentication-method-repository_test.js index 45c95a457a5..224628bca13 100644 --- a/api/tests/integration/infrastructure/repositories/authentication-method-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/authentication-method-repository_test.js @@ -1,9 +1,9 @@ -const { catchErr, databaseBuilder, domainBuilder, expect, knex, sinon } = require('../../../test-helper'); -const { AlreadyExistingEntityError, AuthenticationMethodNotFoundError } = require('../../../../lib/domain/errors'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); -const OidcIdentityProviders = require('../../../../lib/domain/constants/oidc-identity-providers'); -const authenticationMethodRepository = require('../../../../lib/infrastructure/repositories/authentication-method-repository'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +import { catchErr, databaseBuilder, domainBuilder, expect, knex, sinon } from '../../../test-helper.js'; +import { AlreadyExistingEntityError, AuthenticationMethodNotFoundError } from '../../../../lib/domain/errors.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; +import * as OidcIdentityProviders from '../../../../lib/domain/constants/oidc-identity-providers.js'; +import * as authenticationMethodRepository from '../../../../lib/infrastructure/repositories/authentication-method-repository.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; describe('Integration | Repository | AuthenticationMethod', function () { const hashedPassword = 'ABCDEF1234'; diff --git a/api/tests/integration/infrastructure/repositories/badge-acquisition-repository_test.js b/api/tests/integration/infrastructure/repositories/badge-acquisition-repository_test.js index 3ef10158c16..9dfa9f586e2 100644 --- a/api/tests/integration/infrastructure/repositories/badge-acquisition-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/badge-acquisition-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const _ = require('lodash'); -const badgeAcquisitionRepository = require('../../../../lib/infrastructure/repositories/badge-acquisition-repository'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import _ from 'lodash'; +import * as badgeAcquisitionRepository from '../../../../lib/infrastructure/repositories/badge-acquisition-repository.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; describe('Integration | Repository | Badge Acquisition', function () { describe('#createOrUpdate', function () { diff --git a/api/tests/integration/infrastructure/repositories/badge-criteria-repository_test.js b/api/tests/integration/infrastructure/repositories/badge-criteria-repository_test.js index d807058416a..88b834d8650 100644 --- a/api/tests/integration/infrastructure/repositories/badge-criteria-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/badge-criteria-repository_test.js @@ -1,7 +1,8 @@ -const { knex, expect, databaseBuilder } = require('../../../test-helper'); -const badgeCriteriaRepository = require('../../../../lib/infrastructure/repositories/badge-criteria-repository'); -const omit = require('lodash/omit'); -const BadgeCriterion = require('../../../../lib/domain/models/BadgeCriterion'); +import { knex, expect, databaseBuilder } from '../../../test-helper.js'; +import * as badgeCriteriaRepository from '../../../../lib/infrastructure/repositories/badge-criteria-repository.js'; +import lodash from 'lodash'; +const { omit } = lodash; +import { BadgeCriterion } from '../../../../lib/domain/models/BadgeCriterion.js'; describe('Integration | Repository | Badge Criteria Repository', function () { afterEach(async function () { diff --git a/api/tests/integration/infrastructure/repositories/badge-for-calculation-repository_test.js b/api/tests/integration/infrastructure/repositories/badge-for-calculation-repository_test.js index ac4d25bbae0..cb5295effcb 100644 --- a/api/tests/integration/infrastructure/repositories/badge-for-calculation-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/badge-for-calculation-repository_test.js @@ -1,12 +1,13 @@ -const { +import { expect, databaseBuilder, domainBuilder, mockLearningContent, learningContentBuilder, -} = require('../../../test-helper'); -const badgeForCalculationRepository = require('../../../../lib/infrastructure/repositories/badge-for-calculation-repository'); -const BadgeCriterion = require('../../../../lib/domain/models/BadgeCriterion'); +} from '../../../test-helper.js'; + +import * as badgeForCalculationRepository from '../../../../lib/infrastructure/repositories/badge-for-calculation-repository.js'; +import { BadgeCriterion } from '../../../../lib/domain/models/BadgeCriterion.js'; describe('Integration | Repository | BadgeForCalculation', function () { const campaignSkillsId = [ @@ -99,7 +100,7 @@ describe('Integration | Repository | BadgeForCalculation', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent(learningContent); + const learningContentObjects = learningContentBuilder(learningContent); mockLearningContent(learningContentObjects); targetProfileId = databaseBuilder.factory.buildTargetProfile().id; campaignId = databaseBuilder.factory.buildCampaign({ targetProfileId }).id; diff --git a/api/tests/integration/infrastructure/repositories/badge-repository_test.js b/api/tests/integration/infrastructure/repositories/badge-repository_test.js index 25b22a30163..b2b42805b48 100644 --- a/api/tests/integration/infrastructure/repositories/badge-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/badge-repository_test.js @@ -1,10 +1,11 @@ -const { expect, databaseBuilder, knex, catchErr } = require('../../../test-helper'); -const badgeRepository = require('../../../../lib/infrastructure/repositories/badge-repository'); -const Badge = require('../../../../lib/domain/models/Badge'); -const BadgeCriterion = require('../../../../lib/domain/models/BadgeCriterion'); -const SkillSet = require('../../../../lib/domain/models/SkillSet'); -const omit = require('lodash/omit'); -const { AlreadyExistingEntityError } = require('../../../../lib/domain/errors'); +import { expect, databaseBuilder, knex, catchErr } from '../../../test-helper.js'; +import * as badgeRepository from '../../../../lib/infrastructure/repositories/badge-repository.js'; +import { Badge } from '../../../../lib/domain/models/Badge.js'; +import { BadgeCriterion } from '../../../../lib/domain/models/BadgeCriterion.js'; +import { SkillSet } from '../../../../lib/domain/models/SkillSet.js'; +import lodash from 'lodash'; +const { omit } = lodash; +import { AlreadyExistingEntityError } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | Badge', function () { let targetProfileWithSkillSets; @@ -499,7 +500,7 @@ describe('Integration | Repository | Badge', function () { await databaseBuilder.commit(); // when - const isDeleted = await badgeRepository.delete(badgeId); + const isDeleted = await badgeRepository.remove(badgeId); // then expect(isDeleted).to.be.true; @@ -511,7 +512,7 @@ describe('Integration | Repository | Badge', function () { const badgeId = badgeWithSameTargetProfile_1.id; const badgeRowsCountBeforeDeletion = await knex('badges').where({ id: badgeId }).count(); // when - await badgeRepository.delete(badgeId); + await badgeRepository.remove(badgeId); const badgeRowsCountAfterDeletion = await knex('badges').where({ id: badgeId }).count(); // then @@ -525,7 +526,7 @@ describe('Integration | Repository | Badge', function () { const badgeId = badgeWithSameTargetProfile_1.id; // when - const isDeleted = await badgeRepository.delete(badgeId); + const isDeleted = await badgeRepository.remove(badgeId); // then const badge = await knex.select().from('badges').where({ id: badgeId }).first(); diff --git a/api/tests/integration/infrastructure/repositories/campaign-analysis-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-analysis-repository_test.js index ce3ce3681ad..af35697c060 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-analysis-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-analysis-repository_test.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const { expect, databaseBuilder, domainBuilder, knex } = require('../../../test-helper'); -const campaignAnalysisRepository = require('../../../../lib/infrastructure/repositories/campaign-analysis-repository'); -const CampaignAnalysis = require('../../../../lib/domain/read-models/CampaignAnalysis'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import _ from 'lodash'; +import { expect, databaseBuilder, domainBuilder, knex } from '../../../test-helper.js'; +import * as campaignAnalysisRepository from '../../../../lib/infrastructure/repositories/campaign-analysis-repository.js'; +import { CampaignAnalysis } from '../../../../lib/domain/read-models/CampaignAnalysis.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED, SHARED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/infrastructure/repositories/campaign-assessment-participation-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-assessment-participation-repository_test.js index 07085caf94a..3e5f22bae24 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-assessment-participation-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-assessment-participation-repository_test.js @@ -1,10 +1,10 @@ -const { expect, databaseBuilder, mockLearningContent, knex, catchErr } = require('../../../test-helper'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const CampaignAssessmentParticipation = require('../../../../lib/domain/read-models/CampaignAssessmentParticipation'); -const campaignAssessmentParticipationRepository = require('../../../../lib/infrastructure/repositories/campaign-assessment-participation-repository'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, databaseBuilder, mockLearningContent, knex, catchErr } from '../../../test-helper.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { CampaignAssessmentParticipation } from '../../../../lib/domain/read-models/CampaignAssessmentParticipation.js'; +import * as campaignAssessmentParticipationRepository from '../../../../lib/infrastructure/repositories/campaign-assessment-participation-repository.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; const { STARTED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/infrastructure/repositories/campaign-assessment-participation-result-list-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-assessment-participation-result-list-repository_test.js index c0989578b7f..6e727b5f027 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-assessment-participation-result-list-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-assessment-participation-result-list-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, knex, mockLearningContent, learningContentBuilder } = require('../../../test-helper'); -const campaignAssessmentParticipationResultListRepository = require('../../../../lib/infrastructure/repositories/campaign-assessment-participation-result-list-repository'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, databaseBuilder, knex, mockLearningContent, learningContentBuilder } from '../../../test-helper.js'; +import * as campaignAssessmentParticipationResultListRepository from '../../../../lib/infrastructure/repositories/campaign-assessment-participation-result-list-repository.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED } = CampaignParticipationStatuses; @@ -55,7 +55,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -110,7 +110,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -156,7 +156,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -213,7 +213,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -261,7 +261,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -307,7 +307,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -365,7 +365,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); // when @@ -408,7 +408,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -523,7 +523,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); // when @@ -568,7 +568,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); it('returns participants which have one badge', async function () { @@ -721,7 +721,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); @@ -1007,7 +1007,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); // when @@ -1046,7 +1046,7 @@ describe('Integration | Repository | Campaign Assessment Participation Result Li ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/integration/infrastructure/repositories/campaign-assessment-participation-result-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-assessment-participation-result-repository_test.js index cc1ddbb56d4..a75668ba6be 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-assessment-participation-result-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-assessment-participation-result-repository_test.js @@ -1,8 +1,11 @@ -const { expect, databaseBuilder, mockLearningContent, knex, catchErr } = require('../../../test-helper'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const campaignAssessmentParticipationResultRepository = require('../../../../lib/infrastructure/repositories/campaign-assessment-participation-result-repository'); -const { ENGLISH_SPOKEN, FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, databaseBuilder, mockLearningContent, knex, catchErr } from '../../../test-helper.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import * as campaignAssessmentParticipationResultRepository from '../../../../lib/infrastructure/repositories/campaign-assessment-participation-result-repository.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { ENGLISH_SPOKEN, FRENCH_SPOKEN } = LOCALE; + +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | Campaign Assessment Participation Result', function () { describe('#getByCampaignIdAndCampaignParticipationId', function () { diff --git a/api/tests/integration/infrastructure/repositories/campaign-collective-result-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-collective-result-repository_test.js index 9f134889996..4f62e4b2e8c 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-collective-result-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-collective-result-repository_test.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const { expect, databaseBuilder, domainBuilder, knex } = require('../../../test-helper'); -const campaignCollectiveResultRepository = require('../../../../lib/infrastructure/repositories/campaign-collective-result-repository'); -const CampaignCollectiveResult = require('../../../../lib/domain/read-models/CampaignCollectiveResult'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import _ from 'lodash'; +import { expect, databaseBuilder, domainBuilder, knex } from '../../../test-helper.js'; +import * as campaignCollectiveResultRepository from '../../../../lib/infrastructure/repositories/campaign-collective-result-repository.js'; +import { CampaignCollectiveResult } from '../../../../lib/domain/read-models/CampaignCollectiveResult.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/infrastructure/repositories/campaign-creator-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-creator-repository_test.js index 296ec862178..7fd9ff118cd 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-creator-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-creator-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, catchErr } = require('../../../test-helper'); -const campaignCreatorRepository = require('../../../../lib/infrastructure/repositories/campaign-creator-repository'); -const { UserNotAuthorizedToCreateCampaignError } = require('../../../../lib/domain/errors'); +import { expect, databaseBuilder, catchErr } from '../../../test-helper.js'; +import * as campaignCreatorRepository from '../../../../lib/infrastructure/repositories/campaign-creator-repository.js'; +import { UserNotAuthorizedToCreateCampaignError } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | CampaignCreatorRepository', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/campaign-management-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-management-repository_test.js index b189f20dbef..83c1e90758e 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-management-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-management-repository_test.js @@ -1,9 +1,9 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const campaignManagementRepository = require('../../../../lib/infrastructure/repositories/campaign-management-repository'); -const _ = require('lodash'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const { knex } = require('../../../../lib/infrastructure/bookshelf'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as campaignManagementRepository from '../../../../lib/infrastructure/repositories/campaign-management-repository.js'; +import _ from 'lodash'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { knex } from '../../../../lib/infrastructure/bookshelf.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED, TO_SHARE, STARTED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/infrastructure/repositories/campaign-participant-activity-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-participant-activity-repository_test.js index e8835b7fb1e..047453588ab 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-participant-activity-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-participant-activity-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const campaignParticipantActivityRepository = require('../../../../lib/infrastructure/repositories/campaign-participant-activity-repository'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { campaignParticipantActivityRepository } from '../../../../lib/infrastructure/repositories/campaign-participant-activity-repository.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED, SHARED, TO_SHARE } = CampaignParticipationStatuses; diff --git a/api/tests/integration/infrastructure/repositories/campaign-participant-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-participant-repository_test.js index 21ff234ee88..42d14e0f3be 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-participant-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-participant-repository_test.js @@ -1,11 +1,12 @@ -const { expect, databaseBuilder, mockLearningContent, catchErr } = require('../../../test-helper'); -const { knex } = require('../../../../db/knex-database-connection'); -const campaignParticipantRepository = require('../../../../lib/infrastructure/repositories/campaign-participant-repository'); -const CampaignParticipant = require('../../../../lib/domain/models/CampaignParticipant'); -const CampaignToStartParticipation = require('../../../../lib/domain/models/CampaignToStartParticipation'); -const pick = require('lodash/pick'); -const { AlreadyExistingCampaignParticipationError, NotFoundError } = require('../../../../lib/domain/errors'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +import { expect, databaseBuilder, mockLearningContent, catchErr } from '../../../test-helper.js'; +import { knex } from '../../../../db/knex-database-connection.js'; +import * as campaignParticipantRepository from '../../../../lib/infrastructure/repositories/campaign-participant-repository.js'; +import { CampaignParticipant } from '../../../../lib/domain/models/CampaignParticipant.js'; +import { CampaignToStartParticipation } from '../../../../lib/domain/models/CampaignToStartParticipation.js'; +import lodash from 'lodash'; +const { pick } = lodash; +import { AlreadyExistingCampaignParticipationError, NotFoundError } from '../../../../lib/domain/errors.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; const campaignParticipationDBAttributes = [ 'id', 'campaignId', diff --git a/api/tests/integration/infrastructure/repositories/campaign-participation-info-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-participation-info-repository_test.js index bc328230098..03dbf67a5b3 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-participation-info-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-participation-info-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const campaignParticipationInfoRepository = require('../../../../lib/infrastructure/repositories/campaign-participation-info-repository'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import * as campaignParticipationInfoRepository from '../../../../lib/infrastructure/repositories/campaign-participation-info-repository.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/infrastructure/repositories/campaign-participation-overview-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-participation-overview-repository_test.js index 89131c0331d..523e8d4f175 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-participation-overview-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-participation-overview-repository_test.js @@ -1,16 +1,17 @@ -const { +import { expect, databaseBuilder, mockLearningContent, learningContentBuilder, domainBuilder, -} = require('../../../test-helper'); +} from '../../../test-helper.js'; + const { campaignParticipationOverviewFactory } = databaseBuilder.factory; -const Assessment = require('../../../../lib/domain/models/Assessment'); -const campaignParticipationOverviewRepository = require('../../../../lib/infrastructure/repositories/campaign-participation-overview-repository'); -const _ = require('lodash'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import * as campaignParticipationOverviewRepository from '../../../../lib/infrastructure/repositories/campaign-participation-overview-repository.js'; +import _ from 'lodash'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; let userId; @@ -39,7 +40,7 @@ describe('Integration | Repository | Campaign Participation Overview', function ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); targetProfile = databaseBuilder.factory.buildTargetProfile(); databaseBuilder.factory.buildStage({ targetProfileId: targetProfile.id }); diff --git a/api/tests/integration/infrastructure/repositories/campaign-participation-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-participation-repository_test.js index ec43581d8cc..3bb21c8b6d9 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-participation-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-participation-repository_test.js @@ -1,13 +1,13 @@ -const _ = require('lodash'); -const { sinon, expect, knex, databaseBuilder, catchErr } = require('../../../test-helper'); -const Campaign = require('../../../../lib/domain/models/Campaign'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const CampaignParticipation = require('../../../../lib/domain/models/CampaignParticipation'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); -const campaignParticipationRepository = require('../../../../lib/infrastructure/repositories/campaign-participation-repository'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import _ from 'lodash'; +import { sinon, expect, knex, databaseBuilder, catchErr } from '../../../test-helper.js'; +import { Campaign } from '../../../../lib/domain/models/Campaign.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { CampaignParticipation } from '../../../../lib/domain/models/CampaignParticipation.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import * as campaignParticipationRepository from '../../../../lib/infrastructure/repositories/campaign-participation-repository.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; const { STARTED, SHARED, TO_SHARE } = CampaignParticipationStatuses; @@ -1351,7 +1351,7 @@ describe('Integration | Repository | Campaign Participation', function () { campaignParticipation.deletedBy = ownerId; await DomainTransaction.execute((domainTransaction) => { - return campaignParticipationRepository.delete({ + return campaignParticipationRepository.remove({ id: campaignParticipation.id, deletedAt: campaignParticipation.deletedAt, deletedBy: campaignParticipation.deletedBy, diff --git a/api/tests/integration/infrastructure/repositories/campaign-participation-result-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-participation-result-repository_test.js index 1b52af04550..80abdbde946 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-participation-result-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-participation-result-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, mockLearningContent } = require('../../../test-helper'); -const campaignParticipationResultRepository = require('../../../../lib/infrastructure/repositories/campaign-participation-result-repository'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, databaseBuilder, mockLearningContent } from '../../../test-helper.js'; +import { campaignParticipationResultRepository } from '../../../../lib/infrastructure/repositories/campaign-participation-result-repository.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/infrastructure/repositories/campaign-participations-stats-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-participations-stats-repository_test.js index ee3c4c8f940..71ae106ba1e 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-participations-stats-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-participations-stats-repository_test.js @@ -1,6 +1,6 @@ -const campaignParticipationsStatsRepository = require('../../../../lib/infrastructure/repositories/campaign-participations-stats-repository'); -const { expect, databaseBuilder } = require('../../../test-helper'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { CampaignParticipationsStatsRepository as campaignParticipationsStatsRepository } from '../../../../lib/infrastructure/repositories/campaign-participations-stats-repository.js'; +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/infrastructure/repositories/campaign-profile-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-profile-repository_test.js index 217623453b5..5e57c35f435 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-profile-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-profile-repository_test.js @@ -1,8 +1,9 @@ -const { expect, databaseBuilder, mockLearningContent, catchErr } = require('../../../test-helper'); -const CampaignProfileRepository = require('../../../../lib/infrastructure/repositories/campaign-profile-repository'); -const { PIX_COUNT_BY_LEVEL } = require('../../../../lib/domain/constants'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const { ENGLISH_SPOKEN, FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +import { expect, databaseBuilder, mockLearningContent, catchErr } from '../../../test-helper.js'; +import * as CampaignProfileRepository from '../../../../lib/infrastructure/repositories/campaign-profile-repository.js'; +import { PIX_COUNT_BY_LEVEL, LOCALE } from '../../../../lib/domain/constants.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; + +const { ENGLISH_SPOKEN, FRENCH_SPOKEN } = LOCALE; describe('Integration | Repository | CampaignProfileRepository', function () { const locale = FRENCH_SPOKEN; diff --git a/api/tests/integration/infrastructure/repositories/campaign-profiles-collection-participation-summary-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-profiles-collection-participation-summary-repository_test.js index 3a0befa96f4..3379c4af059 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-profiles-collection-participation-summary-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-profiles-collection-participation-summary-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, mockLearningContent, knex } = require('../../../test-helper'); -const CampaignProfilesCollectionParticipationSummary = require('../../../../lib/domain/read-models/CampaignProfilesCollectionParticipationSummary'); -const campaignProfilesCollectionParticipationSummaryRepository = require('../../../../lib/infrastructure/repositories/campaign-profiles-collection-participation-summary-repository'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, databaseBuilder, mockLearningContent, knex } from '../../../test-helper.js'; +import { CampaignProfilesCollectionParticipationSummary } from '../../../../lib/domain/read-models/CampaignProfilesCollectionParticipationSummary.js'; +import * as campaignProfilesCollectionParticipationSummaryRepository from '../../../../lib/infrastructure/repositories/campaign-profiles-collection-participation-summary-repository.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/infrastructure/repositories/campaign-report-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-report-repository_test.js index 5590a1b2e2b..0398252d2ab 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-report-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-report-repository_test.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const { expect, databaseBuilder, catchErr, mockLearningContent } = require('../../../test-helper'); -const campaignReportRepository = require('../../../../lib/infrastructure/repositories/campaign-report-repository'); -const CampaignReport = require('../../../../lib/domain/read-models/CampaignReport'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import _ from 'lodash'; +import { expect, databaseBuilder, catchErr, mockLearningContent } from '../../../test-helper.js'; +import * as campaignReportRepository from '../../../../lib/infrastructure/repositories/campaign-report-repository.js'; +import { CampaignReport } from '../../../../lib/domain/read-models/CampaignReport.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED, SHARED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/infrastructure/repositories/campaign-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-repository_test.js index 36a117d6d1c..58167f98b42 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-repository_test.js @@ -1,4 +1,4 @@ -const { +import { expect, domainBuilder, databaseBuilder, @@ -6,13 +6,13 @@ const { mockLearningContent, sinon, catchErr, -} = require('../../../test-helper'); -const campaignRepository = require('../../../../lib/infrastructure/repositories/campaign-repository'); -const skillRepository = require('../../../../lib/infrastructure/repositories/skill-repository'); -const Campaign = require('../../../../lib/domain/models/Campaign'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const _ = require('lodash'); +} from '../../../test-helper.js'; + +import * as campaignRepository from '../../../../lib/infrastructure/repositories/campaign-repository.js'; +import { Campaign } from '../../../../lib/domain/models/Campaign.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import _ from 'lodash'; describe('Integration | Repository | Campaign', function () { describe('#isCodeAvailable', function () { @@ -277,8 +277,9 @@ describe('Integration | Repository | Campaign', function () { it('should not save anything if something goes wrong between campaign creation and skills computation', async function () { // given - const findActiveStub = sinon.stub(skillRepository, 'findActiveByTubeId'); - findActiveStub.rejects(new Error('Forcing rollback')); + const skillRepository = { + findActiveByTubeId: sinon.stub().rejects(new Error('Forcing rollback')), + }; const learningContent = { areas: [{ id: 'recArea1', competenceIds: ['recCompetence1'] }], competences: [ @@ -327,7 +328,7 @@ describe('Integration | Repository | Campaign', function () { }; // when - await catchErr(campaignRepository.save)(campaignToSave); + await catchErr(campaignRepository.save)(campaignToSave, { skillRepository }); // then const skillIds = await knex('campaign_skills').pluck('skillId'); diff --git a/api/tests/integration/infrastructure/repositories/campaign-to-join-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign-to-join-repository_test.js index 43706d11ac2..463e4a8a33c 100644 --- a/api/tests/integration/infrastructure/repositories/campaign-to-join-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign-to-join-repository_test.js @@ -1,9 +1,9 @@ -const { expect, databaseBuilder, catchErr } = require('../../../test-helper'); -const campaignToJoinRepository = require('../../../../lib/infrastructure/repositories/campaign-to-join-repository'); -const CampaignToJoin = require('../../../../lib/domain/read-models/CampaignToJoin'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const OidcIdentityProviders = require('../../../../lib/domain/constants/oidc-identity-providers'); +import { expect, databaseBuilder, catchErr } from '../../../test-helper.js'; +import * as campaignToJoinRepository from '../../../../lib/infrastructure/repositories/campaign-to-join-repository.js'; +import { CampaignToJoin } from '../../../../lib/domain/read-models/CampaignToJoin.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import * as OidcIdentityProviders from '../../../../lib/domain/constants/oidc-identity-providers.js'; describe('Integration | Repository | CampaignToJoin', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/campaign/campaign-for-archiving-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign/campaign-for-archiving-repository_test.js index 98fa5cbea91..96f1635d4cc 100644 --- a/api/tests/integration/infrastructure/repositories/campaign/campaign-for-archiving-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign/campaign-for-archiving-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, catchErr } = require('../../../../test-helper'); -const campaignForArchivingRepository = require('../../../../../lib/infrastructure/repositories/campaign/campaign-for-archiving-repository'); -const Campaign = require('../../../../../lib/domain/models/CampaignForArchiving'); -const { NotFoundError, UserNotFoundError } = require('../../../../../lib/domain/errors'); +import { expect, databaseBuilder, catchErr } from '../../../../test-helper.js'; +import * as campaignForArchivingRepository from '../../../../../lib/infrastructure/repositories/campaign/campaign-for-archiving-repository.js'; +import { CampaignForArchiving as Campaign } from '../../../../../lib/domain/models/CampaignForArchiving.js'; +import { NotFoundError, UserNotFoundError } from '../../../../../lib/domain/errors.js'; describe('Integration | Infrastructure | Repository | campaign-for-archiving-repository', function () { describe('#save', function () { diff --git a/api/tests/integration/infrastructure/repositories/campaign/target-profile-for-specifier-repository_test.js b/api/tests/integration/infrastructure/repositories/campaign/target-profile-for-specifier-repository_test.js index f84522ee0fd..d1354dac444 100644 --- a/api/tests/integration/infrastructure/repositories/campaign/target-profile-for-specifier-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaign/target-profile-for-specifier-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder } = require('../../../../test-helper'); -const TargetProfileForSpecifierRepository = require('../../../../../lib/infrastructure/repositories/campaign/target-profile-for-specifier-repository'); -const TargetProfileForSpecifier = require('../../../../../lib/domain/read-models/campaign/TargetProfileForSpecifier'); -const { categories } = require('../../../../../lib/domain/models/TargetProfile'); +import { expect, databaseBuilder } from '../../../../test-helper.js'; +import * as TargetProfileForSpecifierRepository from '../../../../../lib/infrastructure/repositories/campaign/target-profile-for-specifier-repository.js'; +import { TargetProfileForSpecifier } from '../../../../../lib/domain/read-models/campaign/TargetProfileForSpecifier.js'; +import { categories } from '../../../../../lib/domain/models/TargetProfile.js'; describe('Integration | Infrastructure | Repository | target-profile-for-campaign-repository', function () { describe('#availableForOrganization', function () { diff --git a/api/tests/integration/infrastructure/repositories/campaigns-administration/campaign-repository_test.js b/api/tests/integration/infrastructure/repositories/campaigns-administration/campaign-repository_test.js index 54ff4689d06..b248d27bd41 100644 --- a/api/tests/integration/infrastructure/repositories/campaigns-administration/campaign-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/campaigns-administration/campaign-repository_test.js @@ -1,5 +1,5 @@ -const { expect, knex, databaseBuilder, sinon } = require('../../../../test-helper'); -const campaignRepository = require('../../../../../lib/infrastructure/repositories/campaigns-administration/campaign-repository'); +import { expect, knex, databaseBuilder, sinon } from '../../../../test-helper.js'; +import * as campaignRepository from '../../../../../lib/infrastructure/repositories/campaigns-administration/campaign-repository.js'; describe('Integration | Infrastructure | Repository | Campaign Administration | campaign-repository', function () { let clock; diff --git a/api/tests/integration/infrastructure/repositories/certifiable-badge-acquisition-repository_test.js b/api/tests/integration/infrastructure/repositories/certifiable-badge-acquisition-repository_test.js index 3f76b7724d1..2b5e405f768 100644 --- a/api/tests/integration/infrastructure/repositories/certifiable-badge-acquisition-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certifiable-badge-acquisition-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, domainBuilder } = require('../../../test-helper'); -const certifiableBadgeAcquisitionRepository = require('../../../../lib/infrastructure/repositories/certifiable-badge-acquisition-repository'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +import { expect, databaseBuilder, domainBuilder } from '../../../test-helper.js'; +import * as certifiableBadgeAcquisitionRepository from '../../../../lib/infrastructure/repositories/certifiable-badge-acquisition-repository.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; describe('Integration | Repository | Certifiable Badge Acquisition', function () { describe('#findHighestCertifiable', function () { diff --git a/api/tests/integration/infrastructure/repositories/certifiable-profile-for-learning-content-repository_test.js b/api/tests/integration/infrastructure/repositories/certifiable-profile-for-learning-content-repository_test.js index 51ada56d825..9cc80b456e9 100644 --- a/api/tests/integration/infrastructure/repositories/certifiable-profile-for-learning-content-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certifiable-profile-for-learning-content-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, domainBuilder } = require('../../../test-helper'); -const certifiableProfileForLearningContentRepository = require('../../../../lib/infrastructure/repositories/certifiable-profile-for-learning-content-repository'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const CertifiableProfileForLearningContent = require('../../../../lib/domain/models/CertifiableProfileForLearningContent'); +import { expect, databaseBuilder, domainBuilder } from '../../../test-helper.js'; +import * as certifiableProfileForLearningContentRepository from '../../../../lib/infrastructure/repositories/certifiable-profile-for-learning-content-repository.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { CertifiableProfileForLearningContent } from '../../../../lib/domain/models/CertifiableProfileForLearningContent.js'; describe('Integration | Repository | certifiable-profile-for-learning-content', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/certificate-repository_attestation_test.js b/api/tests/integration/infrastructure/repositories/certificate-repository_attestation_test.js index 301cda6d950..f7858104366 100644 --- a/api/tests/integration/infrastructure/repositories/certificate-repository_attestation_test.js +++ b/api/tests/integration/infrastructure/repositories/certificate-repository_attestation_test.js @@ -1,14 +1,15 @@ -const { +import { expect, databaseBuilder, domainBuilder, catchErr, learningContentBuilder, mockLearningContent, -} = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const certificationRepository = require('../../../../lib/infrastructure/repositories/certificate-repository'); -const { status } = require('../../../../lib/domain/models/AssessmentResult'); +} from '../../../test-helper.js'; + +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import * as certificationRepository from '../../../../lib/infrastructure/repositories/certificate-repository.js'; +import { status } from '../../../../lib/domain/models/AssessmentResult.js'; describe('Integration | Infrastructure | Repository | Certification Attestation', function () { const minimalLearningContent = [ @@ -189,7 +190,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' it('should return a CertificationAttestation', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); const certificationAttestationData = { @@ -301,9 +302,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' framework: null, }); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([ - { ...area1, title_i18n: { fr: area1.title } }, - ]); + const learningContentObjects = learningContentBuilder.fromAreas([{ ...area1, title_i18n: { fr: area1.title } }]); mockLearningContent(learningContentObjects); // when @@ -320,7 +319,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' it('should take into account the latest validated assessment result of a student', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); const certificationAttestationData = { id: 123, @@ -365,7 +364,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' context('acquired certifiable badges', function () { it(`should get the certified badge images when the certifications were acquired`, async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); const certificationAttestationData = { id: 123, @@ -478,7 +477,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' describe('#findByDivisionForScoIsManagingStudentsOrganization', function () { it('should return an empty array when there are no certification attestations for given organization', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); databaseBuilder.factory.buildOrganization({ id: 123, type: 'SCO', isManagingStudents: true }); databaseBuilder.factory.buildOrganization({ id: 456, type: 'SCO', isManagingStudents: true }); @@ -527,7 +526,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' it('should return an empty array when the organization is not SCO IS MANAGING STUDENTS', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); databaseBuilder.factory.buildOrganization({ id: 123, type: 'SUP', isManagingStudents: false }); const certificationAttestationData = { @@ -575,7 +574,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' it('should return an empty array when the certification does not belong to an organization learner in the right division', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); databaseBuilder.factory.buildOrganization({ id: 123, type: 'SCO', isManagingStudents: true }); const certificationAttestationData = { @@ -623,7 +622,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' it('should not return certifications that have no validated assessment-result', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); databaseBuilder.factory.buildOrganization({ id: 123, type: 'SCO', isManagingStudents: true }); const certificationAttestationData = { @@ -671,7 +670,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' it('should not return cancelled certifications', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); databaseBuilder.factory.buildOrganization({ id: 123, type: 'SCO', isManagingStudents: true }); const certificationAttestationData = { @@ -719,7 +718,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' it('should not return non published certifications', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); databaseBuilder.factory.buildOrganization({ id: 123, type: 'SCO', isManagingStudents: true }); const certificationAttestationData = { @@ -767,7 +766,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' it('should return an array of certification attestations ordered by last name, first name', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); databaseBuilder.factory.buildOrganization({ id: 123, type: 'SCO', isManagingStudents: true }); const certificationAttestationDataA = { @@ -891,7 +890,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' it('should ignore disabled shooling-registrations', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); databaseBuilder.factory.buildOrganization({ id: 123, type: 'SCO', isManagingStudents: true }); const certificationAttestationDataA = { @@ -1013,7 +1012,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' describe('when the last certification is rejected', function () { it('should take into account the latest valid certification', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); databaseBuilder.factory.buildOrganization({ id: 123, type: 'SCO', isManagingStudents: true }); const certificationAttestationData = { @@ -1096,7 +1095,7 @@ describe('Integration | Infrastructure | Repository | Certification Attestation' it('should take into account the latest certification of an organization learner', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); databaseBuilder.factory.buildOrganization({ id: 123, type: 'SCO', isManagingStudents: true }); const organizationLearnerId = databaseBuilder.factory.buildOrganizationLearner({ diff --git a/api/tests/integration/infrastructure/repositories/certificate-repository_private_test.js b/api/tests/integration/infrastructure/repositories/certificate-repository_private_test.js index 3641a1ca5d5..af894b37d68 100644 --- a/api/tests/integration/infrastructure/repositories/certificate-repository_private_test.js +++ b/api/tests/integration/infrastructure/repositories/certificate-repository_private_test.js @@ -1,13 +1,14 @@ -const { +import { expect, databaseBuilder, domainBuilder, catchErr, learningContentBuilder, mockLearningContent, -} = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const certificateRepository = require('../../../../lib/infrastructure/repositories/certificate-repository'); +} from '../../../test-helper.js'; + +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import * as certificateRepository from '../../../../lib/infrastructure/repositories/certificate-repository.js'; describe('Integration | Infrastructure | Repository | Certificate_private', function () { const minimalLearningContent = [ @@ -247,7 +248,7 @@ describe('Integration | Infrastructure | Repository | Certificate_private', func it('should return a PrivateCertificate', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); const userId = databaseBuilder.factory.buildUser().id; @@ -349,7 +350,7 @@ describe('Integration | Infrastructure | Repository | Certificate_private', func framework: null, }); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([ + const learningContentObjects = learningContentBuilder.fromAreas([ { ...area1, title_i18n: { fr: area1.title, en: 'title en' }, @@ -460,7 +461,7 @@ describe('Integration | Infrastructure | Repository | Certificate_private', func framework: null, }); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([ + const learningContentObjects = learningContentBuilder.fromAreas([ { ...area1, title_i18n: { fr: area1.title, en: 'title en' }, @@ -525,7 +526,7 @@ describe('Integration | Infrastructure | Repository | Certificate_private', func hasExternalJury: true, }).id; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); const userId = databaseBuilder.factory.buildUser().id; diff --git a/api/tests/integration/infrastructure/repositories/certificate-repository_shareable_test.js b/api/tests/integration/infrastructure/repositories/certificate-repository_shareable_test.js index 97ab3ecb7a6..d586c22179f 100644 --- a/api/tests/integration/infrastructure/repositories/certificate-repository_shareable_test.js +++ b/api/tests/integration/infrastructure/repositories/certificate-repository_shareable_test.js @@ -1,13 +1,14 @@ -const { +import { expect, databaseBuilder, domainBuilder, catchErr, learningContentBuilder, mockLearningContent, -} = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const certificateRepository = require('../../../../lib/infrastructure/repositories/certificate-repository'); +} from '../../../test-helper.js'; + +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import * as certificateRepository from '../../../../lib/infrastructure/repositories/certificate-repository.js'; describe('Integration | Infrastructure | Repository | Shareable Certificate', function () { const minimalLearningContent = [ @@ -304,7 +305,7 @@ describe('Integration | Infrastructure | Repository | Shareable Certificate', fu framework: null, }); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([ + const learningContentObjects = learningContentBuilder.fromAreas([ { ...area1, title_i18n: { fr: area1.title, en: 'title en' }, @@ -416,7 +417,7 @@ describe('Integration | Infrastructure | Repository | Shareable Certificate', fu framework: null, }); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([ + const learningContentObjects = learningContentBuilder.fromAreas([ { ...area1, title_i18n: { fr: area1.title, en: 'title en' }, @@ -484,7 +485,7 @@ describe('Integration | Infrastructure | Repository | Shareable Certificate', fu hasExternalJury: true, }).id; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(minimalLearningContent); + const learningContentObjects = learningContentBuilder.fromAreas(minimalLearningContent); mockLearningContent(learningContentObjects); const userId = databaseBuilder.factory.buildUser().id; const shareableCertificateData = { diff --git a/api/tests/integration/infrastructure/repositories/certification-assessment-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-assessment-repository_test.js index fcf5e5c2f8b..3feb043f585 100644 --- a/api/tests/integration/infrastructure/repositories/certification-assessment-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-assessment-repository_test.js @@ -1,10 +1,10 @@ -const { expect, databaseBuilder, mockLearningContent, catchErr } = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const certificationAssessmentRepository = require('../../../../lib/infrastructure/repositories/certification-assessment-repository'); -const CertificationAssessment = require('../../../../lib/domain/models/CertificationAssessment'); -const Challenge = require('../../../../lib/domain/models/Challenge'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const _ = require('lodash'); +import { expect, databaseBuilder, mockLearningContent, catchErr } from '../../../test-helper.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import * as certificationAssessmentRepository from '../../../../lib/infrastructure/repositories/certification-assessment-repository.js'; +import { CertificationAssessment } from '../../../../lib/domain/models/CertificationAssessment.js'; +import { Challenge } from '../../../../lib/domain/models/Challenge.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import _ from 'lodash'; describe('Integration | Infrastructure | Repositories | certification-assessment-repository', function () { beforeEach(function () { diff --git a/api/tests/integration/infrastructure/repositories/certification-candidate-for-supervising-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-candidate-for-supervising-repository_test.js index c2ac04ecafb..e34564798b9 100644 --- a/api/tests/integration/infrastructure/repositories/certification-candidate-for-supervising-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-candidate-for-supervising-repository_test.js @@ -1,7 +1,7 @@ -const { catchErr, databaseBuilder, expect, knex, domainBuilder } = require('../../../test-helper'); -const certificationCandidateForSupervisingRepository = require('../../../../lib/infrastructure/repositories/certification-candidate-for-supervising-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +import { catchErr, databaseBuilder, expect, knex, domainBuilder } from '../../../test-helper.js'; +import * as certificationCandidateForSupervisingRepository from '../../../../lib/infrastructure/repositories/certification-candidate-for-supervising-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; describe('Integration | Repository | certification candidate for supervising', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/certification-candidate-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-candidate-repository_test.js index a9d7346210e..ed24db044dd 100644 --- a/api/tests/integration/infrastructure/repositories/certification-candidate-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-candidate-repository_test.js @@ -1,12 +1,12 @@ -const { databaseBuilder, expect, knex, domainBuilder, catchErr } = require('../../../test-helper'); -const BookshelfCertificationCandidate = require('../../../../lib/infrastructure/orm-models/CertificationCandidate'); -const certificationCandidateRepository = require('../../../../lib/infrastructure/repositories/certification-candidate-repository'); -const { +import { databaseBuilder, expect, knex, domainBuilder, catchErr } from '../../../test-helper.js'; +import { BookshelfCertificationCandidate } from '../../../../lib/infrastructure/orm-models/CertificationCandidate.js'; +import * as certificationCandidateRepository from '../../../../lib/infrastructure/repositories/certification-candidate-repository.js'; +import { NotFoundError, CertificationCandidateMultipleUserLinksWithinSessionError, -} = require('../../../../lib/domain/errors'); -const ComplementaryCertification = require('../../../../lib/domain/models/ComplementaryCertification'); -const _ = require('lodash'); +} from '../../../../lib/domain/errors.js'; +import { ComplementaryCertification } from '../../../../lib/domain/models/ComplementaryCertification.js'; +import _ from 'lodash'; describe('Integration | Repository | CertificationCandidate', function () { describe('#saveInSession', function () { @@ -175,7 +175,7 @@ describe('Integration | Repository | CertificationCandidate', function () { it('should return true when deletion goes well', async function () { // when - const isDeleted = await certificationCandidateRepository.delete(certificationCandidateToDeleteId); + const isDeleted = await certificationCandidateRepository.remove(certificationCandidateToDeleteId); // then expect(isDeleted).to.be.true; @@ -184,7 +184,7 @@ describe('Integration | Repository | CertificationCandidate', function () { it('should delete a single row in the table', async function () { const nbCertifCandidatesBeforeDeletion = await BookshelfCertificationCandidate.count(); // when - await certificationCandidateRepository.delete(certificationCandidateToDeleteId); + await certificationCandidateRepository.remove(certificationCandidateToDeleteId); const nbCertifCandidatesAfterDeletion = await BookshelfCertificationCandidate.count(); // then @@ -204,7 +204,7 @@ describe('Integration | Repository | CertificationCandidate', function () { await databaseBuilder.commit(); // when - const isDeleted = await certificationCandidateRepository.delete(certificationCandidateId); + const isDeleted = await certificationCandidateRepository.remove(certificationCandidateId); // then const complementaryCertificationSubscriptions = await knex diff --git a/api/tests/integration/infrastructure/repositories/certification-center-for-admin-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-center-for-admin-repository_test.js index 6b5b8c30a9e..b3fc658c50c 100644 --- a/api/tests/integration/infrastructure/repositories/certification-center-for-admin-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-center-for-admin-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, domainBuilder, catchErr, sinon } = require('../../../test-helper'); -const certificationCenterForAdminRepository = require('../../../../lib/infrastructure/repositories/certification-center-for-admin-repository'); -const CertificationCenterForAdmin = require('../../../../lib/domain/models/CertificationCenterForAdmin'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, databaseBuilder, domainBuilder, catchErr, sinon } from '../../../test-helper.js'; +import * as certificationCenterForAdminRepository from '../../../../lib/infrastructure/repositories/certification-center-for-admin-repository.js'; +import { CertificationCenterForAdmin } from '../../../../lib/domain/models/CertificationCenterForAdmin.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | certification-center-for-admin', function () { let clock; diff --git a/api/tests/integration/infrastructure/repositories/certification-center-invited-user-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-center-invited-user-repository_test.js index 0552d9a403e..05bdf21887d 100644 --- a/api/tests/integration/infrastructure/repositories/certification-center-invited-user-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-center-invited-user-repository_test.js @@ -1,10 +1,12 @@ -const { omit } = require('lodash'); +import lodash from 'lodash'; -const { expect, databaseBuilder, catchErr, sinon, knex } = require('../../../test-helper'); -const certificationCenterInvitedUserRepository = require('../../../../lib/infrastructure/repositories/certification-center-invited-user-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const CertificationCenterInvitation = require('../../../../lib/domain/models/CertificationCenterInvitation'); -const CertificationCenterInvitedUser = require('../../../../lib/domain/models/CertificationCenterInvitedUser'); +const { omit } = lodash; + +import { expect, databaseBuilder, catchErr, sinon, knex } from '../../../test-helper.js'; +import * as certificationCenterInvitedUserRepository from '../../../../lib/infrastructure/repositories/certification-center-invited-user-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { CertificationCenterInvitation } from '../../../../lib/domain/models/CertificationCenterInvitation.js'; +import { CertificationCenterInvitedUser } from '../../../../lib/domain/models/CertificationCenterInvitedUser.js'; describe('Integration | Repository | CertificationCenterInvitedUserRepository', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/certification-center-membership-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-center-membership-repository_test.js index c3546b24061..a02f4326bae 100644 --- a/api/tests/integration/infrastructure/repositories/certification-center-membership-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-center-membership-repository_test.js @@ -1,19 +1,17 @@ -const pick = require('lodash/pick'); -const omit = require('lodash/omit'); - -const { expect, knex, databaseBuilder, catchErr, sinon, domainBuilder } = require('../../../test-helper'); - -const BookshelfCertificationCenterMembership = require('../../../../lib/infrastructure/orm-models/CertificationCenterMembership'); -const CertificationCenter = require('../../../../lib/domain/models/CertificationCenter'); -const CertificationCenterMembership = require('../../../../lib/domain/models/CertificationCenterMembership'); -const User = require('../../../../lib/domain/models/User'); - -const { +import lodash from 'lodash'; +const { omit, pick } = lodash; + +import { expect, knex, databaseBuilder, catchErr, sinon, domainBuilder } from '../../../test-helper.js'; +import { BookshelfCertificationCenterMembership } from '../../../../lib/infrastructure/orm-models/CertificationCenterMembership.js'; +import { CertificationCenter } from '../../../../lib/domain/models/CertificationCenter.js'; +import { CertificationCenterMembership } from '../../../../lib/domain/models/CertificationCenterMembership.js'; +import { User } from '../../../../lib/domain/models/User.js'; +import { CertificationCenterMembershipDisableError, AlreadyExistingMembershipError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; -const certificationCenterMembershipRepository = require('../../../../lib/infrastructure/repositories/certification-center-membership-repository'); +import * as certificationCenterMembershipRepository from '../../../../lib/infrastructure/repositories/certification-center-membership-repository.js'; describe('Integration | Repository | Certification Center Membership', function () { describe('#save', function () { diff --git a/api/tests/integration/infrastructure/repositories/certification-center-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-center-repository_test.js index eb71ff5befe..fc6cb4bb7a0 100644 --- a/api/tests/integration/infrastructure/repositories/certification-center-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-center-repository_test.js @@ -1,8 +1,8 @@ -const { expect, knex, databaseBuilder, domainBuilder, catchErr, sinon } = require('../../../test-helper'); -const certificationCenterRepository = require('../../../../lib/infrastructure/repositories/certification-center-repository'); -const CertificationCenter = require('../../../../lib/domain/models/CertificationCenter'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const _ = require('lodash'); +import { expect, knex, databaseBuilder, domainBuilder, catchErr, sinon } from '../../../test-helper.js'; +import * as certificationCenterRepository from '../../../../lib/infrastructure/repositories/certification-center-repository.js'; +import { CertificationCenter } from '../../../../lib/domain/models/CertificationCenter.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import _ from 'lodash'; describe('Integration | Repository | Certification Center', function () { let clock, now; diff --git a/api/tests/integration/infrastructure/repositories/certification-challenge-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-challenge-repository_test.js index f8d364bd110..8afb1693bd4 100644 --- a/api/tests/integration/infrastructure/repositories/certification-challenge-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-challenge-repository_test.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const { expect, knex, domainBuilder, databaseBuilder } = require('../../../test-helper'); -const CertificationChallenge = require('../../../../lib/domain/models/CertificationChallenge'); -const { AssessmentEndedError } = require('../../../../lib/domain/errors'); -const certificationChallengeRepository = require('../../../../lib/infrastructure/repositories/certification-challenge-repository'); +import _ from 'lodash'; +import { expect, knex, domainBuilder, databaseBuilder } from '../../../test-helper.js'; +import { CertificationChallenge } from '../../../../lib/domain/models/CertificationChallenge.js'; +import { AssessmentEndedError } from '../../../../lib/domain/errors.js'; +import * as certificationChallengeRepository from '../../../../lib/infrastructure/repositories/certification-challenge-repository.js'; describe('Integration | Repository | Certification Challenge', function () { describe('#save', function () { diff --git a/api/tests/integration/infrastructure/repositories/certification-course-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-course-repository_test.js index a1df9bebdf5..b246875b983 100644 --- a/api/tests/integration/infrastructure/repositories/certification-course-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-course-repository_test.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const { catchErr, expect, databaseBuilder, domainBuilder, knex } = require('../../../test-helper'); -const certificationCourseRepository = require('../../../../lib/infrastructure/repositories/certification-course-repository'); -const BookshelfCertificationCourse = require('../../../../lib/infrastructure/orm-models/CertificationCourse'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const CertificationCourse = require('../../../../lib/domain/models/CertificationCourse'); +import _ from 'lodash'; +import { catchErr, expect, databaseBuilder, domainBuilder, knex } from '../../../test-helper.js'; +import * as certificationCourseRepository from '../../../../lib/infrastructure/repositories/certification-course-repository.js'; +import { BookshelfCertificationCourse } from '../../../../lib/infrastructure/orm-models/CertificationCourse.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { CertificationCourse } from '../../../../lib/domain/models/CertificationCourse.js'; describe('Integration | Repository | Certification Course', function () { describe('#save', function () { diff --git a/api/tests/integration/infrastructure/repositories/certification-cpf-city-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-cpf-city-repository_test.js index a0faa94f080..b611b7b8d2e 100644 --- a/api/tests/integration/infrastructure/repositories/certification-cpf-city-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-cpf-city-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, domainBuilder } = require('../../../test-helper'); -const certificationCpfCityRepository = require('../../../../lib/infrastructure/repositories/certification-cpf-city-repository'); -const CertificationCpfCity = require('../../../../lib/domain/models/CertificationCpfCity'); +import { expect, databaseBuilder, domainBuilder } from '../../../test-helper.js'; +import * as certificationCpfCityRepository from '../../../../lib/infrastructure/repositories/certification-cpf-city-repository.js'; +import { CertificationCpfCity } from '../../../../lib/domain/models/CertificationCpfCity.js'; describe('Integration | Repository | certificationCpfCityRepository', function () { describe('#findByINSEECode', function () { diff --git a/api/tests/integration/infrastructure/repositories/certification-cpf-country-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-cpf-country-repository_test.js index 04ff46d7a9b..81552fff682 100644 --- a/api/tests/integration/infrastructure/repositories/certification-cpf-country-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-cpf-country-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, domainBuilder } = require('../../../test-helper'); -const certificationCpfCountryRepository = require('../../../../lib/infrastructure/repositories/certification-cpf-country-repository'); -const CertificationCpfCountry = require('../../../../lib/domain/models/CertificationCpfCountry'); +import { expect, databaseBuilder, domainBuilder } from '../../../test-helper.js'; +import * as certificationCpfCountryRepository from '../../../../lib/infrastructure/repositories/certification-cpf-country-repository.js'; +import { CertificationCpfCountry } from '../../../../lib/domain/models/CertificationCpfCountry.js'; describe('Integration | Repository | certificationCpfCountryRepository', function () { describe('#getByMatcher', function () { diff --git a/api/tests/integration/infrastructure/repositories/certification-issue-report-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-issue-report-repository_test.js index e8cece7b410..d61e7172563 100644 --- a/api/tests/integration/infrastructure/repositories/certification-issue-report-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-issue-report-repository_test.js @@ -1,11 +1,11 @@ -const _ = require('lodash'); -const { expect, domainBuilder, databaseBuilder, knex } = require('../../../test-helper'); -const certificationIssueReportRepository = require('../../../../lib/infrastructure/repositories/certification-issue-report-repository'); -const CertificationIssueReport = require('../../../../lib/domain/models/CertificationIssueReport'); -const { - CertificationIssueReportCategories, +import _ from 'lodash'; +import { expect, domainBuilder, databaseBuilder, knex } from '../../../test-helper.js'; +import * as certificationIssueReportRepository from '../../../../lib/infrastructure/repositories/certification-issue-report-repository.js'; +import { CertificationIssueReport } from '../../../../lib/domain/models/CertificationIssueReport.js'; +import { + CertificationIssueReportCategory, CertificationIssueReportSubcategories, -} = require('../../../../lib/domain/models/CertificationIssueReportCategory'); +} from '../../../../lib/domain/models/CertificationIssueReportCategory.js'; describe('Integration | Repository | Certification Issue Report', function () { afterEach(async function () { @@ -23,7 +23,7 @@ describe('Integration | Repository | Certification Issue Report', function () { const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ id: undefined, certificationCourseId, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, categoryId: null, description: 'Un gros problème', subcategory: CertificationIssueReportSubcategories.IMAGE_NOT_DISPLAYING, @@ -38,7 +38,7 @@ describe('Integration | Repository | Certification Issue Report', function () { // then const expectedSavedCertificationIssueReport = domainBuilder.buildCertificationIssueReport({ certificationCourseId, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, categoryId: null, description: 'Un gros problème', isActionRequired: true, @@ -61,16 +61,16 @@ describe('Integration | Repository | Certification Issue Report', function () { const certificationCourseId = databaseBuilder.factory.buildCertificationCourse().id; databaseBuilder.factory.buildIssueReportCategory({ id: 123, - name: CertificationIssueReportCategories.IN_CHALLENGE, + name: CertificationIssueReportCategory.IN_CHALLENGE, }); const categoryId = databaseBuilder.factory.buildIssueReportCategory({ issueReportCategoryId: 2, - name: CertificationIssueReportCategories.IMAGE_NOT_DISPLAYING, + name: CertificationIssueReportCategory.IMAGE_NOT_DISPLAYING, }).id; const certificationIssueReport = databaseBuilder.factory.buildCertificationIssueReport({ id: 1234, certificationCourseId, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, categoryId, description: 'Un gros problème', subcategory: CertificationIssueReportSubcategories.IMAGE_NOT_DISPLAYING, @@ -94,7 +94,7 @@ describe('Integration | Repository | Certification Issue Report', function () { const expectedSavedCertificationIssueReport = domainBuilder.buildCertificationIssueReport({ id: 1234, certificationCourseId, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, categoryId, description: 'Un gros problème', isActionRequired: true, @@ -117,7 +117,7 @@ describe('Integration | Repository | Certification Issue Report', function () { await databaseBuilder.commit(); // when - await certificationIssueReportRepository.delete(certificationIssueReportToDeleteId); + await certificationIssueReportRepository.remove(certificationIssueReportToDeleteId); // then const exists = await knex('certification-issue-reports') @@ -151,22 +151,22 @@ describe('Integration | Repository | Certification Issue Report', function () { // given const targetCertificationCourse = databaseBuilder.factory.buildCertificationCourse(); const categoryId = databaseBuilder.factory.buildIssueReportCategory({ - name: CertificationIssueReportCategories.OTHER, + name: CertificationIssueReportCategory.OTHER, }).id; const otherCertificationCourse = databaseBuilder.factory.buildCertificationCourse(); const issueReportForTargetCourse1 = databaseBuilder.factory.buildCertificationIssueReport({ certificationCourseId: targetCertificationCourse.id, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, categoryId, }); const issueReportForTargetCourse2 = databaseBuilder.factory.buildCertificationIssueReport({ certificationCourseId: targetCertificationCourse.id, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, categoryId, }); databaseBuilder.factory.buildCertificationIssueReport({ certificationCourseId: otherCertificationCourse.id, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, categoryId, }); await databaseBuilder.commit(); diff --git a/api/tests/integration/infrastructure/repositories/certification-livret-scolaire-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-livret-scolaire-repository_test.js index 33202a122eb..925430b2c58 100644 --- a/api/tests/integration/infrastructure/repositories/certification-livret-scolaire-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-livret-scolaire-repository_test.js @@ -1,8 +1,8 @@ -const certificationLsRepository = require('../../../../lib/infrastructure/repositories/certification-livret-scolaire-repository'); -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const status = require('../../../../lib/domain/read-models/livret-scolaire/CertificateStatus'); +import * as certificationLsRepository from '../../../../lib/infrastructure/repositories/certification-livret-scolaire-repository.js'; +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { status } from '../../../../lib/domain/read-models/livret-scolaire/CertificateStatus.js'; -const { +import { buildUser, buildOrganizationLearner, buildOrganization, @@ -12,7 +12,7 @@ const { buildCancelledCertificationData, buildRejectedPublishedCertificationData, buildErrorUnpublishedCertificationData, -} = require('../../../../tests/tooling/domain-builder/factory/build-certifications-results-for-ls'); +} from '../../../../tests/tooling/domain-builder/factory/build-certifications-results-for-ls.js'; describe('Integration | Repository | Certification-ls ', function () { const pixScore = 400; diff --git a/api/tests/integration/infrastructure/repositories/certification-officer-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-officer-repository_test.js index 91136013517..2b0c3cbd446 100644 --- a/api/tests/integration/infrastructure/repositories/certification-officer-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-officer-repository_test.js @@ -1,8 +1,8 @@ -const { databaseBuilder, expect, catchErr } = require('../../../test-helper'); -const certificationOfficerRepository = require('../../../../lib/infrastructure/repositories/certification-officer-repository'); +import { databaseBuilder, expect, catchErr } from '../../../test-helper.js'; +import * as certificationOfficerRepository from '../../../../lib/infrastructure/repositories/certification-officer-repository.js'; -const { UserNotFoundError } = require('../../../../lib/domain/errors'); -const CertificationOfficer = require('../../../../lib/domain/models/CertificationOfficer'); +import { UserNotFoundError } from '../../../../lib/domain/errors.js'; +import { CertificationOfficer } from '../../../../lib/domain/models/CertificationOfficer.js'; describe('Integration | Repository | CertificationOfficer', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/certification-point-of-contact-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-point-of-contact-repository_test.js index cf86a16ad7f..596989a86ea 100644 --- a/api/tests/integration/infrastructure/repositories/certification-point-of-contact-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-point-of-contact-repository_test.js @@ -1,8 +1,8 @@ -const { databaseBuilder, expect, domainBuilder, catchErr } = require('../../../test-helper'); -const CertificationCenter = require('../../../../lib/domain/models/CertificationCenter'); -const Organization = require('../../../../lib/domain/models/Organization'); -const certificationPointOfContactRepository = require('../../../../lib/infrastructure/repositories/certification-point-of-contact-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { databaseBuilder, expect, domainBuilder, catchErr } from '../../../test-helper.js'; +import { CertificationCenter } from '../../../../lib/domain/models/CertificationCenter.js'; +import { Organization } from '../../../../lib/domain/models/Organization.js'; +import * as certificationPointOfContactRepository from '../../../../lib/infrastructure/repositories/certification-point-of-contact-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | CertificationPointOfContact', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/certification-report-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-report-repository_test.js index cae1fd60d37..f49ba6b782f 100644 --- a/api/tests/integration/infrastructure/repositories/certification-report-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-report-repository_test.js @@ -1,12 +1,10 @@ -const _ = require('lodash'); -const { databaseBuilder, domainBuilder, expect, catchErr, knex } = require('../../../test-helper'); -const CertificationReport = require('../../../../lib/domain/models/CertificationReport'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const certificationReportRepository = require('../../../../lib/infrastructure/repositories/certification-report-repository'); -const { CertificationCourseUpdateError } = require('../../../../lib/domain/errors'); -const { - CertificationIssueReportCategories, -} = require('../../../../lib/domain/models/CertificationIssueReportCategory'); +import _ from 'lodash'; +import { databaseBuilder, domainBuilder, expect, catchErr, knex } from '../../../test-helper.js'; +import { CertificationReport } from '../../../../lib/domain/models/CertificationReport.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import * as certificationReportRepository from '../../../../lib/infrastructure/repositories/certification-report-repository.js'; +import { CertificationCourseUpdateError } from '../../../../lib/domain/errors.js'; +import { CertificationIssueReportCategory } from '../../../../lib/domain/models/CertificationIssueReportCategory.js'; describe('Integration | Repository | CertificationReport', function () { describe('#findBySessionId', function () { @@ -28,7 +26,7 @@ describe('Integration | Repository | CertificationReport', function () { }); const certificationIssueReport1 = databaseBuilder.factory.buildCertificationIssueReport({ certificationCourseId: certificationCourse1.id, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, description: 'Houston, nous avons un problème', }); // In other session diff --git a/api/tests/integration/infrastructure/repositories/certification-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-repository_test.js index 07e67ed26d3..58d8015ba5f 100644 --- a/api/tests/integration/infrastructure/repositories/certification-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, catchErr, knex } = require('../../../test-helper'); -const certificationRepository = require('../../../../lib/infrastructure/repositories/certification-repository'); -const { CertificationCourseNotPublishableError } = require('../../../../lib/domain/errors'); -const { status } = require('../../../../lib/domain/models/AssessmentResult'); +import { expect, databaseBuilder, catchErr, knex } from '../../../test-helper.js'; +import * as certificationRepository from '../../../../lib/infrastructure/repositories/certification-repository.js'; +import { CertificationCourseNotPublishableError } from '../../../../lib/domain/errors.js'; +import { status } from '../../../../lib/domain/models/AssessmentResult.js'; describe('Integration | Repository | Certification', function () { describe('#publishCertificationCoursesBySessionId', function () { diff --git a/api/tests/integration/infrastructure/repositories/certification-result-repository_test.js b/api/tests/integration/infrastructure/repositories/certification-result-repository_test.js index 2e35879e34a..e5e3440f2ff 100644 --- a/api/tests/integration/infrastructure/repositories/certification-result-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certification-result-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, domainBuilder } = require('../../../test-helper'); -const certificationResultRepository = require('../../../../lib/infrastructure/repositories/certification-result-repository'); -const CertificationResult = require('../../../../lib/domain/models/CertificationResult'); -const ComplementaryCertificationCourseResult = require('../../../../lib/domain/models/ComplementaryCertificationCourseResult'); +import { expect, databaseBuilder, domainBuilder } from '../../../test-helper.js'; +import * as certificationResultRepository from '../../../../lib/infrastructure/repositories/certification-result-repository.js'; +import { CertificationResult } from '../../../../lib/domain/models/CertificationResult.js'; +import { ComplementaryCertificationCourseResult } from '../../../../lib/domain/models/ComplementaryCertificationCourseResult.js'; describe('Integration | Infrastructure | Repository | Certification Result', function () { describe('#findBySessionId', function () { diff --git a/api/tests/integration/infrastructure/repositories/certified-profile-repository_test.js b/api/tests/integration/infrastructure/repositories/certified-profile-repository_test.js index 4c707581b0c..466667d9868 100644 --- a/api/tests/integration/infrastructure/repositories/certified-profile-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/certified-profile-repository_test.js @@ -1,8 +1,8 @@ -const { expect, databaseBuilder, mockLearningContent, domainBuilder, catchErr } = require('../../../test-helper'); -const { CertifiedProfile } = require('../../../../lib/domain/read-models/CertifiedProfile'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const certifiedProfileRepository = require('../../../../lib/infrastructure/repositories/certified-profile-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, databaseBuilder, mockLearningContent, domainBuilder, catchErr } from '../../../test-helper.js'; +import { CertifiedProfile } from '../../../../lib/domain/read-models/CertifiedProfile.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import * as certifiedProfileRepository from '../../../../lib/infrastructure/repositories/certified-profile-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | Certified Profile', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/challenge-for-pix-auto-answer-repository_test.js b/api/tests/integration/infrastructure/repositories/challenge-for-pix-auto-answer-repository_test.js index 497a7a60505..b270bf2a80f 100644 --- a/api/tests/integration/infrastructure/repositories/challenge-for-pix-auto-answer-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/challenge-for-pix-auto-answer-repository_test.js @@ -1,5 +1,5 @@ -const { expect, mockLearningContent } = require('../../../test-helper'); -const challengeForPixAutoAnswerRepository = require('../../../../lib/infrastructure/repositories/challenge-for-pix-auto-answer-repository'); +import { expect, mockLearningContent } from '../../../test-helper.js'; +import * as challengeForPixAutoAnswerRepository from '../../../../lib/infrastructure/repositories/challenge-for-pix-auto-answer-repository.js'; describe('Integration | Repository | challenge-for-pix-auto-answer-repository', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/challenge-repository_test.js b/api/tests/integration/infrastructure/repositories/challenge-repository_test.js index 45d24c3b0fb..c2075f3c216 100644 --- a/api/tests/integration/infrastructure/repositories/challenge-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/challenge-repository_test.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const { expect, mockLearningContent, domainBuilder, catchErr } = require('../../../test-helper'); -const Challenge = require('../../../../lib/domain/models/Challenge'); -const Validator = require('../../../../lib/domain/models/Validator'); -const challengeRepository = require('../../../../lib/infrastructure/repositories/challenge-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import _ from 'lodash'; +import { expect, mockLearningContent, domainBuilder, catchErr } from '../../../test-helper.js'; +import { Challenge } from '../../../../lib/domain/models/Challenge.js'; +import { Validator } from '../../../../lib/domain/models/Validator.js'; +import * as challengeRepository from '../../../../lib/infrastructure/repositories/challenge-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | challenge-repository', function () { describe('#get', function () { @@ -482,9 +482,13 @@ describe('Integration | Repository | challenge-repository', function () { it('should return only flash compatible challenges with skills', async function () { // given const locale = 'fr-fr'; + const successProbabilityThreshold = 0.95; // when - const actualChallenges = await challengeRepository.findActiveFlashCompatible({ locale }); + const actualChallenges = await challengeRepository.findActiveFlashCompatible({ + locale, + successProbabilityThreshold, + }); // then expect(actualChallenges).to.have.lengthOf(1); diff --git a/api/tests/integration/infrastructure/repositories/clea-certified-candidate-repository_test.js b/api/tests/integration/infrastructure/repositories/clea-certified-candidate-repository_test.js index 23d117c4e28..a28184729e6 100644 --- a/api/tests/integration/infrastructure/repositories/clea-certified-candidate-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/clea-certified-candidate-repository_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, domainBuilder } = require('../../../test-helper'); -const cleaCertifiedCandidateRepository = require('../../../../lib/infrastructure/repositories/clea-certified-candidate-repository'); +import { expect, databaseBuilder, domainBuilder } from '../../../test-helper.js'; +import * as cleaCertifiedCandidateRepository from '../../../../lib/infrastructure/repositories/clea-certified-candidate-repository.js'; describe('Integration | Repository | clea-certified-candidate-repository', function () { describe('#getBySessionId', function () { diff --git a/api/tests/integration/infrastructure/repositories/competence-evaluation-repository_test.js b/api/tests/integration/infrastructure/repositories/competence-evaluation-repository_test.js index afa3254ab73..9341a2f3d8b 100644 --- a/api/tests/integration/infrastructure/repositories/competence-evaluation-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/competence-evaluation-repository_test.js @@ -1,10 +1,10 @@ -const { expect, knex, databaseBuilder, catchErr } = require('../../../test-helper'); -const CompetenceEvaluation = require('../../../../lib/domain/models/CompetenceEvaluation'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const competenceEvaluationRepository = require('../../../../lib/infrastructure/repositories/competence-evaluation-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const _ = require('lodash'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +import { expect, knex, databaseBuilder, catchErr } from '../../../test-helper.js'; +import { CompetenceEvaluation } from '../../../../lib/domain/models/CompetenceEvaluation.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import * as competenceEvaluationRepository from '../../../../lib/infrastructure/repositories/competence-evaluation-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import _ from 'lodash'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; describe('Integration | Repository | Competence Evaluation', function () { const STARTED = 'started'; diff --git a/api/tests/integration/infrastructure/repositories/competence-mark-repository_test.js b/api/tests/integration/infrastructure/repositories/competence-mark-repository_test.js index 379e0822319..8aaa26a085e 100644 --- a/api/tests/integration/infrastructure/repositories/competence-mark-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/competence-mark-repository_test.js @@ -1,8 +1,8 @@ -const { expect, knex, domainBuilder, databaseBuilder } = require('../../../test-helper'); -const _ = require('lodash'); +import { expect, knex, domainBuilder, databaseBuilder } from '../../../test-helper.js'; +import _ from 'lodash'; -const CompetenceMark = require('../../../../lib/domain/models/CompetenceMark'); -const competenceMarkRepository = require('../../../../lib/infrastructure/repositories/competence-mark-repository'); +import { CompetenceMark } from '../../../../lib/domain/models/CompetenceMark.js'; +import * as competenceMarkRepository from '../../../../lib/infrastructure/repositories/competence-mark-repository.js'; describe('Integration | Repository | CompetenceMark', function () { describe('#save', function () { diff --git a/api/tests/integration/infrastructure/repositories/competence-repository_test.js b/api/tests/integration/infrastructure/repositories/competence-repository_test.js index 2650e7b5fa8..d7a523b4e53 100644 --- a/api/tests/integration/infrastructure/repositories/competence-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/competence-repository_test.js @@ -1,5 +1,5 @@ -const { expect, mockLearningContent, domainBuilder } = require('../../../test-helper'); -const competenceRepository = require('../../../../lib/infrastructure/repositories/competence-repository'); +import { expect, mockLearningContent, domainBuilder } from '../../../test-helper.js'; +import * as competenceRepository from '../../../../lib/infrastructure/repositories/competence-repository.js'; describe('Integration | Repository | competence-repository', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/complementary-certification-course-repository_test.js b/api/tests/integration/infrastructure/repositories/complementary-certification-course-repository_test.js index 30297f7c700..e5a253e4a5a 100644 --- a/api/tests/integration/infrastructure/repositories/complementary-certification-course-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/complementary-certification-course-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const complementaryCertificationCourseRepository = require('../../../../lib/infrastructure/repositories/complementary-certification-course-repository'); -const { PIX_PLUS_DROIT, PIX_PLUS_EDU_1ER_DEGRE } = require('../../../../lib/domain/models/ComplementaryCertification'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as complementaryCertificationCourseRepository from '../../../../lib/infrastructure/repositories/complementary-certification-course-repository.js'; +import { PIX_PLUS_DROIT, PIX_PLUS_EDU_1ER_DEGRE } from '../../../../lib/domain/models/ComplementaryCertification.js'; describe('Integration | Repository | complementary-certification-courses-repository', function () { describe('#getComplementaryCertificationCourseId', function () { diff --git a/api/tests/integration/infrastructure/repositories/complementary-certification-course-result-repository_test.js b/api/tests/integration/infrastructure/repositories/complementary-certification-course-result-repository_test.js index b2a610d011b..89a651ef706 100644 --- a/api/tests/integration/infrastructure/repositories/complementary-certification-course-result-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/complementary-certification-course-result-repository_test.js @@ -1,8 +1,8 @@ -const { expect, databaseBuilder, domainBuilder } = require('../../../test-helper'); -const { knex } = require('../../../../lib/infrastructure/bookshelf'); -const _ = require('lodash'); -const complementaryCertificationCourseResultRepository = require('../../../../lib/infrastructure/repositories/complementary-certification-course-result-repository'); -const ComplementaryCertificationCourseResult = require('../../../../lib/domain/models/ComplementaryCertificationCourseResult'); +import { expect, databaseBuilder, domainBuilder } from '../../../test-helper.js'; +import { knex } from '../../../../lib/infrastructure/bookshelf.js'; +import _ from 'lodash'; +import * as complementaryCertificationCourseResultRepository from '../../../../lib/infrastructure/repositories/complementary-certification-course-result-repository.js'; +import { ComplementaryCertificationCourseResult } from '../../../../lib/domain/models/ComplementaryCertificationCourseResult.js'; describe('Integration | Repository | complementary-certification-courses-result-repository', function () { describe('#getPixSourceResultByComplementaryCertificationCourseId', function () { diff --git a/api/tests/integration/infrastructure/repositories/complementary-certification-habilitation-repository_test.js b/api/tests/integration/infrastructure/repositories/complementary-certification-habilitation-repository_test.js index bc71990fcb3..455c1cc74d6 100644 --- a/api/tests/integration/infrastructure/repositories/complementary-certification-habilitation-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/complementary-certification-habilitation-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const complementaryCertificationHabilitationRepository = require('../../../../lib/infrastructure/repositories/complementary-certification-habilitation-repository'); -const { knex } = require('../../../../lib/infrastructure/bookshelf'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as complementaryCertificationHabilitationRepository from '../../../../lib/infrastructure/repositories/complementary-certification-habilitation-repository.js'; +import { knex } from '../../../../lib/infrastructure/bookshelf.js'; describe('Integration | Infrastructure | Repository | complementary-certification-habilitation-repository', function () { context('#save', function () { diff --git a/api/tests/integration/infrastructure/repositories/complementary-certification-repository_test.js b/api/tests/integration/infrastructure/repositories/complementary-certification-repository_test.js index acb4da3dad8..276e7d54e74 100644 --- a/api/tests/integration/infrastructure/repositories/complementary-certification-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/complementary-certification-repository_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, domainBuilder } = require('../../../test-helper'); -const complementaryCertificationRepository = require('../../../../lib/infrastructure/repositories/complementary-certification-repository'); +import { expect, databaseBuilder, domainBuilder } from '../../../test-helper.js'; +import * as complementaryCertificationRepository from '../../../../lib/infrastructure/repositories/complementary-certification-repository.js'; describe('Integration | Repository | complementary-certification-repository', function () { describe('#findAll', function () { diff --git a/api/tests/integration/infrastructure/repositories/complementary-certification-scoring-criteria-repository_test.js b/api/tests/integration/infrastructure/repositories/complementary-certification-scoring-criteria-repository_test.js index 61e3e5a1819..47875795953 100644 --- a/api/tests/integration/infrastructure/repositories/complementary-certification-scoring-criteria-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/complementary-certification-scoring-criteria-repository_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder, databaseBuilder } = require('../../../test-helper'); -const complementaryCertificationScoringCriteriaRepository = require('../../../../lib/infrastructure/repositories/complementary-certification-scoring-criteria-repository'); +import { expect, domainBuilder, databaseBuilder } from '../../../test-helper.js'; +import * as complementaryCertificationScoringCriteriaRepository from '../../../../lib/infrastructure/repositories/complementary-certification-scoring-criteria-repository.js'; describe('Integration | Repository | complementary certification scoring criteria', function () { describe('#findByCertificationCourseId', function () { diff --git a/api/tests/integration/infrastructure/repositories/complementary-certification-subscription-repository_test.js b/api/tests/integration/infrastructure/repositories/complementary-certification-subscription-repository_test.js index bdf012a6b4c..aac21c537e8 100644 --- a/api/tests/integration/infrastructure/repositories/complementary-certification-subscription-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/complementary-certification-subscription-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const complementaryCertificationSubscriptionRepository = require('../../../../lib/infrastructure/repositories/complementary-certification-subscription-repository'); -const { knex } = require('../../../../lib/infrastructure/bookshelf'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as complementaryCertificationSubscriptionRepository from '../../../../lib/infrastructure/repositories/complementary-certification-subscription-repository.js'; +import { knex } from '../../../../lib/infrastructure/bookshelf.js'; describe('Integration | Infrastructure | Repository | complementary-certification-subscription-repository', function () { context('#save', function () { diff --git a/api/tests/integration/infrastructure/repositories/country-repository_test.js b/api/tests/integration/infrastructure/repositories/country-repository_test.js index d6b024f1b12..a62b17a627a 100644 --- a/api/tests/integration/infrastructure/repositories/country-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/country-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, domainBuilder } = require('../../../test-helper'); -const countryRepository = require('../../../../lib/infrastructure/repositories/country-repository'); -const { Country } = require('../../../../lib/domain/read-models/Country'); +import { expect, databaseBuilder, domainBuilder } from '../../../test-helper.js'; +import * as countryRepository from '../../../../lib/infrastructure/repositories/country-repository.js'; +import { Country } from '../../../../lib/domain/read-models/Country.js'; describe('Integration | Repository | country-repository', function () { describe('#findAll', function () { diff --git a/api/tests/integration/infrastructure/repositories/course-repository_test.js b/api/tests/integration/infrastructure/repositories/course-repository_test.js index ea1796ad8a5..0aa09785c77 100644 --- a/api/tests/integration/infrastructure/repositories/course-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/course-repository_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder, catchErr, mockLearningContent } = require('../../../test-helper'); -const Course = require('../../../../lib/domain/models/Course'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const courseRepository = require('../../../../lib/infrastructure/repositories/course-repository'); +import { expect, domainBuilder, catchErr, mockLearningContent } from '../../../test-helper.js'; +import { Course } from '../../../../lib/domain/models/Course.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import * as courseRepository from '../../../../lib/infrastructure/repositories/course-repository.js'; describe('Integration | Repository | course-repository', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/cpf-certification-result-repository_test.js b/api/tests/integration/infrastructure/repositories/cpf-certification-result-repository_test.js index c12ba92b816..85f277b7499 100644 --- a/api/tests/integration/infrastructure/repositories/cpf-certification-result-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/cpf-certification-result-repository_test.js @@ -1,7 +1,7 @@ -const { databaseBuilder, expect, knex, domainBuilder } = require('../../../test-helper'); -const cpfCertificationResultRepository = require('../../../../lib/infrastructure/repositories/cpf-certification-result-repository'); -const AssessmentResult = require('../../../../lib/domain/models/AssessmentResult'); -const { cpfImportStatus } = require('../../../../lib/domain/models/CertificationCourse'); +import { databaseBuilder, expect, knex, domainBuilder } from '../../../test-helper.js'; +import * as cpfCertificationResultRepository from '../../../../lib/infrastructure/repositories/cpf-certification-result-repository.js'; +import { AssessmentResult } from '../../../../lib/domain/models/AssessmentResult.js'; +import { cpfImportStatus } from '../../../../lib/domain/models/CertificationCourse.js'; describe('Integration | Repository | CpfCertificationResult', function () { describe('#countByTimeRange', function () { diff --git a/api/tests/integration/infrastructure/repositories/data-protection-officer-repository_test.js b/api/tests/integration/infrastructure/repositories/data-protection-officer-repository_test.js index 232538a5339..eeffb1aed4d 100644 --- a/api/tests/integration/infrastructure/repositories/data-protection-officer-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/data-protection-officer-repository_test.js @@ -1,6 +1,6 @@ -const { databaseBuilder, expect, knex } = require('../../../test-helper'); -const DataProtectionOfficer = require('../../../../lib/domain/models/DataProtectionOfficer'); -const dataProtectionOfficerRepository = require('../../../../lib/infrastructure/repositories/data-protection-officer-repository'); +import { databaseBuilder, expect, knex } from '../../../test-helper.js'; +import { DataProtectionOfficer } from '../../../../lib/domain/models/DataProtectionOfficer.js'; +import * as dataProtectionOfficerRepository from '../../../../lib/infrastructure/repositories/data-protection-officer-repository.js'; describe('Integration | Repository | data-protection-officer', function () { const now = new Date('2022-09-27T16:30:00Z'); diff --git a/api/tests/integration/infrastructure/repositories/division-repository_test.js b/api/tests/integration/infrastructure/repositories/division-repository_test.js index a8856fcfbe7..8546e7b27da 100644 --- a/api/tests/integration/infrastructure/repositories/division-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/division-repository_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const divisionRepository = require('../../../../lib/infrastructure/repositories/division-repository'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as divisionRepository from '../../../../lib/infrastructure/repositories/division-repository.js'; describe('Integration | Repository | Division', function () { describe('#findByCampaignId', function () { diff --git a/api/tests/integration/infrastructure/repositories/flash-assessment-result-repository_test.js b/api/tests/integration/infrastructure/repositories/flash-assessment-result-repository_test.js index cd226ca8974..94e49c3a84b 100644 --- a/api/tests/integration/infrastructure/repositories/flash-assessment-result-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/flash-assessment-result-repository_test.js @@ -1,5 +1,5 @@ -const { expect, knex, databaseBuilder } = require('../../../test-helper'); -const flashAssessmentResultRepository = require('../../../../lib/infrastructure/repositories/flash-assessment-result-repository'); +import { expect, knex, databaseBuilder } from '../../../test-helper.js'; +import * as flashAssessmentResultRepository from '../../../../lib/infrastructure/repositories/flash-assessment-result-repository.js'; describe('Integration | Infrastructure | Repository | FlashAssessmentResultRepository', function () { afterEach(async function () { diff --git a/api/tests/integration/infrastructure/repositories/framework-repository_test.js b/api/tests/integration/infrastructure/repositories/framework-repository_test.js index d3fba2b3e2a..d4f3e3059de 100644 --- a/api/tests/integration/infrastructure/repositories/framework-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/framework-repository_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder, mockLearningContent, catchErr } = require('../../../test-helper'); -const frameworkRepository = require('../../../../lib/infrastructure/repositories/framework-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, domainBuilder, mockLearningContent, catchErr } from '../../../test-helper.js'; +import * as frameworkRepository from '../../../../lib/infrastructure/repositories/framework-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | framework-repository', function () { const framework0 = { diff --git a/api/tests/integration/infrastructure/repositories/group-repository_test.js b/api/tests/integration/infrastructure/repositories/group-repository_test.js index 948b1c01a91..40d976788f2 100644 --- a/api/tests/integration/infrastructure/repositories/group-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/group-repository_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const groupRepository = require('../../../../lib/infrastructure/repositories/group-repository'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as groupRepository from '../../../../lib/infrastructure/repositories/group-repository.js'; describe('Integration | Repository | Group', function () { describe('#findByCampaignId', function () { diff --git a/api/tests/integration/infrastructure/repositories/issue-report-categories-repository_test.js b/api/tests/integration/infrastructure/repositories/issue-report-categories-repository_test.js index 0677ae30604..b05426b78d6 100644 --- a/api/tests/integration/infrastructure/repositories/issue-report-categories-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/issue-report-categories-repository_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const issueReportCategoryRepository = require('../../../../lib/infrastructure/repositories/issue-report-category-repository'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import * as issueReportCategoryRepository from '../../../../lib/infrastructure/repositories/issue-report-category-repository.js'; describe('Integration | Repository | Issue Report Categories', function () { afterEach(async function () { diff --git a/api/tests/integration/infrastructure/repositories/jury-certification-repository_test.js b/api/tests/integration/infrastructure/repositories/jury-certification-repository_test.js index 0d348512b1c..f970eba28df 100644 --- a/api/tests/integration/infrastructure/repositories/jury-certification-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/jury-certification-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, domainBuilder, catchErr } = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const juryCertificationRepository = require('../../../../lib/infrastructure/repositories/jury-certification-repository'); -const ComplementaryCertificationCourseResult = require('../../../../lib/domain/models/ComplementaryCertificationCourseResult'); +import { expect, databaseBuilder, domainBuilder, catchErr } from '../../../test-helper.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import * as juryCertificationRepository from '../../../../lib/infrastructure/repositories/jury-certification-repository.js'; +import { ComplementaryCertificationCourseResult } from '../../../../lib/domain/models/ComplementaryCertificationCourseResult.js'; describe('Integration | Infrastructure | Repository | Jury Certification', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/jury-certification-summary-repository_test.js b/api/tests/integration/infrastructure/repositories/jury-certification-summary-repository_test.js index 97e00a13ae4..a4809b19bc2 100644 --- a/api/tests/integration/infrastructure/repositories/jury-certification-summary-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/jury-certification-summary-repository_test.js @@ -1,14 +1,16 @@ -const { databaseBuilder, domainBuilder, expect } = require('../../../test-helper'); -const JuryCertificationSummary = require('../../../../lib/domain/read-models/JuryCertificationSummary'); -const CertificationIssueReport = require('../../../../lib/domain/models/CertificationIssueReport'); -const { - CertificationIssueReportCategories, +import { databaseBuilder, domainBuilder, expect } from '../../../test-helper.js'; +import { JuryCertificationSummary } from '../../../../lib/domain/read-models/JuryCertificationSummary.js'; +import { CertificationIssueReport } from '../../../../lib/domain/models/CertificationIssueReport.js'; + +import { + CertificationIssueReportCategory, CertificationIssueReportSubcategories, ImpactfulSubcategories, -} = require('../../../../lib/domain/models/CertificationIssueReportCategory'); -const { status: assessmentResultStatuses } = require('../../../../lib/domain/models/AssessmentResult'); -const juryCertificationSummaryRepository = require('../../../../lib/infrastructure/repositories/jury-certification-summary-repository'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +} from '../../../../lib/domain/models/CertificationIssueReportCategory.js'; + +import { status as assessmentResultStatuses } from '../../../../lib/domain/models/AssessmentResult.js'; +import * as juryCertificationSummaryRepository from '../../../../lib/infrastructure/repositories/jury-certification-summary-repository.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; describe('Integration | Repository | JuryCertificationSummary', function () { describe('#findBySessionId', function () { @@ -51,13 +53,13 @@ describe('Integration | Repository | JuryCertificationSummary', function () { dbf.buildAssessment({ certificationCourseId: startedCertification.id }); categoryId = dbf.buildIssueReportCategory({ - name: CertificationIssueReportCategories.OTHER, + name: CertificationIssueReportCategory.OTHER, isImpactful: false, }).id; certificationIssueReport = dbf.buildCertificationIssueReport({ certificationCourseId: manyAsrCertification.id, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, categoryId, description, }); @@ -98,7 +100,7 @@ describe('Integration | Repository | JuryCertificationSummary', function () { categoryId, subcategory: null, questionNumber: null, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, hasBeenAutomaticallyResolved: null, resolvedAt: null, resolution: null, @@ -183,20 +185,20 @@ describe('Integration | Repository | JuryCertificationSummary', function () { const manyAsrAssessmentId = dbf.buildAssessment({ certificationCourseId: manyAsrCertification.id }).id; const categoryId = dbf.buildIssueReportCategory({ - name: CertificationIssueReportCategories.OTHER, + name: CertificationIssueReportCategory.OTHER, isImpactful: false, }).id; const issueReport1 = dbf.buildCertificationIssueReport({ certificationCourseId: manyAsrCertification.id, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, categoryId, description: 'first certification issue report', hasBeenAutomaticallyResolved: false, }); const issueReport2 = dbf.buildCertificationIssueReport({ certificationCourseId: manyAsrCertification.id, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, categoryId, description: 'second certification issue report', hasBeenAutomaticallyResolved: false, @@ -316,25 +318,25 @@ describe('Integration | Repository | JuryCertificationSummary', function () { }); const categoryId = dbf.buildIssueReportCategory({ - name: CertificationIssueReportCategories.OTHER, + name: CertificationIssueReportCategory.OTHER, isImpactful: false, }).id; const issueReport1 = dbf.buildCertificationIssueReport({ certificationCourseId: manyAsrCertification.id, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, categoryId, description: 'first certification issue report', hasBeenAutomaticallyResolved: false, }); dbf.buildIssueReportCategory({ - name: CertificationIssueReportCategories.OTHER, + name: CertificationIssueReportCategory.OTHER, isImpactful: true, isDeprecated: true, }); const issueReport2 = dbf.buildCertificationIssueReport({ certificationCourseId: manyAsrCertification.id, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, categoryId, description: 'second certification issue report', hasBeenAutomaticallyResolved: false, @@ -513,7 +515,7 @@ describe('Integration | Repository | JuryCertificationSummary', function () { dbf.buildIssueReportCategory({ id: 3, - name: CertificationIssueReportCategories.IN_CHALLENGE, + name: CertificationIssueReportCategory.IN_CHALLENGE, isImpactful: true, isDeprecated: false, }); diff --git a/api/tests/integration/infrastructure/repositories/knowledge-element-repository_test.js b/api/tests/integration/infrastructure/repositories/knowledge-element-repository_test.js index 749d1be6726..6bd5fd6fac9 100644 --- a/api/tests/integration/infrastructure/repositories/knowledge-element-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/knowledge-element-repository_test.js @@ -1,10 +1,9 @@ -const _ = require('lodash'); -const { expect, knex, domainBuilder, databaseBuilder, sinon } = require('../../../test-helper'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const knowledgeElementRepository = require('../../../../lib/infrastructure/repositories/knowledge-element-repository'); -const knowledgeElementSnapshotRepository = require('../../../../lib/infrastructure/repositories/knowledge-element-snapshot-repository'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import _ from 'lodash'; +import { expect, knex, domainBuilder, databaseBuilder, sinon } from '../../../test-helper.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import * as knowledgeElementRepository from '../../../../lib/infrastructure/repositories/knowledge-element-repository.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED } = CampaignParticipationStatuses; @@ -2031,7 +2030,6 @@ describe('Integration | Repository | knowledgeElementRepository', function () { it('should return the knowledge elements in the snapshot', async function () { // given - sandbox.spy(knowledgeElementSnapshotRepository); const dateSharedAtUserId1 = new Date('2020-01-03'); const knowledgeElement = databaseBuilder.factory.buildKnowledgeElement({ userId: userId1 }); databaseBuilder.factory.buildKnowledgeElementSnapshot({ @@ -2048,14 +2046,6 @@ describe('Integration | Repository | knowledgeElementRepository', function () { // then expect(knowledgeElementsByUserIdAndCompetenceId[userId1][0]).to.deep.equal(knowledgeElement); - expect(knowledgeElementSnapshotRepository.findByUserIdsAndSnappedAtDates).to.have.been.calledWith({ - [userId1]: dateSharedAtUserId1, - }); - await expect( - knowledgeElementSnapshotRepository.findByUserIdsAndSnappedAtDates.firstCall.returnValue - ).to.eventually.deep.equal({ - [userId1]: [knowledgeElement], - }); }); }); diff --git a/api/tests/integration/infrastructure/repositories/knowledge-element-snapshot-repository_test.js b/api/tests/integration/infrastructure/repositories/knowledge-element-snapshot-repository_test.js index 2f1396152ca..98d2cfda91c 100644 --- a/api/tests/integration/infrastructure/repositories/knowledge-element-snapshot-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/knowledge-element-snapshot-repository_test.js @@ -1,8 +1,8 @@ -const { knex, expect, databaseBuilder, catchErr } = require('../../../test-helper'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const knowledgeElementSnapshotRepository = require('../../../../lib/infrastructure/repositories/knowledge-element-snapshot-repository'); -const { AlreadyExistingEntityError } = require('../../../../lib/domain/errors'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +import { knex, expect, databaseBuilder, catchErr } from '../../../test-helper.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import * as knowledgeElementSnapshotRepository from '../../../../lib/infrastructure/repositories/knowledge-element-snapshot-repository.js'; +import { AlreadyExistingEntityError } from '../../../../lib/domain/errors.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; describe('Integration | Repository | KnowledgeElementSnapshotRepository', function () { describe('#save', function () { diff --git a/api/tests/integration/infrastructure/repositories/learning-content-repository_test.js b/api/tests/integration/infrastructure/repositories/learning-content-repository_test.js index 3e7a557bd5f..d51b7d7b635 100644 --- a/api/tests/integration/infrastructure/repositories/learning-content-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/learning-content-repository_test.js @@ -1,13 +1,14 @@ -const { +import { expect, databaseBuilder, catchErr, mockLearningContent, domainBuilder, learningContentBuilder, -} = require('../../../test-helper'); -const { NoSkillsInCampaignError, NotFoundError } = require('../../../../lib/domain/errors'); -const learningContentRepository = require('../../../../lib/infrastructure/repositories/learning-content-repository'); +} from '../../../test-helper.js'; + +import { NoSkillsInCampaignError, NotFoundError } from '../../../../lib/domain/errors.js'; +import * as learningContentRepository from '../../../../lib/infrastructure/repositories/learning-content-repository.js'; describe('Integration | Repository | learning-content', function () { let learningContent; @@ -19,7 +20,7 @@ describe('Integration | Repository | learning-content', function () { let skill1, skill2, skill3, skill8; beforeEach(function () { - learningContent = learningContentBuilder.buildLearningContent([ + learningContent = learningContentBuilder([ { id: 'recFramework1', name: 'Mon référentiel 1', diff --git a/api/tests/integration/infrastructure/repositories/membership-repository_test.js b/api/tests/integration/infrastructure/repositories/membership-repository_test.js index 2a1a4d1f233..1d73a6d8cce 100644 --- a/api/tests/integration/infrastructure/repositories/membership-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/membership-repository_test.js @@ -1,10 +1,10 @@ -const { expect, knex, databaseBuilder, catchErr, sinon } = require('../../../test-helper'); -const _ = require('lodash'); -const membershipRepository = require('../../../../lib/infrastructure/repositories/membership-repository'); -const { MembershipCreationError, MembershipUpdateError, NotFoundError } = require('../../../../lib/domain/errors'); -const Membership = require('../../../../lib/domain/models/Membership'); -const Organization = require('../../../../lib/domain/models/Organization'); -const User = require('../../../../lib/domain/models/User'); +import { expect, knex, databaseBuilder, catchErr, sinon } from '../../../test-helper.js'; +import _ from 'lodash'; +import * as membershipRepository from '../../../../lib/infrastructure/repositories/membership-repository.js'; +import { MembershipCreationError, MembershipUpdateError, NotFoundError } from '../../../../lib/domain/errors.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { Organization } from '../../../../lib/domain/models/Organization.js'; +import { User } from '../../../../lib/domain/models/User.js'; describe('Integration | Infrastructure | Repository | membership-repository', function () { let clock; diff --git a/api/tests/integration/infrastructure/repositories/organization-for-admin-repository_test.js b/api/tests/integration/infrastructure/repositories/organization-for-admin-repository_test.js index c27d651c0af..b42b6f68c63 100644 --- a/api/tests/integration/infrastructure/repositories/organization-for-admin-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organization-for-admin-repository_test.js @@ -1,10 +1,10 @@ -const { catchErr, expect, domainBuilder, databaseBuilder, sinon, knex } = require('../../../test-helper'); -const { NotFoundError, MissingAttributesError } = require('../../../../lib/domain/errors'); -const OrganizationForAdmin = require('../../../../lib/domain/models/organizations-administration/Organization'); -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); -const organizationForAdminRepository = require('../../../../lib/infrastructure/repositories/organization-for-admin-repository'); -const { SamlIdentityProviders } = require('../../../../lib/domain/constants/saml-identity-providers'); -const OidcIdentityProviders = require('../../../../lib/domain/constants/oidc-identity-providers'); +import { catchErr, expect, domainBuilder, databaseBuilder, sinon, knex } from '../../../test-helper.js'; +import { NotFoundError, MissingAttributesError } from '../../../../lib/domain/errors.js'; +import { OrganizationForAdmin } from '../../../../lib/domain/models/organizations-administration/Organization.js'; +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; +import * as organizationForAdminRepository from '../../../../lib/infrastructure/repositories/organization-for-admin-repository.js'; +import { SamlIdentityProviders } from '../../../../lib/domain/constants/saml-identity-providers.js'; +import * as OidcIdentityProviders from '../../../../lib/domain/constants/oidc-identity-providers.js'; describe('Integration | Repository | Organization-for-admin', function () { let clock; diff --git a/api/tests/integration/infrastructure/repositories/organization-invitation-repository_test.js b/api/tests/integration/infrastructure/repositories/organization-invitation-repository_test.js index e31255a5770..673c1811d96 100644 --- a/api/tests/integration/infrastructure/repositories/organization-invitation-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organization-invitation-repository_test.js @@ -1,10 +1,10 @@ -const _ = require('lodash'); -const { expect, knex, databaseBuilder, catchErr, sinon } = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const Membership = require('../../../../lib/domain/models/Membership'); -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); -const organizationInvitationRepository = require('../../../../lib/infrastructure/repositories/organization-invitation-repository'); -const BookshelfOrganizationInvitation = require('../../../../lib/infrastructure/orm-models/OrganizationInvitation'); +import _ from 'lodash'; +import { expect, knex, databaseBuilder, catchErr, sinon } from '../../../test-helper.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; +import * as organizationInvitationRepository from '../../../../lib/infrastructure/repositories/organization-invitation-repository.js'; +import { BookshelfOrganizationInvitation } from '../../../../lib/infrastructure/orm-models/OrganizationInvitation.js'; describe('Integration | Repository | OrganizationInvitationRepository', function () { describe('#create', function () { diff --git a/api/tests/integration/infrastructure/repositories/organization-invited-user-repository_test.js b/api/tests/integration/infrastructure/repositories/organization-invited-user-repository_test.js index 8adccf095c3..60fdb32522c 100644 --- a/api/tests/integration/infrastructure/repositories/organization-invited-user-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organization-invited-user-repository_test.js @@ -1,8 +1,8 @@ -const { expect, databaseBuilder, catchErr, knex, sinon } = require('../../../test-helper'); -const organizationInvitedUserRepository = require('../../../../lib/infrastructure/repositories/organization-invited-user-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); -const OrganizationInvitedUser = require('../../../../lib/domain/models/OrganizationInvitedUser'); +import { expect, databaseBuilder, catchErr, knex, sinon } from '../../../test-helper.js'; +import * as organizationInvitedUserRepository from '../../../../lib/infrastructure/repositories/organization-invited-user-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; +import { OrganizationInvitedUser } from '../../../../lib/domain/models/OrganizationInvitedUser.js'; describe('Integration | Repository | OrganizationInvitedUserRepository', function () { afterEach(async function () { diff --git a/api/tests/integration/infrastructure/repositories/organization-learner-activity-repository_test.js b/api/tests/integration/infrastructure/repositories/organization-learner-activity-repository_test.js index 63bc298909e..e0dfebf0ed5 100644 --- a/api/tests/integration/infrastructure/repositories/organization-learner-activity-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organization-learner-activity-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const organizationLearnerActivityRepository = require('../../../../lib/infrastructure/repositories/organization-learner-activity-repository'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as organizationLearnerActivityRepository from '../../../../lib/infrastructure/repositories/organization-learner-activity-repository.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED } = CampaignParticipationStatuses; describe('Integration | Infrastructure | Repository | organization-learner-activity', function () { diff --git a/api/tests/integration/infrastructure/repositories/organization-learner-follow-up/organization-learner-repository_test.js b/api/tests/integration/infrastructure/repositories/organization-learner-follow-up/organization-learner-repository_test.js index 9e1d01805ca..3c4f08972fd 100644 --- a/api/tests/integration/infrastructure/repositories/organization-learner-follow-up/organization-learner-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organization-learner-follow-up/organization-learner-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, catchErr } = require('../../../../test-helper'); -const organizationLearnerFollowUpRepository = require('../../../../../lib/infrastructure/repositories/organization-learner-follow-up/organization-learner-repository'); -const { NotFoundError } = require('../../../../../lib/domain/errors'); -const AuthenticationMethod = require('../../../../../lib/domain/models/AuthenticationMethod'); +import { expect, databaseBuilder, catchErr } from '../../../../test-helper.js'; +import * as organizationLearnerFollowUpRepository from '../../../../../lib/infrastructure/repositories/organization-learner-follow-up/organization-learner-repository.js'; +import { NotFoundError } from '../../../../../lib/domain/errors.js'; +import { AuthenticationMethod } from '../../../../../lib/domain/models/AuthenticationMethod.js'; describe('Integration | Infrastructure | Repository | Organization Learner Follow Up | Organization Learner', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/organization-learner-repository_test.js b/api/tests/integration/infrastructure/repositories/organization-learner-repository_test.js index f4e70c89d0b..50b91b2acc0 100644 --- a/api/tests/integration/infrastructure/repositories/organization-learner-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organization-learner-repository_test.js @@ -1,20 +1,19 @@ -const _ = require('lodash'); +import _ from 'lodash'; -const { expect, domainBuilder, databaseBuilder, knex, catchErr, sinon } = require('../../../test-helper'); +import { expect, domainBuilder, databaseBuilder, knex, catchErr, sinon } from '../../../test-helper.js'; +import { OrganizationLearner } from '../../../../lib/domain/models/OrganizationLearner.js'; +import { OrganizationLearnerForAdmin } from '../../../../lib/domain/read-models/OrganizationLearnerForAdmin.js'; -const OrganizationLearner = require('../../../../lib/domain/models/OrganizationLearner'); -const OrganizationLearnerForAdmin = require('../../../../lib/domain/read-models/OrganizationLearnerForAdmin'); - -const { +import { NotFoundError, OrganizationLearnersCouldNotBeSavedError, OrganizationLearnerNotFound, UserCouldNotBeReconciledError, UserNotFoundError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; -const organizationLearnerRepository = require('../../../../lib/infrastructure/repositories/organization-learner-repository'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +import * as organizationLearnerRepository from '../../../../lib/infrastructure/repositories/organization-learner-repository.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; describe('Integration | Infrastructure | Repository | organization-learner-repository', function () { describe('#findByIds', function () { diff --git a/api/tests/integration/infrastructure/repositories/organization-member-identity-repository_test.js b/api/tests/integration/infrastructure/repositories/organization-member-identity-repository_test.js index 0cb4e09bc8b..83855083f76 100644 --- a/api/tests/integration/infrastructure/repositories/organization-member-identity-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organization-member-identity-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const OrganizationMemberIdentity = require('../../../../lib/domain/models/OrganizationMemberIdentity'); -const organizationMemberIdentityRepository = require('../../../../lib/infrastructure/repositories/organization-member-identity-repository'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { OrganizationMemberIdentity } from '../../../../lib/domain/models/OrganizationMemberIdentity.js'; +import * as organizationMemberIdentityRepository from '../../../../lib/infrastructure/repositories/organization-member-identity-repository.js'; describe('Integration | Repository | organizationMemberIdentityRepository', function () { describe('#findAllByOrganizationId', function () { diff --git a/api/tests/integration/infrastructure/repositories/organization-participant-repository_test.js b/api/tests/integration/infrastructure/repositories/organization-participant-repository_test.js index f6fb48aca28..d464481d25e 100644 --- a/api/tests/integration/infrastructure/repositories/organization-participant-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organization-participant-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const organizationParticipantRepository = require('../../../../lib/infrastructure/repositories/organization-participant-repository'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as organizationParticipantRepository from '../../../../lib/infrastructure/repositories/organization-participant-repository.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; function buildLearnerWithParticipation({ organizationId, diff --git a/api/tests/integration/infrastructure/repositories/organization-places-capacity-repository_test.js b/api/tests/integration/infrastructure/repositories/organization-places-capacity-repository_test.js index 89dbb008abb..fe29cfdccef 100644 --- a/api/tests/integration/infrastructure/repositories/organization-places-capacity-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organization-places-capacity-repository_test.js @@ -1,7 +1,7 @@ -const sinon = require('sinon'); -const { expect, databaseBuilder } = require('../../../test-helper'); -const organizationPlacesCapacityRepository = require('../../../../lib/infrastructure/repositories/organization-places-capacity-repository'); -const categories = require('../../../../lib/domain/constants/organization-places-categories'); +import sinon from 'sinon'; +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as organizationPlacesCapacityRepository from '../../../../lib/infrastructure/repositories/organization-places-capacity-repository.js'; +import * as categories from '../../../../lib/domain/constants/organization-places-categories.js'; describe('Integration | Infrastructure | Repository | OrganizationPlacesCapacityRepository', function () { describe('#findByOrganizationId', function () { diff --git a/api/tests/integration/infrastructure/repositories/organization-repository_test.js b/api/tests/integration/infrastructure/repositories/organization-repository_test.js index 2087d2d339a..f8243253722 100644 --- a/api/tests/integration/infrastructure/repositories/organization-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organization-repository_test.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const { catchErr, expect, knex, domainBuilder, databaseBuilder } = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const Organization = require('../../../../lib/domain/models/Organization'); -const organizationRepository = require('../../../../lib/infrastructure/repositories/organization-repository'); -const { SamlIdentityProviders } = require('../../../../lib/domain/constants/saml-identity-providers'); +import _ from 'lodash'; +import { catchErr, expect, knex, domainBuilder, databaseBuilder } from '../../../test-helper.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { Organization } from '../../../../lib/domain/models/Organization.js'; +import * as organizationRepository from '../../../../lib/infrastructure/repositories/organization-repository.js'; +import { SamlIdentityProviders } from '../../../../lib/domain/constants/saml-identity-providers.js'; describe('Integration | Repository | Organization', function () { describe('#create', function () { diff --git a/api/tests/integration/infrastructure/repositories/organization-tag-repository_test.js b/api/tests/integration/infrastructure/repositories/organization-tag-repository_test.js index ad2ca123465..eb8253ad154 100644 --- a/api/tests/integration/infrastructure/repositories/organization-tag-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organization-tag-repository_test.js @@ -1,9 +1,10 @@ -const { expect, knex, domainBuilder, databaseBuilder, catchErr } = require('../../../test-helper'); -const OrganizationTag = require('../../../../lib/domain/models/OrganizationTag'); -const { AlreadyExistingEntityError, OrganizationTagNotFound } = require('../../../../lib/domain/errors'); -const organizationTagRepository = require('../../../../lib/infrastructure/repositories/organization-tag-repository'); -const omit = require('lodash/omit'); -const BookshelfOrganizationTag = require('../../../../lib/infrastructure/orm-models/OrganizationTag'); +import { expect, knex, domainBuilder, databaseBuilder, catchErr } from '../../../test-helper.js'; +import { OrganizationTag } from '../../../../lib/domain/models/OrganizationTag.js'; +import { AlreadyExistingEntityError, OrganizationTagNotFound } from '../../../../lib/domain/errors.js'; +import * as organizationTagRepository from '../../../../lib/infrastructure/repositories/organization-tag-repository.js'; +import lodash from 'lodash'; +const { omit } = lodash; +import { BookshelfOrganizationTag } from '../../../../lib/infrastructure/orm-models/OrganizationTag.js'; describe('Integration | Repository | OrganizationTagRepository', function () { describe('#create', function () { @@ -61,7 +62,7 @@ describe('Integration | Repository | OrganizationTagRepository', function () { await databaseBuilder.commit(); // when - await organizationTagRepository.delete({ organizationTagId: organizationTagToBeDeleteId }); + await organizationTagRepository.remove({ organizationTagId: organizationTagToBeDeleteId }); // then const nbOrganizationTagAfterDeletion = await BookshelfOrganizationTag.count(); @@ -81,7 +82,7 @@ describe('Integration | Repository | OrganizationTagRepository', function () { // when const inexistingOranizationTagId = organizationTagId + 1; - const error = await catchErr(organizationTagRepository.delete)({ + const error = await catchErr(organizationTagRepository.remove)({ organizationTagId: inexistingOranizationTagId, }); diff --git a/api/tests/integration/infrastructure/repositories/organizations-administration/organization-feature-repository_test.js b/api/tests/integration/infrastructure/repositories/organizations-administration/organization-feature-repository_test.js index 00ef30a5850..e9a33284c0f 100644 --- a/api/tests/integration/infrastructure/repositories/organizations-administration/organization-feature-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organizations-administration/organization-feature-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder } = require('../../../../test-helper'); -const { knex } = require('../../../../../db/knex-database-connection'); -const organizationFeatureRepository = require('../../../../../lib/infrastructure/repositories/organizations-administration/organization-feature-repository'); +import { expect, databaseBuilder } from '../../../../test-helper.js'; +import { knex } from '../../../../../db/knex-database-connection.js'; +import * as organizationFeatureRepository from '../../../../../lib/infrastructure/repositories/organizations-administration/organization-feature-repository.js'; describe('Integration | Repository | Organization feature', function () { let organizationId; diff --git a/api/tests/integration/infrastructure/repositories/organizations-to-attach-to-target-profile-repository_test.js b/api/tests/integration/infrastructure/repositories/organizations-to-attach-to-target-profile-repository_test.js index 993213dd3dd..46bb082ca7b 100644 --- a/api/tests/integration/infrastructure/repositories/organizations-to-attach-to-target-profile-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organizations-to-attach-to-target-profile-repository_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder, databaseBuilder, knex, catchErr } = require('../../../test-helper'); -const organizationsToAttachToTargetProfileRepository = require('../../../../lib/infrastructure/repositories/organizations-to-attach-to-target-profile-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, domainBuilder, databaseBuilder, knex, catchErr } from '../../../test-helper.js'; +import * as organizationsToAttachToTargetProfileRepository from '../../../../lib/infrastructure/repositories/organizations-to-attach-to-target-profile-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | Organizations-to-attach-to-target-profile', function () { describe('#attachOrganizations', function () { diff --git a/api/tests/integration/infrastructure/repositories/organizations/organization-places-lot-repository_test.js b/api/tests/integration/infrastructure/repositories/organizations/organization-places-lot-repository_test.js index e6540fbbada..ffddf34c215 100644 --- a/api/tests/integration/infrastructure/repositories/organizations/organization-places-lot-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/organizations/organization-places-lot-repository_test.js @@ -1,10 +1,10 @@ -const { expect, databaseBuilder, catchErr, sinon } = require('../../../../test-helper'); -const { knex } = require('../../../../../db/knex-database-connection'); -const organizationPlacesLotRepository = require('../../../../../lib/infrastructure/repositories/organizations/organization-places-lot-repository'); -const OrganizationPlacesLotManagement = require('../../../../../lib/domain/read-models/OrganizationPlacesLotManagement'); -const OrganizationPlacesLot = require('../../../../../lib/domain/models/OrganizationPlacesLot'); -const categories = require('../../../../../lib/domain/constants/organization-places-categories'); -const { NotFoundError, DeletedError } = require('../../../../../lib/domain/errors'); +import { expect, databaseBuilder, catchErr, sinon } from '../../../../test-helper.js'; +import { knex } from '../../../../../db/knex-database-connection.js'; +import * as organizationPlacesLotRepository from '../../../../../lib/infrastructure/repositories/organizations/organization-places-lot-repository.js'; +import { OrganizationPlacesLotManagement } from '../../../../../lib/domain/read-models/OrganizationPlacesLotManagement.js'; +import { OrganizationPlacesLot } from '../../../../../lib/domain/models/OrganizationPlacesLot.js'; +import * as categories from '../../../../../lib/domain/constants/organization-places-categories.js'; +import { NotFoundError, DeletedError } from '../../../../../lib/domain/errors.js'; describe('Integration | Repository | Organization Place', function () { describe('#findByOrganizationId', function () { @@ -262,7 +262,7 @@ describe('Integration | Repository | Organization Place', function () { await databaseBuilder.commit(); // when - await organizationPlacesLotRepository.delete({ + await organizationPlacesLotRepository.remove({ id: organizationPlace.id, deletedBy: user.id, }); @@ -284,7 +284,7 @@ describe('Integration | Repository | Organization Place', function () { await databaseBuilder.commit(); // when - const error = await catchErr(organizationPlacesLotRepository.delete)({ + const error = await catchErr(organizationPlacesLotRepository.remove)({ id: organizationPlace.id, deletedBy: user.id, }); @@ -304,7 +304,7 @@ describe('Integration | Repository | Organization Place', function () { await databaseBuilder.commit(); // when - await catchErr(organizationPlacesLotRepository.delete)({ + await catchErr(organizationPlacesLotRepository.remove)({ id: organizationPlace.id, deletedBy: user.id, }); diff --git a/api/tests/integration/infrastructure/repositories/participant-result-repository_test.js b/api/tests/integration/infrastructure/repositories/participant-result-repository_test.js index 7c36c2ad7da..4f3d2915f29 100644 --- a/api/tests/integration/infrastructure/repositories/participant-result-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/participant-result-repository_test.js @@ -1,9 +1,9 @@ -const { catchErr, expect, databaseBuilder, mockLearningContent, domainBuilder } = require('../../../test-helper'); -const participantResultRepository = require('../../../../lib/infrastructure/repositories/participant-result-repository'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +import { catchErr, expect, databaseBuilder, mockLearningContent, domainBuilder } from '../../../test-helper.js'; +import * as participantResultRepository from '../../../../lib/infrastructure/repositories/participant-result-repository.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; const { STARTED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/infrastructure/repositories/participant-results-shared-repository_test.js b/api/tests/integration/infrastructure/repositories/participant-results-shared-repository_test.js index 7c576faf587..1eedd47218b 100644 --- a/api/tests/integration/infrastructure/repositories/participant-results-shared-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/participant-results-shared-repository_test.js @@ -1,7 +1,7 @@ -const { expect, knex, databaseBuilder, mockLearningContent } = require('../../../test-helper'); -const participantResultsSharedRepository = require('../../../../lib/infrastructure/repositories/participant-results-shared-repository'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const { MAX_REACHABLE_PIX_BY_COMPETENCE } = require('../../../../lib/domain/constants'); +import { expect, knex, databaseBuilder, mockLearningContent } from '../../../test-helper.js'; +import { participantResultsSharedRepository } from '../../../../lib/infrastructure/repositories/participant-results-shared-repository.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { MAX_REACHABLE_PIX_BY_COMPETENCE } from '../../../../lib/domain/constants.js'; describe('Integration | Repository | Campaign Participant Result Shared Repository', function () { describe('#save', function () { diff --git a/api/tests/integration/infrastructure/repositories/participations-for-campaign-management-repository_test.js b/api/tests/integration/infrastructure/repositories/participations-for-campaign-management-repository_test.js index 748d2c31576..3073eaf9a1d 100644 --- a/api/tests/integration/infrastructure/repositories/participations-for-campaign-management-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/participations-for-campaign-management-repository_test.js @@ -1,9 +1,9 @@ -const { expect, databaseBuilder, catchErr, knex } = require('../../../test-helper'); -const participationsForCampaignManagementRepository = require('../../../../lib/infrastructure/repositories/participations-for-campaign-management-repository'); -const _ = require('lodash'); -const ParticipationForCampaignManagement = require('../../../../lib/domain/models/ParticipationForCampaignManagement'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, databaseBuilder, catchErr, knex } from '../../../test-helper.js'; +import * as participationsForCampaignManagementRepository from '../../../../lib/infrastructure/repositories/participations-for-campaign-management-repository.js'; +import _ from 'lodash'; +import { ParticipationForCampaignManagement } from '../../../../lib/domain/models/ParticipationForCampaignManagement.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/infrastructure/repositories/participations-for-user-management-repository_test.js b/api/tests/integration/infrastructure/repositories/participations-for-user-management-repository_test.js index 01cb2ad9b4d..3b814cde9cb 100644 --- a/api/tests/integration/infrastructure/repositories/participations-for-user-management-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/participations-for-user-management-repository_test.js @@ -1,8 +1,8 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const participationsForUserManagementRepository = require('../../../../lib/infrastructure/repositories/participations-for-user-management-repository'); -const _ = require('lodash'); -const CampaignParticipationForUserManagement = require('../../../../lib/domain/read-models/CampaignParticipationForUserManagement'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as participationsForUserManagementRepository from '../../../../lib/infrastructure/repositories/participations-for-user-management-repository.js'; +import _ from 'lodash'; +import { CampaignParticipationForUserManagement } from '../../../../lib/domain/read-models/CampaignParticipationForUserManagement.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/infrastructure/repositories/partner-certification-scoring-repository_test.js b/api/tests/integration/infrastructure/repositories/partner-certification-scoring-repository_test.js index 61079bd083f..4e6556fd17f 100644 --- a/api/tests/integration/infrastructure/repositories/partner-certification-scoring-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/partner-certification-scoring-repository_test.js @@ -1,7 +1,8 @@ -const { expect, databaseBuilder, domainBuilder, knex, sinon } = require('../../../test-helper'); -const omit = require('lodash/omit'); -const partnerCertificationScoringRepository = require('../../../../lib/infrastructure/repositories/partner-certification-scoring-repository'); -const ComplementaryCertificationCourseResult = require('../../../../lib/domain/models/ComplementaryCertificationCourseResult'); +import { expect, databaseBuilder, domainBuilder, knex, sinon } from '../../../test-helper.js'; +import lodash from 'lodash'; +const { omit } = lodash; +import * as partnerCertificationScoringRepository from '../../../../lib/infrastructure/repositories/partner-certification-scoring-repository.js'; +import { ComplementaryCertificationCourseResult } from '../../../../lib/domain/models/ComplementaryCertificationCourseResult.js'; describe('Integration | Repository | Partner Certification Scoring', function () { const COMPLEMENTARY_CERTIFICATION_COURSE_RESULTS_TABLE_NAME = 'complementary-certification-course-results'; diff --git a/api/tests/integration/infrastructure/repositories/pole-emploi-sending-repository_test.js b/api/tests/integration/infrastructure/repositories/pole-emploi-sending-repository_test.js index b31bf75d01e..ceccaa91623 100644 --- a/api/tests/integration/infrastructure/repositories/pole-emploi-sending-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/pole-emploi-sending-repository_test.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); -const { expect, databaseBuilder, knex, domainBuilder } = require('../../../test-helper'); -const poleEmploiSendingRepository = require('../../../../lib/infrastructure/repositories/pole-emploi-sending-repository'); -const settings = require('../../../../lib/config'); +import _ from 'lodash'; +import { expect, databaseBuilder, knex, domainBuilder } from '../../../test-helper.js'; +import * as poleEmploiSendingRepository from '../../../../lib/infrastructure/repositories/pole-emploi-sending-repository.js'; +import { config as settings } from '../../../../lib/config.js'; const poleEmploiSendingFactory = databaseBuilder.factory.poleEmploiSendingFactory; describe('Integration | Repository | PoleEmploiSending', function () { diff --git a/api/tests/integration/infrastructure/repositories/prescriber-repository_test.js b/api/tests/integration/infrastructure/repositories/prescriber-repository_test.js index 335ffd376f1..737c8c71751 100644 --- a/api/tests/integration/infrastructure/repositories/prescriber-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/prescriber-repository_test.js @@ -1,15 +1,14 @@ -const { expect, databaseBuilder, catchErr } = require('../../../test-helper'); -const bcrypt = require('bcrypt'); -const settings = require('../../../../lib/config'); - -const { ForbiddenAccess, UserNotFoundError } = require('../../../../lib/domain/errors'); -const prescriberRepository = require('../../../../lib/infrastructure/repositories/prescriber-repository'); -const Prescriber = require('../../../../lib/domain/read-models/Prescriber'); -const Membership = require('../../../../lib/domain/models/Membership'); -const UserOrgaSettings = require('../../../../lib/domain/models/UserOrgaSettings'); -const Organization = require('../../../../lib/domain/models/Organization'); -const Tag = require('../../../../lib/domain/models/Tag'); -const apps = require('../../../../lib/domain/constants.js'); +import { expect, databaseBuilder, catchErr } from '../../../test-helper.js'; +import bcrypt from 'bcrypt'; +import { config as settings } from '../../../../lib/config.js'; +import { ForbiddenAccess, UserNotFoundError } from '../../../../lib/domain/errors.js'; +import * as prescriberRepository from '../../../../lib/infrastructure/repositories/prescriber-repository.js'; +import { Prescriber } from '../../../../lib/domain/read-models/Prescriber.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { UserOrgaSettings } from '../../../../lib/domain/models/UserOrgaSettings.js'; +import { Organization } from '../../../../lib/domain/models/Organization.js'; +import { Tag } from '../../../../lib/domain/models/Tag.js'; +import * as apps from '../../../../lib/domain/constants.js'; describe('Integration | Infrastructure | Repository | Prescriber', function () { const userToInsert = { diff --git a/api/tests/integration/infrastructure/repositories/prescriber-role-repository_test.js b/api/tests/integration/infrastructure/repositories/prescriber-role-repository_test.js index 945315de708..875c339bb62 100644 --- a/api/tests/integration/infrastructure/repositories/prescriber-role-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/prescriber-role-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, catchErr } = require('../../../test-helper'); -const prescriberRoleRepository = require('../../../../lib/infrastructure/repositories/prescriber-role-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, databaseBuilder, catchErr } from '../../../test-helper.js'; +import * as prescriberRoleRepository from '../../../../lib/infrastructure/repositories/prescriber-role-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | Campaign', function () { describe('#getForCampaign', function () { diff --git a/api/tests/integration/infrastructure/repositories/reset-password-demands-repository_test.js b/api/tests/integration/infrastructure/repositories/reset-password-demands-repository_test.js index c1ba5850083..eb88d586c8d 100644 --- a/api/tests/integration/infrastructure/repositories/reset-password-demands-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/reset-password-demands-repository_test.js @@ -1,6 +1,6 @@ -const { expect, knex, databaseBuilder, catchErr } = require('../../../test-helper'); -const resetPasswordDemandsRepository = require('../../../../lib/infrastructure/repositories/reset-password-demands-repository'); -const { PasswordResetDemandNotFoundError } = require('../../../../lib/domain/errors'); +import { expect, knex, databaseBuilder, catchErr } from '../../../test-helper.js'; +import * as resetPasswordDemandsRepository from '../../../../lib/infrastructure/repositories/reset-password-demands-repository.js'; +import { PasswordResetDemandNotFoundError } from '../../../../lib/domain/errors.js'; describe('Integration | Infrastructure | Repository | reset-password-demands-repository', function () { afterEach(function () { diff --git a/api/tests/integration/infrastructure/repositories/sco-certification-candidate-repository_test.js b/api/tests/integration/infrastructure/repositories/sco-certification-candidate-repository_test.js index a66b998d3aa..10d2f889c3e 100644 --- a/api/tests/integration/infrastructure/repositories/sco-certification-candidate-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/sco-certification-candidate-repository_test.js @@ -1,6 +1,6 @@ -const { databaseBuilder, expect, knex, domainBuilder } = require('../../../test-helper'); -const scoCertificationCandidateRepository = require('../../../../lib/infrastructure/repositories/sco-certification-candidate-repository'); -const _ = require('lodash'); +import { databaseBuilder, expect, knex, domainBuilder } from '../../../test-helper.js'; +import * as scoCertificationCandidateRepository from '../../../../lib/infrastructure/repositories/sco-certification-candidate-repository.js'; +import _ from 'lodash'; describe('Integration | Repository | SCOCertificationCandidate', function () { describe('#addNonEnrolledCandidatesToSession', function () { diff --git a/api/tests/integration/infrastructure/repositories/sco-organization-participant-repository_test.js b/api/tests/integration/infrastructure/repositories/sco-organization-participant-repository_test.js index bb6f1ec46b4..5f4dbc0c081 100644 --- a/api/tests/integration/infrastructure/repositories/sco-organization-participant-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/sco-organization-participant-repository_test.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const { expect, databaseBuilder } = require('../../../test-helper'); -const scoOrganizationParticipantRepository = require('../../../../lib/infrastructure/repositories/sco-organization-participant-repository'); -const ScoOrganizationParticipant = require('../../../../lib/domain/read-models/ScoOrganizationParticipant'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import _ from 'lodash'; +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as scoOrganizationParticipantRepository from '../../../../lib/infrastructure/repositories/sco-organization-participant-repository.js'; +import { ScoOrganizationParticipant } from '../../../../lib/domain/read-models/ScoOrganizationParticipant.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; describe('Integration | Infrastructure | Repository | sco-organization-participant-repository', function () { describe('#findPaginatedFilteredScoParticipants', function () { diff --git a/api/tests/integration/infrastructure/repositories/sessions/finalized-session-repository_test.js b/api/tests/integration/infrastructure/repositories/sessions/finalized-session-repository_test.js index 5092de33b2b..23c873777e5 100644 --- a/api/tests/integration/infrastructure/repositories/sessions/finalized-session-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/sessions/finalized-session-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, knex, catchErr } = require('../../../../test-helper'); -const finalizedSessionRepository = require('../../../../../lib/infrastructure/repositories/sessions/finalized-session-repository'); -const FinalizedSession = require('../../../../../lib/domain/models/FinalizedSession'); -const { NotFoundError } = require('../../../../../lib/domain/errors'); +import { expect, databaseBuilder, knex, catchErr } from '../../../../test-helper.js'; +import * as finalizedSessionRepository from '../../../../../lib/infrastructure/repositories/sessions/finalized-session-repository.js'; +import { FinalizedSession } from '../../../../../lib/domain/models/FinalizedSession.js'; +import { NotFoundError } from '../../../../../lib/domain/errors.js'; describe('Integration | Repository | Finalized-session', function () { describe('#save', function () { diff --git a/api/tests/integration/infrastructure/repositories/sessions/jury-session-repository_test.js b/api/tests/integration/infrastructure/repositories/sessions/jury-session-repository_test.js index 7ea1236f837..08318c2feca 100644 --- a/api/tests/integration/infrastructure/repositories/sessions/jury-session-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/sessions/jury-session-repository_test.js @@ -1,10 +1,9 @@ -const _ = require('lodash'); -const { databaseBuilder, expect, catchErr, domainBuilder } = require('../../../../test-helper'); -const { NotFoundError } = require('../../../../../lib/domain/errors'); -const JurySession = require('../../../../../lib/domain/models/JurySession'); -const { statuses } = require('../../../../../lib/domain/models/JurySession'); -const CertificationOfficer = require('../../../../../lib/domain/models/CertificationOfficer'); -const jurySessionRepository = require('../../../../../lib/infrastructure/repositories/sessions/jury-session-repository'); +import _ from 'lodash'; +import { databaseBuilder, expect, catchErr, domainBuilder } from '../../../../test-helper.js'; +import { NotFoundError } from '../../../../../lib/domain/errors.js'; +import { JurySession, statuses } from '../../../../../lib/domain/models/JurySession.js'; +import { CertificationOfficer } from '../../../../../lib/domain/models/CertificationOfficer.js'; +import * as jurySessionRepository from '../../../../../lib/infrastructure/repositories/sessions/jury-session-repository.js'; describe('Integration | Repository | JurySession', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/sessions/session-for-attendance-sheet-repository_test.js b/api/tests/integration/infrastructure/repositories/sessions/session-for-attendance-sheet-repository_test.js index 8ba2eecd594..a7334d1d35c 100644 --- a/api/tests/integration/infrastructure/repositories/sessions/session-for-attendance-sheet-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/sessions/session-for-attendance-sheet-repository_test.js @@ -1,8 +1,8 @@ -const { databaseBuilder, expect, catchErr } = require('../../../../test-helper'); -const { NotFoundError } = require('../../../../../lib/domain/errors'); -const sessionForAttendanceSheetRepository = require('../../../../../lib/infrastructure/repositories/sessions/session-for-attendance-sheet-repository'); -const SessionForAttendanceSheet = require('../../../../../lib/domain/read-models/SessionForAttendanceSheet'); -const CertificationCandidateForAttendanceSheet = require('../../../../../lib/domain/read-models/CertificationCandidateForAttendanceSheet'); +import { databaseBuilder, expect, catchErr } from '../../../../test-helper.js'; +import { NotFoundError } from '../../../../../lib/domain/errors.js'; +import * as sessionForAttendanceSheetRepository from '../../../../../lib/infrastructure/repositories/sessions/session-for-attendance-sheet-repository.js'; +import { SessionForAttendanceSheet } from '../../../../../lib/domain/read-models/SessionForAttendanceSheet.js'; +import { CertificationCandidateForAttendanceSheet } from '../../../../../lib/domain/read-models/CertificationCandidateForAttendanceSheet.js'; describe('Integration | Repository | Session-for-attendance-sheet', function () { describe('#getWithCertificationCandidates', function () { diff --git a/api/tests/integration/infrastructure/repositories/sessions/session-for-supervising-repository_test.js b/api/tests/integration/infrastructure/repositories/sessions/session-for-supervising-repository_test.js index 3a07f33280b..bce25dcf8f3 100644 --- a/api/tests/integration/infrastructure/repositories/sessions/session-for-supervising-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/sessions/session-for-supervising-repository_test.js @@ -1,9 +1,9 @@ -const { databaseBuilder, expect, catchErr } = require('../../../../test-helper'); -const _ = require('lodash'); -const { NotFoundError } = require('../../../../../lib/domain/errors'); -const SessionForSupervising = require('../../../../../lib/domain/read-models/SessionForSupervising'); -const sessionForSupervisingRepository = require('../../../../../lib/infrastructure/repositories/sessions/session-for-supervising-repository'); -const Assessment = require('../../../../../lib/domain/models/Assessment'); +import { databaseBuilder, expect, catchErr } from '../../../../test-helper.js'; +import _ from 'lodash'; +import { NotFoundError } from '../../../../../lib/domain/errors.js'; +import { SessionForSupervising } from '../../../../../lib/domain/read-models/SessionForSupervising.js'; +import * as sessionForSupervisingRepository from '../../../../../lib/infrastructure/repositories/sessions/session-for-supervising-repository.js'; +import { Assessment } from '../../../../../lib/domain/models/Assessment.js'; describe('Integration | Repository | SessionForSupervising', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/sessions/session-for-supervisor-kit-repository_test.js b/api/tests/integration/infrastructure/repositories/sessions/session-for-supervisor-kit-repository_test.js index dfcd7570566..913e21c5830 100644 --- a/api/tests/integration/infrastructure/repositories/sessions/session-for-supervisor-kit-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/sessions/session-for-supervisor-kit-repository_test.js @@ -1,6 +1,6 @@ -const { databaseBuilder, expect } = require('../../../../test-helper'); -const sessionForSupervisorKitRepository = require('../../../../../lib/infrastructure/repositories/sessions/session-for-supervisor-kit-repository'); -const SessionForSupervisorKit = require('../../../../../lib/domain/read-models/SessionForSupervisorKit'); +import { databaseBuilder, expect } from '../../../../test-helper.js'; +import * as sessionForSupervisorKitRepository from '../../../../../lib/infrastructure/repositories/sessions/session-for-supervisor-kit-repository.js'; +import { SessionForSupervisorKit } from '../../../../../lib/domain/read-models/SessionForSupervisorKit.js'; describe('Integration | Repository | Session-for-supervisor-kit', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/sessions/session-jury-comment-repository_test.js b/api/tests/integration/infrastructure/repositories/sessions/session-jury-comment-repository_test.js index c23165f05f2..278132ed6c3 100644 --- a/api/tests/integration/infrastructure/repositories/sessions/session-jury-comment-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/sessions/session-jury-comment-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, domainBuilder, catchErr } = require('../../../../test-helper'); -const { NotFoundError } = require('../../../../../lib/domain/errors'); -const sessionJuryCommentRepository = require('../../../../../lib/infrastructure/repositories/sessions/session-jury-comment-repository'); +import { expect, databaseBuilder, domainBuilder, catchErr } from '../../../../test-helper.js'; +import { NotFoundError } from '../../../../../lib/domain/errors.js'; +import * as sessionJuryCommentRepository from '../../../../../lib/infrastructure/repositories/sessions/session-jury-comment-repository.js'; describe('Integration | Infrastructure | Repository | session-jury-comment-repository', function () { context('#get', function () { @@ -150,7 +150,7 @@ describe('Integration | Infrastructure | Repository | session-jury-comment-repos }); // when - await sessionJuryCommentRepository.delete(123); + await sessionJuryCommentRepository.remove(123); // then const deletedSessionJuryComment = await sessionJuryCommentRepository.get(123); diff --git a/api/tests/integration/infrastructure/repositories/sessions/session-repository_test.js b/api/tests/integration/infrastructure/repositories/sessions/session-repository_test.js index f17580791b8..8f73f56e8e8 100644 --- a/api/tests/integration/infrastructure/repositories/sessions/session-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/sessions/session-repository_test.js @@ -1,9 +1,8 @@ -const { databaseBuilder, expect, knex, domainBuilder, catchErr } = require('../../../../test-helper'); -const _ = require('lodash'); -const { NotFoundError } = require('../../../../../lib/domain/errors'); -const Session = require('../../../../../lib/domain/models/Session'); -const { statuses } = require('../../../../../lib/domain/models/Session'); -const sessionRepository = require('../../../../../lib/infrastructure/repositories/sessions/session-repository'); +import { databaseBuilder, expect, knex, domainBuilder, catchErr } from '../../../../test-helper.js'; +import _ from 'lodash'; +import { NotFoundError } from '../../../../../lib/domain/errors.js'; +import { Session, statuses } from '../../../../../lib/domain/models/Session.js'; +import * as sessionRepository from '../../../../../lib/infrastructure/repositories/sessions/session-repository.js'; describe('Integration | Repository | Session', function () { describe('#save', function () { @@ -556,7 +555,7 @@ describe('Integration | Repository | Session', function () { await databaseBuilder.commit(); // when - await sessionRepository.delete(sessionId); + await sessionRepository.remove(sessionId); // then const foundSession = await knex('sessions').select('id').where({ id: sessionId }).first(); @@ -582,7 +581,7 @@ describe('Integration | Repository | Session', function () { await databaseBuilder.commit(); // when - await sessionRepository.delete(sessionId); + await sessionRepository.remove(sessionId); // then const foundSession = await knex('sessions').select('id').where({ id: sessionId }).first(); @@ -605,7 +604,7 @@ describe('Integration | Repository | Session', function () { await databaseBuilder.commit(); // when - await sessionRepository.delete(sessionId); + await sessionRepository.remove(sessionId); // then const foundSession = await knex('sessions').select('id').where({ id: sessionId }).first(); @@ -623,7 +622,7 @@ describe('Integration | Repository | Session', function () { await databaseBuilder.commit(); // when - await sessionRepository.delete(sessionId); + await sessionRepository.remove(sessionId); // then const foundSession = await knex('sessions').select('id').where({ id: sessionId }).first(); @@ -638,7 +637,7 @@ describe('Integration | Repository | Session', function () { const sessionId = 123456; // when - const error = await catchErr(sessionRepository.delete)(sessionId); + const error = await catchErr(sessionRepository.remove)(sessionId); // then expect(error).to.be.instanceOf(NotFoundError); diff --git a/api/tests/integration/infrastructure/repositories/sessions/session-summary-repository_test.js b/api/tests/integration/infrastructure/repositories/sessions/session-summary-repository_test.js index 497abb01f7b..40a7e80169d 100644 --- a/api/tests/integration/infrastructure/repositories/sessions/session-summary-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/sessions/session-summary-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, domainBuilder } = require('../../../../test-helper'); -const sessionSummaryRepository = require('../../../../../lib/infrastructure/repositories/sessions/session-summary-repository'); -const _ = require('lodash'); +import { expect, databaseBuilder, domainBuilder } from '../../../../test-helper.js'; +import * as sessionSummaryRepository from '../../../../../lib/infrastructure/repositories/sessions/session-summary-repository.js'; +import _ from 'lodash'; describe('Integration | Repository | Session Summary', function () { describe('#findPaginatedByCertificationCenterId', function () { diff --git a/api/tests/integration/infrastructure/repositories/skill-repository_test.js b/api/tests/integration/infrastructure/repositories/skill-repository_test.js index d463961f544..903012eb024 100644 --- a/api/tests/integration/infrastructure/repositories/skill-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/skill-repository_test.js @@ -1,7 +1,7 @@ -const { expect, mockLearningContent, domainBuilder, catchErr } = require('../../../test-helper'); -const Skill = require('../../../../lib/domain/models/Skill'); -const skillRepository = require('../../../../lib/infrastructure/repositories/skill-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, mockLearningContent, domainBuilder, catchErr } from '../../../test-helper.js'; +import { Skill } from '../../../../lib/domain/models/Skill.js'; +import * as skillRepository from '../../../../lib/infrastructure/repositories/skill-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | skill-repository', function () { describe('#list', function () { diff --git a/api/tests/integration/infrastructure/repositories/skill-set-repository_test.js b/api/tests/integration/infrastructure/repositories/skill-set-repository_test.js index 83c1b059818..f3a8122141f 100644 --- a/api/tests/integration/infrastructure/repositories/skill-set-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/skill-set-repository_test.js @@ -1,7 +1,8 @@ -const { knex, expect, databaseBuilder } = require('../../../test-helper'); -const skillSetRepository = require('../../../../lib/infrastructure/repositories/skill-set-repository'); -const omit = require('lodash/omit'); -const SkillSet = require('../../../../lib/domain/models/SkillSet'); +import { knex, expect, databaseBuilder } from '../../../test-helper.js'; +import * as skillSetRepository from '../../../../lib/infrastructure/repositories/skill-set-repository.js'; +import lodash from 'lodash'; +const { omit } = lodash; +import { SkillSet } from '../../../../lib/domain/models/SkillSet.js'; describe('Integration | Repository | Skill Set Repository', function () { afterEach(async function () { diff --git a/api/tests/integration/infrastructure/repositories/student-repository_test.js b/api/tests/integration/infrastructure/repositories/student-repository_test.js index 38b6be9c7b2..daabba74821 100644 --- a/api/tests/integration/infrastructure/repositories/student-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/student-repository_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const studentRepository = require('../../../../lib/infrastructure/repositories/student-repository'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as studentRepository from '../../../../lib/infrastructure/repositories/student-repository.js'; describe('Integration | Infrastructure | Repository | student-repository', function () { describe('#findReconciledStudentsByNationalStudentId', function () { diff --git a/api/tests/integration/infrastructure/repositories/sup-organization-learner-repository_test.js b/api/tests/integration/infrastructure/repositories/sup-organization-learner-repository_test.js index 00a9638bd34..ebcee6ec21f 100644 --- a/api/tests/integration/infrastructure/repositories/sup-organization-learner-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/sup-organization-learner-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, knex, domainBuilder } = require('../../../test-helper'); -const supOrganizationLearnerRepository = require('../../../../lib/infrastructure/repositories/sup-organization-learner-repository'); -const OrganizationLearner = require('../../../../lib/domain/models/OrganizationLearner'); +import { expect, databaseBuilder, knex, domainBuilder } from '../../../test-helper.js'; +import * as supOrganizationLearnerRepository from '../../../../lib/infrastructure/repositories/sup-organization-learner-repository.js'; +import { OrganizationLearner } from '../../../../lib/domain/models/OrganizationLearner.js'; describe('Integration | Infrastructure | Repository | sup-organization-learner-repository', function () { describe('#findOneByStudentNumber', function () { diff --git a/api/tests/integration/infrastructure/repositories/sup-organization-participant-repository_test.js b/api/tests/integration/infrastructure/repositories/sup-organization-participant-repository_test.js index 8391b1d81e6..1c2daffb141 100644 --- a/api/tests/integration/infrastructure/repositories/sup-organization-participant-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/sup-organization-participant-repository_test.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const { expect, databaseBuilder } = require('../../../test-helper'); -const supOrganizationParticipantRepository = require('../../../../lib/infrastructure/repositories/sup-organization-participant-repository'); -const SupOrganizationParticipant = require('../../../../lib/domain/read-models/SupOrganizationParticipant'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import _ from 'lodash'; +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as supOrganizationParticipantRepository from '../../../../lib/infrastructure/repositories/sup-organization-participant-repository.js'; +import { SupOrganizationParticipant } from '../../../../lib/domain/read-models/SupOrganizationParticipant.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; describe('Integration | Infrastructure | Repository | sup-organization-participant-repository', function () { describe('#findPaginatedFilteredSupParticipants', function () { diff --git a/api/tests/integration/infrastructure/repositories/supervisor-access-repository_test.js b/api/tests/integration/infrastructure/repositories/supervisor-access-repository_test.js index 5a8643b170c..18df682f4a2 100644 --- a/api/tests/integration/infrastructure/repositories/supervisor-access-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/supervisor-access-repository_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const supervisorAccessRepository = require('../../../../lib/infrastructure/repositories/supervisor-access-repository'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import * as supervisorAccessRepository from '../../../../lib/infrastructure/repositories/supervisor-access-repository.js'; describe('Integration | Repository | supervisor-access-repository', function () { describe('#create', function () { diff --git a/api/tests/integration/infrastructure/repositories/tag-repository_test.js b/api/tests/integration/infrastructure/repositories/tag-repository_test.js index ce06ac7e004..b28508d2921 100644 --- a/api/tests/integration/infrastructure/repositories/tag-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/tag-repository_test.js @@ -1,9 +1,7 @@ -const { expect, knex, domainBuilder, databaseBuilder, catchErr } = require('../../../test-helper'); - -const { AlreadyExistingEntityError, NotFoundError } = require('../../../../lib/domain/errors'); - -const Tag = require('../../../../lib/domain/models/Tag'); -const tagRepository = require('../../../../lib/infrastructure/repositories/tag-repository'); +import { expect, knex, domainBuilder, databaseBuilder, catchErr } from '../../../test-helper.js'; +import { AlreadyExistingEntityError, NotFoundError } from '../../../../lib/domain/errors.js'; +import { Tag } from '../../../../lib/domain/models/Tag.js'; +import * as tagRepository from '../../../../lib/infrastructure/repositories/tag-repository.js'; describe('Integration | Repository | TagRepository', function () { afterEach(async function () { diff --git a/api/tests/integration/infrastructure/repositories/target-profile-for-admin-repository_test.js b/api/tests/integration/infrastructure/repositories/target-profile-for-admin-repository_test.js index 97a55a952f5..08ba388b7d7 100644 --- a/api/tests/integration/infrastructure/repositories/target-profile-for-admin-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/target-profile-for-admin-repository_test.js @@ -1,7 +1,7 @@ -const { expect, databaseBuilder, catchErr, mockLearningContent, domainBuilder } = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const targetProfileForAdminRepository = require('../../../../lib/infrastructure/repositories/target-profile-for-admin-repository'); -const TargetProfileForAdmin = require('../../../../lib/domain/models/TargetProfileForAdmin'); +import { expect, databaseBuilder, catchErr, mockLearningContent, domainBuilder } from '../../../test-helper.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import * as targetProfileForAdminRepository from '../../../../lib/infrastructure/repositories/target-profile-for-admin-repository.js'; +import { TargetProfileForAdmin } from '../../../../lib/domain/models/TargetProfileForAdmin.js'; describe('Integration | Repository | target-profile-for-admin', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/target-profile-for-update-repository_test.js b/api/tests/integration/infrastructure/repositories/target-profile-for-update-repository_test.js index 185feabd7fe..5c69d4c4172 100644 --- a/api/tests/integration/infrastructure/repositories/target-profile-for-update-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/target-profile-for-update-repository_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const targetProfileForUpdateRepository = require('../../../../lib/infrastructure/repositories/target-profile-for-update-repository'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import * as targetProfileForUpdateRepository from '../../../../lib/infrastructure/repositories/target-profile-for-update-repository.js'; describe('Integration | Repository | Target-profile-for-update', function () { describe('#update', function () { diff --git a/api/tests/integration/infrastructure/repositories/target-profile-repository_test.js b/api/tests/integration/infrastructure/repositories/target-profile-repository_test.js index 36891d5fdd0..b1e76585947 100644 --- a/api/tests/integration/infrastructure/repositories/target-profile-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/target-profile-repository_test.js @@ -1,9 +1,9 @@ -const _ = require('lodash'); -const { expect, databaseBuilder, catchErr, knex, domainBuilder } = require('../../../test-helper'); -const TargetProfile = require('../../../../lib/domain/models/TargetProfile'); -const targetProfileRepository = require('../../../../lib/infrastructure/repositories/target-profile-repository'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const { NotFoundError, ObjectValidationError, InvalidSkillSetError } = require('../../../../lib/domain/errors'); +import _ from 'lodash'; +import { expect, databaseBuilder, catchErr, knex, domainBuilder } from '../../../test-helper.js'; +import { TargetProfile } from '../../../../lib/domain/models/TargetProfile.js'; +import * as targetProfileRepository from '../../../../lib/infrastructure/repositories/target-profile-repository.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import { NotFoundError, ObjectValidationError, InvalidSkillSetError } from '../../../../lib/domain/errors.js'; describe('Integration | Repository | Target-profile', function () { describe('#create', function () { diff --git a/api/tests/integration/infrastructure/repositories/target-profile-share-repository_test.js b/api/tests/integration/infrastructure/repositories/target-profile-share-repository_test.js index 573af82ec18..302a94e56b0 100644 --- a/api/tests/integration/infrastructure/repositories/target-profile-share-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/target-profile-share-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const _ = require('lodash'); -const targetProfileShareRepository = require('../../../../lib/infrastructure/repositories/target-profile-share-repository'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import _ from 'lodash'; +import * as targetProfileShareRepository from '../../../../lib/infrastructure/repositories/target-profile-share-repository.js'; describe('Integration | Repository | Target-profile-share', function () { describe('#addTargetProfilesToOrganization', function () { diff --git a/api/tests/integration/infrastructure/repositories/target-profile-summary-for-admin-repository_test.js b/api/tests/integration/infrastructure/repositories/target-profile-summary-for-admin-repository_test.js index f9b9d13b0c1..1cd50a54f83 100644 --- a/api/tests/integration/infrastructure/repositories/target-profile-summary-for-admin-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/target-profile-summary-for-admin-repository_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, domainBuilder } = require('../../../test-helper'); -const targetProfileSummaryForAdminRepository = require('../../../../lib/infrastructure/repositories/target-profile-summary-for-admin-repository'); +import { expect, databaseBuilder, domainBuilder } from '../../../test-helper.js'; +import * as targetProfileSummaryForAdminRepository from '../../../../lib/infrastructure/repositories/target-profile-summary-for-admin-repository.js'; describe('Integration | Repository | Target-profile-summary-for-admin', function () { describe('#findPaginatedFiltered', function () { diff --git a/api/tests/integration/infrastructure/repositories/target-profile-training-repository_test.js b/api/tests/integration/infrastructure/repositories/target-profile-training-repository_test.js index a822099625d..ec75a1a642f 100644 --- a/api/tests/integration/infrastructure/repositories/target-profile-training-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/target-profile-training-repository_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, sinon } = require('../../../test-helper'); -const targetProfileTrainingRepository = require('../../../../lib/infrastructure/repositories/target-profile-training-repository'); +import { expect, databaseBuilder, sinon } from '../../../test-helper.js'; +import * as targetProfileTrainingRepository from '../../../../lib/infrastructure/repositories/target-profile-training-repository.js'; describe('Integration | Repository | target-profile-training-repository', function () { describe('#create', function () { diff --git a/api/tests/integration/infrastructure/repositories/thematic-repository_test.js b/api/tests/integration/infrastructure/repositories/thematic-repository_test.js index 101234b9bac..21440b98d13 100644 --- a/api/tests/integration/infrastructure/repositories/thematic-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/thematic-repository_test.js @@ -1,6 +1,6 @@ -const { expect, mockLearningContent, domainBuilder } = require('../../../test-helper'); -const thematicRepository = require('../../../../lib/infrastructure/repositories/thematic-repository'); -const Thematic = require('../../../../lib/domain/models/Thematic'); +import { expect, mockLearningContent, domainBuilder } from '../../../test-helper.js'; +import * as thematicRepository from '../../../../lib/infrastructure/repositories/thematic-repository.js'; +import { Thematic } from '../../../../lib/domain/models/Thematic.js'; describe('Integration | Repository | thematic-repository', function () { describe('#list', function () { diff --git a/api/tests/integration/infrastructure/repositories/training-repository_test.js b/api/tests/integration/infrastructure/repositories/training-repository_test.js index f4d56b771ae..c302331262f 100644 --- a/api/tests/integration/infrastructure/repositories/training-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/training-repository_test.js @@ -1,14 +1,15 @@ -const { expect, databaseBuilder, domainBuilder, catchErr, knex, mockLearningContent } = require('../../../test-helper'); -const trainingRepository = require('../../../../lib/infrastructure/repositories/training-repository'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const TrainingSummary = require('../../../../lib/domain/read-models/TrainingSummary'); -const Training = require('../../../../lib/domain/models/Training'); -const UserRecommendedTraining = require('../../../../lib/domain/read-models/UserRecommendedTraining'); -const TrainingTriggerForAdmin = require('../../../../lib/domain/read-models/TrainingTriggerForAdmin'); -const TrainingForAdmin = require('../../../../lib/domain/read-models/TrainingForAdmin'); -const TrainingTrigger = require('../../../../lib/domain/models/TrainingTrigger'); -const TrainingTriggerTube = require('../../../../lib/domain/models/TrainingTriggerTube'); -const _ = require('lodash'); +import { expect, databaseBuilder, domainBuilder, catchErr, knex, mockLearningContent } from '../../../test-helper.js'; + +import * as trainingRepository from '../../../../lib/infrastructure/repositories/training-repository.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { TrainingSummary } from '../../../../lib/domain/read-models/TrainingSummary.js'; +import { Training } from '../../../../lib/domain/models/Training.js'; +import { UserRecommendedTraining } from '../../../../lib/domain/read-models/UserRecommendedTraining.js'; +import { TrainingTriggerForAdmin } from '../../../../lib/domain/read-models/TrainingTriggerForAdmin.js'; +import { TrainingForAdmin } from '../../../../lib/domain/read-models/TrainingForAdmin.js'; +import { TrainingTrigger } from '../../../../lib/domain/models/TrainingTrigger.js'; +import { TrainingTriggerTube } from '../../../../lib/domain/models/TrainingTriggerTube.js'; +import _ from 'lodash'; describe('Integration | Repository | training-repository', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/training-trigger-repository_test.js b/api/tests/integration/infrastructure/repositories/training-trigger-repository_test.js index c3ed9047ca6..0b6bccc9ff8 100644 --- a/api/tests/integration/infrastructure/repositories/training-trigger-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/training-trigger-repository_test.js @@ -1,4 +1,4 @@ -const { +import { expect, databaseBuilder, domainBuilder, @@ -7,13 +7,14 @@ const { learningContentBuilder, sinon, catchErr, -} = require('../../../test-helper'); -const trainingTriggerRepository = require('../../../../lib/infrastructure/repositories/training-trigger-repository'); -const { TrainingTrigger, TrainingTriggerTube } = require('../../../../lib/domain/models'); -const TrainingTriggerForAdmin = require('../../../../lib/domain/read-models/TrainingTriggerForAdmin'); -const _ = require('lodash'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const logger = require('../../../../lib/infrastructure/logger'); +} from '../../../test-helper.js'; + +import * as trainingTriggerRepository from '../../../../lib/infrastructure/repositories/training-trigger-repository.js'; +import { TrainingTrigger, TrainingTriggerTube } from '../../../../lib/domain/models/index.js'; +import { TrainingTriggerForAdmin } from '../../../../lib/domain/read-models/TrainingTriggerForAdmin.js'; +import _ from 'lodash'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { logger } from '../../../../lib/infrastructure/logger.js'; describe('Integration | Repository | training-trigger-repository', function () { let learningContent; @@ -106,7 +107,7 @@ describe('Integration | Repository | training-trigger-repository', function () { ], }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent(learningContent); + const learningContentObjects = learningContentBuilder(learningContent); mockLearningContent(learningContentObjects); }); diff --git a/api/tests/integration/infrastructure/repositories/tube-repository_test.js b/api/tests/integration/infrastructure/repositories/tube-repository_test.js index ec531eade31..f3dbfdb08d4 100644 --- a/api/tests/integration/infrastructure/repositories/tube-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/tube-repository_test.js @@ -1,5 +1,5 @@ -const { expect, mockLearningContent, domainBuilder } = require('../../../test-helper'); -const tubeRepository = require('../../../../lib/infrastructure/repositories/tube-repository'); +import { expect, mockLearningContent, domainBuilder } from '../../../test-helper.js'; +import * as tubeRepository from '../../../../lib/infrastructure/repositories/tube-repository.js'; describe('Integration | Repository | tube-repository', function () { describe('#get', function () { diff --git a/api/tests/integration/infrastructure/repositories/tutorial-evaluation-repository_test.js b/api/tests/integration/infrastructure/repositories/tutorial-evaluation-repository_test.js index 2d4b3f06cbe..cdcead0ccd5 100644 --- a/api/tests/integration/infrastructure/repositories/tutorial-evaluation-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/tutorial-evaluation-repository_test.js @@ -1,6 +1,6 @@ -const { expect, knex, databaseBuilder } = require('../../../test-helper'); -const tutorialEvaluationRepository = require('../../../../lib/infrastructure/repositories/tutorial-evaluation-repository'); -const TutorialEvaluation = require('../../../../lib/domain/models/TutorialEvaluation'); +import { expect, knex, databaseBuilder } from '../../../test-helper.js'; +import * as tutorialEvaluationRepository from '../../../../lib/infrastructure/repositories/tutorial-evaluation-repository.js'; +import { TutorialEvaluation } from '../../../../lib/domain/models/TutorialEvaluation.js'; describe('Integration | Infrastructure | Repository | tutorialEvaluationRepository', function () { let userId, tutorialId, status; diff --git a/api/tests/integration/infrastructure/repositories/tutorial-repository_test.js b/api/tests/integration/infrastructure/repositories/tutorial-repository_test.js index cc921be08e2..4c612aabaf4 100644 --- a/api/tests/integration/infrastructure/repositories/tutorial-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/tutorial-repository_test.js @@ -1,13 +1,15 @@ -const _ = require('lodash'); -const { expect, mockLearningContent, databaseBuilder, catchErr, domainBuilder } = require('../../../test-helper'); -const Tutorial = require('../../../../lib/domain/models/Tutorial'); -const TutorialEvaluation = require('../../../../lib/domain/models/TutorialEvaluation'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const tutorialRepository = require('../../../../lib/infrastructure/repositories/tutorial-repository'); -const TutorialForUser = require('../../../../lib/domain/read-models/TutorialForUser'); -const UserSavedTutorial = require('../../../../lib/domain/models/UserSavedTutorial'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const { ENGLISH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +import _ from 'lodash'; +import { expect, mockLearningContent, databaseBuilder, catchErr, domainBuilder } from '../../../test-helper.js'; +import { Tutorial } from '../../../../lib/domain/models/Tutorial.js'; +import { TutorialEvaluation } from '../../../../lib/domain/models/TutorialEvaluation.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import * as tutorialRepository from '../../../../lib/infrastructure/repositories/tutorial-repository.js'; +import { TutorialForUser } from '../../../../lib/domain/read-models/TutorialForUser.js'; +import { UserSavedTutorial } from '../../../../lib/domain/models/UserSavedTutorial.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { ENGLISH_SPOKEN } = LOCALE; describe('Integration | Repository | tutorial-repository', function () { describe('#findByRecordIdsForCurrentUser', function () { diff --git a/api/tests/integration/infrastructure/repositories/user-campaign-results/stage-collection-repository_test.js b/api/tests/integration/infrastructure/repositories/user-campaign-results/stage-collection-repository_test.js index 2e38611017d..3a7d9262de3 100644 --- a/api/tests/integration/infrastructure/repositories/user-campaign-results/stage-collection-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/user-campaign-results/stage-collection-repository_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, learningContentBuilder, mockLearningContent } = require('../../../../test-helper'); -const stageCollectionRepository = require('../../../../../lib/infrastructure/repositories/user-campaign-results/stage-collection-repository.js'); +import { expect, databaseBuilder, learningContentBuilder, mockLearningContent } from '../../../../test-helper.js'; +import * as stageCollectionRepository from '../../../../../lib/infrastructure/repositories/user-campaign-results/stage-collection-repository.js'; const competenceId = 'recCompetence'; const learningContent = [ @@ -49,7 +49,7 @@ describe('Integration | Infrastructure | Repository | stage-collection-repositor let campaignId; beforeEach(async function () { - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); targetProfileId = databaseBuilder.factory.buildTargetProfile().id; campaignId = databaseBuilder.factory.buildCampaign({ type: 'ASSESSMENT', targetProfileId }).id; diff --git a/api/tests/integration/infrastructure/repositories/user-email-repository_test.js b/api/tests/integration/infrastructure/repositories/user-email-repository_test.js index 993a1eff545..488dd7bf054 100644 --- a/api/tests/integration/infrastructure/repositories/user-email-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/user-email-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const userEmailRepository = require('../../../../lib/infrastructure/repositories/user-email-repository'); -const EmailModificationDemand = require('../../../../lib/domain/models/EmailModificationDemand'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as userEmailRepository from '../../../../lib/infrastructure/repositories/user-email-repository.js'; +import { EmailModificationDemand } from '../../../../lib/domain/models/EmailModificationDemand.js'; describe('Integration | Repository | UserEmailRepository', function () { describe('#saveEmailModificationDemand', function () { diff --git a/api/tests/integration/infrastructure/repositories/user-login-repository_test.js b/api/tests/integration/infrastructure/repositories/user-login-repository_test.js index 06c40755ae3..209b1b02dca 100644 --- a/api/tests/integration/infrastructure/repositories/user-login-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/user-login-repository_test.js @@ -1,6 +1,6 @@ -const { databaseBuilder, expect, knex, sinon } = require('../../../test-helper'); -const userLoginRepository = require('../../../../lib/infrastructure/repositories/user-login-repository'); -const UserLogin = require('../../../../lib/domain/models/UserLogin'); +import { databaseBuilder, expect, knex, sinon } from '../../../test-helper.js'; +import * as userLoginRepository from '../../../../lib/infrastructure/repositories/user-login-repository.js'; +import { UserLogin } from '../../../../lib/domain/models/UserLogin.js'; describe('Integration | Repository | UserLoginRepository', function () { describe('#findByUserId', function () { diff --git a/api/tests/integration/infrastructure/repositories/user-orga-settings-repository_test.js b/api/tests/integration/infrastructure/repositories/user-orga-settings-repository_test.js index 41c8d017afa..c2580f8c605 100644 --- a/api/tests/integration/infrastructure/repositories/user-orga-settings-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/user-orga-settings-repository_test.js @@ -1,12 +1,11 @@ -const _ = require('lodash'); +import _ from 'lodash'; -const { catchErr, expect, knex, databaseBuilder } = require('../../../test-helper'); +import { catchErr, expect, knex, databaseBuilder } from '../../../test-helper.js'; +import { UserOrgaSettings } from '../../../../lib/domain/models/UserOrgaSettings.js'; +import { BookshelfUserOrgaSettings } from '../../../../lib/infrastructure/orm-models/UserOrgaSettings.js'; +import { UserOrgaSettingsCreationError } from '../../../../lib/domain/errors.js'; -const UserOrgaSettings = require('../../../../lib/domain/models/UserOrgaSettings'); -const BookshelfUserOrgaSettings = require('../../../../lib/infrastructure/orm-models/UserOrgaSettings'); -const { UserOrgaSettingsCreationError } = require('../../../../lib/domain/errors'); - -const userOrgaSettingsRepository = require('../../../../lib/infrastructure/repositories/user-orga-settings-repository'); +import * as userOrgaSettingsRepository from '../../../../lib/infrastructure/repositories/user-orga-settings-repository.js'; describe('Integration | Repository | UserOrgaSettings', function () { const USER_PICKED_PROPERTIES = [ diff --git a/api/tests/integration/infrastructure/repositories/user-organizations-for-admin-repository_test.js b/api/tests/integration/infrastructure/repositories/user-organizations-for-admin-repository_test.js index 3e69836b26d..4d01d3bec72 100644 --- a/api/tests/integration/infrastructure/repositories/user-organizations-for-admin-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/user-organizations-for-admin-repository_test.js @@ -1,6 +1,6 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const UserOrganizationForAdmin = require('../../../../lib/domain/read-models/UserOrganizationForAdmin'); -const userOrganizationsForAdminRepository = require('../../../../lib/infrastructure/repositories/user-organizations-for-admin-repository'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { UserOrganizationForAdmin } from '../../../../lib/domain/read-models/UserOrganizationForAdmin.js'; +import * as userOrganizationsForAdminRepository from '../../../../lib/infrastructure/repositories/user-organizations-for-admin-repository.js'; describe('Integration | Repository | user-organizations-for-admin', function () { context('#findByUserId', function () { diff --git a/api/tests/integration/infrastructure/repositories/user-recommended-training-repository_test.js b/api/tests/integration/infrastructure/repositories/user-recommended-training-repository_test.js index be294eeab33..4765604525c 100644 --- a/api/tests/integration/infrastructure/repositories/user-recommended-training-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/user-recommended-training-repository_test.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const userRecommendedTrainingRepository = require('../../../../lib/infrastructure/repositories/user-recommended-training-repository'); -const UserRecommendedTraining = require('../../../../lib/domain/read-models/UserRecommendedTraining'); +import _ from 'lodash'; +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import * as userRecommendedTrainingRepository from '../../../../lib/infrastructure/repositories/user-recommended-training-repository.js'; +import { UserRecommendedTraining } from '../../../../lib/domain/read-models/UserRecommendedTraining.js'; describe('Integration | Repository | user-recommended-training-repository', function () { describe('#save', function () { diff --git a/api/tests/integration/infrastructure/repositories/user-repository_test.js b/api/tests/integration/infrastructure/repositories/user-repository_test.js index c6586a720d9..36473f1ef89 100644 --- a/api/tests/integration/infrastructure/repositories/user-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/user-repository_test.js @@ -1,30 +1,26 @@ -const each = require('lodash/each'); -const map = require('lodash/map'); -const times = require('lodash/times'); -const pick = require('lodash/pick'); +import lodash from 'lodash'; +const { each, map, times, pick } = lodash; +import { expect, knex, databaseBuilder, catchErr, sinon } from '../../../test-helper.js'; -const { expect, knex, databaseBuilder, catchErr, sinon } = require('../../../test-helper'); - -const { +import { AlreadyExistingEntityError, AlreadyRegisteredEmailError, AlreadyRegisteredUsernameError, NotFoundError, UserNotFoundError, -} = require('../../../../lib/domain/errors'); - -const User = require('../../../../lib/domain/models/User'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); -const UserDetailsForAdmin = require('../../../../lib/domain/models/UserDetailsForAdmin'); -const Membership = require('../../../../lib/domain/models/Membership'); -const CertificationCenter = require('../../../../lib/domain/models/CertificationCenter'); -const CertificationCenterMembership = require('../../../../lib/domain/models/CertificationCenterMembership'); -const Organization = require('../../../../lib/domain/models/Organization'); -const OrganizationLearnerForAdmin = require('../../../../lib/domain/read-models/OrganizationLearnerForAdmin'); -const OidcIdentityProviders = require('../../../../lib/domain/constants/oidc-identity-providers'); - -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const userRepository = require('../../../../lib/infrastructure/repositories/user-repository'); +} from '../../../../lib/domain/errors.js'; + +import { User } from '../../../../lib/domain/models/User.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; +import { UserDetailsForAdmin } from '../../../../lib/domain/models/UserDetailsForAdmin.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { CertificationCenter } from '../../../../lib/domain/models/CertificationCenter.js'; +import { CertificationCenterMembership } from '../../../../lib/domain/models/CertificationCenterMembership.js'; +import { Organization } from '../../../../lib/domain/models/Organization.js'; +import { OrganizationLearnerForAdmin } from '../../../../lib/domain/read-models/OrganizationLearnerForAdmin.js'; +import * as OidcIdentityProviders from '../../../../lib/domain/constants/oidc-identity-providers.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import * as userRepository from '../../../../lib/infrastructure/repositories/user-repository.js'; const expectedUserDetailsForAdminAttributes = [ 'id', diff --git a/api/tests/integration/infrastructure/repositories/user-saved-tutorial-repository_test.js b/api/tests/integration/infrastructure/repositories/user-saved-tutorial-repository_test.js index 85dd43bbfa3..b2029f4e011 100644 --- a/api/tests/integration/infrastructure/repositories/user-saved-tutorial-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/user-saved-tutorial-repository_test.js @@ -1,6 +1,6 @@ -const { expect, knex, databaseBuilder } = require('../../../test-helper'); -const userSavedTutorialRepository = require('../../../../lib/infrastructure/repositories/user-saved-tutorial-repository'); -const UserSavedTutorial = require('../../../../lib/domain/models/UserSavedTutorial'); +import { expect, knex, databaseBuilder } from '../../../test-helper.js'; +import * as userSavedTutorialRepository from '../../../../lib/infrastructure/repositories/user-saved-tutorial-repository.js'; +import { UserSavedTutorial } from '../../../../lib/domain/models/UserSavedTutorial.js'; describe('Integration | Infrastructure | Repository | user-saved-tutorial-repository', function () { let userId; diff --git a/api/tests/integration/infrastructure/repositories/user-to-create-repository_test.js b/api/tests/integration/infrastructure/repositories/user-to-create-repository_test.js index 456831d6bca..04a10aa90ff 100644 --- a/api/tests/integration/infrastructure/repositories/user-to-create-repository_test.js +++ b/api/tests/integration/infrastructure/repositories/user-to-create-repository_test.js @@ -1,10 +1,8 @@ -const { expect, knex, databaseBuilder, catchErr } = require('../../../test-helper'); - -const { OrganizationLearnerAlreadyLinkedToUserError } = require('../../../../lib/domain/errors'); - -const User = require('../../../../lib/domain/models/User'); -const UserToCreateRepository = require('../../../../lib/infrastructure/repositories/user-to-create-repository'); -const UserToCreate = require('../../../../lib/domain/models/UserToCreate'); +import { expect, knex, databaseBuilder, catchErr } from '../../../test-helper.js'; +import { OrganizationLearnerAlreadyLinkedToUserError } from '../../../../lib/domain/errors.js'; +import { User } from '../../../../lib/domain/models/User.js'; +import * as UserToCreateRepository from '../../../../lib/infrastructure/repositories/user-to-create-repository.js'; +import { UserToCreate } from '../../../../lib/domain/models/UserToCreate.js'; describe('Integration | Infrastructure | Repository | UserToCreateRepository', function () { describe('#create', function () { diff --git a/api/tests/integration/infrastructure/serializer/campaigns-administration/csv-campaigns-ids-parser_test.js b/api/tests/integration/infrastructure/serializer/campaigns-administration/csv-campaigns-ids-parser_test.js index c077e679097..f1244a394fa 100644 --- a/api/tests/integration/infrastructure/serializer/campaigns-administration/csv-campaigns-ids-parser_test.js +++ b/api/tests/integration/infrastructure/serializer/campaigns-administration/csv-campaigns-ids-parser_test.js @@ -1,6 +1,6 @@ -const { expect, catchErr, createTempFile, removeTempFile } = require('../../../../test-helper'); -const { CsvImportError } = require('../../../../../lib/domain/errors'); -const csvCampaignIdsParser = require('../../../../../lib/infrastructure/serializers/csv/campaigns-administration/csv-campaigns-ids-parser'); +import { expect, catchErr, createTempFile, removeTempFile } from '../../../../test-helper.js'; +import { CsvImportError } from '../../../../../lib/domain/errors.js'; +import * as csvCampaignIdsParser from '../../../../../lib/infrastructure/serializers/csv/campaigns-administration/csv-campaigns-ids-parser.js'; describe('Integration | Serializer | CSV | campaigns-administration | csv-campaigns-ids-parser', function () { describe('#extractCampaignsIds', function () { diff --git a/api/tests/integration/infrastructure/temporary-storage/RedisTemporaryStorage_test.js b/api/tests/integration/infrastructure/temporary-storage/RedisTemporaryStorage_test.js index d316adabe30..f86cfebf9c3 100644 --- a/api/tests/integration/infrastructure/temporary-storage/RedisTemporaryStorage_test.js +++ b/api/tests/integration/infrastructure/temporary-storage/RedisTemporaryStorage_test.js @@ -1,7 +1,9 @@ -const { v4: uuidv4 } = require('uuid'); -const RedisTemporaryStorage = require('../../../../lib/infrastructure/temporary-storage/RedisTemporaryStorage'); -const { expect } = require('../../../test-helper'); -const settings = require('../../../../lib/config'); +import { v4 as uuidv4 } from 'uuid'; + +import { RedisTemporaryStorage } from '../../../../lib/infrastructure/temporary-storage/RedisTemporaryStorage.js'; +import { expect } from '../../../test-helper.js'; +import { config as settings } from '../../../../lib/config.js'; + const REDIS_URL = settings.redis.url; describe('Integration | Infrastructure | TemporaryStorage | RedisTemporaryStorage', function () { diff --git a/api/tests/integration/infrastructure/utils/RedisClient_test.js b/api/tests/integration/infrastructure/utils/RedisClient_test.js index 21956ed815e..276c88930ac 100644 --- a/api/tests/integration/infrastructure/utils/RedisClient_test.js +++ b/api/tests/integration/infrastructure/utils/RedisClient_test.js @@ -1,7 +1,8 @@ -const { v4: uuidv4 } = require('uuid'); -const RedisClient = require('../../../../lib/infrastructure/utils/RedisClient'); -const config = require('../../../../lib/config'); -const { expect } = require('../../../test-helper'); +import { v4 as uuidv4 } from 'uuid'; + +import { RedisClient } from '../../../../lib/infrastructure/utils/RedisClient.js'; +import { config } from '../../../../lib/config.js'; +import { expect } from '../../../test-helper.js'; describe('Integration | Infrastructure | Utils | RedisClient', function () { it('stores and retrieve a value for a key', async function () { diff --git a/api/tests/integration/infrastructure/utils/bookshelf-to-domain-converter_test.js b/api/tests/integration/infrastructure/utils/bookshelf-to-domain-converter_test.js index 36b42c82cb3..f0b10f32e20 100644 --- a/api/tests/integration/infrastructure/utils/bookshelf-to-domain-converter_test.js +++ b/api/tests/integration/infrastructure/utils/bookshelf-to-domain-converter_test.js @@ -1,17 +1,16 @@ -const { expect, databaseBuilder } = require('../../../test-helper'); -const bookshelfToDomainConverter = require('../../../../lib/infrastructure/utils/bookshelf-to-domain-converter'); - -const User = require('../../../../lib/domain/models/User'); -const Membership = require('../../../../lib/domain/models/Membership'); -const TargetProfile = require('../../../../lib/domain/models/TargetProfile'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const Tag = require('../../../../lib/domain/models/Tag'); -const Organization = require('../../../../lib/domain/models/Organization'); - -const BookshelfUser = require('../../../../lib/infrastructure/orm-models/User'); -const BookshelfCampaign = require('../../../../lib/infrastructure/orm-models/Campaign'); -const BookshelfCampaignParticipation = require('../../../../lib/infrastructure/orm-models/CampaignParticipation'); -const BookshelfOrganization = require('../../../../lib/infrastructure/orm-models/Organization'); +import { expect, databaseBuilder } from '../../../test-helper.js'; +import * as bookshelfToDomainConverter from '../../../../lib/infrastructure/utils/bookshelf-to-domain-converter.js'; + +import { User } from '../../../../lib/domain/models/User.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { TargetProfile } from '../../../../lib/domain/models/TargetProfile.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { Tag } from '../../../../lib/domain/models/Tag.js'; +import { Organization } from '../../../../lib/domain/models/Organization.js'; +import { BookshelfUser } from '../../../../lib/infrastructure/orm-models/User.js'; +import { BookshelfCampaign } from '../../../../lib/infrastructure/orm-models/Campaign.js'; +import { BookshelfCampaignParticipation } from '../../../../lib/infrastructure/orm-models/CampaignParticipation.js'; +import { BookshelfOrganization } from '../../../../lib/infrastructure/orm-models/Organization.js'; describe('Integration | Infrastructure | Utils | Bookshelf to domain converter', function () { describe('buildDomainObject', function () { diff --git a/api/tests/integration/infrastructure/utils/csv/certification-results_test.js b/api/tests/integration/infrastructure/utils/csv/certification-results_test.js index c85602398f7..3a6a0b75c38 100644 --- a/api/tests/integration/infrastructure/utils/csv/certification-results_test.js +++ b/api/tests/integration/infrastructure/utils/csv/certification-results_test.js @@ -1,10 +1,11 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const { +import { expect, domainBuilder } from '../../../../test-helper.js'; + +import { getSessionCertificationResultsCsv, getDivisionCertificationResultsCsv, REJECTED_AUTOMATICALLY_COMMENT, getCleaCertifiedCandidateCsv, -} = require('../../../../../lib/infrastructure/utils/csv/certification-results'); +} from '../../../../../lib/infrastructure/utils/csv/certification-results.js'; describe('Integration | Infrastructure | Utils | csv | certification-results', function () { context('#getSessionCertificationResultsCsv', function () { diff --git a/api/tests/integration/infrastructure/utils/csv/sessions-import_test.js b/api/tests/integration/infrastructure/utils/csv/sessions-import_test.js index d08af5c60f5..8f250871642 100644 --- a/api/tests/integration/infrastructure/utils/csv/sessions-import_test.js +++ b/api/tests/integration/infrastructure/utils/csv/sessions-import_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const { getHeaders } = require('../../../../../lib/infrastructure/files/sessions-import'); +import { expect } from '../../../../test-helper.js'; +import { getHeaders } from '../../../../../lib/infrastructure/files/sessions-import.js'; const BOM_CHAR = '\ufeff'; describe('Integration | Infrastructure | Utils | csv | sessions-import', function () { context('#getHeaders', function () { diff --git a/api/tests/integration/infrastructure/utils/csv/write-csv-utils_test.js b/api/tests/integration/infrastructure/utils/csv/write-csv-utils_test.js index c7520dd48aa..769b9c2840a 100644 --- a/api/tests/integration/infrastructure/utils/csv/write-csv-utils_test.js +++ b/api/tests/integration/infrastructure/utils/csv/write-csv-utils_test.js @@ -1,6 +1,6 @@ -const { expect, catchErr } = require('../../../../test-helper'); -const { getCsvContent } = require('../../../../../lib/infrastructure/utils/csv/write-csv-utils'); -const { CsvParsingError } = require('../../../../../lib/domain/errors'); +import { expect, catchErr } from '../../../../test-helper.js'; +import { getCsvContent } from '../../../../../lib/infrastructure/utils/csv/write-csv-utils.js'; +import { CsvParsingError } from '../../../../../lib/domain/errors.js'; describe('Integration | Infrastructure | Utils | csv | write-csv-utils', function () { it('should return a csv content according to fileHeaders data', async function () { diff --git a/api/tests/integration/infrastructure/utils/filter-utils_test.js b/api/tests/integration/infrastructure/utils/filter-utils_test.js index 5b65b121e38..ff634d2b6d7 100644 --- a/api/tests/integration/infrastructure/utils/filter-utils_test.js +++ b/api/tests/integration/infrastructure/utils/filter-utils_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const { filterByFullName } = require('../../../../lib/infrastructure/utils/filter-utils'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { filterByFullName } from '../../../../lib/infrastructure/utils/filter-utils.js'; describe('Integration | Utils | filter-utils', function () { describe('#filterByFullName', function () { diff --git a/api/tests/integration/infrastructure/utils/knex-utils_test.js b/api/tests/integration/infrastructure/utils/knex-utils_test.js index 2b425bfd5ea..37389ef44e5 100644 --- a/api/tests/integration/infrastructure/utils/knex-utils_test.js +++ b/api/tests/integration/infrastructure/utils/knex-utils_test.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); -const { expect, databaseBuilder } = require('../../../test-helper'); -const { fetchPage, DEFAULT_PAGINATION } = require('../../../../lib/infrastructure/utils/knex-utils'); -const { knex } = require('../../../../lib/infrastructure/bookshelf'); +import _ from 'lodash'; +import { expect, databaseBuilder } from '../../../test-helper.js'; +import { fetchPage, DEFAULT_PAGINATION } from '../../../../lib/infrastructure/utils/knex-utils.js'; +import { knex } from '../../../../lib/infrastructure/bookshelf.js'; describe('Integration | Infrastructure | Utils | Knex utils', function () { describe('fetchPage', function () { diff --git a/api/tests/integration/infrastructure/utils/ods/files/fill-candidates-import-sheet_test.js b/api/tests/integration/infrastructure/utils/ods/files/fill-candidates-import-sheet_test.js index 84e87f0b3ce..bf11ec1101f 100644 --- a/api/tests/integration/infrastructure/utils/ods/files/fill-candidates-import-sheet_test.js +++ b/api/tests/integration/infrastructure/utils/ods/files/fill-candidates-import-sheet_test.js @@ -1,16 +1,24 @@ -const { unlink, writeFile } = require('fs').promises; -const _ = require('lodash'); -const { expect, databaseBuilder } = require('../../../../../test-helper'); -const readOdsUtils = require('../../../../../../lib/infrastructure/utils/ods/read-ods-utils'); -const fillCandidatesImportSheet = require('../../../../../../lib/infrastructure/files/candidates-import/fill-candidates-import-sheet'); -const usecases = require('../../../../../../lib/domain/usecases/index.js'); -const { +import fs from 'fs'; + +const { promises } = fs; + +const { unlink, writeFile } = promises; + +import _ from 'lodash'; +import { expect, databaseBuilder } from '../../../../../test-helper.js'; +import * as readOdsUtils from '../../../../../../lib/infrastructure/utils/ods/read-ods-utils.js'; +import { fillCandidatesImportSheet } from '../../../../../../lib/infrastructure/files/candidates-import/fill-candidates-import-sheet.js'; +import { usecases } from '../../../../../../lib/domain/usecases/index.js'; +import { PIX_PLUS_DROIT, CLEA, PIX_PLUS_EDU_1ER_DEGRE, PIX_PLUS_EDU_2ND_DEGRE, -} = require('../../../../../../lib/domain/models/ComplementaryCertification'); -const { getI18n } = require('../../../../../tooling/i18n/i18n'); +} from '../../../../../../lib/domain/models/ComplementaryCertification.js'; +import { getI18n } from '../../../../../tooling/i18n/i18n.js'; + +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Integration | Infrastructure | Utils | Ods | fillCandidatesImportSheet', function () { let i18n; diff --git a/api/tests/integration/infrastructure/utils/ods/read-ods-utils_test.js b/api/tests/integration/infrastructure/utils/ods/read-ods-utils_test.js index 60022fc2fce..a3477bc3d5d 100644 --- a/api/tests/integration/infrastructure/utils/ods/read-ods-utils_test.js +++ b/api/tests/integration/infrastructure/utils/ods/read-ods-utils_test.js @@ -1,21 +1,26 @@ -const { readFile } = require('fs').promises; -const _ = require('lodash'); -const { getI18n } = require('../../../../tooling/i18n/i18n'); -const i18n = getI18n(); +import fs from 'fs'; + +const { promises } = fs; -const { expect, catchErr } = require('../../../../test-helper'); -const { UnprocessableEntityError } = require('../../../../../lib/application/http-errors'); +const { readFile } = promises; -const { - getTransformationStructsForPixCertifCandidatesImport, -} = require('../../../../../lib/infrastructure/files/candidates-import/candidates-import-transformation-structures'); +import _ from 'lodash'; +import { getI18n } from '../../../../tooling/i18n/i18n.js'; +const i18n = getI18n(); -const { +import { expect, catchErr } from '../../../../test-helper.js'; +import { UnprocessableEntityError } from '../../../../../lib/application/http-errors.js'; +import { getTransformationStructsForPixCertifCandidatesImport } from '../../../../../lib/infrastructure/files/candidates-import/candidates-import-transformation-structures.js'; + +import { getContentXml, extractTableDataFromOdsFile, validateOdsHeaders, getSheetDataRowsFromOdsBuffer, -} = require('../../../../../lib/infrastructure/utils/ods/read-ods-utils'); +} from '../../../../../lib/infrastructure/utils/ods/read-ods-utils.js'; + +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Integration | Infrastructure | Utils | Ods | read-ods-utils', function () { const GET_CONTENT_ODS_FILE_PATH = `${__dirname}/files/get-content-xml_test.ods`; diff --git a/api/tests/integration/infrastructure/utils/ods/write-ods-utils_test.js b/api/tests/integration/infrastructure/utils/ods/write-ods-utils_test.js index 2dc3106120e..c9d70f87569 100644 --- a/api/tests/integration/infrastructure/utils/ods/write-ods-utils_test.js +++ b/api/tests/integration/infrastructure/utils/ods/write-ods-utils_test.js @@ -1,9 +1,13 @@ -const { writeFile, unlink } = require('fs').promises; +import fs from 'fs'; -const { expect } = require('../../../../test-helper'); +const { promises } = fs; -const { getContentXml } = require('../../../../../lib/infrastructure/utils/ods/read-ods-utils'); -const { +const { writeFile, unlink } = promises; + +import { expect } from '../../../../test-helper.js'; +import { getContentXml } from '../../../../../lib/infrastructure/utils/ods/read-ods-utils.js'; + +import { makeUpdatedOdsByContentXml, updateXmlRows, updateXmlSparseValues, @@ -11,8 +15,12 @@ const { incrementRowsColumnSpan, addValidatorRestrictedList, addTooltipOnCell, -} = require('../../../../../lib/infrastructure/utils/ods/write-ods-utils'); -const AddedCellOption = require('../../../../../lib/infrastructure/utils/ods/added-cell-option'); +} from '../../../../../lib/infrastructure/utils/ods/write-ods-utils.js'; + +import { AddedCellOption } from '../../../../../lib/infrastructure/utils/ods/added-cell-option.js'; + +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Integration | Infrastructure | Utils | Ods | write-ods-utils', function () { const GET_CONTENT_ODS_FILE_PATH = `${__dirname}/files/get-content-xml_test.ods`; diff --git a/api/tests/integration/infrastructure/utils/pdf/certification-attestation-pdf_test.js b/api/tests/integration/infrastructure/utils/pdf/certification-attestation-pdf_test.js index b681116a116..6b20343648c 100644 --- a/api/tests/integration/infrastructure/utils/pdf/certification-attestation-pdf_test.js +++ b/api/tests/integration/infrastructure/utils/pdf/certification-attestation-pdf_test.js @@ -1,13 +1,13 @@ -const { domainBuilder, expect, nock, catchErr } = require('../../../../test-helper'); -const dayjs = require('dayjs'); -const { isSameBinary } = require('../../../../tooling/binary-comparator'); -const { - getCertificationAttestationsPdfBuffer, -} = require('../../../../../lib/infrastructure/utils/pdf/certification-attestation-pdf'); -const { CertificationAttestationGenerationError } = require('../../../../../lib/domain/errors'); -const fs = require('fs'); - -const { addRandomSuffix } = require('pdf-lib/cjs/utils'); +import { domainBuilder, expect, nock, catchErr, sinon } from '../../../../test-helper.js'; +import dayjs from 'dayjs'; +import { isSameBinary } from '../../../../tooling/binary-comparator.js'; +import { getCertificationAttestationsPdfBuffer } from '../../../../../lib/infrastructure/utils/pdf/certification-attestation-pdf.js'; +import { CertificationAttestationGenerationError } from '../../../../../lib/domain/errors.js'; +import fs from 'fs'; +import pdfLibUtils from 'pdf-lib/cjs/utils/index.js'; +import { writeFile } from 'fs/promises'; +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Integration | Infrastructure | Utils | Pdf | Certification Attestation Pdf', function () { beforeEach(async function () { @@ -28,10 +28,6 @@ describe('Integration | Infrastructure | Utils | Pdf | Certification Attestation .reply(200, () => fs.readFileSync(`${__dirname}/stickers/macaron_droit_expert.pdf`)); }); - afterEach(function () { - _restorePdfLib(); - }); - it('should generate full attestation (non-regression test)', async function () { // given const resultCompetenceTree = domainBuilder.buildResultCompetenceTree(); @@ -253,7 +249,6 @@ describe('Integration | Infrastructure | Utils | Pdf | Certification Attestation async function _writeFile(buffer, outputFilename, dryRun = true) { // Note: to update the reference pdf, set dryRun to false. if (!dryRun) { - const { writeFile } = require('fs/promises'); await writeFile(`${__dirname}/${outputFilename}`, buffer); } } @@ -273,9 +268,5 @@ function _makePdfLibPredictable() { return prefix + '-' + Math.floor(suffix); } - require('pdf-lib/cjs/utils').addRandomSuffix = autoIncrementSuffixByPrefix; -} - -function _restorePdfLib() { - require('pdf-lib/cjs/utils').addRandomSuffix = addRandomSuffix; + sinon.stub(pdfLibUtils, 'addRandomSuffix').callsFake(autoIncrementSuffixByPrefix); } diff --git a/api/tests/integration/infrastructure/utils/pdf/supervisor-kit-pdf_test.js b/api/tests/integration/infrastructure/utils/pdf/supervisor-kit-pdf_test.js index bbfac257ba1..f5d4537f2a1 100644 --- a/api/tests/integration/infrastructure/utils/pdf/supervisor-kit-pdf_test.js +++ b/api/tests/integration/infrastructure/utils/pdf/supervisor-kit-pdf_test.js @@ -1,18 +1,15 @@ -const { domainBuilder, expect } = require('../../../../test-helper'); -const { isSameBinary } = require('../../../../tooling/binary-comparator'); -const { getSupervisorKitPdfBuffer } = require('../../../../../lib/infrastructure/utils/pdf/supervisor-kit-pdf'); - -const { addRandomSuffix } = require('pdf-lib/cjs/utils'); +import { domainBuilder, expect, sinon } from '../../../../test-helper.js'; +import { isSameBinary } from '../../../../tooling/binary-comparator.js'; +import { getSupervisorKitPdfBuffer } from '../../../../../lib/infrastructure/utils/pdf/supervisor-kit-pdf.js'; +import pdfLibUtils from 'pdf-lib/cjs/utils/index.js'; +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Integration | Infrastructure | Utils | Pdf | Certification supervisor kit Pdf', function () { beforeEach(function () { _makePdfLibPredictable(); }); - afterEach(function () { - _restorePdfLib(); - }); - it('should return full supervisor kit as a buffer', async function () { // given const sessionForSupervisorKit = domainBuilder.buildSessionForSupervisorKit({ @@ -87,9 +84,5 @@ function _makePdfLibPredictable() { return prefix + '-' + Math.floor(suffix); } - require('pdf-lib/cjs/utils').addRandomSuffix = autoIncrementSuffixByPrefix; -} - -function _restorePdfLib() { - require('pdf-lib/cjs/utils').addRandomSuffix = addRandomSuffix; + sinon.stub(pdfLibUtils, 'addRandomSuffix').callsFake(autoIncrementSuffixByPrefix); } diff --git a/api/tests/integration/infrastructure/utils/xml/siecle-file-streamer_test.js b/api/tests/integration/infrastructure/utils/xml/siecle-file-streamer_test.js index caa8b6eea62..e6ab0f5c1da 100644 --- a/api/tests/integration/infrastructure/utils/xml/siecle-file-streamer_test.js +++ b/api/tests/integration/infrastructure/utils/xml/siecle-file-streamer_test.js @@ -1,6 +1,8 @@ -const { expect, catchErr, sinon } = require('../../../../test-helper'); -const SiecleFileStreamer = require('../../../../../lib/infrastructure/utils/xml/siecle-file-streamer'); -const { FileValidationError, SiecleXmlImportError } = require('../../../../../lib/domain/errors'); +import { expect, catchErr, sinon } from '../../../../test-helper.js'; +import { SiecleFileStreamer } from '../../../../../lib/infrastructure/utils/xml/siecle-file-streamer.js'; +import { FileValidationError, SiecleXmlImportError } from '../../../../../lib/domain/errors.js'; +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('SiecleFileStreamer', function () { describe('perform', function () { diff --git a/api/tests/integration/scripts/add-tags-to-organizations_test.js b/api/tests/integration/scripts/add-tags-to-organizations_test.js index c47a7894848..e4047e84b8e 100644 --- a/api/tests/integration/scripts/add-tags-to-organizations_test.js +++ b/api/tests/integration/scripts/add-tags-to-organizations_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, knex, catchErr } = require('../../test-helper'); -const { retrieveTagsByName, addTagsToOrganizations } = require('../../../scripts/add-tags-to-organizations'); +import { expect, databaseBuilder, knex, catchErr } from '../../test-helper.js'; +import { retrieveTagsByName, addTagsToOrganizations } from '../../../scripts/add-tags-to-organizations.js'; describe('Integration | Scripts | add-tags-to-organizations.js', function () { let firstTag; diff --git a/api/tests/integration/scripts/certification/fill-issue-report-category-id_test.js b/api/tests/integration/scripts/certification/fill-issue-report-category-id_test.js index 18a656e706f..695820d7330 100644 --- a/api/tests/integration/scripts/certification/fill-issue-report-category-id_test.js +++ b/api/tests/integration/scripts/certification/fill-issue-report-category-id_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const { main } = require('../../../../scripts/certification/fill-issue-report-category-id'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { main } from '../../../../scripts/certification/fill-issue-report-category-id.js'; describe('Integration | Scripts | Certification | fill-issue-report-category-id', function () { describe('#updateCertificationIssueReport', function () { diff --git a/api/tests/integration/scripts/certification/fill-last-assessment-result-certification-course-table_test.js b/api/tests/integration/scripts/certification/fill-last-assessment-result-certification-course-table_test.js index bb89bda6571..f13c2a3b79d 100644 --- a/api/tests/integration/scripts/certification/fill-last-assessment-result-certification-course-table_test.js +++ b/api/tests/integration/scripts/certification/fill-last-assessment-result-certification-course-table_test.js @@ -1,7 +1,5 @@ -const { expect, databaseBuilder, knex, sinon } = require('../../../test-helper'); -const { - addLastAssessmentResultCertificationCourse, -} = require('../../../../scripts/certification/fill-last-assessment-result-certification-course-table'); +import { expect, databaseBuilder, knex, sinon } from '../../../test-helper.js'; +import { addLastAssessmentResultCertificationCourse } from '../../../../scripts/certification/fill-last-assessment-result-certification-course-table.js'; const ASSOC_TABLE_NAME = 'certification-courses-last-assessment-results'; diff --git a/api/tests/integration/scripts/certification/fill-pix-certification-status-column-in-certification-courses-table_test.js b/api/tests/integration/scripts/certification/fill-pix-certification-status-column-in-certification-courses-table_test.js index 194866a945c..847deacfb9f 100644 --- a/api/tests/integration/scripts/certification/fill-pix-certification-status-column-in-certification-courses-table_test.js +++ b/api/tests/integration/scripts/certification/fill-pix-certification-status-column-in-certification-courses-table_test.js @@ -1,8 +1,6 @@ -const { expect, databaseBuilder, knex, sinon } = require('../../../test-helper'); -const { - updatePixCertificationStatus, -} = require('../../../../scripts/certification/fill-pix-certification-status-column-in-certification-courses-table'); -const { status } = require('../../../../lib/domain/models/AssessmentResult'); +import { expect, databaseBuilder, knex, sinon } from '../../../test-helper.js'; +import { updatePixCertificationStatus } from '../../../../scripts/certification/fill-pix-certification-status-column-in-certification-courses-table.js'; +import { status } from '../../../../lib/domain/models/AssessmentResult.js'; const OLD_UPDATED_AT = new Date('2020-01-01'); const NEW_UPDATED_AT = new Date('2022-02-02'); diff --git a/api/tests/integration/scripts/certification/get-cpf-import-status-from-xml_test.js b/api/tests/integration/scripts/certification/get-cpf-import-status-from-xml_test.js index 9f025e9c63f..78df3cc4f17 100644 --- a/api/tests/integration/scripts/certification/get-cpf-import-status-from-xml_test.js +++ b/api/tests/integration/scripts/certification/get-cpf-import-status-from-xml_test.js @@ -1,6 +1,8 @@ -const { knex, expect, databaseBuilder } = require('../../../test-helper'); -const { main } = require('../../../../scripts/certification/get-cpf-import-status-from-xml'); -const { cpfImportStatus } = require('../../../../lib/domain/models/CertificationCourse'); +import { knex, expect, databaseBuilder } from '../../../test-helper.js'; +import { main } from '../../../../scripts/certification/get-cpf-import-status-from-xml.js'; +import { cpfImportStatus } from '../../../../lib/domain/models/CertificationCourse.js'; +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Integration | Scripts | Certification | get-cpf-import-status-from-xml', function () { afterEach(async function () { diff --git a/api/tests/integration/scripts/clean-anonymized-users-authentication-methods_test.js b/api/tests/integration/scripts/clean-anonymized-users-authentication-methods_test.js index d7394ee7bc5..36563dba21c 100644 --- a/api/tests/integration/scripts/clean-anonymized-users-authentication-methods_test.js +++ b/api/tests/integration/scripts/clean-anonymized-users-authentication-methods_test.js @@ -1,7 +1,5 @@ -const { expect, databaseBuilder, knex } = require('../../test-helper'); -const { - cleanAnonymizedAuthenticationMethods, -} = require('../../../scripts/clean-anonymized-users-authentication-methods'); +import { expect, databaseBuilder, knex } from '../../test-helper.js'; +import { cleanAnonymizedAuthenticationMethods } from '../../../scripts/clean-anonymized-users-authentication-methods.js'; describe('Integration | Scripts | clean-anonymized-users-authentication-methods', function () { describe('#cleanAnonymizedAuthenticationMethods', function () { diff --git a/api/tests/integration/scripts/create-badge-criteria-for-specified-badge_test.js b/api/tests/integration/scripts/create-badge-criteria-for-specified-badge_test.js index eb3a1b9f180..4af6e2e0b35 100644 --- a/api/tests/integration/scripts/create-badge-criteria-for-specified-badge_test.js +++ b/api/tests/integration/scripts/create-badge-criteria-for-specified-badge_test.js @@ -1,11 +1,11 @@ -const { expect, catchErr, databaseBuilder, knex } = require('../../test-helper'); -const { +import { expect, catchErr, databaseBuilder, knex } from '../../test-helper.js'; +import { checkBadgeExistence, checkCriteriaFormat, checkSkillSetIds, copySkillSets, -} = require('../../../scripts/create-badge-criteria-for-specified-badge.js'); -const BadgeCriterion = require('../../../lib/domain/models/BadgeCriterion'); +} from '../../../scripts/create-badge-criteria-for-specified-badge.js'; +import { BadgeCriterion } from '../../../lib/domain/models/BadgeCriterion.js'; describe('Integration | Scripts | create-badge-criteria-for-specified-badge', function () { describe('#checkBadgeExistence', function () { diff --git a/api/tests/integration/scripts/create-certification-center-memberships-from-organization-admins_test.js b/api/tests/integration/scripts/create-certification-center-memberships-from-organization-admins_test.js index 315049c51bc..724beaa39d9 100644 --- a/api/tests/integration/scripts/create-certification-center-memberships-from-organization-admins_test.js +++ b/api/tests/integration/scripts/create-certification-center-memberships-from-organization-admins_test.js @@ -1,15 +1,14 @@ -const { expect, databaseBuilder, knex } = require('../../test-helper'); +import { expect, databaseBuilder, knex } from '../../test-helper.js'; +import { Membership } from '../../../lib/domain/models/Membership.js'; +import { BookshelfCertificationCenterMembership } from '../../../lib/infrastructure/orm-models/CertificationCenterMembership.js'; -const Membership = require('../../../lib/domain/models/Membership'); -const BookshelfCertificationCenterMembership = require('../../../lib/infrastructure/orm-models/CertificationCenterMembership'); - -const { +import { getCertificationCenterIdWithMembershipsUserIdByExternalId, getAdminMembershipsUserIdByOrganizationExternalId, fetchCertificationCenterMembershipsByExternalId, prepareDataForInsert, createCertificationCenterMemberships, -} = require('../../../scripts/create-certification-center-memberships-from-organization-admins'); +} from '../../../scripts/create-certification-center-memberships-from-organization-admins.js'; describe('Integration | Scripts | create-certification-center-memberships-from-organization-admins.js', function () { afterEach(async function () { diff --git a/api/tests/integration/scripts/create-or-update-sco-agri-organizations_test.js b/api/tests/integration/scripts/create-or-update-sco-agri-organizations_test.js index 0b3a168fbb0..ace2cfd3e0f 100644 --- a/api/tests/integration/scripts/create-or-update-sco-agri-organizations_test.js +++ b/api/tests/integration/scripts/create-or-update-sco-agri-organizations_test.js @@ -1,10 +1,10 @@ -const { expect, databaseBuilder, knex } = require('../../test-helper'); -const { +import { expect, databaseBuilder, knex } from '../../test-helper.js'; +import { addTag, checkData, createOrUpdateOrganizations, -} = require('../../../scripts/create-or-update-sco-agri-organizations'); -const logoUrl = require('../../../scripts/logo/default-sco-agri-organization-logo-base64'); +} from '../../../scripts/create-or-update-sco-agri-organizations.js'; +import { logoUrl } from '../../../scripts/logo/default-sco-agri-organization-logo-base64.js'; describe('Integration | Scripts | create-or-update-sco-agri-organizations', function () { describe('#checkData', function () { diff --git a/api/tests/integration/scripts/data-generation/generate-campaign-with-participant_test.js b/api/tests/integration/scripts/data-generation/generate-campaign-with-participant_test.js index 7d32f8a8be6..4f7b6a1decb 100644 --- a/api/tests/integration/scripts/data-generation/generate-campaign-with-participant_test.js +++ b/api/tests/integration/scripts/data-generation/generate-campaign-with-participant_test.js @@ -1,12 +1,10 @@ -const { expect, learningContentBuilder, mockLearningContent, databaseBuilder, knex } = require('../../../test-helper'); -const { - generateCampaignWithParticipants, -} = require('../../../../scripts/data-generation/generate-campaign-with-participants'); +import { expect, learningContentBuilder, mockLearningContent, databaseBuilder, knex } from '../../../test-helper.js'; +import { generateCampaignWithParticipants } from '../../../../scripts/data-generation/generate-campaign-with-participants.js'; describe('Integration | Scripts | generate-campaign-with-participants', function () { it('should create a profiles collection campaign with participants', async function () { // given - mockLearningContent(learningContentBuilder.buildLearningContent.fromAreas([])); + mockLearningContent(learningContentBuilder.fromAreas([])); const organizationId = databaseBuilder.factory.buildOrganization().id; const userId = databaseBuilder.factory.buildUser({ id: 1 }).id; databaseBuilder.factory.buildMembership({ organizationId, organizationRole: 'ADMIN', userId }); @@ -27,7 +25,7 @@ describe('Integration | Scripts | generate-campaign-with-participants', function it('should create a assessment campaign with participants', async function () { // given - mockLearningContent(learningContentBuilder.buildLearningContent.fromAreas([])); + mockLearningContent(learningContentBuilder.fromAreas([])); const organizationId = databaseBuilder.factory.buildOrganization().id; const userId = databaseBuilder.factory.buildUser({ id: 1 }).id; databaseBuilder.factory.buildMembership({ organizationId, organizationRole: 'ADMIN', userId }); diff --git a/api/tests/integration/scripts/data-generation/generate-certif-cli_test.js b/api/tests/integration/scripts/data-generation/generate-certif-cli_test.js index 0a720f8e32b..9c5e89a1f88 100644 --- a/api/tests/integration/scripts/data-generation/generate-certif-cli_test.js +++ b/api/tests/integration/scripts/data-generation/generate-certif-cli_test.js @@ -1,10 +1,10 @@ -const { expect, knex, mockLearningContent } = require('../../../test-helper'); -const _ = require('lodash'); -const { +import { expect, knex, mockLearningContent } from '../../../test-helper.js'; +import _ from 'lodash'; +import { main, - databaseBuilder: databaseBuilderCli, -} = require('../../../../scripts/data-generation/generate-certif-cli'); -const databaseBuffer = require('../../../../db/database-builder/database-buffer'); + databaseBuilder as databaseBuilderCli, +} from '../../../../scripts/data-generation/generate-certif-cli.js'; +import { databaseBuffer } from '../../../../db/database-builder/database-buffer.js'; // FIXME Too hard to edit \o/ describe('Integration | Scripts | generate-certif-cli.js', function () { const certificationCenterSup = { id: 3, type: 'SUP' }; diff --git a/api/tests/integration/scripts/fill-campaign-participation-id-in-badge-acquisitions_test.js b/api/tests/integration/scripts/fill-campaign-participation-id-in-badge-acquisitions_test.js index 1630722689e..8c16f1c9c64 100644 --- a/api/tests/integration/scripts/fill-campaign-participation-id-in-badge-acquisitions_test.js +++ b/api/tests/integration/scripts/fill-campaign-participation-id-in-badge-acquisitions_test.js @@ -1,11 +1,11 @@ -const { expect, databaseBuilder, knex, sinon } = require('../../test-helper'); +import { expect, databaseBuilder, knex, sinon } from '../../test-helper.js'; -const { +import { main, getAllBadgeAcquistionsWithoutCampaignParticipationId, getCampaignParticipationFromBadgeAcquisition, updateBadgeAcquisitionWithCampaignParticipationId, -} = require('../../../scripts/fill-campaign-participation-id-in-badge-acquisitions'); +} from '../../../scripts/fill-campaign-participation-id-in-badge-acquisitions.js'; describe('Integration | Scripts | fillCampaignParticipationIdInBadgeAcquisitions', function () { beforeEach(function () { diff --git a/api/tests/integration/scripts/fill-skill-id-in-user-saved-tutorials_test.js b/api/tests/integration/scripts/fill-skill-id-in-user-saved-tutorials_test.js index d8ba3456926..cc31cdd8e48 100644 --- a/api/tests/integration/scripts/fill-skill-id-in-user-saved-tutorials_test.js +++ b/api/tests/integration/scripts/fill-skill-id-in-user-saved-tutorials_test.js @@ -1,4 +1,4 @@ -const { +import { expect, databaseBuilder, learningContentBuilder, @@ -6,8 +6,9 @@ const { domainBuilder, knex, sinon, -} = require('../../test-helper'); -const { +} from '../../test-helper.js'; + +import { getAllUserSavedTutorialsWithoutSkillId, getAllTutorials, getAllSkills, @@ -15,10 +16,11 @@ const { associateSkillsToTutorial, getMostRelevantSkillId, main, -} = require('../../../scripts/fill-skill-id-in-user-saved-tutorials'); -const UserSavedTutorial = require('../../../lib/domain/models/UserSavedTutorial'); -const UserSavedTutorialWithTutorial = require('../../../lib/domain/models/UserSavedTutorialWithTutorial'); -const KnowledgeElement = require('../../../lib/domain/models/KnowledgeElement'); +} from '../../../scripts/fill-skill-id-in-user-saved-tutorials.js'; + +import { UserSavedTutorial } from '../../../lib/domain/models/UserSavedTutorial.js'; +import { UserSavedTutorialWithTutorial } from '../../../lib/domain/models/UserSavedTutorialWithTutorial.js'; +import { KnowledgeElement } from '../../../lib/domain/models/KnowledgeElement.js'; describe('Integration | Scripts | fill-skillId-in-user-saved-tutorials', function () { describe('#main', function () { @@ -27,7 +29,7 @@ describe('Integration | Scripts | fill-skillId-in-user-saved-tutorials', functio beforeEach(function () { sinon.stub(console, 'log'); - learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([ + learningContentObjects = learningContentBuilder.fromAreas([ { id: 'recArea1', title_i18n: { @@ -228,7 +230,7 @@ describe('Integration | Scripts | fill-skillId-in-user-saved-tutorials', functio describe('#getAllTutorials', function () { it('should retrieve all tutorials', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([ + const learningContentObjects = learningContentBuilder.fromAreas([ { id: 'recArea1', title_i18n: { @@ -333,7 +335,7 @@ describe('Integration | Scripts | fill-skillId-in-user-saved-tutorials', functio describe('#getAllSkills', function () { it('should retrieve all skills', async function () { // given - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas([ + const learningContentObjects = learningContentBuilder.fromAreas([ { id: 'recArea1', title_i18n: { diff --git a/api/tests/integration/scripts/helpers/csvHelpers_test.js b/api/tests/integration/scripts/helpers/csvHelpers_test.js index bc8a9c6048c..267fd6d160a 100644 --- a/api/tests/integration/scripts/helpers/csvHelpers_test.js +++ b/api/tests/integration/scripts/helpers/csvHelpers_test.js @@ -1,6 +1,8 @@ -const { expect, catchErr } = require('../../../test-helper'); -const { FileValidationError, NotFoundError } = require('../../../../lib/domain/errors'); -const { checkCsvHeader } = require('../../../../scripts/helpers/csvHelpers'); +import { expect, catchErr } from '../../../test-helper.js'; +import { FileValidationError, NotFoundError } from '../../../../lib/domain/errors.js'; +import { checkCsvHeader } from '../../../../scripts/helpers/csvHelpers.js'; +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Integration | Scripts | Helpers | csvHelpers.js', function () { const withValidHeaderFilePath = `${__dirname}/files/withValidHeader-test.csv`; diff --git a/api/tests/integration/scripts/mark-users-for-TermsOfService-revalidation_test.js b/api/tests/integration/scripts/mark-users-for-TermsOfService-revalidation_test.js index e8419e31d7a..db18ef3096c 100644 --- a/api/tests/integration/scripts/mark-users-for-TermsOfService-revalidation_test.js +++ b/api/tests/integration/scripts/mark-users-for-TermsOfService-revalidation_test.js @@ -1,8 +1,5 @@ -const { expect, databaseBuilder } = require('../../test-helper'); - -const { - markUsersRequiringTermsOfServiceValidationForRevalidation, -} = require('../../../scripts/mark-users-for-TermsOfService-revalidation'); +import { expect, databaseBuilder } from '../../test-helper.js'; +import { markUsersRequiringTermsOfServiceValidationForRevalidation } from '../../../scripts/mark-users-for-TermsOfService-revalidation.js'; describe('Integration | Scripts | mark-users-for-TermsOfService-revalidation_test', function () { describe('#markUsersRequiringTermsOfServiceValidationForRevalidation', function () { diff --git a/api/tests/integration/scripts/populate-organizations-email_test.js b/api/tests/integration/scripts/populate-organizations-email_test.js index bc2827368f1..675e8b8d8e2 100644 --- a/api/tests/integration/scripts/populate-organizations-email_test.js +++ b/api/tests/integration/scripts/populate-organizations-email_test.js @@ -1,6 +1,5 @@ -const { expect, databaseBuilder, knex, sinon } = require('../../test-helper'); - -const populateOrganizations = require('../../../scripts/populate-organizations-email'); +import { expect, databaseBuilder, knex, sinon } from '../../test-helper.js'; +import { populateOrganizations } from '../../../scripts/populate-organizations-email.js'; describe('Integration | Scripts | populate-organizations-email.js', function () { describe('#populateOrganizations', function () { diff --git a/api/tests/integration/scripts/prod/archive-campaigns_test.js b/api/tests/integration/scripts/prod/archive-campaigns_test.js index 83edddcc52a..34565ef03e0 100644 --- a/api/tests/integration/scripts/prod/archive-campaigns_test.js +++ b/api/tests/integration/scripts/prod/archive-campaigns_test.js @@ -1,6 +1,8 @@ -const { expect, databaseBuilder, knex, sinon } = require('../../../test-helper'); -const archiveCampaigns = require('../../../../scripts/prod/archive-campaigns'); -const { noop } = require('lodash'); +import { expect, databaseBuilder, knex, sinon } from '../../../test-helper.js'; +import { archiveCampaigns } from '../../../../scripts/prod/archive-campaigns.js'; +import lodash from 'lodash'; + +const { noop } = lodash; describe('Script | Prod | Archive Campaign', function () { let clock; diff --git a/api/tests/integration/scripts/prod/compute-badge-acquisitions_test.js b/api/tests/integration/scripts/prod/compute-badge-acquisitions_test.js index 78ca3c43ed9..2f7a9595375 100644 --- a/api/tests/integration/scripts/prod/compute-badge-acquisitions_test.js +++ b/api/tests/integration/scripts/prod/compute-badge-acquisitions_test.js @@ -1,22 +1,24 @@ -const { +import { expect, databaseBuilder, sinon, learningContentBuilder, mockLearningContent, knex, -} = require('../../../test-helper'); -const { +} from '../../../test-helper.js'; + +import { normalizeRange, computeAllBadgeAcquisitions, computeBadgeAcquisition, getCampaignParticipationsBetweenIds, -} = require('../../../../scripts/prod/compute-badge-acquisitions'); -const CampaignParticipation = require('../../../../lib/domain/models/CampaignParticipation'); -const logger = require('../../../../lib/infrastructure/logger'); -const badgeAcquisitionRepository = require('../../../../lib/infrastructure/repositories/badge-acquisition-repository'); -const badgeForCalculationRepository = require('../../../../lib/infrastructure/repositories/badge-for-calculation-repository'); -const knowledgeElementRepository = require('../../../../lib/infrastructure/repositories/knowledge-element-repository'); +} from '../../../../scripts/prod/compute-badge-acquisitions.js'; + +import { CampaignParticipation } from '../../../../lib/domain/models/CampaignParticipation.js'; +import { logger } from '../../../../lib/infrastructure/logger.js'; +import * as badgeAcquisitionRepository from '../../../../lib/infrastructure/repositories/badge-acquisition-repository.js'; +import * as badgeForCalculationRepository from '../../../../lib/infrastructure/repositories/badge-for-calculation-repository.js'; +import * as knowledgeElementRepository from '../../../../lib/infrastructure/repositories/knowledge-element-repository.js'; describe('Script | Prod | Compute Badge Acquisitions', function () { describe('#validateRange', function () { @@ -165,7 +167,7 @@ describe('Script | Prod | Compute Badge Acquisitions', function () { threshold: 90, }); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); return databaseBuilder.commit(); @@ -312,7 +314,7 @@ describe('Script | Prod | Compute Badge Acquisitions', function () { userId, }); - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); return databaseBuilder.commit(); diff --git a/api/tests/integration/scripts/prod/compute-participation-results_test.js b/api/tests/integration/scripts/prod/compute-participation-results_test.js index 664bbb4f659..0f598cec7dd 100644 --- a/api/tests/integration/scripts/prod/compute-participation-results_test.js +++ b/api/tests/integration/scripts/prod/compute-participation-results_test.js @@ -1,7 +1,7 @@ -const { expect, mockLearningContent, databaseBuilder, knex } = require('../../../test-helper'); -const computeParticipationResults = require('../../../../scripts/prod/compute-participation-results'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, mockLearningContent, databaseBuilder, knex } from '../../../test-helper.js'; +import { computeParticipantResultsShared as computeParticipationResults } from '../../../../scripts/prod/compute-participation-results.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED } = CampaignParticipationStatuses; diff --git a/api/tests/integration/scripts/prod/create-assessment-campaigns-for-sco_test.js b/api/tests/integration/scripts/prod/create-assessment-campaigns-for-sco_test.js index 21c82dcfe9b..cdddd3bdf30 100644 --- a/api/tests/integration/scripts/prod/create-assessment-campaigns-for-sco_test.js +++ b/api/tests/integration/scripts/prod/create-assessment-campaigns-for-sco_test.js @@ -1,10 +1,10 @@ -const { expect, databaseBuilder, catchErr } = require('../../../test-helper'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); -const { +import { expect, databaseBuilder, catchErr } from '../../../test-helper.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; +import { prepareCampaigns, checkData, getByExternalIdFetchingIdOnly, -} = require('../../../../scripts/prod/create-assessment-campaigns-for-sco'); +} from '../../../../scripts/prod/create-assessment-campaigns-for-sco.js'; describe('Integration | Scripts | create-assessment-campaigns', function () { describe('#prepareCampaigns', function () { diff --git a/api/tests/integration/scripts/prod/create-organization-places-lot_test.js b/api/tests/integration/scripts/prod/create-organization-places-lot_test.js index 0a99bd984e2..a4da5a2ef92 100644 --- a/api/tests/integration/scripts/prod/create-organization-places-lot_test.js +++ b/api/tests/integration/scripts/prod/create-organization-places-lot_test.js @@ -1,7 +1,6 @@ -const { expect, catchErr } = require('../../../test-helper'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); - -const { prepareOrganizationPlacesLot } = require('../../../../scripts/prod/create-organization-places-lot'); +import { expect, catchErr } from '../../../test-helper.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; +import { prepareOrganizationPlacesLot } from '../../../../scripts/prod/create-organization-places-lot.js'; describe('Integration | Scripts | create-organization-places-lot', function () { describe('#prepareOrganizationPlacesLot', function () { diff --git a/api/tests/integration/scripts/prod/create-profiles-collection-campaigns_test.js b/api/tests/integration/scripts/prod/create-profiles-collection-campaigns_test.js index ad0076c26fe..70181d6d664 100644 --- a/api/tests/integration/scripts/prod/create-profiles-collection-campaigns_test.js +++ b/api/tests/integration/scripts/prod/create-profiles-collection-campaigns_test.js @@ -1,9 +1,7 @@ -const { expect, databaseBuilder, catchErr } = require('../../../test-helper'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); - -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); - -const { prepareCampaigns, checkData } = require('../../../../scripts/prod/create-profiles-collection-campaigns'); +import { expect, databaseBuilder, catchErr } from '../../../test-helper.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { prepareCampaigns, checkData } from '../../../../scripts/prod/create-profiles-collection-campaigns.js'; describe('Integration | Scripts | create-profile-collection-campaigns', function () { describe('#prepareCampaigns', function () { diff --git a/api/tests/integration/scripts/prod/generate-knowledge-element-snapshots-for-campaigns_test.js b/api/tests/integration/scripts/prod/generate-knowledge-element-snapshots-for-campaigns_test.js index f13c560500e..6582f418b38 100644 --- a/api/tests/integration/scripts/prod/generate-knowledge-element-snapshots-for-campaigns_test.js +++ b/api/tests/integration/scripts/prod/generate-knowledge-element-snapshots-for-campaigns_test.js @@ -1,10 +1,8 @@ -const { expect, databaseBuilder, sinon } = require('../../../test-helper'); -const knowledgeElementRepository = require('../../../../lib/infrastructure/repositories/knowledge-element-repository'); -const knowledgeElementSnapshotRepository = require('../../../../lib/infrastructure/repositories/knowledge-element-snapshot-repository'); -const { +import { expect, databaseBuilder, sinon } from '../../../test-helper.js'; +import { getEligibleCampaignParticipations, generateKnowledgeElementSnapshots, -} = require('../../../../scripts/prod/generate-knowledge-element-snapshots-for-campaigns'); +} from '../../../../scripts/prod/generate-knowledge-element-snapshots-for-campaigns.js'; describe('Integration | Scripts | generate-knowledge-element-snapshots-for-campaigns.js', function () { describe('#getEligibleCampaignParticipations', function () { @@ -118,14 +116,15 @@ describe('Integration | Scripts | generate-knowledge-element-snapshots-for-campa }); describe('#generateKnowledgeElementSnapshots', function () { + let knowledgeElementRepositoryStub; + let knowledgeElementSnapshotRepositoryStub; beforeEach(function () { - sinon.stub(knowledgeElementRepository, 'findUniqByUserId'); - sinon.stub(knowledgeElementSnapshotRepository, 'save'); - }); - - afterEach(function () { - knowledgeElementRepository.findUniqByUserId.restore(); - knowledgeElementSnapshotRepository.save.restore(); + knowledgeElementRepositoryStub = { + findUniqByUserId: sinon.stub(), + }; + knowledgeElementSnapshotRepositoryStub = { + save: sinon.stub(), + }; }); it('should save snapshots', async function () { @@ -133,15 +132,18 @@ describe('Integration | Scripts | generate-knowledge-element-snapshots-for-campa const concurrency = 1; const campaignParticipationData = [{ userId: 1, sharedAt: new Date('2020-01-01') }]; const expectedKnowledgeElements = ['someKnowledgeElements']; - knowledgeElementRepository.findUniqByUserId + knowledgeElementRepositoryStub.findUniqByUserId .withArgs({ userId: campaignParticipationData[0].userId, limitDate: campaignParticipationData[0].sharedAt }) .resolves(expectedKnowledgeElements); // when - await generateKnowledgeElementSnapshots(campaignParticipationData, concurrency); + await generateKnowledgeElementSnapshots(campaignParticipationData, concurrency, { + knowledgeElementRepository: knowledgeElementRepositoryStub, + knowledgeElementSnapshotRepository: knowledgeElementSnapshotRepositoryStub, + }); // then - expect(knowledgeElementSnapshotRepository.save).to.have.been.calledWithExactly({ + expect(knowledgeElementSnapshotRepositoryStub.save).to.have.been.calledWithExactly({ userId: campaignParticipationData[0].userId, snappedAt: campaignParticipationData[0].sharedAt, knowledgeElements: expectedKnowledgeElements, diff --git a/api/tests/integration/scripts/prod/hide-skills-in-csv-export_test.js b/api/tests/integration/scripts/prod/hide-skills-in-csv-export_test.js index c9c5564f9b7..eba5130e8b9 100644 --- a/api/tests/integration/scripts/prod/hide-skills-in-csv-export_test.js +++ b/api/tests/integration/scripts/prod/hide-skills-in-csv-export_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const { hideSkills } = require('../../../../scripts/prod/hide-skills-in-csv-export'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { hideSkills } from '../../../../scripts/prod/hide-skills-in-csv-export.js'; describe('hideSkills', function () { it('should update showSkills to false', async function () { diff --git a/api/tests/integration/scripts/prod/replace-threshold1-with-first-skill-stage_test.js b/api/tests/integration/scripts/prod/replace-threshold1-with-first-skill-stage_test.js index eaf29428ee5..d3b4a3b0b6e 100644 --- a/api/tests/integration/scripts/prod/replace-threshold1-with-first-skill-stage_test.js +++ b/api/tests/integration/scripts/prod/replace-threshold1-with-first-skill-stage_test.js @@ -1,7 +1,5 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const { - main, -} = require('../../../../scripts/prod/target-profile-migrations/replace-threshold1-with-first-skill-stage'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { main } from '../../../../scripts/prod/target-profile-migrations/replace-threshold1-with-first-skill-stage.js'; describe('Script | Prod | Replace Threshold with First Skill Stage', function () { it('should convert ', async function () { diff --git a/api/tests/integration/scripts/prod/select-category-for-target-profiles_test.js b/api/tests/integration/scripts/prod/select-category-for-target-profiles_test.js index 58d80f11b6a..d6793eaf361 100644 --- a/api/tests/integration/scripts/prod/select-category-for-target-profiles_test.js +++ b/api/tests/integration/scripts/prod/select-category-for-target-profiles_test.js @@ -1,9 +1,9 @@ -const { expect, databaseBuilder, knex, catchErr } = require('../../../test-helper'); -const { +import { expect, databaseBuilder, knex, catchErr } from '../../../test-helper.js'; +import { setCategoriesToTargetProfiles, setCategoryToTargetProfiles, -} = require('../../../../scripts/prod/select-category-for-target-profiles'); -const { categories } = require('../../../../lib/domain/models/TargetProfile'); +} from '../../../../scripts/prod/select-category-for-target-profiles.js'; +import { categories } from '../../../../lib/domain/models/TargetProfile.js'; describe('Integration | Scripts | select-category-for-target-profiles.js', function () { let firstTargetProfileId; diff --git a/api/tests/integration/scripts/prod/swap-campaign-codes_test.js b/api/tests/integration/scripts/prod/swap-campaign-codes_test.js index c83ed9f1192..565cf1158f8 100644 --- a/api/tests/integration/scripts/prod/swap-campaign-codes_test.js +++ b/api/tests/integration/scripts/prod/swap-campaign-codes_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const { swapCampaignCodes } = require('../../../../scripts/prod/swap-campaign-codes.js'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { swapCampaignCodes } from '../../../../scripts/prod/swap-campaign-codes.js'; describe('Integration | Scripts | swap-campaign-codes', function () { it('should swap campaign codes', async function () { diff --git a/api/tests/integration/scripts/prod/update-documentation-url_test.js b/api/tests/integration/scripts/prod/update-documentation-url_test.js index 97875e79b4f..4e5cc152152 100644 --- a/api/tests/integration/scripts/prod/update-documentation-url_test.js +++ b/api/tests/integration/scripts/prod/update-documentation-url_test.js @@ -1,5 +1,5 @@ -const { expect, databaseBuilder, knex } = require('../../../test-helper'); -const { updateDocumentationUrl, URL } = require('../../../../scripts/prod/update-documentation-url'); +import { expect, databaseBuilder, knex } from '../../../test-helper.js'; +import { updateDocumentationUrl, URL } from '../../../../scripts/prod/update-documentation-url.js'; describe('updateDocumentationUrl', function () { context('when the organization is PRO', function () { diff --git a/api/tests/integration/scripts/send-invitations-to-sco-organizations_test.js b/api/tests/integration/scripts/send-invitations-to-sco-organizations_test.js index b9b33a41adf..72c1ba8edbe 100644 --- a/api/tests/integration/scripts/send-invitations-to-sco-organizations_test.js +++ b/api/tests/integration/scripts/send-invitations-to-sco-organizations_test.js @@ -1,14 +1,14 @@ -const _ = require('lodash'); +import _ from 'lodash'; -const { expect, databaseBuilder, knex } = require('../../test-helper'); +import { expect, databaseBuilder, knex } from '../../test-helper.js'; +import { BookshelfOrganizationInvitation } from '../../../lib/infrastructure/orm-models/OrganizationInvitation.js'; -const BookshelfOrganizationInvitation = require('../../../lib/infrastructure/orm-models/OrganizationInvitation'); -const { +import { getOrganizationByExternalId, buildInvitation, prepareDataForSending, sendJoinOrganizationInvitations, -} = require('../../../scripts/send-invitations-to-sco-organizations'); +} from '../../../scripts/send-invitations-to-sco-organizations.js'; describe('Integration | Scripts | send-invitations-to-sco-organizations.js', function () { describe('#getOrganizationByExternalId', function () { diff --git a/api/tests/integration/scripts/switch-campaign-to-flash_test.js b/api/tests/integration/scripts/switch-campaign-to-flash_test.js index 7b9a067a1bb..506e072d6a4 100644 --- a/api/tests/integration/scripts/switch-campaign-to-flash_test.js +++ b/api/tests/integration/scripts/switch-campaign-to-flash_test.js @@ -1,6 +1,5 @@ -const { expect, databaseBuilder, knex } = require('../../test-helper'); - -const { switchCampaignToFlash } = require('../../../scripts/switch-campaign-to-flash.js'); +import { expect, databaseBuilder, knex } from '../../test-helper.js'; +import { switchCampaignToFlash } from '../../../scripts/switch-campaign-to-flash.js'; describe('Integration | Scripts | switch-campaign-to-flash.js', function () { describe('#switchCampaignToFlash', function () { diff --git a/api/tests/integration/scripts/toggle-is-for-absolute-novice-campaign-attribute_test.js b/api/tests/integration/scripts/toggle-is-for-absolute-novice-campaign-attribute_test.js index f7e7b290613..17dae43c618 100644 --- a/api/tests/integration/scripts/toggle-is-for-absolute-novice-campaign-attribute_test.js +++ b/api/tests/integration/scripts/toggle-is-for-absolute-novice-campaign-attribute_test.js @@ -1,8 +1,6 @@ -const { expect, sinon, databaseBuilder, knex } = require('../../test-helper'); -const logger = require('../../../lib/infrastructure/logger'); -const { - toggleIsForAbsoluteNoviceCampaignAttribute, -} = require('../../../scripts/toggle-is-for-absolute-novice-campaign-attribute'); +import { expect, sinon, databaseBuilder, knex } from '../../test-helper.js'; +import { logger } from '../../../lib/infrastructure/logger.js'; +import { toggleIsForAbsoluteNoviceCampaignAttribute } from '../../../scripts/toggle-is-for-absolute-novice-campaign-attribute.js'; describe('Toggle isForAbsoluteNovice campaign attribute', function () { describe('#toggleIsForAbsoluteNoviceCampaignAttribute', function () { diff --git a/api/tests/test-helper.js b/api/tests/test-helper.js index 09d48c6745a..da3dd22dbce 100644 --- a/api/tests/test-helper.js +++ b/api/tests/test-helper.js @@ -1,34 +1,53 @@ -require('dotenv').config({ path: `${__dirname}/../.env` }); -const _ = require('lodash'); -const MockDate = require('mockdate'); -const chai = require('chai'); +// eslint-disable-next-line eslint-comments/disable-enable-pair +/* eslint-disable node/no-unpublished-import */ +import * as url from 'url'; + +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); +import * as domainBuilder from './tooling/domain-builder/factory/index.js'; +import { HttpTestServer } from './tooling/server/http-test-server.js'; +import * as dotenv from 'dotenv'; + +dotenv.config({ path: `${__dirname}/../.env` }); +import _ from 'lodash'; +import MockDate from 'mockdate'; +import chai from 'chai'; + const expect = chai.expect; -const sinon = require('sinon'); -chai.use(require('chai-as-promised')); -chai.use(require('chai-sorted')); -chai.use(require('sinon-chai')); -const customChaiHelpers = require('./tooling/chai-custom-helpers/index'); -_.each(customChaiHelpers, chai.use); -const { learningContentCache } = require('../lib/infrastructure/caches/learning-content-cache'); +import sinon from 'sinon'; +import chaiAsPromised from 'chai-as-promised'; +import chaiSorted from 'chai-sorted'; +import sinonChai from 'sinon-chai'; + +chai.use(chaiAsPromised); +chai.use(chaiSorted); +chai.use(sinonChai); +import * as customChaiHelpers from './tooling/chai-custom-helpers/index.js'; -const { apimRegisterApplicationsCredentials, jwtConfig } = require('../lib/config'); +_.each(customChaiHelpers, chai.use); +import { learningContentCache } from '../lib/infrastructure/caches/learning-content-cache.js'; -const { knex, disconnect } = require('../db/knex-database-connection'); +import { config } from '../lib/config.js'; +const { apimRegisterApplicationsCredentials, jwtConfig } = config; +import { knex, disconnect } from '../db/knex-database-connection.js'; +import { DatabaseBuilder } from '../db/database-builder/database-builder.js'; -const DatabaseBuilder = require('../db/database-builder/database-builder'); const databaseBuilder = new DatabaseBuilder({ knex }); -const nock = require('nock'); +import nock from 'nock'; + nock.disableNetConnect(); -const learningContentBuilder = require('./tooling/learning-content-builder'); +import { buildLearningContent as learningContentBuilder } from './tooling/learning-content-builder/index.js'; + +import * as tokenService from '../lib/domain/services/token-service.js'; +import { Membership } from '../lib/domain/models/Membership.js'; -const tokenService = require('../lib/domain/services/token-service'); -const Membership = require('../lib/domain/models/Membership'); const EMPTY_BLANK_AND_NULL = ['', '\t \n', null]; -const { ROLES } = require('../lib/domain/constants').PIX_ADMIN; -const { createTempFile, removeTempFile } = require('./tooling/temporary-file'); +import { PIX_ADMIN } from '../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; +import { createTempFile, removeTempFile } from './tooling/temporary-file.js'; /* eslint-disable mocha/no-top-level-hooks */ afterEach(function () { @@ -41,6 +60,7 @@ afterEach(function () { after(function () { return disconnect(); }); + /* eslint-enable mocha/no-top-level-hooks */ function generateValidRequestAuthorizationHeader(userId = 1234, source = 'pix') { @@ -241,17 +261,18 @@ global.chaiErr = function globalErr(fn, val) { throw new chai.AssertionError('Expected an error'); }; +const testErr = new Error('Fake Error'); // eslint-disable-next-line mocha/no-exports -module.exports = { +export { EMPTY_BLANK_AND_NULL, expect, - domainBuilder: require('./tooling/domain-builder/factory'), + domainBuilder, databaseBuilder, generateValidRequestAuthorizationHeader, generateValidRequestAuthorizationHeaderForApplication, generateIdTokenForExternalUser, hFake, - HttpTestServer: require('./tooling/server/http-test-server'), + HttpTestServer, insertOrganizationUserWithRoleAdmin, insertUserWithRoleSuperAdmin, insertUserWithRoleCertif, @@ -262,7 +283,7 @@ module.exports = { streamToPromise, catchErr, catchErrSync, - testErr: new Error('Fake Error'), + testErr, mockLearningContent, learningContentBuilder, createTempFile, diff --git a/api/tests/test-helper_test.js b/api/tests/test-helper_test.js index 985df3582fd..918ddff6364 100644 --- a/api/tests/test-helper_test.js +++ b/api/tests/test-helper_test.js @@ -1,4 +1,4 @@ -const { expect, catchErr } = require('./test-helper'); +import { expect, catchErr } from './test-helper.js'; describe('Test helpers', function () { describe('#catchErr', function () { diff --git a/api/tests/tooling/binary-comparator.js b/api/tests/tooling/binary-comparator.js index 7dfd97ff74d..a69b244f251 100644 --- a/api/tests/tooling/binary-comparator.js +++ b/api/tests/tooling/binary-comparator.js @@ -1,5 +1,7 @@ -const { readFile } = require('fs/promises'); -const { createHash } = require('crypto'); +import { readFile } from 'fs/promises'; +import crypto from 'crypto'; + +const { createHash } = crypto; function _hash(buffer) { const h = createHash('sha1'); @@ -17,6 +19,4 @@ async function isSameBinary(referencePath, buffer) { return expectedHash == actualHash; } -module.exports = { - isSameBinary, -}; +export { isSameBinary }; diff --git a/api/tests/tooling/chai-custom-helpers/deep-equal-array.js b/api/tests/tooling/chai-custom-helpers/deep-equal-array.js index c69781a8514..1b3289c3c46 100644 --- a/api/tests/tooling/chai-custom-helpers/deep-equal-array.js +++ b/api/tests/tooling/chai-custom-helpers/deep-equal-array.js @@ -1,4 +1,4 @@ -module.exports = function (chai, _utils) { +const deepEqualArray = function (chai, _utils) { chai.Assertion.addMethod('deepEqualArray', function (referenceArray) { const assertedArray = this._obj; @@ -26,3 +26,5 @@ function _assertArraysHaveSameLength(chai, array1, array2) { function _assertDeepEqualInstance(chai, instance1, instance2) { new chai.Assertion(instance1).to.deepEqualInstance(instance2); } + +export { deepEqualArray }; diff --git a/api/tests/tooling/chai-custom-helpers/deep-equal-instance-omitting.js b/api/tests/tooling/chai-custom-helpers/deep-equal-instance-omitting.js index a5a1a099803..c075b3d7192 100644 --- a/api/tests/tooling/chai-custom-helpers/deep-equal-instance-omitting.js +++ b/api/tests/tooling/chai-custom-helpers/deep-equal-instance-omitting.js @@ -1,6 +1,6 @@ -const _ = require('lodash'); +import _ from 'lodash'; -module.exports = function (chai, _utils) { +const deepEqualInstanceOmitting = function (chai, _utils) { chai.Assertion.addMethod('deepEqualInstanceOmitting', function (referenceInstance, omittedAttributes) { const assertedInstance = this._obj; @@ -18,3 +18,5 @@ function _assertAreSameType(chai, value1, value2) { function _assertHaveSameContent(chai, value1, value2, omittedAttributes) { new chai.Assertion(_.omit(value1, omittedAttributes)).to.deep.equal(_.omit(value2, omittedAttributes)); } + +export { deepEqualInstanceOmitting }; diff --git a/api/tests/tooling/chai-custom-helpers/deep-equal-instance.js b/api/tests/tooling/chai-custom-helpers/deep-equal-instance.js index 31847807981..c5da809c470 100644 --- a/api/tests/tooling/chai-custom-helpers/deep-equal-instance.js +++ b/api/tests/tooling/chai-custom-helpers/deep-equal-instance.js @@ -1,4 +1,4 @@ -module.exports = function (chai, _utils) { +const deepEqualInstance = function (chai, _utils) { chai.Assertion.addMethod('deepEqualInstance', function (referenceInstance) { const assertedInstance = this._obj; @@ -16,3 +16,5 @@ function _assertAreSameType(chai, value1, value2) { function _assertHaveSameContent(chai, value1, value2) { new chai.Assertion(value1).to.deep.equal(value2); } + +export { deepEqualInstance }; diff --git a/api/tests/tooling/chai-custom-helpers/index.js b/api/tests/tooling/chai-custom-helpers/index.js index 9e0504599ad..4c2940dd846 100644 --- a/api/tests/tooling/chai-custom-helpers/index.js +++ b/api/tests/tooling/chai-custom-helpers/index.js @@ -1,5 +1,5 @@ -module.exports = { - deepEqualInstance: require('./deep-equal-instance'), - deepEqualInstanceOmitting: require('./deep-equal-instance-omitting'), - deepEqualArray: require('./deep-equal-array'), -}; +import { deepEqualInstance } from './deep-equal-instance.js'; +import { deepEqualInstanceOmitting } from './deep-equal-instance-omitting.js'; +import { deepEqualArray } from './deep-equal-array.js'; + +export { deepEqualInstance, deepEqualInstanceOmitting, deepEqualArray }; diff --git a/api/tests/tooling/domain-builder/domain-builder.js b/api/tests/tooling/domain-builder/domain-builder.js index 4e47513e183..8bad72c39b4 100644 --- a/api/tests/tooling/domain-builder/domain-builder.js +++ b/api/tests/tooling/domain-builder/domain-builder.js @@ -1 +1,3 @@ -module.exports = require('./factory'); +import * as domainBuilder from './factory/index.js'; + +export { domainBuilder }; diff --git a/api/tests/tooling/domain-builder/factory/build-account-recovery-demand.js b/api/tests/tooling/domain-builder/factory/build-account-recovery-demand.js index b44779a6187..12128c749e4 100644 --- a/api/tests/tooling/domain-builder/factory/build-account-recovery-demand.js +++ b/api/tests/tooling/domain-builder/factory/build-account-recovery-demand.js @@ -1,6 +1,6 @@ -const AccountRecoveryDemand = require('../../../../lib/domain/models/AccountRecoveryDemand'); +import { AccountRecoveryDemand } from '../../../../lib/domain/models/AccountRecoveryDemand.js'; -module.exports = function buildAccountRecoveryDemand({ +const buildAccountRecoveryDemand = function ({ userId = 7, organizationLearnerId, newEmail = 'new-email@example.net', @@ -17,3 +17,5 @@ module.exports = function buildAccountRecoveryDemand({ temporaryKey, }); }; + +export { buildAccountRecoveryDemand }; diff --git a/api/tests/tooling/domain-builder/factory/build-admin-member.js b/api/tests/tooling/domain-builder/factory/build-admin-member.js index fb9c6160e84..44eb618392e 100644 --- a/api/tests/tooling/domain-builder/factory/build-admin-member.js +++ b/api/tests/tooling/domain-builder/factory/build-admin-member.js @@ -1,5 +1,7 @@ -const AdminMember = require('../../../../lib/domain/models/AdminMember'); -const { ROLES } = require('../../../../lib/domain/constants').PIX_ADMIN; +import { AdminMember } from '../../../../lib/domain/models/AdminMember.js'; +import { PIX_ADMIN } from '../../../../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; const buildAdminMember = function ({ id = 1, @@ -107,4 +109,4 @@ buildAdminMember.withRoleSuperAdmin = function ({ }); }; -module.exports = buildAdminMember; +export { buildAdminMember }; diff --git a/api/tests/tooling/domain-builder/factory/build-allowed-certification-center-access.js b/api/tests/tooling/domain-builder/factory/build-allowed-certification-center-access.js index e08b549896d..59bd694a8c8 100644 --- a/api/tests/tooling/domain-builder/factory/build-allowed-certification-center-access.js +++ b/api/tests/tooling/domain-builder/factory/build-allowed-certification-center-access.js @@ -1,4 +1,4 @@ -const AllowedCertificationCenterAccess = require('../../../../lib/domain/read-models/AllowedCertificationCenterAccess'); +import { AllowedCertificationCenterAccess } from '../../../../lib/domain/read-models/AllowedCertificationCenterAccess.js'; function buildAllowedCertificationCenterAccess({ id = 123, @@ -30,4 +30,4 @@ buildAllowedCertificationCenterAccess.notSco = function ({ }); }; -module.exports = buildAllowedCertificationCenterAccess; +export { buildAllowedCertificationCenterAccess }; diff --git a/api/tests/tooling/domain-builder/factory/build-answer.js b/api/tests/tooling/domain-builder/factory/build-answer.js index a786e72080c..7110f36919e 100644 --- a/api/tests/tooling/domain-builder/factory/build-answer.js +++ b/api/tests/tooling/domain-builder/factory/build-answer.js @@ -1,5 +1,5 @@ -const Answer = require('../../../../lib/domain/models/Answer'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); +import { Answer } from '../../../../lib/domain/models/Answer.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; function buildAnswer({ id = 123, @@ -135,4 +135,4 @@ buildAnswer.focusedOut = function ({ }); }; -module.exports = buildAnswer; +export { buildAnswer }; diff --git a/api/tests/tooling/domain-builder/factory/build-area.js b/api/tests/tooling/domain-builder/factory/build-area.js index 2d1dc87511b..40c6f7ff0e1 100644 --- a/api/tests/tooling/domain-builder/factory/build-area.js +++ b/api/tests/tooling/domain-builder/factory/build-area.js @@ -1,6 +1,6 @@ -const Area = require('../../../../lib/domain/models/Area'); +import { Area } from '../../../../lib/domain/models/Area.js'; -module.exports = function buildArea({ +const buildArea = function ({ id = 'recArea123', code = 5, title = 'Super domaine', @@ -24,3 +24,5 @@ module.exports = function buildArea({ }); return area; }; + +export { buildArea }; diff --git a/api/tests/tooling/domain-builder/factory/build-assessment-result.js b/api/tests/tooling/domain-builder/factory/build-assessment-result.js index aabb4c10edd..a6ffffefc22 100644 --- a/api/tests/tooling/domain-builder/factory/build-assessment-result.js +++ b/api/tests/tooling/domain-builder/factory/build-assessment-result.js @@ -1,6 +1,8 @@ -const { status: assessmentResultStatuses } = require('../../../../lib/domain/models/AssessmentResult'); -const AssessmentResult = require('../../../../lib/domain/models/AssessmentResult'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +import { + status as assessmentResultStatuses, + AssessmentResult, +} from '../../../../lib/domain/models/AssessmentResult.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; const buildAssessmentResult = function ({ id = 123, @@ -182,4 +184,4 @@ buildAssessmentResult.standard = function ({ }); }; -module.exports = buildAssessmentResult; +export { buildAssessmentResult }; diff --git a/api/tests/tooling/domain-builder/factory/build-assessment.js b/api/tests/tooling/domain-builder/factory/build-assessment.js index ffa5e564cdd..164907fab16 100644 --- a/api/tests/tooling/domain-builder/factory/build-assessment.js +++ b/api/tests/tooling/domain-builder/factory/build-assessment.js @@ -1,11 +1,10 @@ -const _ = require('lodash'); -const Assessment = require('../../../../lib/domain/models/Assessment'); - -const buildAnswer = require('./build-answer'); -const buildCourse = require('./build-course'); -const buildKnowledgeElement = require('./build-knowledge-element'); -const buildTargetProfile = require('./build-target-profile'); -const buildCampaignParticipation = require('./build-campaign-participation'); +import _ from 'lodash'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { buildAnswer } from './build-answer.js'; +import { buildCourse } from './build-course.js'; +import { buildKnowledgeElement } from './build-knowledge-element.js'; +import { buildTargetProfile } from './build-target-profile.js'; +import { buildCampaignParticipation } from './build-campaign-participation.js'; function buildAssessment({ id = 123, @@ -154,4 +153,4 @@ buildAssessment.ofTypeCompetenceEvaluation = function ({ buildAssessment.ofTypeCertification = buildAssessment; -module.exports = buildAssessment; +export { buildAssessment }; diff --git a/api/tests/tooling/domain-builder/factory/build-authentication-method.js b/api/tests/tooling/domain-builder/factory/build-authentication-method.js index f730d7d52b1..878eadf81b0 100644 --- a/api/tests/tooling/domain-builder/factory/build-authentication-method.js +++ b/api/tests/tooling/domain-builder/factory/build-authentication-method.js @@ -1,9 +1,10 @@ -const isUndefined = require('lodash/isUndefined'); +import lodash from 'lodash'; +const { isUndefined } = lodash; -const encrypt = require('../../../../lib/domain/services/encryption-service'); -const User = require('../../../../lib/domain/models/User'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); -const OidcIdentityProviders = require('../../../../lib/domain/constants/oidc-identity-providers'); +import * as encrypt from '../../../../lib/domain/services/encryption-service.js'; +import { User } from '../../../../lib/domain/models/User.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; +import * as OidcIdentityProviders from '../../../../lib/domain/constants/oidc-identity-providers.js'; function _buildUser() { return new User({ @@ -148,4 +149,4 @@ buildAuthenticationMethod.withIdentityProvider = function ({ }); }; -module.exports = buildAuthenticationMethod; +export { buildAuthenticationMethod }; diff --git a/api/tests/tooling/domain-builder/factory/build-badge-acquisition.js b/api/tests/tooling/domain-builder/factory/build-badge-acquisition.js index fe664612e6d..3b08735ad96 100644 --- a/api/tests/tooling/domain-builder/factory/build-badge-acquisition.js +++ b/api/tests/tooling/domain-builder/factory/build-badge-acquisition.js @@ -1,5 +1,5 @@ -const buildBadge = require('./build-badge'); -const BadgeAcquisition = require('../../../../lib/domain/models/BadgeAcquisition'); +import { buildBadge } from './build-badge.js'; +import { BadgeAcquisition } from '../../../../lib/domain/models/BadgeAcquisition.js'; const buildBadgeAcquisition = function buildBadgeAcquisition({ id = 123, @@ -18,4 +18,4 @@ const buildBadgeAcquisition = function buildBadgeAcquisition({ }); }; -module.exports = buildBadgeAcquisition; +export { buildBadgeAcquisition }; diff --git a/api/tests/tooling/domain-builder/factory/build-badge-criterion-for-calculation.js b/api/tests/tooling/domain-builder/factory/build-badge-criterion-for-calculation.js index 1cd9d85daf6..6b6f79f60da 100644 --- a/api/tests/tooling/domain-builder/factory/build-badge-criterion-for-calculation.js +++ b/api/tests/tooling/domain-builder/factory/build-badge-criterion-for-calculation.js @@ -1,4 +1,4 @@ -const { BadgeCriterion } = require('../../../../lib/domain/models/BadgeForCalculation'); +import { BadgeCriterion } from '../../../../lib/domain/models/BadgeForCalculation.js'; const buildBadgeCriterionForCalculation = function buildBadgeCriterionForCalculation({ threshold = 80, @@ -10,4 +10,4 @@ const buildBadgeCriterionForCalculation = function buildBadgeCriterionForCalcula }); }; -module.exports = buildBadgeCriterionForCalculation; +export { buildBadgeCriterionForCalculation }; diff --git a/api/tests/tooling/domain-builder/factory/build-badge-criterion.js b/api/tests/tooling/domain-builder/factory/build-badge-criterion.js index ed67cf62501..c59a4b166f9 100644 --- a/api/tests/tooling/domain-builder/factory/build-badge-criterion.js +++ b/api/tests/tooling/domain-builder/factory/build-badge-criterion.js @@ -1,6 +1,6 @@ -const BadgeCriterion = require('../../../../lib/domain/models/BadgeCriterion'); +import { BadgeCriterion } from '../../../../lib/domain/models/BadgeCriterion.js'; -module.exports = function buildBadgeCriterion({ +const buildBadgeCriterion = function ({ id = 1, scope = BadgeCriterion.SCOPES.CAMPAIGN_PARTICIPATION, threshold = 40, @@ -13,3 +13,5 @@ module.exports = function buildBadgeCriterion({ skillSetIds, }); }; + +export { buildBadgeCriterion }; diff --git a/api/tests/tooling/domain-builder/factory/build-badge-details.js b/api/tests/tooling/domain-builder/factory/build-badge-details.js index 612739ef358..34e770c9952 100644 --- a/api/tests/tooling/domain-builder/factory/build-badge-details.js +++ b/api/tests/tooling/domain-builder/factory/build-badge-details.js @@ -1,10 +1,10 @@ -const { +import { BadgeDetails, BadgeCriterion, SkillSet, CappedTube, SCOPES, -} = require('../../../../lib/domain/models/BadgeDetails'); +} from '../../../../lib/domain/models/BadgeDetails.js'; const buildBadgeDetails = function buildBadgeDetails({ id = 123, @@ -81,4 +81,4 @@ buildBadgeDetails.buildBadgeCriterion_CappedTubes = function ({ }); }; -module.exports = buildBadgeDetails; +export { buildBadgeDetails }; diff --git a/api/tests/tooling/domain-builder/factory/build-badge-for-calculation.js b/api/tests/tooling/domain-builder/factory/build-badge-for-calculation.js index 9d0742ebf16..048c009644d 100644 --- a/api/tests/tooling/domain-builder/factory/build-badge-for-calculation.js +++ b/api/tests/tooling/domain-builder/factory/build-badge-for-calculation.js @@ -1,5 +1,5 @@ -const { BadgeForCalculation } = require('../../../../lib/domain/models/BadgeForCalculation'); -const buildBadgeCriterionForCalculation = require('./build-badge-criterion-for-calculation'); +import { BadgeForCalculation } from '../../../../lib/domain/models/BadgeForCalculation.js'; +import { buildBadgeCriterionForCalculation } from './build-badge-criterion-for-calculation.js'; const buildBadgeForCalculation = function buildBadgeForCalculation({ id = 1, @@ -23,4 +23,4 @@ buildBadgeForCalculation.mockNotObtainable = function buildObtainable({ id, badg return badgeForCalculation; }; -module.exports = buildBadgeForCalculation; +export { buildBadgeForCalculation }; diff --git a/api/tests/tooling/domain-builder/factory/build-badge.js b/api/tests/tooling/domain-builder/factory/build-badge.js index 26aeef16fb0..c47dfca7e31 100644 --- a/api/tests/tooling/domain-builder/factory/build-badge.js +++ b/api/tests/tooling/domain-builder/factory/build-badge.js @@ -1,8 +1,8 @@ -const Badge = require('../../../../lib/domain/models/Badge'); -const buildBadgeCriterion = require('./build-badge-criterion'); -const buildSkillSet = require('./build-skill-set'); +import { Badge } from '../../../../lib/domain/models/Badge.js'; +import { buildBadgeCriterion } from './build-badge-criterion.js'; +import { buildSkillSet } from './build-skill-set.js'; -module.exports = function buildBadge({ +const buildBadge = function ({ id = 1, altMessage = 'altMessage', imageUrl = '/img/banana', @@ -31,3 +31,5 @@ module.exports = function buildBadge({ complementaryCertificationBadge, }); }; + +export { buildBadge }; diff --git a/api/tests/tooling/domain-builder/factory/build-campaign-collective-result.js b/api/tests/tooling/domain-builder/factory/build-campaign-collective-result.js index bad600747ce..4f340b90e4e 100644 --- a/api/tests/tooling/domain-builder/factory/build-campaign-collective-result.js +++ b/api/tests/tooling/domain-builder/factory/build-campaign-collective-result.js @@ -1,7 +1,7 @@ -const buildCampaignLearningContent = require('./build-campaign-learning-content'); -const CampaignCollectiveResult = require('../../../../lib/domain/read-models/CampaignCollectiveResult'); +import { buildCampaignLearningContent } from './build-campaign-learning-content.js'; +import { CampaignCollectiveResult } from '../../../../lib/domain/read-models/CampaignCollectiveResult.js'; -module.exports = function buildCampaignCollectiveResult({ +const buildCampaignCollectiveResult = function ({ id = 123, campaignLearningContent = buildCampaignLearningContent(), participantsValidatedKECountByCompetenceId = [], @@ -18,3 +18,5 @@ module.exports = function buildCampaignCollectiveResult({ return campaignCollectiveResult; }; + +export { buildCampaignCollectiveResult }; diff --git a/api/tests/tooling/domain-builder/factory/build-campaign-learning-content.js b/api/tests/tooling/domain-builder/factory/build-campaign-learning-content.js index 58a9331b018..04eb9443958 100644 --- a/api/tests/tooling/domain-builder/factory/build-campaign-learning-content.js +++ b/api/tests/tooling/domain-builder/factory/build-campaign-learning-content.js @@ -1,5 +1,5 @@ -const CampaignLearningContent = require('../../../../lib/domain/models/CampaignLearningContent'); -const buildLearningContent = require('./build-learning-content'); +import { CampaignLearningContent } from '../../../../lib/domain/models/CampaignLearningContent.js'; +import { buildLearningContent } from './build-learning-content.js'; function buildCampaignLearningContent(learningContent = buildLearningContent()) { return new CampaignLearningContent(learningContent); @@ -15,4 +15,4 @@ buildCampaignLearningContent.withSimpleContent = () => { return buildCampaignLearningContent(simpleLearningContent); }; -module.exports = buildCampaignLearningContent; +export { buildCampaignLearningContent }; diff --git a/api/tests/tooling/domain-builder/factory/build-campaign-management.js b/api/tests/tooling/domain-builder/factory/build-campaign-management.js index 026a5fc03fd..53a02333eef 100644 --- a/api/tests/tooling/domain-builder/factory/build-campaign-management.js +++ b/api/tests/tooling/domain-builder/factory/build-campaign-management.js @@ -1,7 +1,7 @@ -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const CampaignManagement = require('../../../../lib/domain/read-models/CampaignManagement'); +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { CampaignManagement } from '../../../../lib/domain/read-models/CampaignManagement.js'; -module.exports = function buildCampaignManagement({ +const buildCampaignManagement = function ({ id = 1, name = 'Un nom de campagne', code = 'AZERTY123', @@ -30,3 +30,5 @@ module.exports = function buildCampaignManagement({ ownerLastName, }); }; + +export { buildCampaignManagement }; diff --git a/api/tests/tooling/domain-builder/factory/build-campaign-participation-badge.js b/api/tests/tooling/domain-builder/factory/build-campaign-participation-badge.js index 12a8d35c8a1..cbc6719f9dc 100644 --- a/api/tests/tooling/domain-builder/factory/build-campaign-participation-badge.js +++ b/api/tests/tooling/domain-builder/factory/build-campaign-participation-badge.js @@ -1,6 +1,6 @@ -const CampaignParticipationBadge = require('../../../../lib/domain/models/CampaignParticipationBadge'); +import { CampaignParticipationBadge } from '../../../../lib/domain/models/CampaignParticipationBadge.js'; -module.exports = function buildCampaignParticipationBadge({ +const buildCampaignParticipationBadge = function ({ id = 123, key, altMessage, @@ -27,3 +27,5 @@ module.exports = function buildCampaignParticipationBadge({ skillSetResults, }); }; + +export { buildCampaignParticipationBadge }; diff --git a/api/tests/tooling/domain-builder/factory/build-campaign-participation-for-user-management.js b/api/tests/tooling/domain-builder/factory/build-campaign-participation-for-user-management.js index 0b48330e995..69a5847126b 100644 --- a/api/tests/tooling/domain-builder/factory/build-campaign-participation-for-user-management.js +++ b/api/tests/tooling/domain-builder/factory/build-campaign-participation-for-user-management.js @@ -1,7 +1,7 @@ -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); -const CampaignParticipationForUserManagement = require('../../../../lib/domain/read-models/CampaignParticipationForUserManagement'); +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { CampaignParticipationForUserManagement } from '../../../../lib/domain/read-models/CampaignParticipationForUserManagement.js'; -module.exports = function buildCampaignParticipationForUserManagement({ +const buildCampaignParticipationForUserManagement = function ({ id = 1, participantExternalId = 'un identifiant externe', status = CampaignParticipationStatuses.TO_SHARE, @@ -32,3 +32,5 @@ module.exports = function buildCampaignParticipationForUserManagement({ organizationLearnerLastName, }); }; + +export { buildCampaignParticipationForUserManagement }; diff --git a/api/tests/tooling/domain-builder/factory/build-campaign-participation-info.js b/api/tests/tooling/domain-builder/factory/build-campaign-participation-info.js index 7732facf0a3..49ead2962a3 100644 --- a/api/tests/tooling/domain-builder/factory/build-campaign-participation-info.js +++ b/api/tests/tooling/domain-builder/factory/build-campaign-participation-info.js @@ -1,4 +1,4 @@ -const CampaignParticipationInfo = require('../../../../lib/domain/read-models/CampaignParticipationInfo'); +import { CampaignParticipationInfo } from '../../../../lib/domain/read-models/CampaignParticipationInfo.js'; function buildCampaignParticipationInfo({ participantFirstName = 'participantFirstName', @@ -28,4 +28,4 @@ function buildCampaignParticipationInfo({ }); } -module.exports = buildCampaignParticipationInfo; +export { buildCampaignParticipationInfo }; diff --git a/api/tests/tooling/domain-builder/factory/build-campaign-participation-result.js b/api/tests/tooling/domain-builder/factory/build-campaign-participation-result.js index 02a3207c693..75f7d0ad2f9 100644 --- a/api/tests/tooling/domain-builder/factory/build-campaign-participation-result.js +++ b/api/tests/tooling/domain-builder/factory/build-campaign-participation-result.js @@ -1,6 +1,6 @@ -const CampaignParticipationResult = require('../../../../lib/domain/models/CampaignParticipationResult'); +import { CampaignParticipationResult } from '../../../../lib/domain/models/CampaignParticipationResult.js'; -module.exports = function buildCampaignParticipationResult({ +const buildCampaignParticipationResult = function ({ id = 1, isCompleted = true, totalSkillsCount = 10, @@ -17,3 +17,5 @@ module.exports = function buildCampaignParticipationResult({ competenceResults, }); }; + +export { buildCampaignParticipationResult }; diff --git a/api/tests/tooling/domain-builder/factory/build-campaign-participation.js b/api/tests/tooling/domain-builder/factory/build-campaign-participation.js index d7c6d7d47ec..78679b86e97 100644 --- a/api/tests/tooling/domain-builder/factory/build-campaign-participation.js +++ b/api/tests/tooling/domain-builder/factory/build-campaign-participation.js @@ -1,9 +1,9 @@ -const CampaignParticipation = require('../../../../lib/domain/models/CampaignParticipation'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); -const buildCampaign = require('./build-campaign'); +import { CampaignParticipation } from '../../../../lib/domain/models/CampaignParticipation.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { buildCampaign } from './build-campaign.js'; const { SHARED } = CampaignParticipationStatuses; -module.exports = function buildCampaignParticipation({ +const buildCampaignParticipation = function ({ id = 1, campaign = buildCampaign(), sharedAt = new Date('2020-02-01'), @@ -33,3 +33,5 @@ module.exports = function buildCampaignParticipation({ deletedBy, }); }; + +export { buildCampaignParticipation }; diff --git a/api/tests/tooling/domain-builder/factory/build-campaign-report.js b/api/tests/tooling/domain-builder/factory/build-campaign-report.js index 9c68eff090b..007f934cdd8 100644 --- a/api/tests/tooling/domain-builder/factory/build-campaign-report.js +++ b/api/tests/tooling/domain-builder/factory/build-campaign-report.js @@ -1,7 +1,7 @@ -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const CampaignReport = require('../../../../lib/domain/read-models/CampaignReport'); +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { CampaignReport } from '../../../../lib/domain/read-models/CampaignReport.js'; -module.exports = function buildCampaignReport({ +const buildCampaignReport = function ({ id = 1, name = 'Un nom de campagne', code = 'AZERTY123', @@ -52,3 +52,5 @@ module.exports = function buildCampaignReport({ totalStage, }); }; + +export { buildCampaignReport }; diff --git a/api/tests/tooling/domain-builder/factory/build-campaign-to-join.js b/api/tests/tooling/domain-builder/factory/build-campaign-to-join.js index 8b54b46d5a3..6432add8414 100644 --- a/api/tests/tooling/domain-builder/factory/build-campaign-to-join.js +++ b/api/tests/tooling/domain-builder/factory/build-campaign-to-join.js @@ -1,8 +1,8 @@ -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const CampaignToJoin = require('../../../../lib/domain/read-models/CampaignToJoin'); -const { types } = require('../../../../lib/domain/models/Organization'); +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { CampaignToJoin } from '../../../../lib/domain/read-models/CampaignToJoin.js'; +import { types } from '../../../../lib/domain/models/Organization.js'; -module.exports = function buildCampaignToJoin({ +const buildCampaignToJoin = function ({ id = 1, code = 'AZERTY123', title = 'Un titre de campagne', @@ -51,3 +51,5 @@ module.exports = function buildCampaignToJoin({ assessmentMethod, }); }; + +export { buildCampaignToJoin }; diff --git a/api/tests/tooling/domain-builder/factory/build-campaign-to-start-participation.js b/api/tests/tooling/domain-builder/factory/build-campaign-to-start-participation.js index 4c4e99db3ae..8df8c7efd28 100644 --- a/api/tests/tooling/domain-builder/factory/build-campaign-to-start-participation.js +++ b/api/tests/tooling/domain-builder/factory/build-campaign-to-start-participation.js @@ -1,7 +1,7 @@ -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const CampaignToStartParticipation = require('../../../../lib/domain/models/CampaignToStartParticipation'); +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { CampaignToStartParticipation } from '../../../../lib/domain/models/CampaignToStartParticipation.js'; -module.exports = function buildCampaignToStartParticipation({ +const buildCampaignToStartParticipation = function ({ id = 1, idPixLabel = 'Un id pix label', archivedAt = null, @@ -24,3 +24,5 @@ module.exports = function buildCampaignToStartParticipation({ organizationId, }); }; + +export { buildCampaignToStartParticipation }; diff --git a/api/tests/tooling/domain-builder/factory/build-campaign.js b/api/tests/tooling/domain-builder/factory/build-campaign.js index 4a004dc6111..aab88a5f9c1 100644 --- a/api/tests/tooling/domain-builder/factory/build-campaign.js +++ b/api/tests/tooling/domain-builder/factory/build-campaign.js @@ -1,8 +1,8 @@ -const Campaign = require('../../../../lib/domain/models/Campaign'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const buildOrganization = require('./build-organization'); -const buildTargetProfile = require('./build-target-profile'); -const buildUser = require('./build-user'); +import { Campaign } from '../../../../lib/domain/models/Campaign.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { buildOrganization } from './build-organization.js'; +import { buildTargetProfile } from './build-target-profile.js'; +import { buildUser } from './build-user.js'; function buildCampaign({ id = 1, @@ -140,4 +140,4 @@ buildCampaign.ofTypeProfilesCollection = function ({ }); }; -module.exports = buildCampaign; +export { buildCampaign }; diff --git a/api/tests/tooling/domain-builder/factory/build-certifiable-badge-acquisition.js b/api/tests/tooling/domain-builder/factory/build-certifiable-badge-acquisition.js index 19c40cca157..fb66886d176 100644 --- a/api/tests/tooling/domain-builder/factory/build-certifiable-badge-acquisition.js +++ b/api/tests/tooling/domain-builder/factory/build-certifiable-badge-acquisition.js @@ -1,4 +1,4 @@ -const CertifiableBadgeAcquisition = require('../../../../lib/domain/models/CertifiableBadgeAcquisition'); +import { CertifiableBadgeAcquisition } from '../../../../lib/domain/models/CertifiableBadgeAcquisition.js'; const buildCertifiableBadgeAcquisition = function ({ badgeId = 123, @@ -22,4 +22,4 @@ const buildCertifiableBadgeAcquisition = function ({ }); }; -module.exports = buildCertifiableBadgeAcquisition; +export { buildCertifiableBadgeAcquisition }; diff --git a/api/tests/tooling/domain-builder/factory/build-certifiable-profile-for-learning-content.js b/api/tests/tooling/domain-builder/factory/build-certifiable-profile-for-learning-content.js index 1b6e6ecc4e9..2a68fc0bd0c 100644 --- a/api/tests/tooling/domain-builder/factory/build-certifiable-profile-for-learning-content.js +++ b/api/tests/tooling/domain-builder/factory/build-certifiable-profile-for-learning-content.js @@ -1,4 +1,4 @@ -const CertifiableProfileForLearningContent = require('../../../../lib/domain/models/CertifiableProfileForLearningContent'); +import { CertifiableProfileForLearningContent } from '../../../../lib/domain/models/CertifiableProfileForLearningContent.js'; const buildCertifiableProfileForLearningContent = function ({ learningContent, @@ -12,4 +12,4 @@ const buildCertifiableProfileForLearningContent = function ({ }); }; -module.exports = buildCertifiableProfileForLearningContent; +export { buildCertifiableProfileForLearningContent }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-assessment-score.js b/api/tests/tooling/domain-builder/factory/build-certification-assessment-score.js index edf54578899..03cb1282d90 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-assessment-score.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-assessment-score.js @@ -1,6 +1,6 @@ -const CertificationAssessmentScore = require('../../../../lib/domain/models/CertificationAssessmentScore'); +import { CertificationAssessmentScore } from '../../../../lib/domain/models/CertificationAssessmentScore.js'; -module.exports = function buildCertificationAssessmentScore({ +const buildCertificationAssessmentScore = function ({ competenceMarks = [], percentageCorrectAnswers = 0, hasEnoughNonNeutralizedChallengesToBeTrusted = true, @@ -11,3 +11,5 @@ module.exports = function buildCertificationAssessmentScore({ hasEnoughNonNeutralizedChallengesToBeTrusted, }); }; + +export { buildCertificationAssessmentScore }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-assessment.js b/api/tests/tooling/domain-builder/factory/build-certification-assessment.js index 8a80ece6e8f..a28eac49567 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-assessment.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-assessment.js @@ -1,7 +1,7 @@ -const CertificationAssessment = require('../../../../lib/domain/models/CertificationAssessment'); -const buildCertificationChallengeWithType = require('./build-certification-challenge-with-type'); +import { CertificationAssessment } from '../../../../lib/domain/models/CertificationAssessment.js'; +import { buildCertificationChallengeWithType } from './build-certification-challenge-with-type.js'; -module.exports = function buildCertificationAssessment({ +const buildCertificationAssessment = function ({ id = 123, userId = 123, certificationCourseId = 123, @@ -24,3 +24,5 @@ module.exports = function buildCertificationAssessment({ certificationAnswersByDate, }); }; + +export { buildCertificationAssessment }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-attestation.js b/api/tests/tooling/domain-builder/factory/build-certification-attestation.js index dfc038b3cd4..275cfae9361 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-attestation.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-attestation.js @@ -1,6 +1,6 @@ -const CertificationAttestation = require('../../../../lib/domain/models/CertificationAttestation'); +import { CertificationAttestation } from '../../../../lib/domain/models/CertificationAttestation.js'; -module.exports = function buildCertificationAttestation({ +const buildCertificationAttestation = function ({ id = 1, firstName = 'Jean', lastName = 'Bon', @@ -35,3 +35,5 @@ module.exports = function buildCertificationAttestation({ resultCompetenceTree, }); }; + +export { buildCertificationAttestation }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-candidate-for-supervising.js b/api/tests/tooling/domain-builder/factory/build-certification-candidate-for-supervising.js index 37111c1e7e2..a33c0f57b05 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-candidate-for-supervising.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-candidate-for-supervising.js @@ -1,6 +1,6 @@ -const CertificationCandidateForSupervising = require('../../../../lib/domain/models/CertificationCandidateForSupervising'); +import { CertificationCandidateForSupervising } from '../../../../lib/domain/models/CertificationCandidateForSupervising.js'; -module.exports = function buildCertificationCandidateForSupervising({ +const buildCertificationCandidateForSupervising = function ({ id = 123, userId = 345, firstName = 'Monkey', @@ -29,3 +29,5 @@ module.exports = function buildCertificationCandidateForSupervising({ stillValidBadgeAcquisitions, }); }; + +export { buildCertificationCandidateForSupervising }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-candidate-subscription.js b/api/tests/tooling/domain-builder/factory/build-certification-candidate-subscription.js index 3f5d3f9a9d1..bef0aa0532f 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-candidate-subscription.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-candidate-subscription.js @@ -1,6 +1,6 @@ -const CertificationCandidateSubscription = require('../../../../lib/domain/read-models/CertificationCandidateSubscription'); +import { CertificationCandidateSubscription } from '../../../../lib/domain/read-models/CertificationCandidateSubscription.js'; -module.exports = function buildCertificationCandidateSubscription({ +const buildCertificationCandidateSubscription = function ({ id = 1234, sessionId = 1234, eligibleSubscriptions = [], @@ -13,3 +13,5 @@ module.exports = function buildCertificationCandidateSubscription({ nonEligibleSubscriptions, }); }; + +export { buildCertificationCandidateSubscription }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-candidate.js b/api/tests/tooling/domain-builder/factory/build-certification-candidate.js index fe4c19d87b8..2ad829c4540 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-candidate.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-candidate.js @@ -1,5 +1,5 @@ -const buildComplementaryCertification = require('./build-complementary-certification'); -const CertificationCandidate = require('../../../../lib/domain/models/CertificationCandidate'); +import { buildComplementaryCertification } from './build-complementary-certification.js'; +import { CertificationCandidate } from '../../../../lib/domain/models/CertificationCandidate.js'; const buildCertificationCandidate = function ({ id = 123, @@ -129,4 +129,4 @@ buildCertificationCandidate.notPersisted = function ({ }); }; -module.exports = buildCertificationCandidate; +export { buildCertificationCandidate }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-center-for-admin.js b/api/tests/tooling/domain-builder/factory/build-certification-center-for-admin.js index 6801032f015..7d3b412ddb1 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-center-for-admin.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-center-for-admin.js @@ -1,6 +1,6 @@ -const CertificationCenterForAdmin = require('../../../../lib/domain/models/CertificationCenterForAdmin'); +import { CertificationCenterForAdmin } from '../../../../lib/domain/models/CertificationCenterForAdmin.js'; -module.exports = function buildCertificationCenterForAdmin({ +const buildCertificationCenterForAdmin = function ({ id = 1, name = 'name', type = CertificationCenterForAdmin.types.SUP, @@ -25,3 +25,5 @@ module.exports = function buildCertificationCenterForAdmin({ habilitations, }); }; + +export { buildCertificationCenterForAdmin }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-center-invitation.js b/api/tests/tooling/domain-builder/factory/build-certification-center-invitation.js index 489f0a44a7b..9b926bacf01 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-center-invitation.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-center-invitation.js @@ -1,6 +1,6 @@ -const CertificationCenterInvitation = require('../../../../lib/domain/models/CertificationCenterInvitation'); +import { CertificationCenterInvitation } from '../../../../lib/domain/models/CertificationCenterInvitation.js'; -module.exports = function buildCertificationCenterInvitation({ +const buildCertificationCenterInvitation = function ({ id = 123, certificationCenterId = 456, email = 'userInvited@example.net', @@ -19,3 +19,5 @@ module.exports = function buildCertificationCenterInvitation({ updatedAt, }); }; + +export { buildCertificationCenterInvitation }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-center-membership.js b/api/tests/tooling/domain-builder/factory/build-certification-center-membership.js index dbd42b8df15..3d812e43947 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-center-membership.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-center-membership.js @@ -1,6 +1,6 @@ -const User = require('../../../../lib/domain/models/User'); -const CertificationCenterMembership = require('../../../../lib/domain/models/CertificationCenterMembership'); -const buildCertificationCenter = require('./build-certification-center'); +import { User } from '../../../../lib/domain/models/User.js'; +import { CertificationCenterMembership } from '../../../../lib/domain/models/CertificationCenterMembership.js'; +import { buildCertificationCenter } from './build-certification-center.js'; function _buildUser() { return new User({ @@ -11,7 +11,7 @@ function _buildUser() { }); } -module.exports = function buildCertificationCenterMembership({ +const buildCertificationCenterMembership = function ({ id = 1, certificationCenter = buildCertificationCenter(), user = _buildUser(), @@ -28,3 +28,5 @@ module.exports = function buildCertificationCenterMembership({ isReferer, }); }; + +export { buildCertificationCenterMembership }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-center.js b/api/tests/tooling/domain-builder/factory/build-certification-center.js index 67693c3dd6c..6ac9aca0bd2 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-center.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-center.js @@ -1,9 +1,9 @@ -const CertificationCenter = require('../../../../lib/domain/models/CertificationCenter'); +import { CertificationCenter, types } from '../../../../lib/domain/models/CertificationCenter.js'; -module.exports = function buildCertificationCenter({ +const buildCertificationCenter = function ({ id = 1, name = 'name', - type = CertificationCenter.types.SUP, + type = types.SUP, externalId = 'externalId', createdAt = new Date('2020-01-01'), updatedAt, @@ -19,3 +19,5 @@ module.exports = function buildCertificationCenter({ habilitations, }); }; + +export { buildCertificationCenter }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-challenge-with-type.js b/api/tests/tooling/domain-builder/factory/build-certification-challenge-with-type.js index 197e2f8a168..5a70b98361d 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-challenge-with-type.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-challenge-with-type.js @@ -1,7 +1,7 @@ -const CertificationChallengeWithType = require('../../../../lib/domain/models/CertificationChallengeWithType'); -const Challenge = require('../../../../lib/domain/models/Challenge'); +import { CertificationChallengeWithType } from '../../../../lib/domain/models/CertificationChallengeWithType.js'; +import { Challenge } from '../../../../lib/domain/models/Challenge.js'; -module.exports = function buildCertificationChallengeWithType({ +const buildCertificationChallengeWithType = function ({ id = 123, challengeId = 'recCHAL', competenceId = 'recCOMP', @@ -22,3 +22,5 @@ module.exports = function buildCertificationChallengeWithType({ certifiableBadgeKey, }); }; + +export { buildCertificationChallengeWithType }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-challenge.js b/api/tests/tooling/domain-builder/factory/build-certification-challenge.js index b0f29c830f2..2a6db96daf3 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-challenge.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-challenge.js @@ -1,5 +1,5 @@ -const buildSkill = require('./build-skill'); -const CertificationChallenge = require('../../../../lib/domain/models/CertificationChallenge'); +import { buildSkill } from './build-skill.js'; +import { CertificationChallenge } from '../../../../lib/domain/models/CertificationChallenge.js'; const buildCertificationChallenge = function ({ id = 123, @@ -60,4 +60,4 @@ buildCertificationChallenge.forPixPlusCertification = function ({ }); }; -module.exports = buildCertificationChallenge; +export { buildCertificationChallenge }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-course.js b/api/tests/tooling/domain-builder/factory/build-certification-course.js index e7aada0e2da..9f3aac6bc9e 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-course.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-course.js @@ -1,9 +1,7 @@ -const CertificationCourse = require('../../../../lib/domain/models/CertificationCourse'); -const buildAssessment = require('./build-assessment'); -const CertificationIssueReport = require('../../../../lib/domain/models/CertificationIssueReport'); -const { - CertificationIssueReportCategories, -} = require('../../../../lib/domain/models/CertificationIssueReportCategory'); +import { CertificationCourse } from '../../../../lib/domain/models/CertificationCourse.js'; +import { buildAssessment } from './build-assessment.js'; +import { CertificationIssueReport } from '../../../../lib/domain/models/CertificationIssueReport.js'; +import { CertificationIssueReportCategory } from '../../../../lib/domain/models/CertificationIssueReportCategory.js'; function buildCertificationCourse({ id = 123, @@ -38,7 +36,7 @@ function buildCertificationCourse({ new CertificationIssueReport({ id: 159, certificationCourseId: id, - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, description: examinerComment, }) ); @@ -126,4 +124,4 @@ buildCertificationCourse.unpersisted = function ({ }); }; -module.exports = buildCertificationCourse; +export { buildCertificationCourse }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-cpf-city.js b/api/tests/tooling/domain-builder/factory/build-certification-cpf-city.js index 723c9e4acee..1a7a3f173a1 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-cpf-city.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-cpf-city.js @@ -1,4 +1,4 @@ -const CertificationCpfCity = require('../../../../lib/domain/models/CertificationCpfCity'); +import { CertificationCpfCity } from '../../../../lib/domain/models/CertificationCpfCity.js'; function buildCertificationCpfCity({ id = 123, @@ -16,4 +16,4 @@ function buildCertificationCpfCity({ }); } -module.exports = buildCertificationCpfCity; +export { buildCertificationCpfCity }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-cpf-country.js b/api/tests/tooling/domain-builder/factory/build-certification-cpf-country.js index 65d19340819..fd7dd06f2a9 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-cpf-country.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-cpf-country.js @@ -1,4 +1,4 @@ -const CertificationCpfCountry = require('../../../../lib/domain/models/CertificationCpfCountry'); +import { CertificationCpfCountry } from '../../../../lib/domain/models/CertificationCpfCountry.js'; function buildCertificationCpfCountry({ id = 123, @@ -32,4 +32,4 @@ buildCertificationCpfCountry.FRANCE = function ({ }); }; -module.exports = buildCertificationCpfCountry; +export { buildCertificationCpfCountry }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-details.js b/api/tests/tooling/domain-builder/factory/build-certification-details.js index 21aa87922ae..11240ba0e40 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-details.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-details.js @@ -1,7 +1,7 @@ -const CertificationDetails = require('../../../../lib/domain/read-models/CertificationDetails'); -const { states } = require('../../../../lib/domain/models/CertificationAssessment'); +import { CertificationDetails } from '../../../../lib/domain/read-models/CertificationDetails.js'; +import { states } from '../../../../lib/domain/models/CertificationAssessment.js'; -module.exports = function buildCertificationDetails({ +const buildCertificationDetails = function ({ id = 123, userId = 456, createdAt = new Date('2020-01-01'), @@ -43,3 +43,5 @@ module.exports = function buildCertificationDetails({ listChallengesAndAnswers, }); }; + +export { buildCertificationDetails }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-eligibility.js b/api/tests/tooling/domain-builder/factory/build-certification-eligibility.js index 9eab041d185..685702a2e2c 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-eligibility.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-eligibility.js @@ -1,6 +1,6 @@ -const CertificationEligibility = require('../../../../lib/domain/read-models/CertificationEligibility'); +import { CertificationEligibility } from '../../../../lib/domain/read-models/CertificationEligibility.js'; -module.exports = function buildCertificationEligibility({ +const buildCertificationEligibility = function ({ id = 123, pixCertificationEligible = false, eligibleComplementaryCertifications = [], @@ -11,3 +11,5 @@ module.exports = function buildCertificationEligibility({ eligibleComplementaryCertifications, }); }; + +export { buildCertificationEligibility }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-issue-report.js b/api/tests/tooling/domain-builder/factory/build-certification-issue-report.js index a376b20d6fa..c2623d5c0ea 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-issue-report.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-issue-report.js @@ -1,14 +1,14 @@ -const CertificationIssueReport = require('../../../../lib/domain/models/CertificationIssueReport'); -const { - CertificationIssueReportCategories, +import { CertificationIssueReport } from '../../../../lib/domain/models/CertificationIssueReport.js'; +import { + CertificationIssueReportCategory, CertificationIssueReportSubcategories, -} = require('../../../../lib/domain/models/CertificationIssueReportCategory'); +} from '../../../../lib/domain/models/CertificationIssueReportCategory.js'; const buildCertificationIssueReport = function ({ id = 123, certificationCourseId, categoryId, - category = CertificationIssueReportCategories.CANDIDATE_INFORMATIONS_CHANGES, + category = CertificationIssueReportCategory.CANDIDATE_INFORMATIONS_CHANGES, subcategory = CertificationIssueReportSubcategories.NAME_OR_BIRTHDATE, description = 'Une super description', questionNumber = null, @@ -48,7 +48,7 @@ buildCertificationIssueReport.impactful = function ({ resolvedAt, resolution, categoryId, - category: CertificationIssueReportCategories.FRAUD, + category: CertificationIssueReportCategory.FRAUD, subcategory: null, hasBeenAutomaticallyResolved, }); @@ -72,10 +72,10 @@ buildCertificationIssueReport.notImpactful = function ({ resolvedAt, resolution, categoryId, - category: CertificationIssueReportCategories.SIGNATURE_ISSUE, + category: CertificationIssueReportCategory.SIGNATURE_ISSUE, subcategory: null, hasBeenAutomaticallyResolved, }); }; -module.exports = buildCertificationIssueReport; +export { buildCertificationIssueReport }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-officer.js b/api/tests/tooling/domain-builder/factory/build-certification-officer.js index e493516ffcc..8699a6a9408 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-officer.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-officer.js @@ -1,9 +1,11 @@ -const CertificationOfficer = require('../../../../lib/domain/models/CertificationOfficer'); +import { CertificationOfficer } from '../../../../lib/domain/models/CertificationOfficer.js'; -module.exports = function buildCertificationOfficer({ id = 123, firstName = 'Dean', lastName = 'Winchester' } = {}) { +const buildCertificationOfficer = function ({ id = 123, firstName = 'Dean', lastName = 'Winchester' } = {}) { return new CertificationOfficer({ id, firstName, lastName, }); }; + +export { buildCertificationOfficer }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-point-of-contact.js b/api/tests/tooling/domain-builder/factory/build-certification-point-of-contact.js index 830770cc341..2622d598736 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-point-of-contact.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-point-of-contact.js @@ -1,7 +1,7 @@ -const CertificationPointOfContact = require('../../../../lib/domain/read-models/CertificationPointOfContact'); -const buildAllowedCertificationCenterAccess = require('./build-allowed-certification-center-access'); +import { CertificationPointOfContact } from '../../../../lib/domain/read-models/CertificationPointOfContact.js'; +import { buildAllowedCertificationCenterAccess } from './build-allowed-certification-center-access.js'; -module.exports = function buildCertificationPointOfContact({ +const buildCertificationPointOfContact = function ({ id = 123, firstName = 'Chèvre', lastName = 'Brebis', @@ -20,3 +20,5 @@ module.exports = function buildCertificationPointOfContact({ allowedCertificationCenterAccesses, }); }; + +export { buildCertificationPointOfContact }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-report.js b/api/tests/tooling/domain-builder/factory/build-certification-report.js index 88f2ffa743d..26d4eeab8a7 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-report.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-report.js @@ -1,7 +1,7 @@ -const CertificationReport = require('../../../../lib/domain/models/CertificationReport'); -const buildCertificationIssueReport = require('./build-certification-issue-report'); +import { CertificationReport } from '../../../../lib/domain/models/CertificationReport.js'; +import { buildCertificationIssueReport } from './build-certification-issue-report.js'; -module.exports = function buildCertificationReport({ +const buildCertificationReport = function ({ id = 'CertificationReport:456', firstName = 'Tiffany', lastName = 'Schwarzenegger', @@ -26,3 +26,5 @@ module.exports = function buildCertificationReport({ abortReason, }); }; + +export { buildCertificationReport }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-rescoring-completed-event.js b/api/tests/tooling/domain-builder/factory/build-certification-rescoring-completed-event.js index e6fef41ed2d..bd60dbe465a 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-rescoring-completed-event.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-rescoring-completed-event.js @@ -1,4 +1,4 @@ -const CertificationRescoringCompleted = require('../../../../lib/domain/events/CertificationRescoringCompleted'); +import { CertificationRescoringCompleted } from '../../../../lib/domain/events/CertificationRescoringCompleted.js'; const buildCertificationRescoringCompletedEvent = function ({ certificationCourseId = 123, @@ -12,4 +12,4 @@ const buildCertificationRescoringCompletedEvent = function ({ }); }; -module.exports = buildCertificationRescoringCompletedEvent; +export { buildCertificationRescoringCompletedEvent }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-result.js b/api/tests/tooling/domain-builder/factory/build-certification-result.js index c20cf608ff0..ba4ce885f9a 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-result.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-result.js @@ -1,4 +1,4 @@ -const CertificationResult = require('../../../../lib/domain/models/CertificationResult'); +import { CertificationResult } from '../../../../lib/domain/models/CertificationResult.js'; const buildCertificationResult = function ({ id = 123, @@ -166,4 +166,4 @@ buildCertificationResult.error = function ({ }); }; -module.exports = buildCertificationResult; +export { buildCertificationResult }; diff --git a/api/tests/tooling/domain-builder/factory/build-certification-scoring-completed-event.js b/api/tests/tooling/domain-builder/factory/build-certification-scoring-completed-event.js index 178629c9ee0..7dc8007e9f3 100644 --- a/api/tests/tooling/domain-builder/factory/build-certification-scoring-completed-event.js +++ b/api/tests/tooling/domain-builder/factory/build-certification-scoring-completed-event.js @@ -1,4 +1,4 @@ -const CertificationScoringCompleted = require('../../../../lib/domain/events/CertificationScoringCompleted'); +import { CertificationScoringCompleted } from '../../../../lib/domain/events/CertificationScoringCompleted.js'; const buildCertificationScoringCompletedEvent = function ({ certificationCourseId = 123, @@ -12,4 +12,4 @@ const buildCertificationScoringCompletedEvent = function ({ }); }; -module.exports = buildCertificationScoringCompletedEvent; +export { buildCertificationScoringCompletedEvent }; diff --git a/api/tests/tooling/domain-builder/factory/build-certifications-results-for-ls.js b/api/tests/tooling/domain-builder/factory/build-certifications-results-for-ls.js index d83d55c12ce..b3610d20d9b 100644 --- a/api/tests/tooling/domain-builder/factory/build-certifications-results-for-ls.js +++ b/api/tests/tooling/domain-builder/factory/build-certifications-results-for-ls.js @@ -1,6 +1,6 @@ -const { databaseBuilder, learningContentBuilder, mockLearningContent } = require('../../../test-helper'); -const { status } = require('../../../../lib/domain/models/AssessmentResult'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +import { databaseBuilder, learningContentBuilder, mockLearningContent } from '../../../test-helper.js'; +import { status } from '../../../../lib/domain/models/AssessmentResult.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; const assessmentCreatedDate = new Date('2020-04-19'); const assessmentBeforeCreatedDate = new Date('2020-04-18'); @@ -357,11 +357,11 @@ function mockLearningContentCompetences() { }, ]; - const learningContentObjects = learningContentBuilder.buildLearningContent.fromAreas(learningContent); + const learningContentObjects = learningContentBuilder.fromAreas(learningContent); mockLearningContent(learningContentObjects); } -module.exports = { +export { buildValidatedPublishedCertificationData, buildValidatedUnpublishedCertificationData, buildCancelledCertificationData, diff --git a/api/tests/tooling/domain-builder/factory/build-certified-area.js b/api/tests/tooling/domain-builder/factory/build-certified-area.js index f5136b72459..3143ee44137 100644 --- a/api/tests/tooling/domain-builder/factory/build-certified-area.js +++ b/api/tests/tooling/domain-builder/factory/build-certified-area.js @@ -1,4 +1,4 @@ -const { CertifiedArea } = require('../../../../lib/domain/read-models/CertifiedProfile'); +import { CertifiedArea } from '../../../../lib/domain/read-models/CertifiedProfile.js'; const buildCertifiedArea = function buildCertifiedArea({ id = 'someAreaId', @@ -12,4 +12,4 @@ const buildCertifiedArea = function buildCertifiedArea({ }); }; -module.exports = buildCertifiedArea; +export { buildCertifiedArea }; diff --git a/api/tests/tooling/domain-builder/factory/build-certified-competence.js b/api/tests/tooling/domain-builder/factory/build-certified-competence.js index b786a595778..65ed0c9acf4 100644 --- a/api/tests/tooling/domain-builder/factory/build-certified-competence.js +++ b/api/tests/tooling/domain-builder/factory/build-certified-competence.js @@ -1,4 +1,4 @@ -const { CertifiedCompetence } = require('../../../../lib/domain/read-models/CertifiedProfile'); +import { CertifiedCompetence } from '../../../../lib/domain/read-models/CertifiedProfile.js'; const buildCertifiedCompetence = function buildCertifiedCompetence({ id = 'someCompetenceId', @@ -14,4 +14,4 @@ const buildCertifiedCompetence = function buildCertifiedCompetence({ }); }; -module.exports = buildCertifiedCompetence; +export { buildCertifiedCompetence }; diff --git a/api/tests/tooling/domain-builder/factory/build-certified-profile.js b/api/tests/tooling/domain-builder/factory/build-certified-profile.js index 99ef496386f..3fbef3f9c0a 100644 --- a/api/tests/tooling/domain-builder/factory/build-certified-profile.js +++ b/api/tests/tooling/domain-builder/factory/build-certified-profile.js @@ -1,4 +1,4 @@ -const { CertifiedProfile } = require('../../../../lib/domain/read-models/CertifiedProfile'); +import { CertifiedProfile } from '../../../../lib/domain/read-models/CertifiedProfile.js'; const buildCertifiedProfile = function buildCertifiedProfile({ id = 123, @@ -18,4 +18,4 @@ const buildCertifiedProfile = function buildCertifiedProfile({ }); }; -module.exports = buildCertifiedProfile; +export { buildCertifiedProfile }; diff --git a/api/tests/tooling/domain-builder/factory/build-certified-skill.js b/api/tests/tooling/domain-builder/factory/build-certified-skill.js index cb50cae8f3d..0f009006417 100644 --- a/api/tests/tooling/domain-builder/factory/build-certified-skill.js +++ b/api/tests/tooling/domain-builder/factory/build-certified-skill.js @@ -1,4 +1,4 @@ -const { CertifiedSkill } = require('../../../../lib/domain/read-models/CertifiedProfile'); +import { CertifiedSkill } from '../../../../lib/domain/read-models/CertifiedProfile.js'; const buildCertifiedSkill = function buildCertifiedSkill({ id = 'someSkillId', @@ -16,4 +16,4 @@ const buildCertifiedSkill = function buildCertifiedSkill({ }); }; -module.exports = buildCertifiedSkill; +export { buildCertifiedSkill }; diff --git a/api/tests/tooling/domain-builder/factory/build-certified-tube.js b/api/tests/tooling/domain-builder/factory/build-certified-tube.js index b2f979bfa42..a20c6f71d31 100644 --- a/api/tests/tooling/domain-builder/factory/build-certified-tube.js +++ b/api/tests/tooling/domain-builder/factory/build-certified-tube.js @@ -1,4 +1,4 @@ -const { CertifiedTube } = require('../../../../lib/domain/read-models/CertifiedProfile'); +import { CertifiedTube } from '../../../../lib/domain/read-models/CertifiedProfile.js'; const buildCertifiedTube = function buildCertifiedTube({ id = 'someTubeId', @@ -12,4 +12,4 @@ const buildCertifiedTube = function buildCertifiedTube({ }); }; -module.exports = buildCertifiedTube; +export { buildCertifiedTube }; diff --git a/api/tests/tooling/domain-builder/factory/build-challenge-learning-content-data-object.js b/api/tests/tooling/domain-builder/factory/build-challenge-learning-content-data-object.js index c73ee0f16f8..129778ff5e1 100644 --- a/api/tests/tooling/domain-builder/factory/build-challenge-learning-content-data-object.js +++ b/api/tests/tooling/domain-builder/factory/build-challenge-learning-content-data-object.js @@ -1,4 +1,4 @@ -module.exports = function buildChallengeLearningContentDataObject({ +const buildChallengeLearningContentDataObject = function ({ id = 'recwWzTquPlvIl4So', instruction = "Les moteurs de recherche affichent certains liens en raison d'un accord commercial.\n\nDans quels encadrés se trouvent ces liens ?", proposals = '- 1\n- 2\n- 3\n- 4\n- 5', @@ -50,3 +50,5 @@ module.exports = function buildChallengeLearningContentDataObject({ shuffled, }; }; + +export { buildChallengeLearningContentDataObject }; diff --git a/api/tests/tooling/domain-builder/factory/build-challenge.js b/api/tests/tooling/domain-builder/factory/build-challenge.js index 5cab1cc201b..d5424c3db10 100644 --- a/api/tests/tooling/domain-builder/factory/build-challenge.js +++ b/api/tests/tooling/domain-builder/factory/build-challenge.js @@ -1,8 +1,8 @@ -const Challenge = require('../../../../lib/domain/models/Challenge'); -const Validator = require('../../../../lib/domain/models/Validator'); -const buildSkill = require('./build-skill'); +import { Challenge } from '../../../../lib/domain/models/Challenge.js'; +import { Validator } from '../../../../lib/domain/models/Validator.js'; +import { buildSkill } from './build-skill.js'; -module.exports = function buildChallenge({ +const buildChallenge = function ({ id = 'recCHAL1', // attributes attachments = ['URL pièce jointe'], @@ -65,3 +65,5 @@ module.exports = function buildChallenge({ shuffled, }); }; + +export { buildChallenge }; diff --git a/api/tests/tooling/domain-builder/factory/build-clea-certified-candidate.js b/api/tests/tooling/domain-builder/factory/build-clea-certified-candidate.js index bb64a867634..0dfa9d50ac7 100644 --- a/api/tests/tooling/domain-builder/factory/build-clea-certified-candidate.js +++ b/api/tests/tooling/domain-builder/factory/build-clea-certified-candidate.js @@ -1,6 +1,6 @@ -const CleaCertifiedCandidate = require('../../../../lib/domain/read-models/CleaCertifiedCandidate'); +import { CleaCertifiedCandidate } from '../../../../lib/domain/read-models/CleaCertifiedCandidate.js'; -module.exports = function buildCleaCertifiedCandidate({ +const buildCleaCertifiedCandidate = function ({ firstName = 'Gandhi', lastName = 'Matmatah', resultRecipientEmail = 'matmatahGdu75@dhi.fr', @@ -25,3 +25,5 @@ module.exports = function buildCleaCertifiedCandidate({ createdAt, }); }; + +export { buildCleaCertifiedCandidate }; diff --git a/api/tests/tooling/domain-builder/factory/build-competence-evaluation.js b/api/tests/tooling/domain-builder/factory/build-competence-evaluation.js index ef87592b572..aabced6d24a 100644 --- a/api/tests/tooling/domain-builder/factory/build-competence-evaluation.js +++ b/api/tests/tooling/domain-builder/factory/build-competence-evaluation.js @@ -1,8 +1,8 @@ -const CompetenceEvaluation = require('../../../../lib/domain/models/CompetenceEvaluation'); -const buildAssessment = require('./build-assessment'); -const buildUser = require('./build-user'); +import { CompetenceEvaluation } from '../../../../lib/domain/models/CompetenceEvaluation.js'; +import { buildAssessment } from './build-assessment.js'; +import { buildUser } from './build-user.js'; -module.exports = function buildCompetenceEvaluation({ +const buildCompetenceEvaluation = function ({ id = 1, assessmentId, assessment, @@ -34,3 +34,5 @@ module.exports = function buildCompetenceEvaluation({ status, }); }; + +export { buildCompetenceEvaluation }; diff --git a/api/tests/tooling/domain-builder/factory/build-competence-mark.js b/api/tests/tooling/domain-builder/factory/build-competence-mark.js index 4b799ed8682..e69695450f7 100644 --- a/api/tests/tooling/domain-builder/factory/build-competence-mark.js +++ b/api/tests/tooling/domain-builder/factory/build-competence-mark.js @@ -1,6 +1,6 @@ -const CompetenceMark = require('../../../../lib/domain/models/CompetenceMark'); +import { CompetenceMark } from '../../../../lib/domain/models/CompetenceMark.js'; -module.exports = function buildCompetenceMark({ +const buildCompetenceMark = function ({ id, level = 2, score = 13, @@ -19,3 +19,5 @@ module.exports = function buildCompetenceMark({ assessmentResultId, }); }; + +export { buildCompetenceMark }; diff --git a/api/tests/tooling/domain-builder/factory/build-competence-result.js b/api/tests/tooling/domain-builder/factory/build-competence-result.js index c5062342c3e..3544f8a2a99 100644 --- a/api/tests/tooling/domain-builder/factory/build-competence-result.js +++ b/api/tests/tooling/domain-builder/factory/build-competence-result.js @@ -1,6 +1,6 @@ -const CompetenceResult = require('../../../../lib/domain/models/CompetenceResult'); +import { CompetenceResult } from '../../../../lib/domain/models/CompetenceResult.js'; -module.exports = function buildCompetenceResult({ +const buildCompetenceResult = function ({ id = 1, name = 'name', index = '1.1', @@ -21,3 +21,5 @@ module.exports = function buildCompetenceResult({ validatedSkillsCount, }); }; + +export { buildCompetenceResult }; diff --git a/api/tests/tooling/domain-builder/factory/build-competence-tree.js b/api/tests/tooling/domain-builder/factory/build-competence-tree.js index aff3795b1e0..dbc9844a298 100644 --- a/api/tests/tooling/domain-builder/factory/build-competence-tree.js +++ b/api/tests/tooling/domain-builder/factory/build-competence-tree.js @@ -1,9 +1,8 @@ -const CompetenceTree = require('../../../../lib/domain/models/CompetenceTree'); +import { CompetenceTree } from '../../../../lib/domain/models/CompetenceTree.js'; +import { buildArea } from './build-area.js'; +import { buildCompetence } from './build-competence.js'; -const buildArea = require('./build-area'); -const buildCompetence = require('./build-competence'); - -module.exports = function buildCompetenceTree({ +const buildCompetenceTree = function ({ id = 1, areas = [ buildArea({ @@ -42,3 +41,5 @@ module.exports = function buildCompetenceTree({ areas, }); }; + +export { buildCompetenceTree }; diff --git a/api/tests/tooling/domain-builder/factory/build-competence.js b/api/tests/tooling/domain-builder/factory/build-competence.js index 5066c96fde5..12b6119d83c 100644 --- a/api/tests/tooling/domain-builder/factory/build-competence.js +++ b/api/tests/tooling/domain-builder/factory/build-competence.js @@ -1,4 +1,4 @@ -const Competence = require('../../../../lib/domain/models/Competence'); +import { Competence } from '../../../../lib/domain/models/Competence.js'; const buildCompetence = function ({ id = 'recCOMP1', @@ -24,4 +24,4 @@ const buildCompetence = function ({ }); }; -module.exports = buildCompetence; +export { buildCompetence }; diff --git a/api/tests/tooling/domain-builder/factory/build-complementary-certification-course-result-for-certification-with-external.js b/api/tests/tooling/domain-builder/factory/build-complementary-certification-course-result-for-certification-with-external.js index 95427d6a25b..0e6991f3b19 100644 --- a/api/tests/tooling/domain-builder/factory/build-complementary-certification-course-result-for-certification-with-external.js +++ b/api/tests/tooling/domain-builder/factory/build-complementary-certification-course-result-for-certification-with-external.js @@ -1,6 +1,6 @@ -const ComplementaryCertificationCourseResultsForJuryCertificationWithExternal = require('../../../../lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal'); +import { ComplementaryCertificationCourseResultsForJuryCertificationWithExternal } from '../../../../lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal.js'; -module.exports = function buildPixEduComplementaryCertificationCourseResultsForJuryCertificationWithExternal({ +const buildPixEduComplementaryCertificationCourseResultsForJuryCertificationWithExternal = function ({ complementaryCertificationCourseId = 456, pixPartnerKey = 'PIX_PARTNER_KEY', pixLabel = 'Pix+ Édu 1er degré Avancé', @@ -25,3 +25,5 @@ module.exports = function buildPixEduComplementaryCertificationCourseResultsForJ allowedExternalLevels, }); }; + +export { buildPixEduComplementaryCertificationCourseResultsForJuryCertificationWithExternal }; diff --git a/api/tests/tooling/domain-builder/factory/build-complementary-certification-course-result-for-certification.js b/api/tests/tooling/domain-builder/factory/build-complementary-certification-course-result-for-certification.js index 367a9ceab1a..604a6c3ff2a 100644 --- a/api/tests/tooling/domain-builder/factory/build-complementary-certification-course-result-for-certification.js +++ b/api/tests/tooling/domain-builder/factory/build-complementary-certification-course-result-for-certification.js @@ -1,6 +1,6 @@ -const ComplementaryCertificationCourseResultForJuryCertification = require('../../../../lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification'); +import { ComplementaryCertificationCourseResultsForJuryCertification as ComplementaryCertificationCourseResultForJuryCertification } from '../../../../lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification.js'; -module.exports = function buildComplementaryCertificationCourseResultForJuryCertification({ +const buildComplementaryCertificationCourseResultForJuryCertification = function ({ id = 1234, partnerKey = 'PARTNER_KEY', acquired = true, @@ -13,3 +13,5 @@ module.exports = function buildComplementaryCertificationCourseResultForJuryCert label, }); }; + +export { buildComplementaryCertificationCourseResultForJuryCertification }; diff --git a/api/tests/tooling/domain-builder/factory/build-complementary-certification-course-result.js b/api/tests/tooling/domain-builder/factory/build-complementary-certification-course-result.js index 95ce113defc..2ba9ff52f3f 100644 --- a/api/tests/tooling/domain-builder/factory/build-complementary-certification-course-result.js +++ b/api/tests/tooling/domain-builder/factory/build-complementary-certification-course-result.js @@ -1,6 +1,6 @@ -const ComplementaryCertificationCourseResult = require('./../../../../lib/domain/models/ComplementaryCertificationCourseResult'); +import { ComplementaryCertificationCourseResult } from './../../../../lib/domain/models/ComplementaryCertificationCourseResult.js'; -module.exports = function buildComplementaryCertificationCourseResult({ +const buildComplementaryCertificationCourseResult = function ({ complementaryCertificationCourseId = 2, partnerKey = 'PARTNER_KEY', acquired = false, @@ -15,3 +15,5 @@ module.exports = function buildComplementaryCertificationCourseResult({ label, }); }; + +export { buildComplementaryCertificationCourseResult }; diff --git a/api/tests/tooling/domain-builder/factory/build-complementary-certification-for-supervising.js b/api/tests/tooling/domain-builder/factory/build-complementary-certification-for-supervising.js index 4d1d3c5c0ca..31689f7fb93 100644 --- a/api/tests/tooling/domain-builder/factory/build-complementary-certification-for-supervising.js +++ b/api/tests/tooling/domain-builder/factory/build-complementary-certification-for-supervising.js @@ -1,6 +1,6 @@ -const ComplementaryCertificationForSupervising = require('../../../../lib/domain/models/ComplementaryCertificationForSupervising'); +import { ComplementaryCertificationForSupervising } from '../../../../lib/domain/models/ComplementaryCertificationForSupervising.js'; -module.exports = function buildComplementaryCertificationForSupervising({ +const buildComplementaryCertificationForSupervising = function ({ label = 'Complementary certification name', key = 'COMPLEMENTARY_CERTIFICATION_KEY', certificationExtraTime = 0, @@ -11,3 +11,5 @@ module.exports = function buildComplementaryCertificationForSupervising({ certificationExtraTime, }); }; + +export { buildComplementaryCertificationForSupervising }; diff --git a/api/tests/tooling/domain-builder/factory/build-complementary-certification-habilitation.js b/api/tests/tooling/domain-builder/factory/build-complementary-certification-habilitation.js index d32802e0b40..a11f4e8f114 100644 --- a/api/tests/tooling/domain-builder/factory/build-complementary-certification-habilitation.js +++ b/api/tests/tooling/domain-builder/factory/build-complementary-certification-habilitation.js @@ -1,6 +1,6 @@ -const ComplementaryCertificationHabilitation = require('../../../../lib/domain/models/ComplementaryCertificationHabilitation'); +import { ComplementaryCertificationHabilitation } from '../../../../lib/domain/models/ComplementaryCertificationHabilitation.js'; -module.exports = function buildComplementaryCertificationHabilitation({ +const buildComplementaryCertificationHabilitation = function ({ id = 123, complementaryCertificationId = 456, certificationCenterId = 789, @@ -11,3 +11,5 @@ module.exports = function buildComplementaryCertificationHabilitation({ certificationCenterId, }); }; + +export { buildComplementaryCertificationHabilitation }; diff --git a/api/tests/tooling/domain-builder/factory/build-complementary-certification-scoring-criteria.js b/api/tests/tooling/domain-builder/factory/build-complementary-certification-scoring-criteria.js index 05a247ee0a5..5e9d8014a2d 100644 --- a/api/tests/tooling/domain-builder/factory/build-complementary-certification-scoring-criteria.js +++ b/api/tests/tooling/domain-builder/factory/build-complementary-certification-scoring-criteria.js @@ -1,4 +1,4 @@ -const ComplementaryCertificationScoringCriteria = require('../../../../lib/domain/models/ComplementaryCertificationScoringCriteria'); +import { ComplementaryCertificationScoringCriteria } from '../../../../lib/domain/models/ComplementaryCertificationScoringCriteria.js'; function buildComplementaryCertificationScoringCriteria({ complementaryCertificationCourseId = 123, @@ -16,4 +16,4 @@ function buildComplementaryCertificationScoringCriteria({ }); } -module.exports = buildComplementaryCertificationScoringCriteria; +export { buildComplementaryCertificationScoringCriteria }; diff --git a/api/tests/tooling/domain-builder/factory/build-complementary-certification-scoring-without-complementary-referential.js b/api/tests/tooling/domain-builder/factory/build-complementary-certification-scoring-without-complementary-referential.js index d79c09430c4..6306747b5a1 100644 --- a/api/tests/tooling/domain-builder/factory/build-complementary-certification-scoring-without-complementary-referential.js +++ b/api/tests/tooling/domain-builder/factory/build-complementary-certification-scoring-without-complementary-referential.js @@ -1,6 +1,6 @@ -const ComplementaryCertificationScoringWithoutComplementaryReferential = require('../../../../lib/domain/models/ComplementaryCertificationScoringWithoutComplementaryReferential'); +import { ComplementaryCertificationScoringWithoutComplementaryReferential } from '../../../../lib/domain/models/ComplementaryCertificationScoringWithoutComplementaryReferential.js'; -module.exports = function buildComplementaryCertificationScoringWithoutComplementaryReferential({ +const buildComplementaryCertificationScoringWithoutComplementaryReferential = function ({ complementaryCertificationCourseId = 99, certificationCourseId = 42, reproducibilityRate = 50, @@ -19,3 +19,5 @@ module.exports = function buildComplementaryCertificationScoringWithoutComplemen minimumReproducibilityRate, }); }; + +export { buildComplementaryCertificationScoringWithoutComplementaryReferential }; diff --git a/api/tests/tooling/domain-builder/factory/build-complementary-certification.js b/api/tests/tooling/domain-builder/factory/build-complementary-certification.js index b5759a5a199..86314a35858 100644 --- a/api/tests/tooling/domain-builder/factory/build-complementary-certification.js +++ b/api/tests/tooling/domain-builder/factory/build-complementary-certification.js @@ -1,6 +1,6 @@ -const ComplementaryCertification = require('../../../../lib/domain/models/ComplementaryCertification'); +import { ComplementaryCertification } from '../../../../lib/domain/models/ComplementaryCertification.js'; -module.exports = function buildComplementaryCertification({ +const buildComplementaryCertification = function ({ id = 1, label = 'Complementary certification name', key = 'COMPLEMENTARY_CERTIFICATION_KEY', @@ -11,3 +11,5 @@ module.exports = function buildComplementaryCertification({ key, }); }; + +export { buildComplementaryCertification }; diff --git a/api/tests/tooling/domain-builder/factory/build-country.js b/api/tests/tooling/domain-builder/factory/build-country.js index 8a1b8d77c90..18931c23963 100644 --- a/api/tests/tooling/domain-builder/factory/build-country.js +++ b/api/tests/tooling/domain-builder/factory/build-country.js @@ -1,10 +1,12 @@ -const { Country } = require('../../../../lib/domain/read-models/Country'); -const { normalizeAndSortChars } = require('../../../../lib/infrastructure/utils/string-utils'); +import { Country } from '../../../../lib/domain/read-models/Country.js'; +import { normalizeAndSortChars } from '../../../../lib/infrastructure/utils/string-utils.js'; -module.exports = function buildCountry({ code = '99345', name = 'TOGO', matcher = normalizeAndSortChars(name) } = {}) { +const buildCountry = function ({ code = '99345', name = 'TOGO', matcher = normalizeAndSortChars(name) } = {}) { return new Country({ code, name, matcher, }); }; + +export { buildCountry }; diff --git a/api/tests/tooling/domain-builder/factory/build-course.js b/api/tests/tooling/domain-builder/factory/build-course.js index 0885b1c0d6e..9bbf62db6e7 100644 --- a/api/tests/tooling/domain-builder/factory/build-course.js +++ b/api/tests/tooling/domain-builder/factory/build-course.js @@ -1,6 +1,6 @@ -const Course = require('../../../../lib/domain/models/Course'); +import { Course } from '../../../../lib/domain/models/Course.js'; -module.exports = function buildCourse({ +const buildCourse = function ({ id = 'recCOUR123', description = 'description', imageUrl = 'imageURL', @@ -25,3 +25,5 @@ module.exports = function buildCourse({ tubes, }); }; + +export { buildCourse }; diff --git a/api/tests/tooling/domain-builder/factory/build-cpf-certification-result.js b/api/tests/tooling/domain-builder/factory/build-cpf-certification-result.js index 6396eb53c25..41188b675b6 100644 --- a/api/tests/tooling/domain-builder/factory/build-cpf-certification-result.js +++ b/api/tests/tooling/domain-builder/factory/build-cpf-certification-result.js @@ -1,6 +1,6 @@ -const CpfCertificationResult = require('../../../../lib/domain/read-models/CpfCertificationResult'); +import { CpfCertificationResult } from '../../../../lib/domain/read-models/CpfCertificationResult.js'; -module.exports = function buildCpfCertificationResult({ +const buildCpfCertificationResult = function ({ id = 1234, firstName = 'John', lastName = 'Doe', @@ -32,3 +32,5 @@ module.exports = function buildCpfCertificationResult({ competenceMarks, }); }; + +export { buildCpfCertificationResult }; diff --git a/api/tests/tooling/domain-builder/factory/build-data-protection-officer.js b/api/tests/tooling/domain-builder/factory/build-data-protection-officer.js index 1845676dfab..9a5b6cd8f09 100644 --- a/api/tests/tooling/domain-builder/factory/build-data-protection-officer.js +++ b/api/tests/tooling/domain-builder/factory/build-data-protection-officer.js @@ -1,4 +1,4 @@ -const DataProtectionOfficer = require('../../../../lib/domain/models/DataProtectionOfficer'); +import { DataProtectionOfficer } from '../../../../lib/domain/models/DataProtectionOfficer.js'; function _buildDataProtectionOfficer({ id = 10001, @@ -62,7 +62,4 @@ function buildDataProtectionOfficerWithOrganizationId({ }); } -module.exports = { - withCertificationCenterId: buildDataProtectionOfficerWithCertificationCenterId, - withOrganizationId: buildDataProtectionOfficerWithOrganizationId, -}; +export { buildDataProtectionOfficerWithCertificationCenterId, buildDataProtectionOfficerWithOrganizationId }; diff --git a/api/tests/tooling/domain-builder/factory/build-finalized-session.js b/api/tests/tooling/domain-builder/factory/build-finalized-session.js index b9341c719f2..dc3ba4e1a06 100644 --- a/api/tests/tooling/domain-builder/factory/build-finalized-session.js +++ b/api/tests/tooling/domain-builder/factory/build-finalized-session.js @@ -1,6 +1,6 @@ -const FinalizedSession = require('../../../../lib/domain/models/FinalizedSession'); +import { FinalizedSession } from '../../../../lib/domain/models/FinalizedSession.js'; -module.exports = function buildFinalizedSession({ +const buildFinalizedSession = function ({ sessionId = 123, certificationCenterName = 'Centre de certif pix', sessionDate = '2020-12-01', @@ -21,3 +21,5 @@ module.exports = function buildFinalizedSession({ assignedCertificationOfficerName, }); }; + +export { buildFinalizedSession }; diff --git a/api/tests/tooling/domain-builder/factory/build-framework.js b/api/tests/tooling/domain-builder/factory/build-framework.js index 51c96262d5a..b865bc2c14a 100644 --- a/api/tests/tooling/domain-builder/factory/build-framework.js +++ b/api/tests/tooling/domain-builder/factory/build-framework.js @@ -1,7 +1,7 @@ -const buildArea = require('./build-area'); -const Framework = require('../../../../lib/domain/models/Framework'); +import { buildArea } from './build-area.js'; +import { Framework } from '../../../../lib/domain/models/Framework.js'; -module.exports = function buildFramework({ id = 'recFramework123', name = 'Mon super référentiel', areas } = {}) { +const buildFramework = function ({ id = 'recFramework123', name = 'Mon super référentiel', areas } = {}) { areas = areas || [buildArea({ frameworkId: id })]; const framework = new Framework({ id, @@ -14,3 +14,5 @@ module.exports = function buildFramework({ id = 'recFramework123', name = 'Mon s }); return framework; }; + +export { buildFramework }; diff --git a/api/tests/tooling/domain-builder/factory/build-hint.js b/api/tests/tooling/domain-builder/factory/build-hint.js index b39ef4316ee..832771f6e62 100644 --- a/api/tests/tooling/domain-builder/factory/build-hint.js +++ b/api/tests/tooling/domain-builder/factory/build-hint.js @@ -1,8 +1,10 @@ -const Hint = require('../../../../lib/domain/models/Hint'); +import { Hint } from '../../../../lib/domain/models/Hint.js'; -module.exports = function buildHint({ skillName = '@web2', value = 'Pense à regarder les indices' } = {}) { +const buildHint = function ({ skillName = '@web2', value = 'Pense à regarder les indices' } = {}) { return new Hint({ skillName, value, }); }; + +export { buildHint }; diff --git a/api/tests/tooling/domain-builder/factory/build-jury-certification-summary.js b/api/tests/tooling/domain-builder/factory/build-jury-certification-summary.js index 8a3c0e3e21d..f4ff166f8c9 100644 --- a/api/tests/tooling/domain-builder/factory/build-jury-certification-summary.js +++ b/api/tests/tooling/domain-builder/factory/build-jury-certification-summary.js @@ -1,5 +1,5 @@ -const JuryCertificationSummary = require('../../../../lib/domain/read-models/JuryCertificationSummary'); -const AssessmentResult = require('../../../../lib/domain/models/AssessmentResult'); +import { JuryCertificationSummary } from '../../../../lib/domain/read-models/JuryCertificationSummary.js'; +import { AssessmentResult } from '../../../../lib/domain/models/AssessmentResult.js'; const buildJuryCertificationSummary = function ({ id = 123, @@ -35,4 +35,4 @@ const buildJuryCertificationSummary = function ({ }); }; -module.exports = buildJuryCertificationSummary; +export { buildJuryCertificationSummary }; diff --git a/api/tests/tooling/domain-builder/factory/build-jury-certification.js b/api/tests/tooling/domain-builder/factory/build-jury-certification.js index ce1906c3926..335a0766c31 100644 --- a/api/tests/tooling/domain-builder/factory/build-jury-certification.js +++ b/api/tests/tooling/domain-builder/factory/build-jury-certification.js @@ -1,6 +1,6 @@ -const JuryCertification = require('../../../../lib/domain/models/JuryCertification'); -const buildCertificationIssueReport = require('./build-certification-issue-report'); -const buildCompetenceMark = require('./build-competence-mark'); +import { JuryCertification } from '../../../../lib/domain/models/JuryCertification.js'; +import { buildCertificationIssueReport } from './build-certification-issue-report.js'; +import { buildCompetenceMark } from './build-competence-mark.js'; const buildJuryCertification = function ({ certificationCourseId = 123, @@ -60,4 +60,4 @@ const buildJuryCertification = function ({ }); }; -module.exports = buildJuryCertification; +export { buildJuryCertification }; diff --git a/api/tests/tooling/domain-builder/factory/build-jury-session.js b/api/tests/tooling/domain-builder/factory/build-jury-session.js index 0fc877b5b6d..dc20c194c24 100644 --- a/api/tests/tooling/domain-builder/factory/build-jury-session.js +++ b/api/tests/tooling/domain-builder/factory/build-jury-session.js @@ -1,6 +1,6 @@ -const JurySession = require('../../../../lib/domain/models/JurySession'); -const domainBuilder = require('../domain-builder'); -const _ = require('lodash'); +import { JurySession } from '../../../../lib/domain/models/JurySession.js'; +import { domainBuilder } from '../domain-builder.js'; +import _ from 'lodash'; const buildJurySession = function ({ id = 123, @@ -60,4 +60,4 @@ const buildJurySession = function ({ }); }; -module.exports = buildJurySession; +export { buildJurySession }; diff --git a/api/tests/tooling/domain-builder/factory/build-knowledge-element.js b/api/tests/tooling/domain-builder/factory/build-knowledge-element.js index 9e0e508550a..fb626ba6c0f 100644 --- a/api/tests/tooling/domain-builder/factory/build-knowledge-element.js +++ b/api/tests/tooling/domain-builder/factory/build-knowledge-element.js @@ -1,4 +1,4 @@ -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; const buildKnowledgeElement = function ({ id = 123, @@ -98,4 +98,4 @@ buildKnowledgeElement.inferredValidated = function ({ }); }; -module.exports = buildKnowledgeElement; +export { buildKnowledgeElement }; diff --git a/api/tests/tooling/domain-builder/factory/build-learning-content.js b/api/tests/tooling/domain-builder/factory/build-learning-content.js index a4c7b319e01..ff40b7ccbb9 100644 --- a/api/tests/tooling/domain-builder/factory/build-learning-content.js +++ b/api/tests/tooling/domain-builder/factory/build-learning-content.js @@ -1,10 +1,10 @@ -const LearningContent = require('../../../../lib/domain/models/LearningContent'); -const buildSkill = require('./build-skill'); -const buildTube = require('./build-tube'); -const buildThematic = require('./build-thematic'); -const buildCompetence = require('./build-competence'); -const buildArea = require('./build-area'); -const buildFramework = require('./build-framework'); +import { LearningContent } from '../../../../lib/domain/models/LearningContent.js'; +import { buildSkill } from './build-skill.js'; +import { buildTube } from './build-tube.js'; +import { buildThematic } from './build-thematic.js'; +import { buildCompetence } from './build-competence.js'; +import { buildArea } from './build-area.js'; +import { buildFramework } from './build-framework.js'; function buildLearningContent(frameworks) { frameworks = frameworks || [buildFramework({ id: 'frameworkId', name: 'someFramework' })]; @@ -24,4 +24,4 @@ buildLearningContent.withSimpleContent = () => { return buildLearningContent([framework]); }; -module.exports = buildLearningContent; +export { buildLearningContent }; diff --git a/api/tests/tooling/domain-builder/factory/build-membership.js b/api/tests/tooling/domain-builder/factory/build-membership.js index ab804afa12f..5ac4730d221 100644 --- a/api/tests/tooling/domain-builder/factory/build-membership.js +++ b/api/tests/tooling/domain-builder/factory/build-membership.js @@ -1,6 +1,6 @@ -const Membership = require('../../../../lib/domain/models/Membership'); -const Organization = require('../../../../lib/domain/models/Organization'); -const User = require('../../../../lib/domain/models/User'); +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { Organization } from '../../../../lib/domain/models/Organization.js'; +import { User } from '../../../../lib/domain/models/User.js'; /* * /!\ We can not use standard entity builders because of bidirectional relationships (a.k.a. cyclic dependencies) @@ -25,7 +25,7 @@ function _buildOrganization() { }); } -module.exports = function buildMembership({ +const buildMembership = function ({ id = 123, organization = _buildOrganization(), organizationRole = Membership.roles.MEMBER, @@ -37,3 +37,5 @@ module.exports = function buildMembership({ return membership; }; + +export { buildMembership }; diff --git a/api/tests/tooling/domain-builder/factory/build-organization-for-admin.js b/api/tests/tooling/domain-builder/factory/build-organization-for-admin.js index a552ce52570..f567b715aee 100644 --- a/api/tests/tooling/domain-builder/factory/build-organization-for-admin.js +++ b/api/tests/tooling/domain-builder/factory/build-organization-for-admin.js @@ -1,4 +1,4 @@ -const OrganizationForAdmin = require('../../../../lib/domain/models/organizations-administration/Organization'); +import { OrganizationForAdmin } from '../../../../lib/domain/models/organizations-administration/Organization.js'; function buildOrganizationForAdmin({ id = 123, @@ -54,4 +54,4 @@ function buildOrganizationForAdmin({ }); } -module.exports = buildOrganizationForAdmin; +export { buildOrganizationForAdmin }; diff --git a/api/tests/tooling/domain-builder/factory/build-organization-invitation.js b/api/tests/tooling/domain-builder/factory/build-organization-invitation.js index 2097153d784..ecc39a16db4 100644 --- a/api/tests/tooling/domain-builder/factory/build-organization-invitation.js +++ b/api/tests/tooling/domain-builder/factory/build-organization-invitation.js @@ -1,6 +1,6 @@ -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; -module.exports = function buildOrganizationInvitation({ +const buildOrganizationInvitation = function ({ id = 123, organizationId = 456, organizationName = 'orgaName', @@ -23,3 +23,5 @@ module.exports = function buildOrganizationInvitation({ updatedAt, }); }; + +export { buildOrganizationInvitation }; diff --git a/api/tests/tooling/domain-builder/factory/build-organization-learner-for-admin.js b/api/tests/tooling/domain-builder/factory/build-organization-learner-for-admin.js index 19af3822fd6..e8fe0ddf6aa 100644 --- a/api/tests/tooling/domain-builder/factory/build-organization-learner-for-admin.js +++ b/api/tests/tooling/domain-builder/factory/build-organization-learner-for-admin.js @@ -1,6 +1,6 @@ -const OrganizationLearnerForAdmin = require('../../../../lib/domain/read-models/OrganizationLearnerForAdmin'); +import { OrganizationLearnerForAdmin } from '../../../../lib/domain/read-models/OrganizationLearnerForAdmin.js'; -module.exports = function buildOrganizationLearnerForAdmin({ +const buildOrganizationLearnerForAdmin = function ({ id = 123, firstName = 'Super', lastName = 'Yvette', @@ -29,3 +29,5 @@ module.exports = function buildOrganizationLearnerForAdmin({ organizationIsManagingStudents, }); }; + +export { buildOrganizationLearnerForAdmin }; diff --git a/api/tests/tooling/domain-builder/factory/build-organization-learner-participation.js b/api/tests/tooling/domain-builder/factory/build-organization-learner-participation.js index fe53169f8a0..83af9cd6788 100644 --- a/api/tests/tooling/domain-builder/factory/build-organization-learner-participation.js +++ b/api/tests/tooling/domain-builder/factory/build-organization-learner-participation.js @@ -1,8 +1,8 @@ -const OrganizationLearnerParticipation = require('../../../../lib/domain/read-models/OrganizationLearnerParticipation'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { OrganizationLearnerParticipation } from '../../../../lib/domain/read-models/OrganizationLearnerParticipation.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; -module.exports = function buildOrganizationLearnerParticipation({ +const buildOrganizationLearnerParticipation = function ({ id = '123', campaignType = CampaignTypes.ASSESSMENT, campaignName = 'Ma campagne', @@ -19,3 +19,5 @@ module.exports = function buildOrganizationLearnerParticipation({ status, }); }; + +export { buildOrganizationLearnerParticipation }; diff --git a/api/tests/tooling/domain-builder/factory/build-organization-learner.js b/api/tests/tooling/domain-builder/factory/build-organization-learner.js index ec194e2cd0d..95102f57b5c 100644 --- a/api/tests/tooling/domain-builder/factory/build-organization-learner.js +++ b/api/tests/tooling/domain-builder/factory/build-organization-learner.js @@ -1,5 +1,5 @@ -const OrganizationLearner = require('../../../../lib/domain/models/OrganizationLearner'); -const buildOrganization = require('./build-organization'); +import { OrganizationLearner } from '../../../../lib/domain/models/OrganizationLearner.js'; +import { buildOrganization } from './build-organization.js'; function buildOrganizationLearner({ id = 123, @@ -47,4 +47,4 @@ function buildOrganizationLearner({ }); } -module.exports = buildOrganizationLearner; +export { buildOrganizationLearner }; diff --git a/api/tests/tooling/domain-builder/factory/build-organization-places-lot-management.js b/api/tests/tooling/domain-builder/factory/build-organization-places-lot-management.js index 7d41f49292a..6cf0a7824e8 100644 --- a/api/tests/tooling/domain-builder/factory/build-organization-places-lot-management.js +++ b/api/tests/tooling/domain-builder/factory/build-organization-places-lot-management.js @@ -1,4 +1,4 @@ -const OrganizationPlacesLotManagement = require('../../../../lib/domain/read-models/OrganizationPlacesLotManagement'); +import { OrganizationPlacesLotManagement } from '../../../../lib/domain/read-models/OrganizationPlacesLotManagement.js'; function buildOrganizationPlacesLotManagement({ id, @@ -26,4 +26,4 @@ function buildOrganizationPlacesLotManagement({ }); } -module.exports = buildOrganizationPlacesLotManagement; +export { buildOrganizationPlacesLotManagement }; diff --git a/api/tests/tooling/domain-builder/factory/build-organization-places-lot.js b/api/tests/tooling/domain-builder/factory/build-organization-places-lot.js index 84b38fa33d5..f5d52f6e7a9 100644 --- a/api/tests/tooling/domain-builder/factory/build-organization-places-lot.js +++ b/api/tests/tooling/domain-builder/factory/build-organization-places-lot.js @@ -1,4 +1,4 @@ -const OrganizationPlacesLot = require('../../../../lib/domain/models/OrganizationPlacesLot'); +import { OrganizationPlacesLot } from '../../../../lib/domain/models/OrganizationPlacesLot.js'; function buildOrganizationPlacesLot({ id = 1, @@ -22,4 +22,4 @@ function buildOrganizationPlacesLot({ }); } -module.exports = buildOrganizationPlacesLot; +export { buildOrganizationPlacesLot }; diff --git a/api/tests/tooling/domain-builder/factory/build-organization-tag.js b/api/tests/tooling/domain-builder/factory/build-organization-tag.js index a6a296bf4a9..3bb2360e94d 100644 --- a/api/tests/tooling/domain-builder/factory/build-organization-tag.js +++ b/api/tests/tooling/domain-builder/factory/build-organization-tag.js @@ -1,5 +1,7 @@ -const OrganizationTag = require('../../../../lib/domain/models/OrganizationTag'); +import { OrganizationTag } from '../../../../lib/domain/models/OrganizationTag.js'; -module.exports = function buildOrganizationTag({ id = 123, organizationId = 456, tagId = 789 } = {}) { +const buildOrganizationTag = function ({ id = 123, organizationId = 456, tagId = 789 } = {}) { return new OrganizationTag({ id, organizationId, tagId }); }; + +export { buildOrganizationTag }; diff --git a/api/tests/tooling/domain-builder/factory/build-organization.js b/api/tests/tooling/domain-builder/factory/build-organization.js index 360a6b05fe2..052dd737d4c 100644 --- a/api/tests/tooling/domain-builder/factory/build-organization.js +++ b/api/tests/tooling/domain-builder/factory/build-organization.js @@ -1,4 +1,4 @@ -const Organization = require('../../../../lib/domain/models/Organization'); +import { Organization } from '../../../../lib/domain/models/Organization.js'; function buildOrganization({ id = 123, @@ -44,4 +44,4 @@ function buildOrganization({ }); } -module.exports = buildOrganization; +export { buildOrganization }; diff --git a/api/tests/tooling/domain-builder/factory/build-organizations-to-attach-to-target-profile.js b/api/tests/tooling/domain-builder/factory/build-organizations-to-attach-to-target-profile.js index 99a73be2c3f..75dcc84bedf 100644 --- a/api/tests/tooling/domain-builder/factory/build-organizations-to-attach-to-target-profile.js +++ b/api/tests/tooling/domain-builder/factory/build-organizations-to-attach-to-target-profile.js @@ -1,7 +1,9 @@ -const OrganizationsToAttachToTargetProfile = require('../../../../lib/domain/models/OrganizationsToAttachToTargetProfile'); +import { OrganizationsToAttachToTargetProfile } from '../../../../lib/domain/models/OrganizationsToAttachToTargetProfile.js'; -module.exports = function buildOrganizationsToAttachToTargetProfile({ id = 123 } = {}) { +const buildOrganizationsToAttachToTargetProfile = function ({ id = 123 } = {}) { return new OrganizationsToAttachToTargetProfile({ id, }); }; + +export { buildOrganizationsToAttachToTargetProfile }; diff --git a/api/tests/tooling/domain-builder/factory/build-participation-for-campaign-management.js b/api/tests/tooling/domain-builder/factory/build-participation-for-campaign-management.js index 3df8a036bf7..4a6f221eddc 100644 --- a/api/tests/tooling/domain-builder/factory/build-participation-for-campaign-management.js +++ b/api/tests/tooling/domain-builder/factory/build-participation-for-campaign-management.js @@ -1,7 +1,7 @@ -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); -const ParticipationForCampaignManagement = require('../../../../lib/domain/models/ParticipationForCampaignManagement'); +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { ParticipationForCampaignManagement } from '../../../../lib/domain/models/ParticipationForCampaignManagement.js'; -module.exports = function buildParticipationForCampaignManagement({ +const buildParticipationForCampaignManagement = function ({ id = 1, lastName = 'Un nom', firstName = 'Un prénom', @@ -34,3 +34,5 @@ module.exports = function buildParticipationForCampaignManagement({ deletedByLastName, }); }; + +export { buildParticipationForCampaignManagement }; diff --git a/api/tests/tooling/domain-builder/factory/build-pix-plus-certification-scoring.js b/api/tests/tooling/domain-builder/factory/build-pix-plus-certification-scoring.js index 99241523757..60f5612afa7 100644 --- a/api/tests/tooling/domain-builder/factory/build-pix-plus-certification-scoring.js +++ b/api/tests/tooling/domain-builder/factory/build-pix-plus-certification-scoring.js @@ -1,7 +1,7 @@ -const ComplementaryCertificationScoringWithComplementaryReferential = require('../../../../lib/domain/models/ComplementaryCertificationScoringWithComplementaryReferential'); -const buildReproducibilityRate = require('./build-reproducibility-rate'); +import { ComplementaryCertificationScoringWithComplementaryReferential } from '../../../../lib/domain/models/ComplementaryCertificationScoringWithComplementaryReferential.js'; +import { buildReproducibilityRate } from './build-reproducibility-rate.js'; -module.exports = function buildComplementaryCertificationScoringWithComplementaryReferential({ +const buildComplementaryCertificationScoringWithComplementaryReferential = function ({ complementaryCertificationCourseId = 999, complementaryCertificationBadgeKey = 'PIX_PLUS_TEST', reproducibilityRate = buildReproducibilityRate({ value: 100 }), @@ -16,3 +16,5 @@ module.exports = function buildComplementaryCertificationScoringWithComplementar minimumReproducibilityRate, }); }; + +export { buildComplementaryCertificationScoringWithComplementaryReferential }; diff --git a/api/tests/tooling/domain-builder/factory/build-placement-profile.js b/api/tests/tooling/domain-builder/factory/build-placement-profile.js index 2581b2376bd..a2befae7d82 100644 --- a/api/tests/tooling/domain-builder/factory/build-placement-profile.js +++ b/api/tests/tooling/domain-builder/factory/build-placement-profile.js @@ -1,6 +1,6 @@ -const _ = require('lodash'); -const PlacementProfile = require('../../../../lib/domain/models/PlacementProfile'); -const buildUserCompetence = require('./build-user-competence'); +import _ from 'lodash'; +import { PlacementProfile } from '../../../../lib/domain/models/PlacementProfile.js'; +import { buildUserCompetence } from './build-user-competence.js'; const buildPlacementProfile = function buildPlacementProfile({ profileDate = new Date('2020-01-01'), @@ -32,4 +32,4 @@ buildPlacementProfile.buildForCompetences = function buildForCompetences({ profi }); }; -module.exports = buildPlacementProfile; +export { buildPlacementProfile }; diff --git a/api/tests/tooling/domain-builder/factory/build-pole-emploi-sending.js b/api/tests/tooling/domain-builder/factory/build-pole-emploi-sending.js index 724f9de60ae..b651c3f5be6 100644 --- a/api/tests/tooling/domain-builder/factory/build-pole-emploi-sending.js +++ b/api/tests/tooling/domain-builder/factory/build-pole-emploi-sending.js @@ -1,6 +1,7 @@ -const buildCampaignParticipation = require('./build-campaign-participation'); -const isUndefined = require('lodash/isUndefined'); -const PoleEmploiSending = require('../../../../lib/domain/models/PoleEmploiSending'); +import { buildCampaignParticipation } from './build-campaign-participation.js'; +import lodash from 'lodash'; +const { isUndefined } = lodash; +import { PoleEmploiSending } from '../../../../lib/domain/models/PoleEmploiSending.js'; const buildPoleEmploiSending = function ({ type = PoleEmploiSending.TYPES.CAMPAIGN_PARTICIPATION_SHARING, @@ -24,4 +25,4 @@ const buildPoleEmploiSending = function ({ }); }; -module.exports = buildPoleEmploiSending; +export { buildPoleEmploiSending }; diff --git a/api/tests/tooling/domain-builder/factory/build-prescriber.js b/api/tests/tooling/domain-builder/factory/build-prescriber.js index 65c5550176a..d785e81b8e1 100644 --- a/api/tests/tooling/domain-builder/factory/build-prescriber.js +++ b/api/tests/tooling/domain-builder/factory/build-prescriber.js @@ -1,8 +1,8 @@ -const Membership = require('../../../../lib/domain/models/Membership'); -const Organization = require('../../../../lib/domain/models/Organization'); -const User = require('../../../../lib/domain/models/User'); -const UserOrgaSettings = require('../../../../lib/domain/models/UserOrgaSettings'); -const Prescriber = require('../../../../lib/domain/read-models/Prescriber'); +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { Organization } from '../../../../lib/domain/models/Organization.js'; +import { User } from '../../../../lib/domain/models/User.js'; +import { UserOrgaSettings } from '../../../../lib/domain/models/UserOrgaSettings.js'; +import { Prescriber } from '../../../../lib/domain/read-models/Prescriber.js'; /* * /!\ We can not use standard entity builders because of bidirectional relationships (a.k.a. cyclic dependencies) @@ -44,7 +44,7 @@ function _buildUserOrgaSettings() { }); } -module.exports = function buildPrescriber({ +const buildPrescriber = function ({ id = 753, firstName = 'Jean', lastName = 'Forme', @@ -67,3 +67,5 @@ module.exports = function buildPrescriber({ enableMultipleSendingAssessment, }); }; + +export { buildPrescriber }; diff --git a/api/tests/tooling/domain-builder/factory/build-private-certificate-with-competence-tree.js b/api/tests/tooling/domain-builder/factory/build-private-certificate-with-competence-tree.js index 72ca2c59235..8c16b2930b0 100644 --- a/api/tests/tooling/domain-builder/factory/build-private-certificate-with-competence-tree.js +++ b/api/tests/tooling/domain-builder/factory/build-private-certificate-with-competence-tree.js @@ -1,8 +1,8 @@ -const PrivateCertificate = require('../../../../lib/domain/models/PrivateCertificate'); -const buildAssessmentResult = require('./build-assessment-result'); -const buildResultCompetenceTree = require('./build-result-competence-tree'); +import { PrivateCertificate } from '../../../../lib/domain/models/PrivateCertificate.js'; +import { buildAssessmentResult } from './build-assessment-result.js'; +import { buildResultCompetenceTree } from './build-result-competence-tree.js'; -module.exports = function buildPrivateCertificate({ +const buildPrivateCertificate = function ({ id = 1, assessmentResults = [buildAssessmentResult()], assessmentState = 'completed', @@ -60,3 +60,5 @@ module.exports = function buildPrivateCertificate({ return certificate; }; + +export { buildPrivateCertificate }; diff --git a/api/tests/tooling/domain-builder/factory/build-private-certificate.js b/api/tests/tooling/domain-builder/factory/build-private-certificate.js index 6b872dff909..dc78a33f750 100644 --- a/api/tests/tooling/domain-builder/factory/build-private-certificate.js +++ b/api/tests/tooling/domain-builder/factory/build-private-certificate.js @@ -1,4 +1,4 @@ -const PrivateCertificate = require('../../../../lib/domain/models/PrivateCertificate'); +import { PrivateCertificate } from '../../../../lib/domain/models/PrivateCertificate.js'; const buildPrivateCertificate = function ({ id = 1, @@ -235,4 +235,4 @@ buildPrivateCertificate.started = function ({ }); }; -module.exports = buildPrivateCertificate; +export { buildPrivateCertificate }; diff --git a/api/tests/tooling/domain-builder/factory/build-progression.js b/api/tests/tooling/domain-builder/factory/build-progression.js index 4c282b950f9..34584cd9604 100644 --- a/api/tests/tooling/domain-builder/factory/build-progression.js +++ b/api/tests/tooling/domain-builder/factory/build-progression.js @@ -1,8 +1,8 @@ -const buildSkillCollection = require('./build-skill-collection'); -const buildKnowledgeElement = require('./build-knowledge-element'); -const Progression = require('../../../../lib/domain/models/Progression'); +import { BuildSkillCollection as buildSkillCollection } from './build-skill-collection.js'; +import { buildKnowledgeElement } from './build-knowledge-element.js'; +import { Progression } from '../../../../lib/domain/models/Progression.js'; -module.exports = function buildProgression({ +const buildProgression = function ({ id = Progression.generateIdFromAssessmentId(1234), skillIds = buildSkillCollection().map((skill) => skill.id), knowledgeElements = [buildKnowledgeElement()], @@ -10,3 +10,5 @@ module.exports = function buildProgression({ } = {}) { return new Progression({ id, skillIds, knowledgeElements, isProfileCompleted }); }; + +export { buildProgression }; diff --git a/api/tests/tooling/domain-builder/factory/build-reproducibility-rate.js b/api/tests/tooling/domain-builder/factory/build-reproducibility-rate.js index 0357147fd0c..3a5a8dc9dda 100644 --- a/api/tests/tooling/domain-builder/factory/build-reproducibility-rate.js +++ b/api/tests/tooling/domain-builder/factory/build-reproducibility-rate.js @@ -1,5 +1,7 @@ -const { ReproducibilityRate } = require('../../../../lib/domain/models/ReproducibilityRate'); +import { ReproducibilityRate } from '../../../../lib/domain/models/ReproducibilityRate.js'; -module.exports = function buildReproducibilityRate({ value = 10 } = {}) { +const buildReproducibilityRate = function ({ value = 10 } = {}) { return new ReproducibilityRate(value); }; + +export { buildReproducibilityRate }; diff --git a/api/tests/tooling/domain-builder/factory/build-result-competence-tree.js b/api/tests/tooling/domain-builder/factory/build-result-competence-tree.js index fe27ed99019..d39570ed18a 100644 --- a/api/tests/tooling/domain-builder/factory/build-result-competence-tree.js +++ b/api/tests/tooling/domain-builder/factory/build-result-competence-tree.js @@ -1,8 +1,8 @@ -const ResultCompetenceTree = require('../../../../lib/domain/models/ResultCompetenceTree'); -const buildCompetenceTree = require('./build-competence-tree'); -const buildCompetenceMark = require('./build-competence-mark'); +import { ResultCompetenceTree } from '../../../../lib/domain/models/ResultCompetenceTree.js'; +import { buildCompetenceTree } from './build-competence-tree.js'; +import { buildCompetenceMark } from './build-competence-mark.js'; -module.exports = function buildResultCompetenceTree({ +const buildResultCompetenceTree = function ({ id = '1-1', competenceTree = buildCompetenceTree(), competenceMarks = [buildCompetenceMark()], @@ -14,3 +14,5 @@ module.exports = function buildResultCompetenceTree({ resultCompetenceTree.id = id; return resultCompetenceTree; }; + +export { buildResultCompetenceTree }; diff --git a/api/tests/tooling/domain-builder/factory/build-sco-certification-candidate.js b/api/tests/tooling/domain-builder/factory/build-sco-certification-candidate.js index ac88718bdae..30b3fda3001 100644 --- a/api/tests/tooling/domain-builder/factory/build-sco-certification-candidate.js +++ b/api/tests/tooling/domain-builder/factory/build-sco-certification-candidate.js @@ -1,6 +1,6 @@ -const SCOCertificationCandidate = require('../../../../lib/domain/models/SCOCertificationCandidate'); +import { SCOCertificationCandidate } from '../../../../lib/domain/models/SCOCertificationCandidate.js'; -module.exports = function buildSCOCertificationCandidate({ +const buildSCOCertificationCandidate = function ({ id = 123, firstName = 'Myriam', lastName = 'Meilleure', @@ -21,3 +21,5 @@ module.exports = function buildSCOCertificationCandidate({ organizationLearnerId, }); }; + +export { buildSCOCertificationCandidate }; diff --git a/api/tests/tooling/domain-builder/factory/build-session-for-supervising.js b/api/tests/tooling/domain-builder/factory/build-session-for-supervising.js index 86882f5c350..36a28484a00 100644 --- a/api/tests/tooling/domain-builder/factory/build-session-for-supervising.js +++ b/api/tests/tooling/domain-builder/factory/build-session-for-supervising.js @@ -1,6 +1,6 @@ -const SessionForSupervising = require('../../../../lib/domain/read-models/SessionForSupervising'); +import { SessionForSupervising } from '../../../../lib/domain/read-models/SessionForSupervising.js'; -module.exports = function buildSessionForSupervising({ +const buildSessionForSupervising = function ({ id = 123, certificationCenterName = 'Centre de certif pix', certificationCenterId = 565, @@ -23,3 +23,5 @@ module.exports = function buildSessionForSupervising({ certificationCandidates, }); }; + +export { buildSessionForSupervising }; diff --git a/api/tests/tooling/domain-builder/factory/build-session-for-supervisor-kit.js b/api/tests/tooling/domain-builder/factory/build-session-for-supervisor-kit.js index 3dcbecc69e7..41d9155d707 100644 --- a/api/tests/tooling/domain-builder/factory/build-session-for-supervisor-kit.js +++ b/api/tests/tooling/domain-builder/factory/build-session-for-supervisor-kit.js @@ -1,6 +1,6 @@ -const SessionForSupervisorKit = require('../../../../lib/domain/read-models/SessionForSupervisorKit'); +import { SessionForSupervisorKit } from '../../../../lib/domain/read-models/SessionForSupervisorKit.js'; -module.exports = function buildSessionForSupervisorKit({ +const buildSessionForSupervisorKit = function ({ id = 123, examiner = 'Sherlock Holmes', address = '22b Baker Street', @@ -21,3 +21,5 @@ module.exports = function buildSessionForSupervisorKit({ supervisorPassword, }); }; + +export { buildSessionForSupervisorKit }; diff --git a/api/tests/tooling/domain-builder/factory/build-session-jury-comment.js b/api/tests/tooling/domain-builder/factory/build-session-jury-comment.js index 28d4f059c6c..07d02426b23 100644 --- a/api/tests/tooling/domain-builder/factory/build-session-jury-comment.js +++ b/api/tests/tooling/domain-builder/factory/build-session-jury-comment.js @@ -1,4 +1,4 @@ -const SessionJuryComment = require('../../../../lib/domain/models/SessionJuryComment'); +import { SessionJuryComment } from '../../../../lib/domain/models/SessionJuryComment.js'; const buildSessionJuryComment = function ({ id = 123, @@ -14,4 +14,4 @@ const buildSessionJuryComment = function ({ }); }; -module.exports = buildSessionJuryComment; +export { buildSessionJuryComment }; diff --git a/api/tests/tooling/domain-builder/factory/build-session-summary.js b/api/tests/tooling/domain-builder/factory/build-session-summary.js index be48e494caf..50b846d7064 100644 --- a/api/tests/tooling/domain-builder/factory/build-session-summary.js +++ b/api/tests/tooling/domain-builder/factory/build-session-summary.js @@ -1,4 +1,4 @@ -const SessionSummary = require('../../../../lib/domain/read-models/SessionSummary'); +import { SessionSummary } from '../../../../lib/domain/read-models/SessionSummary.js'; const buildSessionSummary = function ({ id = 123, @@ -93,4 +93,4 @@ buildSessionSummary.processed = function ({ }); }; -module.exports = buildSessionSummary; +export { buildSessionSummary }; diff --git a/api/tests/tooling/domain-builder/factory/build-session.js b/api/tests/tooling/domain-builder/factory/build-session.js index 36de8e681c8..72be11792d8 100644 --- a/api/tests/tooling/domain-builder/factory/build-session.js +++ b/api/tests/tooling/domain-builder/factory/build-session.js @@ -1,4 +1,4 @@ -const Session = require('../../../../lib/domain/models/Session'); +import { Session } from '../../../../lib/domain/models/Session.js'; const buildSession = function ({ id = 123, @@ -184,4 +184,4 @@ buildSession.processed = function ({ }); }; -module.exports = buildSession; +export { buildSession }; diff --git a/api/tests/tooling/domain-builder/factory/build-shareable-certificate.js b/api/tests/tooling/domain-builder/factory/build-shareable-certificate.js index 84b345f360c..440e5ceeefc 100644 --- a/api/tests/tooling/domain-builder/factory/build-shareable-certificate.js +++ b/api/tests/tooling/domain-builder/factory/build-shareable-certificate.js @@ -1,6 +1,6 @@ -const ShareableCertificate = require('../../../../lib/domain/models/ShareableCertificate'); +import { ShareableCertificate } from '../../../../lib/domain/models/ShareableCertificate.js'; -module.exports = function buildShareableCertificate({ +const buildShareableCertificate = function ({ id = 1, firstName = 'Jean', lastName = 'Bon', @@ -33,3 +33,5 @@ module.exports = function buildShareableCertificate({ certifiedBadgeImages, }); }; + +export { buildShareableCertificate }; diff --git a/api/tests/tooling/domain-builder/factory/build-skill-collection.js b/api/tests/tooling/domain-builder/factory/build-skill-collection.js index 484a6e5f16d..6ff9bf26da1 100644 --- a/api/tests/tooling/domain-builder/factory/build-skill-collection.js +++ b/api/tests/tooling/domain-builder/factory/build-skill-collection.js @@ -1,10 +1,6 @@ -const buildSkill = require('./build-skill'); +import { buildSkill } from './build-skill.js'; -module.exports = function BuildSkillCollection({ - name = buildSkill.buildRandomTubeName(), - minLevel = 3, - maxLevel = 5, -} = {}) { +const BuildSkillCollection = function ({ name = buildSkill.buildRandomTubeName(), minLevel = 3, maxLevel = 5 } = {}) { const collection = []; for (let i = minLevel; i <= maxLevel; ++i) { @@ -13,3 +9,5 @@ module.exports = function BuildSkillCollection({ return collection; }; + +export { BuildSkillCollection }; diff --git a/api/tests/tooling/domain-builder/factory/build-skill-learning-content-data-object.js b/api/tests/tooling/domain-builder/factory/build-skill-learning-content-data-object.js index 37e46df3af6..325593a40c9 100644 --- a/api/tests/tooling/domain-builder/factory/build-skill-learning-content-data-object.js +++ b/api/tests/tooling/domain-builder/factory/build-skill-learning-content-data-object.js @@ -9,7 +9,7 @@ const DEFAULT_ID = 'recSK0X22abcdefgh', DEFAULT_VERSION = 1, DEFAULT_LEVEL = 1; -module.exports = function ({ +const buildSkillLearningContentDataObject = function ({ id = DEFAULT_ID, name = DEFAULT_NAME, hint = DEFAULT_HINT, @@ -34,3 +34,5 @@ module.exports = function ({ level, }; }; + +export { buildSkillLearningContentDataObject }; diff --git a/api/tests/tooling/domain-builder/factory/build-skill-set.js b/api/tests/tooling/domain-builder/factory/build-skill-set.js index b32b9caf30b..63bafa1fdea 100644 --- a/api/tests/tooling/domain-builder/factory/build-skill-set.js +++ b/api/tests/tooling/domain-builder/factory/build-skill-set.js @@ -1,6 +1,6 @@ -const SkillSet = require('../../../../lib/domain/models/SkillSet'); +import { SkillSet } from '../../../../lib/domain/models/SkillSet.js'; -module.exports = function buildSkillSet({ id = 1, badgeId = 64, name = 'name', skillIds = ['recABC', 'recDEF'] } = {}) { +const buildSkillSet = function ({ id = 1, badgeId = 64, name = 'name', skillIds = ['recABC', 'recDEF'] } = {}) { return new SkillSet({ id, badgeId, @@ -8,3 +8,5 @@ module.exports = function buildSkillSet({ id = 1, badgeId = 64, name = 'name', s skillIds, }); }; + +export { buildSkillSet }; diff --git a/api/tests/tooling/domain-builder/factory/build-skill.js b/api/tests/tooling/domain-builder/factory/build-skill.js index 100c757d6f8..5d6c70fa8cf 100644 --- a/api/tests/tooling/domain-builder/factory/build-skill.js +++ b/api/tests/tooling/domain-builder/factory/build-skill.js @@ -1,4 +1,4 @@ -const Skill = require('../../../../lib/domain/models/Skill'); +import { Skill } from '../../../../lib/domain/models/Skill.js'; const buildSkill = function buildSkill({ id = 'recSK123', @@ -25,7 +25,7 @@ const buildSkill = function buildSkill({ }; buildSkill.buildRandomTubeName = buildRandomTubeName; -module.exports = buildSkill; +export { buildSkill }; /** * A tube name starts by a @ and contains between 3 and 15 other letters diff --git a/api/tests/tooling/domain-builder/factory/build-solution.js b/api/tests/tooling/domain-builder/factory/build-solution.js index e7b9a22c2b1..bb7246829f3 100644 --- a/api/tests/tooling/domain-builder/factory/build-solution.js +++ b/api/tests/tooling/domain-builder/factory/build-solution.js @@ -1,6 +1,6 @@ -const Solution = require('../../../../lib/domain/models/Solution'); +import { Solution } from '../../../../lib/domain/models/Solution.js'; -module.exports = function buildSolution({ +const buildSolution = function ({ id = 'recCHAL123', type = 'QCM', value = '1', @@ -19,3 +19,5 @@ module.exports = function buildSolution({ scoring, }); }; + +export { buildSolution }; diff --git a/api/tests/tooling/domain-builder/factory/build-stage.js b/api/tests/tooling/domain-builder/factory/build-stage.js index 2c854405b4b..41d94663569 100644 --- a/api/tests/tooling/domain-builder/factory/build-stage.js +++ b/api/tests/tooling/domain-builder/factory/build-stage.js @@ -1,6 +1,6 @@ -const Stage = require('../../../../lib/domain/models/Stage'); +import { Stage } from '../../../../lib/domain/models/Stage.js'; -module.exports = function buildStage({ +const buildStage = function ({ id = 123, title = 'Courage', message = 'Insister', @@ -21,3 +21,5 @@ module.exports = function buildStage({ targetProfileId, }); }; + +export { buildStage }; diff --git a/api/tests/tooling/domain-builder/factory/build-sup-organization-learner.js b/api/tests/tooling/domain-builder/factory/build-sup-organization-learner.js index 5cc29771cf7..2660fc64f4e 100644 --- a/api/tests/tooling/domain-builder/factory/build-sup-organization-learner.js +++ b/api/tests/tooling/domain-builder/factory/build-sup-organization-learner.js @@ -1,5 +1,5 @@ -const SupOrganizationLearner = require('../../../../lib/domain/models/SupOrganizationLearner'); -const buildOrganization = require('./build-organization'); +import { SupOrganizationLearner } from '../../../../lib/domain/models/SupOrganizationLearner.js'; +import { buildOrganization } from './build-organization.js'; function buildSupOrganizationLearner({ organization = buildOrganization({ isManagingStudents: true }), @@ -35,4 +35,4 @@ function buildSupOrganizationLearner({ }); } -module.exports = buildSupOrganizationLearner; +export { buildSupOrganizationLearner }; diff --git a/api/tests/tooling/domain-builder/factory/build-tag.js b/api/tests/tooling/domain-builder/factory/build-tag.js index 825a89c867d..a6db7652615 100644 --- a/api/tests/tooling/domain-builder/factory/build-tag.js +++ b/api/tests/tooling/domain-builder/factory/build-tag.js @@ -1,4 +1,4 @@ -const Tag = require('../../../../lib/domain/models/Tag'); +import { Tag } from '../../../../lib/domain/models/Tag.js'; function buildTag({ id = 123, name = 'Type' } = {}) { return new Tag({ @@ -7,4 +7,4 @@ function buildTag({ id = 123, name = 'Type' } = {}) { }); } -module.exports = buildTag; +export { buildTag }; diff --git a/api/tests/tooling/domain-builder/factory/build-target-profile-for-admin.js b/api/tests/tooling/domain-builder/factory/build-target-profile-for-admin.js index 474071b4e9d..2132a50074a 100644 --- a/api/tests/tooling/domain-builder/factory/build-target-profile-for-admin.js +++ b/api/tests/tooling/domain-builder/factory/build-target-profile-for-admin.js @@ -1,11 +1,11 @@ -const buildArea = require('./build-area'); -const buildCompetence = require('./build-competence'); -const buildThematic = require('./build-thematic'); -const buildTube = require('./build-tube'); -const buildStageCollection = require('./target-profile-management/build-stage-collection'); -const TargetProfileForAdmin = require('../../../../lib/domain/models/TargetProfileForAdmin'); +import { buildArea } from './build-area.js'; +import { buildCompetence } from './build-competence.js'; +import { buildThematic } from './build-thematic.js'; +import { buildTube } from './build-tube.js'; +import { buildStageCollection } from './target-profile-management/build-stage-collection.js'; +import { TargetProfileForAdmin } from '../../../../lib/domain/models/TargetProfileForAdmin.js'; -module.exports = function buildTargetProfileForAdmin({ +const buildTargetProfileForAdmin = function ({ id = 123, name = 'Profil cible super cool', outdated = false, @@ -46,3 +46,5 @@ module.exports = function buildTargetProfileForAdmin({ tubes: tubesWithLevelThematicMobileAndTablet, }); }; + +export { buildTargetProfileForAdmin }; diff --git a/api/tests/tooling/domain-builder/factory/build-target-profile-for-creation.js b/api/tests/tooling/domain-builder/factory/build-target-profile-for-creation.js index 381c84230a5..dbefb951d9a 100644 --- a/api/tests/tooling/domain-builder/factory/build-target-profile-for-creation.js +++ b/api/tests/tooling/domain-builder/factory/build-target-profile-for-creation.js @@ -1,6 +1,6 @@ -const TargetProfileForCreation = require('../../../../lib/domain/models/TargetProfileForCreation'); +import { TargetProfileForCreation } from '../../../../lib/domain/models/TargetProfileForCreation.js'; -module.exports = function buildTargetProfileForCreation({ +const buildTargetProfileForCreation = function ({ name = 'Profil cible super cool', category = 'some_category', description = 'description', @@ -21,3 +21,5 @@ module.exports = function buildTargetProfileForCreation({ tubes, }); }; + +export { buildTargetProfileForCreation }; diff --git a/api/tests/tooling/domain-builder/factory/build-target-profile-summary-for-admin.js b/api/tests/tooling/domain-builder/factory/build-target-profile-summary-for-admin.js index a91534b1139..74e4b457e4c 100644 --- a/api/tests/tooling/domain-builder/factory/build-target-profile-summary-for-admin.js +++ b/api/tests/tooling/domain-builder/factory/build-target-profile-summary-for-admin.js @@ -1,6 +1,6 @@ -const TargetProfileSummaryForAdmin = require('../../../../lib/domain/models/TargetProfileSummaryForAdmin'); +import { TargetProfileSummaryForAdmin } from '../../../../lib/domain/models/TargetProfileSummaryForAdmin.js'; -module.exports = function buildTargetProfileSummaryForAdmin({ +const buildTargetProfileSummaryForAdmin = function ({ id = 123, name = 'Profil cible super cool', outdated = false, @@ -13,3 +13,5 @@ module.exports = function buildTargetProfileSummaryForAdmin({ createdAt, }); }; + +export { buildTargetProfileSummaryForAdmin }; diff --git a/api/tests/tooling/domain-builder/factory/build-target-profile.js b/api/tests/tooling/domain-builder/factory/build-target-profile.js index 53a93263bd9..7487ddca395 100644 --- a/api/tests/tooling/domain-builder/factory/build-target-profile.js +++ b/api/tests/tooling/domain-builder/factory/build-target-profile.js @@ -1,6 +1,6 @@ -const TargetProfile = require('../../../../lib/domain/models/TargetProfile'); +import { TargetProfile } from '../../../../lib/domain/models/TargetProfile.js'; -module.exports = function buildTargetProfile({ +const buildTargetProfile = function ({ id = 123, name = 'Profil cible super cool', imageUrl = 'ImageURL', @@ -23,3 +23,5 @@ module.exports = function buildTargetProfile({ badges, }); }; + +export { buildTargetProfile }; diff --git a/api/tests/tooling/domain-builder/factory/build-thematic.js b/api/tests/tooling/domain-builder/factory/build-thematic.js index e44258aa05c..9656fc2437e 100644 --- a/api/tests/tooling/domain-builder/factory/build-thematic.js +++ b/api/tests/tooling/domain-builder/factory/build-thematic.js @@ -1,4 +1,4 @@ -const Thematic = require('../../../../lib/domain/models/Thematic'); +import { Thematic } from '../../../../lib/domain/models/Thematic.js'; const buildThematic = function buildThematic({ id = 'recThem1', @@ -16,4 +16,4 @@ const buildThematic = function buildThematic({ }); }; -module.exports = buildThematic; +export { buildThematic }; diff --git a/api/tests/tooling/domain-builder/factory/build-training-for-admin.js b/api/tests/tooling/domain-builder/factory/build-training-for-admin.js index 2300148caec..82ebe7828f2 100644 --- a/api/tests/tooling/domain-builder/factory/build-training-for-admin.js +++ b/api/tests/tooling/domain-builder/factory/build-training-for-admin.js @@ -1,6 +1,6 @@ -const TrainingForAdmin = require('../../../../lib/domain/read-models/TrainingForAdmin'); +import { TrainingForAdmin } from '../../../../lib/domain/read-models/TrainingForAdmin.js'; -module.exports = function buildTrainingForAdmin({ +const buildTrainingForAdmin = function ({ id = 'training1', title = 'Training 1', link = 'https://example.net', @@ -27,3 +27,5 @@ module.exports = function buildTrainingForAdmin({ trainingTriggers, }); }; + +export { buildTrainingForAdmin }; diff --git a/api/tests/tooling/domain-builder/factory/build-training-summary.js b/api/tests/tooling/domain-builder/factory/build-training-summary.js index 83fed5aa445..3b07d2e5f54 100644 --- a/api/tests/tooling/domain-builder/factory/build-training-summary.js +++ b/api/tests/tooling/domain-builder/factory/build-training-summary.js @@ -1,9 +1,11 @@ -const TrainingSummary = require('../../../../lib/domain/read-models/TrainingSummary'); +import { TrainingSummary } from '../../../../lib/domain/read-models/TrainingSummary.js'; -module.exports = function buildTrainingSummary({ id = 1, title = 'Training Summary 1', isRecommendable = false } = {}) { +const buildTrainingSummary = function ({ id = 1, title = 'Training Summary 1', isRecommendable = false } = {}) { return new TrainingSummary({ id, title, isRecommendable, }); }; + +export { buildTrainingSummary }; diff --git a/api/tests/tooling/domain-builder/factory/build-training-trigger-for-admin.js b/api/tests/tooling/domain-builder/factory/build-training-trigger-for-admin.js index 1452d3e9839..884178099a4 100644 --- a/api/tests/tooling/domain-builder/factory/build-training-trigger-for-admin.js +++ b/api/tests/tooling/domain-builder/factory/build-training-trigger-for-admin.js @@ -1,8 +1,8 @@ -const buildTube = require('./build-tube'); -const TrainingTriggerForAdmin = require('../../../../lib/domain/read-models/TrainingTriggerForAdmin'); -const TrainingTriggerTube = require('../../../../lib/domain/models/TrainingTriggerTube'); +import { buildTube } from './build-tube.js'; +import { TrainingTriggerForAdmin } from '../../../../lib/domain/read-models/TrainingTriggerForAdmin.js'; +import { TrainingTriggerTube } from '../../../../lib/domain/models/TrainingTriggerTube.js'; -module.exports = function buildTrainingTriggerForAdmin({ +const buildTrainingTriggerForAdmin = function ({ id = 1000, trainingId = 156, triggerTubes = [ @@ -29,3 +29,5 @@ module.exports = function buildTrainingTriggerForAdmin({ thematics, }); }; + +export { buildTrainingTriggerForAdmin }; diff --git a/api/tests/tooling/domain-builder/factory/build-training-trigger-tube.js b/api/tests/tooling/domain-builder/factory/build-training-trigger-tube.js index 5bae9a006d1..0d602735040 100644 --- a/api/tests/tooling/domain-builder/factory/build-training-trigger-tube.js +++ b/api/tests/tooling/domain-builder/factory/build-training-trigger-tube.js @@ -1,10 +1,12 @@ -const buildTube = require('./build-tube'); -const TrainingTriggerTube = require('../../../../lib/domain/models/TrainingTriggerTube'); +import { buildTube } from './build-tube.js'; +import { TrainingTriggerTube } from '../../../../lib/domain/models/TrainingTriggerTube.js'; -module.exports = function buildTrainingTriggerTube({ id = 1000, tube = buildTube(), level = 8 } = {}) { +const buildTrainingTriggerTube = function ({ id = 1000, tube = buildTube(), level = 8 } = {}) { return new TrainingTriggerTube({ id, tube, level, }); }; + +export { buildTrainingTriggerTube }; diff --git a/api/tests/tooling/domain-builder/factory/build-training-trigger.js b/api/tests/tooling/domain-builder/factory/build-training-trigger.js index af65ce7a55f..cbee0adcc3c 100644 --- a/api/tests/tooling/domain-builder/factory/build-training-trigger.js +++ b/api/tests/tooling/domain-builder/factory/build-training-trigger.js @@ -1,8 +1,8 @@ -const buildTube = require('./build-tube'); -const TrainingTrigger = require('../../../../lib/domain/models/TrainingTrigger'); -const TrainingTriggerTube = require('../../../../lib/domain/models/TrainingTriggerTube'); +import { buildTube } from './build-tube.js'; +import { TrainingTrigger } from '../../../../lib/domain/models/TrainingTrigger.js'; +import { TrainingTriggerTube } from '../../../../lib/domain/models/TrainingTriggerTube.js'; -module.exports = function buildTrainingTrigger({ +const buildTrainingTrigger = function ({ id = 1000, trainingId = 156, triggerTubes = [ @@ -29,3 +29,5 @@ module.exports = function buildTrainingTrigger({ thematics, }); }; + +export { buildTrainingTrigger }; diff --git a/api/tests/tooling/domain-builder/factory/build-training.js b/api/tests/tooling/domain-builder/factory/build-training.js index 726a40f7f26..f72453f9dea 100644 --- a/api/tests/tooling/domain-builder/factory/build-training.js +++ b/api/tests/tooling/domain-builder/factory/build-training.js @@ -1,6 +1,6 @@ -const Training = require('../../../../lib/domain/models/Training'); +import { Training } from '../../../../lib/domain/models/Training.js'; -module.exports = function buildTraining({ +const buildTraining = function ({ id = 'training1', title = 'Training 1', link = 'https://example.net', @@ -27,3 +27,5 @@ module.exports = function buildTraining({ trainingTriggers, }); }; + +export { buildTraining }; diff --git a/api/tests/tooling/domain-builder/factory/build-tube.js b/api/tests/tooling/domain-builder/factory/build-tube.js index 3fb019f87c9..3bb5660084e 100644 --- a/api/tests/tooling/domain-builder/factory/build-tube.js +++ b/api/tests/tooling/domain-builder/factory/build-tube.js @@ -1,7 +1,7 @@ -const Tube = require('../../../../lib/domain/models/Tube'); -const buildSkillCollection = require('./build-skill-collection'); +import { Tube } from '../../../../lib/domain/models/Tube.js'; +import { BuildSkillCollection as buildSkillCollection } from './build-skill-collection.js'; -module.exports = function buildTube({ +const buildTube = function ({ id = 'recTube123', name = '@tubeName', title = 'titre', @@ -30,3 +30,5 @@ module.exports = function buildTube({ skillIds, }); }; + +export { buildTube }; diff --git a/api/tests/tooling/domain-builder/factory/build-tutorial-for-user.js b/api/tests/tooling/domain-builder/factory/build-tutorial-for-user.js index 850303d5cd4..f0080fc5453 100644 --- a/api/tests/tooling/domain-builder/factory/build-tutorial-for-user.js +++ b/api/tests/tooling/domain-builder/factory/build-tutorial-for-user.js @@ -1,8 +1,8 @@ -const buildTutorial = require('./build-tutorial'); -const buildUserSavedTutorial = require('./build-user-saved-tutorial'); -const TutorialForUser = require('../../../../lib/domain/read-models/TutorialForUser'); +import { buildTutorial } from './build-tutorial.js'; +import { buildUserSavedTutorial } from './build-user-saved-tutorial.js'; +import { TutorialForUser } from '../../../../lib/domain/read-models/TutorialForUser.js'; -module.exports = function buildTutorialForUser({ +const buildTutorialForUser = function ({ tutorial = buildTutorial(), userSavedTutorial = buildUserSavedTutorial(), tutorialEvaluation, @@ -10,3 +10,5 @@ module.exports = function buildTutorialForUser({ } = {}) { return new TutorialForUser({ ...tutorial, tutorialEvaluation, userSavedTutorial, skillId }); }; + +export { buildTutorialForUser }; diff --git a/api/tests/tooling/domain-builder/factory/build-tutorial.js b/api/tests/tooling/domain-builder/factory/build-tutorial.js index f74c423af22..5a00ac616a5 100644 --- a/api/tests/tooling/domain-builder/factory/build-tutorial.js +++ b/api/tests/tooling/domain-builder/factory/build-tutorial.js @@ -1,6 +1,6 @@ -const Tutorial = require('../../../../lib/domain/models/Tutorial'); +import { Tutorial } from '../../../../lib/domain/models/Tutorial.js'; -module.exports = function buildTutorial({ +const buildTutorial = function ({ id = 'recTuto1', duration = '00:01:30', format = 'video', @@ -17,3 +17,5 @@ module.exports = function buildTutorial({ title, }); }; + +export { buildTutorial }; diff --git a/api/tests/tooling/domain-builder/factory/build-user-competence.js b/api/tests/tooling/domain-builder/factory/build-user-competence.js index cbd2ee839c5..53bae83cfe6 100644 --- a/api/tests/tooling/domain-builder/factory/build-user-competence.js +++ b/api/tests/tooling/domain-builder/factory/build-user-competence.js @@ -1,6 +1,6 @@ -const UserCompetence = require('../../../../lib/domain/models/UserCompetence'); +import { UserCompetence } from '../../../../lib/domain/models/UserCompetence.js'; -module.exports = function buildUserCompetence({ +const buildUserCompetence = function ({ id = 'recUserComp', index = '1.1', name = 'name', @@ -19,3 +19,5 @@ module.exports = function buildUserCompetence({ skills, }); }; + +export { buildUserCompetence }; diff --git a/api/tests/tooling/domain-builder/factory/build-user-details-for-admin.js b/api/tests/tooling/domain-builder/factory/build-user-details-for-admin.js index c33db56fc61..7797f545d4f 100644 --- a/api/tests/tooling/domain-builder/factory/build-user-details-for-admin.js +++ b/api/tests/tooling/domain-builder/factory/build-user-details-for-admin.js @@ -1,6 +1,6 @@ -const UserDetailsForAdmin = require('../../../../lib/domain/models/UserDetailsForAdmin'); +import { UserDetailsForAdmin } from '../../../../lib/domain/models/UserDetailsForAdmin.js'; -module.exports = function buildUserDetailsForAdmin({ +const buildUserDetailsForAdmin = function ({ id = 123, firstName = 'Louis', lastName = 'Philippe', @@ -51,3 +51,5 @@ module.exports = function buildUserDetailsForAdmin({ hasBeenAnonymisedBy, }); }; + +export { buildUserDetailsForAdmin }; diff --git a/api/tests/tooling/domain-builder/factory/build-user-orga-settings.js b/api/tests/tooling/domain-builder/factory/build-user-orga-settings.js index 7314aeb87bf..8934e558799 100644 --- a/api/tests/tooling/domain-builder/factory/build-user-orga-settings.js +++ b/api/tests/tooling/domain-builder/factory/build-user-orga-settings.js @@ -1,6 +1,6 @@ -const UserOrgaSettings = require('../../../../lib/domain/models/UserOrgaSettings'); -const Organization = require('../../../../lib/domain/models/Organization'); -const User = require('../../../../lib/domain/models/User'); +import { UserOrgaSettings } from '../../../../lib/domain/models/UserOrgaSettings.js'; +import { Organization } from '../../../../lib/domain/models/Organization.js'; +import { User } from '../../../../lib/domain/models/User.js'; /* * /!\ We can not use standard entity builders because of bidirectional relationships (a.k.a. cyclic dependencies) @@ -26,7 +26,7 @@ function _buildOrganization() { }); } -module.exports = function buildUserOrgaSettings({ +const buildUserOrgaSettings = function ({ id = 789, currentOrganization = _buildOrganization(), user = _buildUser(), @@ -37,3 +37,5 @@ module.exports = function buildUserOrgaSettings({ return userOrgaSettings; }; + +export { buildUserOrgaSettings }; diff --git a/api/tests/tooling/domain-builder/factory/build-user-saved-tutorial-with-tutorial.js b/api/tests/tooling/domain-builder/factory/build-user-saved-tutorial-with-tutorial.js index fccb6b55106..c23aea6991d 100644 --- a/api/tests/tooling/domain-builder/factory/build-user-saved-tutorial-with-tutorial.js +++ b/api/tests/tooling/domain-builder/factory/build-user-saved-tutorial-with-tutorial.js @@ -1,9 +1,9 @@ -const UserSavedTutorialWithTutorial = require('../../../../lib/domain/models/UserSavedTutorialWithTutorial'); -const buildSkill = require('./build-skill'); -const buildTutorial = require('./build-tutorial'); -const buildUser = require('./build-user'); +import { UserSavedTutorialWithTutorial } from '../../../../lib/domain/models/UserSavedTutorialWithTutorial.js'; +import { buildSkill } from './build-skill.js'; +import { buildTutorial } from './build-tutorial.js'; +import { buildUser } from './build-user.js'; -module.exports = function buildUserSavedTutorialWithTutorial({ +const buildUserSavedTutorialWithTutorial = function ({ id = 123, userId = buildUser().id, skillId = buildSkill().id, @@ -16,3 +16,5 @@ module.exports = function buildUserSavedTutorialWithTutorial({ tutorial, }); }; + +export { buildUserSavedTutorialWithTutorial }; diff --git a/api/tests/tooling/domain-builder/factory/build-user-saved-tutorial.js b/api/tests/tooling/domain-builder/factory/build-user-saved-tutorial.js index 441aaaf57c6..c17648e4ba3 100644 --- a/api/tests/tooling/domain-builder/factory/build-user-saved-tutorial.js +++ b/api/tests/tooling/domain-builder/factory/build-user-saved-tutorial.js @@ -1,6 +1,6 @@ -const UserSavedTutorial = require('../../../../lib/domain/models/UserSavedTutorial'); +import { UserSavedTutorial } from '../../../../lib/domain/models/UserSavedTutorial.js'; -module.exports = function buildUserSavedTutorial({ +const buildUserSavedTutorial = function ({ id = 111, userId = '4044', tutorialId = '111', @@ -15,3 +15,5 @@ module.exports = function buildUserSavedTutorial({ createdAt, }); }; + +export { buildUserSavedTutorial }; diff --git a/api/tests/tooling/domain-builder/factory/build-user-scorecard.js b/api/tests/tooling/domain-builder/factory/build-user-scorecard.js index 1a3211e51f7..7020908570f 100644 --- a/api/tests/tooling/domain-builder/factory/build-user-scorecard.js +++ b/api/tests/tooling/domain-builder/factory/build-user-scorecard.js @@ -1,7 +1,7 @@ -const buildArea = require('./build-area'); -const Scorecard = require('../../../../lib/domain/models/Scorecard'); +import { buildArea } from './build-area.js'; +import { Scorecard } from '../../../../lib/domain/models/Scorecard.js'; -module.exports = function buildUserScorecard({ +const buildUserScorecard = function ({ id = 'recCOMP123_789', // attributes name = 'Mener une troupe à la bataille', @@ -38,3 +38,5 @@ module.exports = function buildUserScorecard({ tutorials, }); }; + +export { buildUserScorecard }; diff --git a/api/tests/tooling/domain-builder/factory/build-user.js b/api/tests/tooling/domain-builder/factory/build-user.js index 91ea47df0b9..197c1c1dcde 100644 --- a/api/tests/tooling/domain-builder/factory/build-user.js +++ b/api/tests/tooling/domain-builder/factory/build-user.js @@ -1,10 +1,9 @@ -const User = require('../../../../lib/domain/models/User'); +import { User } from '../../../../lib/domain/models/User.js'; +import { buildMembership } from './build-membership.js'; +import { buildCertificationCenterMembership } from './build-certification-center-membership.js'; +import { buildAuthenticationMethod } from './build-authentication-method.js'; -const buildMembership = require('./build-membership'); -const buildCertificationCenterMembership = require('./build-certification-center-membership'); -const buildAuthenticationMethod = require('./build-authentication-method'); - -module.exports = function buildUser({ +const buildUser = function ({ id = 123, firstName = 'Lorie', lastName = 'MeilleureAmie', @@ -51,3 +50,5 @@ module.exports = function buildUser({ hasBeenAnonymisedBy, }); }; + +export { buildUser }; diff --git a/api/tests/tooling/domain-builder/factory/build-validation.js b/api/tests/tooling/domain-builder/factory/build-validation.js index 7391549d0be..cacea157502 100644 --- a/api/tests/tooling/domain-builder/factory/build-validation.js +++ b/api/tests/tooling/domain-builder/factory/build-validation.js @@ -1,9 +1,11 @@ -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const Validation = require('../../../../lib/domain/models/Validation'); +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { Validation } from '../../../../lib/domain/models/Validation.js'; -module.exports = function ({ result = AnswerStatus.OK, resultDetails = 'Bravo' } = {}) { +const buildValidation = function ({ result = AnswerStatus.OK, resultDetails = 'Bravo' } = {}) { return new Validation({ result, resultDetails, }); }; + +export { buildValidation }; diff --git a/api/tests/tooling/domain-builder/factory/build-validator.js b/api/tests/tooling/domain-builder/factory/build-validator.js index 8a8e56225b3..ed51ee0eef5 100644 --- a/api/tests/tooling/domain-builder/factory/build-validator.js +++ b/api/tests/tooling/domain-builder/factory/build-validator.js @@ -1,6 +1,6 @@ -const Validator = require('../../../../lib/domain/models/Validator'); -const ValidatorQCU = require('../../../../lib/domain/models/ValidatorQCU'); -const buildSolution = require('./build-solution'); +import { Validator } from '../../../../lib/domain/models/Validator.js'; +import { ValidatorQCU } from '../../../../lib/domain/models/ValidatorQCU.js'; +import { buildSolution } from './build-solution.js'; function buildValidator({ solution = buildSolution() } = {}) { return new Validator({ @@ -14,4 +14,4 @@ buildValidator.ofTypeQCU = function ({ solution = buildSolution() } = {}) { }); }; -module.exports = buildValidator; +export { buildValidator }; diff --git a/api/tests/tooling/domain-builder/factory/index.js b/api/tests/tooling/domain-builder/factory/index.js index 1f70f6d1e03..55b30fc3d94 100644 --- a/api/tests/tooling/domain-builder/factory/index.js +++ b/api/tests/tooling/domain-builder/factory/index.js @@ -1,151 +1,151 @@ -const buildAccountRecoveryDemand = require('./build-account-recovery-demand'); -const buildAdminMember = require('./build-admin-member'); -const buildAllowedCertificationCenterAccess = require('./build-allowed-certification-center-access'); -const buildAnswer = require('./build-answer'); -const buildArea = require('./build-area'); -const buildAssessment = require('./build-assessment'); -const buildAssessmentResult = require('./build-assessment-result'); -const buildAuthenticationMethod = require('./build-authentication-method'); -const buildBadge = require('./build-badge'); -const buildBadgeAcquisition = require('./build-badge-acquisition'); -const buildBadgeCriterion = require('./build-badge-criterion'); -const buildBadgeDetails = require('./build-badge-details'); -const buildBadgeForCalculation = require('./build-badge-for-calculation'); -const buildBadgeCriterionForCalculation = require('./build-badge-criterion-for-calculation'); -const buildSkillSet = require('./build-skill-set'); -const buildCampaign = require('./build-campaign'); -const buildCampaignCollectiveResult = require('./build-campaign-collective-result'); -const buildCampaignParticipation = require('./build-campaign-participation'); -const buildCampaignParticipationBadge = require('./build-campaign-participation-badge'); -const buildCampaignParticipationForUserManagement = require('./build-campaign-participation-for-user-management'); -const buildCampaignParticipationResult = require('./build-campaign-participation-result'); -const buildCampaignParticipationInfo = require('./build-campaign-participation-info'); -const buildCampaignLearningContent = require('./build-campaign-learning-content'); -const buildCampaignManagement = require('./build-campaign-management'); -const buildCampaignReport = require('./build-campaign-report'); -const buildCampaignToJoin = require('./build-campaign-to-join'); -const buildCampaignToStartParticipation = require('./build-campaign-to-start-participation'); -const buildCertifiableBadgeAcquisition = require('./build-certifiable-badge-acquisition'); -const buildCertificationAssessment = require('./build-certification-assessment'); -const buildCertificationAssessmentScore = require('./build-certification-assessment-score'); -const buildCertificationCandidate = require('./build-certification-candidate'); -const buildCertificationCandidateForSupervising = require('./build-certification-candidate-for-supervising'); -const buildCertificationCandidateSubscription = require('./build-certification-candidate-subscription'); -const buildCertificationEligibility = require('./build-certification-eligibility'); -const buildCertificationIssueReport = require('./build-certification-issue-report'); -const buildCertificationOfficer = require('./build-certification-officer'); -const buildSCOCertificationCandidate = require('./build-sco-certification-candidate'); -const buildCertificationAttestation = require('./build-certification-attestation'); -const buildCertificationCenter = require('./build-certification-center'); -const buildCertificationCenterForAdmin = require('./build-certification-center-for-admin'); -const buildCertificationCenterInvitation = require('./build-certification-center-invitation'); -const buildCertificationCenterMembership = require('./build-certification-center-membership'); -const buildCertificationChallenge = require('./build-certification-challenge'); -const buildCertificationChallengeWithType = require('./build-certification-challenge-with-type'); -const buildCertificationCourse = require('./build-certification-course'); -const buildCertificationCpfCity = require('./build-certification-cpf-city'); -const buildCertificationCpfCountry = require('./build-certification-cpf-country'); -const buildCertificationDetails = require('./build-certification-details'); -const buildCertificationPointOfContact = require('./build-certification-point-of-contact'); -const buildCertifiableProfileForLearningContent = require('./build-certifiable-profile-for-learning-content'); -const buildCertificationReport = require('./build-certification-report'); -const buildCertificationResult = require('./build-certification-result'); -const buildCertificationRescoringCompletedEvent = require('./build-certification-rescoring-completed-event'); -const buildCertificationScoringCompletedEvent = require('./build-certification-scoring-completed-event'); -const buildCertifiedArea = require('./build-certified-area'); -const buildCertifiedCompetence = require('./build-certified-competence'); -const buildCertifiedProfile = require('./build-certified-profile'); -const buildCertifiedSkill = require('./build-certified-skill'); -const buildCertifiedTube = require('./build-certified-tube'); -const buildChallenge = require('./build-challenge'); -const buildChallengeLearningContentDataObject = require('./build-challenge-learning-content-data-object'); -const buildCleaCertifiedCandidate = require('./build-clea-certified-candidate'); -const buildCompetence = require('./build-competence'); -const buildCompetenceEvaluation = require('./build-competence-evaluation'); -const buildCompetenceMark = require('./build-competence-mark'); -const buildCompetenceResult = require('./build-competence-result'); -const buildCompetenceTree = require('./build-competence-tree'); -const buildComplementaryCertification = require('./build-complementary-certification'); -const buildComplementaryCertificationForSupervising = require('./build-complementary-certification-for-supervising'); -const buildComplementaryCertificationHabilitation = require('./build-complementary-certification-habilitation'); -const buildComplementaryCertificationScoringCriteria = require('./build-complementary-certification-scoring-criteria'); -const buildCountry = require('./build-country'); -const buildCourse = require('./build-course'); -const buildCpfCertificationResult = require('./build-cpf-certification-result'); -const buildDataProtectionOfficer = require('./build-data-protection-officer'); -const buildFinalizedSession = require('./build-finalized-session'); -const buildFramework = require('./build-framework'); -const buildHint = require('./build-hint'); -const buildSupOrganizationLearner = require('./build-sup-organization-learner'); -const buildJuryCertification = require('./build-jury-certification'); -const buildJuryCertificationSummary = require('./build-jury-certification-summary'); -const buildJurySession = require('./build-jury-session'); -const buildKnowledgeElement = require('./build-knowledge-element'); -const buildLearningContent = require('./build-learning-content'); -const buildMembership = require('./build-membership'); -const buildOrganization = require('./build-organization'); -const buildOrganizationPlacesLot = require('./build-organization-places-lot'); -const buildOrganizationPlacesLotManagement = require('./build-organization-places-lot-management'); -const buildOrganizationForAdmin = require('./build-organization-for-admin'); -const buildOrganizationInvitation = require('./build-organization-invitation'); -const buildOrganizationLearner = require('./build-organization-learner'); -const buildOrganizationLearnerForAdmin = require('./build-organization-learner-for-admin'); -const buildOrganizationLearnerParticipation = require('./build-organization-learner-participation'); -const buildOrganizationTag = require('./build-organization-tag'); -const buildParticipationForCampaignManagement = require('./build-participation-for-campaign-management'); -const buildComplementaryCertificationCourseResult = require('./build-complementary-certification-course-result'); -const buildComplementaryCertificationCourseResultForJuryCertification = require('./build-complementary-certification-course-result-for-certification'); -const buildComplementaryCertificationCourseResultForJuryCertificationWithExternal = require('./build-complementary-certification-course-result-for-certification-with-external'); -const buildComplementaryCertificationScoringWithoutComplementaryReferential = require('./build-complementary-certification-scoring-without-complementary-referential'); -const buildComplementaryCertificationScoringWithComplementaryReferential = require('./build-pix-plus-certification-scoring'); -const buildPlacementProfile = require('./build-placement-profile'); -const buildPoleEmploiSending = require('./build-pole-emploi-sending'); -const buildPrescriber = require('./build-prescriber'); -const buildPrivateCertificate = require('./build-private-certificate'); -const buildPrivateCertificateWithCompetenceTree = require('./build-private-certificate-with-competence-tree'); -const buildProgression = require('./build-progression'); -const buildReproducibilityRate = require('./build-reproducibility-rate'); -const buildResultCompetenceTree = require('./build-result-competence-tree'); -const buildSession = require('./build-session'); -const buildSessionForSupervising = require('./build-session-for-supervising'); -const buildSessionForSupervisorKit = require('./build-session-for-supervisor-kit'); -const buildSessionJuryComment = require('./build-session-jury-comment'); -const buildSessionSummary = require('./build-session-summary'); -const buildShareableCertificate = require('./build-shareable-certificate'); -const buildSkill = require('./build-skill'); -const buildSkillLearningContentDataObject = require('./build-skill-learning-content-data-object'); -const buildSkillCollection = require('./build-skill-collection'); -const buildSolution = require('./build-solution'); -const buildStage = require('./build-stage'); -const buildStageCollectionForTargetProfileManagement = require('./target-profile-management/build-stage-collection'); -const buildStageCollectionForUserCampaignResults = require('./user-campaign-results/build-stage-collection'); -const buildTag = require('./build-tag'); -const buildTargetProfile = require('./build-target-profile'); -const buildTargetProfileForAdmin = require('./build-target-profile-for-admin'); -const buildTargetProfileForCreation = require('./build-target-profile-for-creation'); -const buildOrganizationsToAttachToTargetProfile = require('./build-organizations-to-attach-to-target-profile'); -const buildTargetProfileSummaryForAdmin = require('./build-target-profile-summary-for-admin'); -const buildThematic = require('./build-thematic'); -const buildTraining = require('./build-training'); -const buildTrainingForAdmin = require('./build-training-for-admin'); -const buildTrainingSummary = require('./build-training-summary'); -const buildTrainingTrigger = require('./build-training-trigger'); -const buildTrainingTriggerForAdmin = require('./build-training-trigger-for-admin'); -const buildTrainingTriggerTube = require('./build-training-trigger-tube'); -const buildTube = require('./build-tube'); -const buildTutorial = require('./build-tutorial'); -const buildTutorialForUser = require('./build-tutorial-for-user'); -const buildUser = require('./build-user'); -const buildUserCompetence = require('./build-user-competence'); -const buildUserDetailsForAdmin = require('./build-user-details-for-admin'); -const buildUserOrgaSettings = require('./build-user-orga-settings'); -const buildUserScorecard = require('./build-user-scorecard'); -const buildUserSavedTutorial = require('./build-user-saved-tutorial'); -const buildUserSavedTutorialWithTutorial = require('./build-user-saved-tutorial-with-tutorial'); -const buildValidation = require('./build-validation'); -const buildValidator = require('./build-validator'); +import { buildAccountRecoveryDemand } from './build-account-recovery-demand.js'; +import { buildAdminMember } from './build-admin-member.js'; +import { buildAllowedCertificationCenterAccess } from './build-allowed-certification-center-access.js'; +import { buildAnswer } from './build-answer.js'; +import { buildArea } from './build-area.js'; +import { buildAssessment } from './build-assessment.js'; +import { buildAssessmentResult } from './build-assessment-result.js'; +import { buildAuthenticationMethod } from './build-authentication-method.js'; +import { buildBadge } from './build-badge.js'; +import { buildBadgeAcquisition } from './build-badge-acquisition.js'; +import { buildBadgeCriterion } from './build-badge-criterion.js'; +import { buildBadgeDetails } from './build-badge-details.js'; +import { buildBadgeForCalculation } from './build-badge-for-calculation.js'; +import { buildBadgeCriterionForCalculation } from './build-badge-criterion-for-calculation.js'; +import { buildSkillSet } from './build-skill-set.js'; +import { buildCampaign } from './build-campaign.js'; +import { buildCampaignCollectiveResult } from './build-campaign-collective-result.js'; +import { buildCampaignParticipation } from './build-campaign-participation.js'; +import { buildCampaignParticipationBadge } from './build-campaign-participation-badge.js'; +import { buildCampaignParticipationForUserManagement } from './build-campaign-participation-for-user-management.js'; +import { buildCampaignParticipationResult } from './build-campaign-participation-result.js'; +import { buildCampaignParticipationInfo } from './build-campaign-participation-info.js'; +import { buildCampaignLearningContent } from './build-campaign-learning-content.js'; +import { buildCampaignManagement } from './build-campaign-management.js'; +import { buildCampaignReport } from './build-campaign-report.js'; +import { buildCampaignToJoin } from './build-campaign-to-join.js'; +import { buildCampaignToStartParticipation } from './build-campaign-to-start-participation.js'; +import { buildCertifiableBadgeAcquisition } from './build-certifiable-badge-acquisition.js'; +import { buildCertificationAssessment } from './build-certification-assessment.js'; +import { buildCertificationAssessmentScore } from './build-certification-assessment-score.js'; +import { buildCertificationCandidate } from './build-certification-candidate.js'; +import { buildCertificationCandidateForSupervising } from './build-certification-candidate-for-supervising.js'; +import { buildCertificationCandidateSubscription } from './build-certification-candidate-subscription.js'; +import { buildCertificationEligibility } from './build-certification-eligibility.js'; +import { buildCertificationIssueReport } from './build-certification-issue-report.js'; +import { buildCertificationOfficer } from './build-certification-officer.js'; +import { buildSCOCertificationCandidate } from './build-sco-certification-candidate.js'; +import { buildCertificationAttestation } from './build-certification-attestation.js'; +import { buildCertificationCenter } from './build-certification-center.js'; +import { buildCertificationCenterForAdmin } from './build-certification-center-for-admin.js'; +import { buildCertificationCenterInvitation } from './build-certification-center-invitation.js'; +import { buildCertificationCenterMembership } from './build-certification-center-membership.js'; +import { buildCertificationChallenge } from './build-certification-challenge.js'; +import { buildCertificationChallengeWithType } from './build-certification-challenge-with-type.js'; +import { buildCertificationCourse } from './build-certification-course.js'; +import { buildCertificationCpfCity } from './build-certification-cpf-city.js'; +import { buildCertificationCpfCountry } from './build-certification-cpf-country.js'; +import { buildCertificationDetails } from './build-certification-details.js'; +import { buildCertificationPointOfContact } from './build-certification-point-of-contact.js'; +import { buildCertifiableProfileForLearningContent } from './build-certifiable-profile-for-learning-content.js'; +import { buildCertificationReport } from './build-certification-report.js'; +import { buildCertificationResult } from './build-certification-result.js'; +import { buildCertificationRescoringCompletedEvent } from './build-certification-rescoring-completed-event.js'; +import { buildCertificationScoringCompletedEvent } from './build-certification-scoring-completed-event.js'; +import { buildCertifiedArea } from './build-certified-area.js'; +import { buildCertifiedCompetence } from './build-certified-competence.js'; +import { buildCertifiedProfile } from './build-certified-profile.js'; +import { buildCertifiedSkill } from './build-certified-skill.js'; +import { buildCertifiedTube } from './build-certified-tube.js'; +import { buildChallenge } from './build-challenge.js'; +import { buildChallengeLearningContentDataObject } from './build-challenge-learning-content-data-object.js'; +import { buildCleaCertifiedCandidate } from './build-clea-certified-candidate.js'; +import { buildCompetence } from './build-competence.js'; +import { buildCompetenceEvaluation } from './build-competence-evaluation.js'; +import { buildCompetenceMark } from './build-competence-mark.js'; +import { buildCompetenceResult } from './build-competence-result.js'; +import { buildCompetenceTree } from './build-competence-tree.js'; +import { buildComplementaryCertification } from './build-complementary-certification.js'; +import { buildComplementaryCertificationForSupervising } from './build-complementary-certification-for-supervising.js'; +import { buildComplementaryCertificationHabilitation } from './build-complementary-certification-habilitation.js'; +import { buildComplementaryCertificationScoringCriteria } from './build-complementary-certification-scoring-criteria.js'; +import { buildCountry } from './build-country.js'; +import { buildCourse } from './build-course.js'; +import { buildCpfCertificationResult } from './build-cpf-certification-result.js'; +import * as buildDataProtectionOfficer from './build-data-protection-officer.js'; +import { buildFinalizedSession } from './build-finalized-session.js'; +import { buildFramework } from './build-framework.js'; +import { buildHint } from './build-hint.js'; +import { buildSupOrganizationLearner } from './build-sup-organization-learner.js'; +import { buildJuryCertification } from './build-jury-certification.js'; +import { buildJuryCertificationSummary } from './build-jury-certification-summary.js'; +import { buildJurySession } from './build-jury-session.js'; +import { buildKnowledgeElement } from './build-knowledge-element.js'; +import { buildLearningContent } from './build-learning-content.js'; +import { buildMembership } from './build-membership.js'; +import { buildOrganization } from './build-organization.js'; +import { buildOrganizationPlacesLot } from './build-organization-places-lot.js'; +import { buildOrganizationPlacesLotManagement } from './build-organization-places-lot-management.js'; +import { buildOrganizationForAdmin } from './build-organization-for-admin.js'; +import { buildOrganizationInvitation } from './build-organization-invitation.js'; +import { buildOrganizationLearner } from './build-organization-learner.js'; +import { buildOrganizationLearnerForAdmin } from './build-organization-learner-for-admin.js'; +import { buildOrganizationLearnerParticipation } from './build-organization-learner-participation.js'; +import { buildOrganizationTag } from './build-organization-tag.js'; +import { buildParticipationForCampaignManagement } from './build-participation-for-campaign-management.js'; +import { buildComplementaryCertificationCourseResult } from './build-complementary-certification-course-result.js'; +import { buildComplementaryCertificationCourseResultForJuryCertification } from './build-complementary-certification-course-result-for-certification.js'; +import { buildPixEduComplementaryCertificationCourseResultsForJuryCertificationWithExternal as buildComplementaryCertificationCourseResultForJuryCertificationWithExternal } from './build-complementary-certification-course-result-for-certification-with-external.js'; +import { buildComplementaryCertificationScoringWithoutComplementaryReferential } from './build-complementary-certification-scoring-without-complementary-referential.js'; +import { buildComplementaryCertificationScoringWithComplementaryReferential } from './build-pix-plus-certification-scoring.js'; +import { buildPlacementProfile } from './build-placement-profile.js'; +import { buildPoleEmploiSending } from './build-pole-emploi-sending.js'; +import { buildPrescriber } from './build-prescriber.js'; +import { buildPrivateCertificate } from './build-private-certificate.js'; +import { buildPrivateCertificate as buildPrivateCertificateWithCompetenceTree } from './build-private-certificate-with-competence-tree.js'; +import { buildProgression } from './build-progression.js'; +import { buildReproducibilityRate } from './build-reproducibility-rate.js'; +import { buildResultCompetenceTree } from './build-result-competence-tree.js'; +import { buildSession } from './build-session.js'; +import { buildSessionForSupervising } from './build-session-for-supervising.js'; +import { buildSessionForSupervisorKit } from './build-session-for-supervisor-kit.js'; +import { buildSessionJuryComment } from './build-session-jury-comment.js'; +import { buildSessionSummary } from './build-session-summary.js'; +import { buildShareableCertificate } from './build-shareable-certificate.js'; +import { buildSkill } from './build-skill.js'; +import { buildSkillLearningContentDataObject } from './build-skill-learning-content-data-object.js'; +import { BuildSkillCollection as buildSkillCollection } from './build-skill-collection.js'; +import { buildSolution } from './build-solution.js'; +import { buildStage } from './build-stage.js'; +import { buildStageCollection as buildStageCollectionForTargetProfileManagement } from './target-profile-management/build-stage-collection.js'; +import { buildStageCollection as buildStageCollectionForUserCampaignResults } from './user-campaign-results/build-stage-collection.js'; +import { buildTag } from './build-tag.js'; +import { buildTargetProfile } from './build-target-profile.js'; +import { buildTargetProfileForAdmin } from './build-target-profile-for-admin.js'; +import { buildTargetProfileForCreation } from './build-target-profile-for-creation.js'; +import { buildOrganizationsToAttachToTargetProfile } from './build-organizations-to-attach-to-target-profile.js'; +import { buildTargetProfileSummaryForAdmin } from './build-target-profile-summary-for-admin.js'; +import { buildThematic } from './build-thematic.js'; +import { buildTraining } from './build-training.js'; +import { buildTrainingForAdmin } from './build-training-for-admin.js'; +import { buildTrainingSummary } from './build-training-summary.js'; +import { buildTrainingTrigger } from './build-training-trigger.js'; +import { buildTrainingTriggerForAdmin } from './build-training-trigger-for-admin.js'; +import { buildTrainingTriggerTube } from './build-training-trigger-tube.js'; +import { buildTube } from './build-tube.js'; +import { buildTutorial } from './build-tutorial.js'; +import { buildTutorialForUser } from './build-tutorial-for-user.js'; +import { buildUser } from './build-user.js'; +import { buildUserCompetence } from './build-user-competence.js'; +import { buildUserDetailsForAdmin } from './build-user-details-for-admin.js'; +import { buildUserOrgaSettings } from './build-user-orga-settings.js'; +import { buildUserScorecard } from './build-user-scorecard.js'; +import { buildUserSavedTutorial } from './build-user-saved-tutorial.js'; +import { buildUserSavedTutorialWithTutorial } from './build-user-saved-tutorial-with-tutorial.js'; +import { buildValidation } from './build-validation.js'; +import { buildValidator } from './build-validator.js'; -module.exports = { +export { buildAccountRecoveryDemand, buildAdminMember, buildAllowedCertificationCenterAccess, diff --git a/api/tests/tooling/domain-builder/factory/target-profile-management/build-stage-collection.js b/api/tests/tooling/domain-builder/factory/target-profile-management/build-stage-collection.js index 91da2382b84..1d948a77320 100644 --- a/api/tests/tooling/domain-builder/factory/target-profile-management/build-stage-collection.js +++ b/api/tests/tooling/domain-builder/factory/target-profile-management/build-stage-collection.js @@ -1,7 +1,7 @@ -const StageCollection = require('../../../../../lib/domain/models/target-profile-management/StageCollection'); +import { StageCollection } from '../../../../../lib/domain/models/target-profile-management/StageCollection.js'; const buildStageCollection = function ({ id, stages = [], maxLevel } = {}) { return new StageCollection({ id, stages, maxLevel }); }; -module.exports = buildStageCollection; +export { buildStageCollection }; diff --git a/api/tests/tooling/domain-builder/factory/user-campaign-results/build-stage-collection.js b/api/tests/tooling/domain-builder/factory/user-campaign-results/build-stage-collection.js index 3664ae12eea..6d668f94666 100644 --- a/api/tests/tooling/domain-builder/factory/user-campaign-results/build-stage-collection.js +++ b/api/tests/tooling/domain-builder/factory/user-campaign-results/build-stage-collection.js @@ -1,7 +1,7 @@ -const StageCollection = require('../../../../../lib/domain/models/user-campaign-results/StageCollection'); +import { StageCollection } from '../../../../../lib/domain/models/user-campaign-results/StageCollection.js'; const buildStageCollection = function ({ campaignId, stages } = {}) { return new StageCollection({ campaignId, stages }); }; -module.exports = buildStageCollection; +export { buildStageCollection }; diff --git a/api/tests/tooling/events/event-dispatcher-builder.js b/api/tests/tooling/events/event-dispatcher-builder.js index 053d1f51583..44f55d4e1df 100644 --- a/api/tests/tooling/events/event-dispatcher-builder.js +++ b/api/tests/tooling/events/event-dispatcher-builder.js @@ -1,5 +1,5 @@ -const { sinon } = require('../../test-helper'); -const { _forTestOnly } = require('../../../lib/domain/events/index.js'); +import { sinon } from '../../test-helper.js'; +import { _forTestOnly } from '../../../lib/domain/events/index.js'; function buildEventDispatcherAndHandlersForTest() { const handlerStubs = {}; @@ -13,4 +13,4 @@ function buildEventDispatcherAndHandlersForTest() { }; } -module.exports = buildEventDispatcherAndHandlersForTest; +export { buildEventDispatcherAndHandlersForTest }; diff --git a/api/tests/tooling/fixtures/infrastructure/challengeLearningContentDataObjectFixture.js b/api/tests/tooling/fixtures/infrastructure/challengeLearningContentDataObjectFixture.js index 7000e6b52b9..dfe91f69c17 100644 --- a/api/tests/tooling/fixtures/infrastructure/challengeLearningContentDataObjectFixture.js +++ b/api/tests/tooling/fixtures/infrastructure/challengeLearningContentDataObjectFixture.js @@ -1,4 +1,4 @@ -module.exports = function ChallengeLearningContentDataObjectFixture({ +const ChallengeLearningContentDataObjectFixture = function ({ id = 'recwWzTquPlvIl4So', instruction = "Les moteurs de recherche affichent certains liens en raison d'un accord commercial.\n\nDans quels encadrés se trouvent ces liens ?", proposals = '- 1\n- 2\n- 3\n- 4\n- 5', @@ -54,3 +54,5 @@ module.exports = function ChallengeLearningContentDataObjectFixture({ alternativeInstruction, }; }; + +export { ChallengeLearningContentDataObjectFixture }; diff --git a/api/tests/tooling/fixtures/infrastructure/skillLearningContentDataObjectFixture.js b/api/tests/tooling/fixtures/infrastructure/skillLearningContentDataObjectFixture.js index 181c3a7775d..e7d78d54acd 100644 --- a/api/tests/tooling/fixtures/infrastructure/skillLearningContentDataObjectFixture.js +++ b/api/tests/tooling/fixtures/infrastructure/skillLearningContentDataObjectFixture.js @@ -12,7 +12,7 @@ const DEFAULT_ID = 'recSK0X22abcdefgh', DEFAULT_PIX_VALUE = 2.4, DEFAULT_TUBE_ID = 'recTU0X22abcdefgh'; -module.exports = function SkillLearningContentDataObjectFixture({ +const SkillLearningContentDataObjectFixture = function ({ id = DEFAULT_ID, name = DEFAULT_NAME, hintEnUs = DEFAULT_HINT_EN_US, @@ -41,3 +41,5 @@ module.exports = function SkillLearningContentDataObjectFixture({ tubeId, }; }; + +export { SkillLearningContentDataObjectFixture }; diff --git a/api/tests/tooling/fixtures/infrastructure/tutorialLearningContentDataObjectFixture.js b/api/tests/tooling/fixtures/infrastructure/tutorialLearningContentDataObjectFixture.js index 53c294a0552..7adc1485da3 100644 --- a/api/tests/tooling/fixtures/infrastructure/tutorialLearningContentDataObjectFixture.js +++ b/api/tests/tooling/fixtures/infrastructure/tutorialLearningContentDataObjectFixture.js @@ -1,4 +1,4 @@ -module.exports = function tutorialLearningContentDataObjectFixture({ +const tutorialLearningContentDataObjectFixture = function ({ id = 'receomyzL0AmpMFGw', duration = '00:01:30', format = 'video', @@ -17,3 +17,5 @@ module.exports = function tutorialLearningContentDataObjectFixture({ locale, }; }; + +export { tutorialLearningContentDataObjectFixture }; diff --git a/api/tests/tooling/i18n/i18n.js b/api/tests/tooling/i18n/i18n.js index 84cc4cb4de4..e1025b4680a 100644 --- a/api/tests/tooling/i18n/i18n.js +++ b/api/tests/tooling/i18n/i18n.js @@ -1,5 +1,7 @@ -const path = require('path'); -const i18n = require('i18n'); +import path from 'path'; +import i18n from 'i18n'; +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); function getI18n() { const directory = path.resolve(path.join(__dirname, '../../../translations')); @@ -13,4 +15,4 @@ function getI18n() { return i18n; } -module.exports = { getI18n }; +export { getI18n }; diff --git a/api/tests/tooling/i18n/i18n_test.js b/api/tests/tooling/i18n/i18n_test.js index 693f7ab07e7..0129ba3516d 100644 --- a/api/tests/tooling/i18n/i18n_test.js +++ b/api/tests/tooling/i18n/i18n_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../test-helper'); -const { getI18n } = require('./i18n'); +import { expect } from '../../test-helper.js'; +import { getI18n } from './i18n.js'; describe('Unit | Tooling | i18n', function () { it('should translate by default to fr', function () { diff --git a/api/tests/tooling/learning-content-builder/build-learning-content.js b/api/tests/tooling/learning-content-builder/build-learning-content.js index 6f82d43cbd6..0a1dc8f5ab7 100644 --- a/api/tests/tooling/learning-content-builder/build-learning-content.js +++ b/api/tests/tooling/learning-content-builder/build-learning-content.js @@ -1,5 +1,7 @@ -const _ = require('lodash'); -const { FRENCH_FRANCE, FRENCH_SPOKEN, ENGLISH_SPOKEN } = require('../../../lib/domain/constants').LOCALE; +import _ from 'lodash'; +import { LOCALE } from '../../../lib/domain/constants.js'; + +const { FRENCH_FRANCE, FRENCH_SPOKEN, ENGLISH_SPOKEN } = LOCALE; const buildLearningContent = function (learningContent) { const allAreas = []; @@ -183,4 +185,4 @@ buildLearningContent.fromAreas = function (learningContent) { return buildLearningContent(frameworks); }; -module.exports = buildLearningContent; +export { buildLearningContent }; diff --git a/api/tests/tooling/learning-content-builder/build-learning-content_test.js b/api/tests/tooling/learning-content-builder/build-learning-content_test.js index ab4a6f716f1..d0da7ac14ac 100644 --- a/api/tests/tooling/learning-content-builder/build-learning-content_test.js +++ b/api/tests/tooling/learning-content-builder/build-learning-content_test.js @@ -1,18 +1,12 @@ -const { expect, learningContentBuilder, mockLearningContent } = require('../../test-helper'); -const { areaDatasource } = require('../../../lib/infrastructure/datasources/learning-content/area-datasource'); -const { - competenceDatasource, -} = require('../../../lib/infrastructure/datasources/learning-content/competence-datasource'); -const { thematicDatasource } = require('../../../lib/infrastructure/datasources/learning-content/thematic-datasource'); -const { tubeDatasource } = require('../../../lib/infrastructure/datasources/learning-content/tube-datasource'); -const { skillDatasource } = require('../../../lib/infrastructure/datasources/learning-content/skill-datasource'); -const { - challengeDatasource, -} = require('../../../lib/infrastructure/datasources/learning-content/challenge-datasource'); -const { courseDatasource } = require('../../../lib/infrastructure/datasources/learning-content/course-datasource'); -const { - frameworkDatasource, -} = require('../../../lib/infrastructure/datasources/learning-content/framework-datasource'); +import { expect, learningContentBuilder, mockLearningContent } from '../../test-helper.js'; +import { areaDatasource } from '../../../lib/infrastructure/datasources/learning-content/area-datasource.js'; +import { competenceDatasource } from '../../../lib/infrastructure/datasources/learning-content/competence-datasource.js'; +import { thematicDatasource } from '../../../lib/infrastructure/datasources/learning-content/thematic-datasource.js'; +import { tubeDatasource } from '../../../lib/infrastructure/datasources/learning-content/tube-datasource.js'; +import { skillDatasource } from '../../../lib/infrastructure/datasources/learning-content/skill-datasource.js'; +import { challengeDatasource } from '../../../lib/infrastructure/datasources/learning-content/challenge-datasource.js'; +import { courseDatasource } from '../../../lib/infrastructure/datasources/learning-content/course-datasource.js'; +import { frameworkDatasource } from '../../../lib/infrastructure/datasources/learning-content/framework-datasource.js'; describe('Integration | buildLearningContent', function () { it('builds areas and frameworks', async function () { @@ -50,7 +44,7 @@ describe('Integration | buildLearningContent', function () { ]; // when - const learningContentObjects = learningContentBuilder.buildLearningContent(learningContent); + const learningContentObjects = learningContentBuilder(learningContent); mockLearningContent(learningContentObjects); // then @@ -117,7 +111,7 @@ describe('Integration | buildLearningContent', function () { ]; // when - const learningContentObjects = learningContentBuilder.buildLearningContent(learningContent); + const learningContentObjects = learningContentBuilder(learningContent); mockLearningContent(learningContentObjects); // then @@ -215,7 +209,7 @@ describe('Integration | buildLearningContent', function () { ]; // when - const learningContentObjects = learningContentBuilder.buildLearningContent(learningContent); + const learningContentObjects = learningContentBuilder(learningContent); mockLearningContent(learningContentObjects); // then @@ -276,7 +270,7 @@ describe('Integration | buildLearningContent', function () { ]; // when - const learningContentObjects = learningContentBuilder.buildLearningContent(learningContent); + const learningContentObjects = learningContentBuilder(learningContent); mockLearningContent(learningContentObjects); // then @@ -336,7 +330,7 @@ describe('Integration | buildLearningContent', function () { ]; // when - const learningContentObjects = learningContentBuilder.buildLearningContent(learningContent); + const learningContentObjects = learningContentBuilder(learningContent); mockLearningContent(learningContentObjects); // then @@ -401,7 +395,7 @@ describe('Integration | buildLearningContent', function () { ]; // when - const learningContentObjects = learningContentBuilder.buildLearningContent(learningContent); + const learningContentObjects = learningContentBuilder(learningContent); mockLearningContent(learningContentObjects); // then @@ -442,7 +436,7 @@ describe('Integration | buildLearningContent', function () { ]; // when - const learningContentObjects = learningContentBuilder.buildLearningContent(learningContent); + const learningContentObjects = learningContentBuilder(learningContent); mockLearningContent(learningContentObjects); // then diff --git a/api/tests/tooling/learning-content-builder/index.js b/api/tests/tooling/learning-content-builder/index.js index 958ba26886a..59d01d0cc8e 100644 --- a/api/tests/tooling/learning-content-builder/index.js +++ b/api/tests/tooling/learning-content-builder/index.js @@ -1,3 +1,3 @@ -module.exports = { - buildLearningContent: require('./build-learning-content'), -}; +import { buildLearningContent } from './build-learning-content.js'; + +export { buildLearningContent }; diff --git a/api/tests/tooling/server/http-test-server.js b/api/tests/tooling/server/http-test-server.js index 0d2b14d0f55..a4c6bbd7ede 100644 --- a/api/tests/tooling/server/http-test-server.js +++ b/api/tests/tooling/server/http-test-server.js @@ -1,8 +1,8 @@ -const Hapi = require('@hapi/hapi'); +import Hapi from '@hapi/hapi'; -const preResponseUtils = require('../../../lib/application/pre-response-utils'); -const { handleFailAction } = require('../../../lib/validate'); -const authentication = require('../../../lib/infrastructure/authentication'); +import * as preResponseUtils from '../../../lib/application/pre-response-utils.js'; +import { handleFailAction } from '../../../lib/validate.js'; +import { authentication } from '../../../lib/infrastructure/authentication.js'; const routesConfig = { routes: { @@ -62,4 +62,4 @@ class HttpTestServer { } } -module.exports = HttpTestServer; +export { HttpTestServer }; diff --git a/api/tests/tooling/temporary-file.js b/api/tests/tooling/temporary-file.js index fd4e0848980..078d4076d07 100644 --- a/api/tests/tooling/temporary-file.js +++ b/api/tests/tooling/temporary-file.js @@ -1,6 +1,6 @@ -const fs = require('fs/promises'); -const path = require('node:path'); -const os = require('os'); +import fs from 'fs/promises'; +import path from 'node:path'; +import os from 'os'; async function removeTempFile(filePath) { return ( @@ -19,7 +19,4 @@ async function createTempFile(file, data) { return filePath; } -module.exports = { - removeTempFile, - createTempFile, -}; +export { removeTempFile, createTempFile }; diff --git a/api/tests/unit/application/account-recovery/account-recovery-controller_test.js b/api/tests/unit/application/account-recovery/account-recovery-controller_test.js index 80d8c35094a..ae9c09ecd03 100644 --- a/api/tests/unit/application/account-recovery/account-recovery-controller_test.js +++ b/api/tests/unit/application/account-recovery/account-recovery-controller_test.js @@ -1,9 +1,7 @@ -const { expect, sinon, hFake, domainBuilder } = require('../../../test-helper'); - -const accountRecoveryController = require('../../../../lib/application/account-recovery/account-recovery-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const studentInformationForAccountRecoverySerializer = require('../../../../lib/infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +import { expect, sinon, hFake, domainBuilder } from '../../../test-helper.js'; +import { accountRecoveryController } from '../../../../lib/application/account-recovery/account-recovery-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; describe('Unit | Controller | account-recovery-controller', function () { describe('#sendEmailForAccountRecovery', function () { @@ -32,14 +30,22 @@ describe('Unit | Controller | account-recovery-controller', function () { }, }; - sinon - .stub(studentInformationForAccountRecoverySerializer, 'deserialize') + sinon.stub(usecases, 'sendEmailForAccountRecovery').resolves(); + + const studentInformationForAccountRecoverySerializerStub = { + deserialize: sinon.stub(), + }; + + studentInformationForAccountRecoverySerializerStub.deserialize .withArgs(request.payload) .resolves(studentInformation); - sinon.stub(usecases, 'sendEmailForAccountRecovery').resolves(); + + const dependencies = { + studentInformationForAccountRecoverySerializer: studentInformationForAccountRecoverySerializerStub, + }; // when - const response = await accountRecoveryController.sendEmailForAccountRecovery(request, hFake); + const response = await accountRecoveryController.sendEmailForAccountRecovery(request, hFake, dependencies); // then expect(usecases.sendEmailForAccountRecovery).calledWith({ studentInformation }); diff --git a/api/tests/unit/application/admin-members/admin-member-controller_test.js b/api/tests/unit/application/admin-members/admin-member-controller_test.js index b5d636e0a24..77ee3300d4d 100644 --- a/api/tests/unit/application/admin-members/admin-member-controller_test.js +++ b/api/tests/unit/application/admin-members/admin-member-controller_test.js @@ -1,9 +1,9 @@ -const { expect, sinon, domainBuilder, hFake } = require('../../../test-helper'); +import { expect, sinon, domainBuilder, hFake } from '../../../test-helper.js'; +import { adminMemberController } from '../../../../lib/application/admin-members/admin-member-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { PIX_ADMIN } from '../../../../lib/domain/constants.js'; -const adminMemberController = require('../../../../lib/application/admin-members/admin-member-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const adminMemberSerializer = require('../../../../lib/infrastructure/serializers/jsonapi/admin-member-serializer'); -const { ROLES } = require('../../../../lib/domain/constants').PIX_ADMIN; +const { ROLES } = PIX_ADMIN; describe('Unit | Controller | admin-member-controller', function () { describe('#findAll', function () { @@ -13,10 +13,16 @@ describe('Unit | Controller | admin-member-controller', function () { const otherMember = domainBuilder.buildAdminMember(); sinon.stub(usecases, 'getAdminMembers').resolves([member, otherMember]); const serializedMembers = Symbol('serializedMembers'); - sinon.stub(adminMemberSerializer, 'serialize').withArgs([member, otherMember]).returns(serializedMembers); + const serializeStub = sinon.stub(); + serializeStub.withArgs([member, otherMember]).returns(serializedMembers); + const request = {}; + const h = {}; + + const adminMemberSerializer = { serialize: serializeStub }; + const dependencies = { adminMemberSerializer }; // when - const result = await adminMemberController.findAll(); + const result = await adminMemberController.findAll(request, h, dependencies); // then expect(usecases.getAdminMembers).to.have.been.calledOnce; @@ -28,13 +34,16 @@ describe('Unit | Controller | admin-member-controller', function () { it('should get the current admin member', async function () { // given const request = { auth: { credentials: { userId: 1 } } }; + const h = {}; const adminMemberDetails = Symbol('adminMemberDetails'); sinon.stub(usecases, 'getAdminMemberDetails').withArgs({ userId: 1 }).resolves(adminMemberDetails); const serializedUpdatedMember = Symbol('serializedUpdatedMember'); - sinon.stub(adminMemberSerializer, 'serialize').withArgs(adminMemberDetails).returns(serializedUpdatedMember); + const adminMemberSerializerStub = { serialize: sinon.stub() }; + adminMemberSerializerStub.serialize.withArgs(adminMemberDetails).returns(serializedUpdatedMember); + const dependencies = { adminMemberSerializer: adminMemberSerializerStub }; // when - const response = await adminMemberController.getCurrentAdminMember(request); + const response = await adminMemberController.getCurrentAdminMember(request, h, dependencies); // then expect(response).to.be.equal(serializedUpdatedMember); @@ -51,14 +60,22 @@ describe('Unit | Controller | admin-member-controller', function () { sinon.stub(usecases, 'updateAdminMember').withArgs({ id, role }).resolves(updatedMember); const serializedUpdatedMember = Symbol('serializedUpdatedMember'); - sinon.stub(adminMemberSerializer, 'deserialize').returns({ role }); - sinon.stub(adminMemberSerializer, 'serialize').withArgs(updatedMember).returns(serializedUpdatedMember); + const adminMemberSerializerStub = { deserialize: sinon.stub(), serialize: sinon.stub() }; + adminMemberSerializerStub.deserialize.returns({ role }); + adminMemberSerializerStub.serialize.withArgs(updatedMember).returns(serializedUpdatedMember); + + const dependencies = { adminMemberSerializer: adminMemberSerializerStub }; + const h = {}; // when - const result = await adminMemberController.updateAdminMember({ - params: { id }, - payload: { data: { attributes: { role: ROLES.SUPPORT } } }, - }); + const result = await adminMemberController.updateAdminMember( + { + params: { id }, + payload: { data: { attributes: { role: ROLES.SUPPORT } } }, + }, + h, + dependencies + ); // then expect(result).to.equal(serializedUpdatedMember); @@ -74,14 +91,17 @@ describe('Unit | Controller | admin-member-controller', function () { sinon.stub(usecases, 'deactivateAdminMember').withArgs({ id }).resolves(deactivatedMember); const serializedDeactivatedMember = Symbol('serializedDeactivatedMember'); - sinon.stub(adminMemberSerializer, 'serialize').withArgs(deactivatedMember).returns(serializedDeactivatedMember); + const adminMemberSerializerStub = { serialize: sinon.stub() }; + adminMemberSerializerStub.serialize.withArgs(deactivatedMember).returns(serializedDeactivatedMember); + const dependencies = { adminMemberSerializer: adminMemberSerializerStub }; // when const { statusCode } = await adminMemberController.deactivateAdminMember( { params: { id }, }, - hFake + hFake, + dependencies ); // then @@ -97,13 +117,18 @@ describe('Unit | Controller | admin-member-controller', function () { sinon.stub(usecases, 'saveAdminMember').withArgs(attributes).resolves(savedAdminMember); const serializedAdminMember = Symbol('serialized admin member'); - sinon.stub(adminMemberSerializer, 'deserialize').returns(attributes); - sinon.stub(adminMemberSerializer, 'serialize').withArgs(savedAdminMember).returns(serializedAdminMember); + + const adminMemberSerializerStub = { deserialize: sinon.stub(), serialize: sinon.stub() }; + adminMemberSerializerStub.deserialize.returns(attributes); + adminMemberSerializerStub.serialize.withArgs(savedAdminMember).returns(serializedAdminMember); + + const dependencies = { adminMemberSerializer: adminMemberSerializerStub }; // when const { statusCode, source } = await adminMemberController.saveAdminMember( { payload: { data: { attributes } } }, - hFake + hFake, + dependencies ); // then diff --git a/api/tests/unit/application/admin-members/index_test.js b/api/tests/unit/application/admin-members/index_test.js index 216b14d1dd5..926c0d7edeb 100644 --- a/api/tests/unit/application/admin-members/index_test.js +++ b/api/tests/unit/application/admin-members/index_test.js @@ -1,8 +1,11 @@ -const { domainBuilder, expect, sinon, HttpTestServer } = require('../../../test-helper'); -const { ROLES } = require('../../../../lib/domain/constants').PIX_ADMIN; -const adminMemberController = require('../../../../lib/application/admin-members/admin-member-controller'); -const adminMembersRouter = require('../../../../lib/application/admin-members'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); +import { domainBuilder, expect, sinon, HttpTestServer } from '../../../test-helper.js'; +import { PIX_ADMIN } from '../../../../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; + +import { adminMemberController } from '../../../../lib/application/admin-members/admin-member-controller.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as adminMembersRouter from '../../../../lib/application/admin-members/index.js'; describe('Unit | Application | Router | admin-members-router', function () { describe('GET /api/admin/admin-members/me', function () { diff --git a/api/tests/unit/application/answers/answer-controller_test.js b/api/tests/unit/application/answers/answer-controller_test.js index a5ec0c6491c..784fd22821b 100644 --- a/api/tests/unit/application/answers/answer-controller_test.js +++ b/api/tests/unit/application/answers/answer-controller_test.js @@ -1,7 +1,6 @@ -const { expect, sinon, domainBuilder, hFake } = require('../../../test-helper'); - -const answerController = require('../../../../lib/application/answers/answer-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon, domainBuilder, hFake } from '../../../test-helper.js'; +import { answerController } from '../../../../lib/application/answers/answer-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | Controller | answer-controller', function () { let answerSerializerStub; diff --git a/api/tests/unit/application/answers/index_test.js b/api/tests/unit/application/answers/index_test.js index 7222fe81b9b..27479fca64c 100644 --- a/api/tests/unit/application/answers/index_test.js +++ b/api/tests/unit/application/answers/index_test.js @@ -1,7 +1,9 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const moduleUnderTest = require('../../../../lib/application/answers'); -const answerController = require('../../../../lib/application/answers/answer-controller'); -const { features } = require('../../../../lib/config'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import * as moduleUnderTest from '../../../../lib/application/answers/index.js'; +import { answerController } from '../../../../lib/application/answers/answer-controller.js'; +import { config } from '../../../../lib/config.js'; + +const { features } = config; describe('Unit | Application | Router | answer-router', function () { describe('POST /api/answers', function () { diff --git a/api/tests/unit/application/assessment-results/assessment-result-controller_test.js b/api/tests/unit/application/assessment-results/assessment-result-controller_test.js index b63764b83e3..7089a357ab2 100644 --- a/api/tests/unit/application/assessment-results/assessment-result-controller_test.js +++ b/api/tests/unit/application/assessment-results/assessment-result-controller_test.js @@ -1,9 +1,7 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); - -const assessmentResultController = require('../../../../lib/application/assessment-results/assessment-result-controller'); - -const AssessmentResult = require('../../../../lib/domain/models/AssessmentResult'); -const CompetenceMark = require('../../../../lib/domain/models/CompetenceMark'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { assessmentResultController } from '../../../../lib/application/assessment-results/assessment-result-controller.js'; +import { AssessmentResult } from '../../../../lib/domain/models/AssessmentResult.js'; +import { CompetenceMark } from '../../../../lib/domain/models/CompetenceMark.js'; describe('Unit | Controller | assessment-results', function () { describe('#save', function () { diff --git a/api/tests/unit/application/assessment-results/index_test.js b/api/tests/unit/application/assessment-results/index_test.js index d45942e57e2..f1d49656979 100644 --- a/api/tests/unit/application/assessment-results/index_test.js +++ b/api/tests/unit/application/assessment-results/index_test.js @@ -1,7 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const moduleUnderTest = require('../../../../lib/application/assessment-results'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as moduleUnderTest from '../../../../lib/application/assessment-results/index.js'; describe('Unit | Application | Assessmnet results | Route', function () { describe('POST /api/admin/assessment-results', function () { diff --git a/api/tests/unit/application/assessments/assessment-controller-get-next-challenge_test.js b/api/tests/unit/application/assessments/assessment-controller-get-next-challenge_test.js index b1e6bd02dc5..295cdb524ed 100644 --- a/api/tests/unit/application/assessments/assessment-controller-get-next-challenge_test.js +++ b/api/tests/unit/application/assessments/assessment-controller-get-next-challenge_test.js @@ -1,8 +1,10 @@ -const { sinon, expect, domainBuilder, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const assessmentController = require('../../../../lib/application/assessments/assessment-controller'); -const { AssessmentEndedError } = require('../../../../lib/domain/errors'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const { FRENCH_FRANCE, FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +import { sinon, expect, domainBuilder, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { assessmentController } from '../../../../lib/application/assessments/assessment-controller.js'; +import { AssessmentEndedError } from '../../../../lib/domain/errors.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { FRENCH_FRANCE, FRENCH_SPOKEN } = LOCALE; describe('Unit | Controller | assessment-controller-get-next-challenge', function () { describe('#getNextChallenge', function () { diff --git a/api/tests/unit/application/assessments/assessment-controller-save_test.js b/api/tests/unit/application/assessments/assessment-controller-save_test.js index 7edc88a54da..85e870d8de2 100644 --- a/api/tests/unit/application/assessments/assessment-controller-save_test.js +++ b/api/tests/unit/application/assessments/assessment-controller-save_test.js @@ -1,8 +1,6 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); - -const controller = require('../../../../lib/application/assessments/assessment-controller'); - -const Assessment = require('../../../../lib/domain/models/Assessment'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { assessmentController as controller } from '../../../../lib/application/assessments/assessment-controller.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; describe('Unit | Controller | assessment-controller-save', function () { describe('#save', function () { diff --git a/api/tests/unit/application/assessments/assessment-controller_test.js b/api/tests/unit/application/assessments/assessment-controller_test.js index 39d777c8e28..17d04aba0f5 100644 --- a/api/tests/unit/application/assessments/assessment-controller_test.js +++ b/api/tests/unit/application/assessments/assessment-controller_test.js @@ -1,9 +1,9 @@ -const { sinon, expect, hFake, domainBuilder } = require('../../../test-helper'); -const assessmentController = require('../../../../lib/application/assessments/assessment-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const events = require('../../../../lib/domain/events/index.js'); -const AssessmentCompleted = require('../../../../lib/domain/events/AssessmentCompleted'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +import { sinon, expect, hFake, domainBuilder } from '../../../test-helper.js'; +import { assessmentController } from '../../../../lib/application/assessments/assessment-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import * as events from '../../../../lib/domain/events/index.js'; +import { AssessmentCompleted } from '../../../../lib/domain/events/AssessmentCompleted.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; describe('Unit | Controller | assessment-controller', function () { describe('#get', function () { diff --git a/api/tests/unit/application/assessments/index_test.js b/api/tests/unit/application/assessments/index_test.js index b0bb96ad750..ee8922979de 100644 --- a/api/tests/unit/application/assessments/index_test.js +++ b/api/tests/unit/application/assessments/index_test.js @@ -1,9 +1,9 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const settings = require('../../../../lib/config'); -const assessmentAuthorization = require('../../../../lib/application/preHandlers/assessment-authorization'); -const moduleUnderTest = require('../../../../lib/application/assessments'); -const assessmentController = require('../../../../lib/application/assessments/assessment-controller'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { config as settings } from '../../../../lib/config.js'; +import { assessmentAuthorization } from '../../../../lib/application/preHandlers/assessment-authorization.js'; +import { assessmentController } from '../../../../lib/application/assessments/assessment-controller.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as moduleUnderTest from '../../../../lib/application/assessments/index.js'; describe('Unit | Application | Router | assessment-router', function () { describe('POST /api/assessments', function () { diff --git a/api/tests/unit/application/authentication/authentication-controller_test.js b/api/tests/unit/application/authentication/authentication-controller_test.js index 49655301b24..c6a3da64956 100644 --- a/api/tests/unit/application/authentication/authentication-controller_test.js +++ b/api/tests/unit/application/authentication/authentication-controller_test.js @@ -1,7 +1,6 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); - -const authenticationController = require('../../../../lib/application/authentication/authentication-controller'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { authenticationController } from '../../../../lib/application/authentication/authentication-controller.js'; describe('Unit | Application | Controller | Authentication', function () { describe('#createToken', function () { diff --git a/api/tests/unit/application/authentication/oidc/oidc-controller_test.js b/api/tests/unit/application/authentication/oidc/oidc-controller_test.js index 3b202d3bb21..05c519fa4c5 100644 --- a/api/tests/unit/application/authentication/oidc/oidc-controller_test.js +++ b/api/tests/unit/application/authentication/oidc/oidc-controller_test.js @@ -1,7 +1,7 @@ -const { sinon, expect, hFake, catchErr, domainBuilder } = require('../../../../test-helper'); -const oidcController = require('../../../../../lib/application/authentication/oidc/oidc-controller'); -const usecases = require('../../../../../lib/domain/usecases/index.js'); -const { UnauthorizedError } = require('../../../../../lib/application/http-errors'); +import { sinon, expect, hFake, catchErr, domainBuilder } from '../../../../test-helper.js'; +import { oidcController } from '../../../../../lib/application/authentication/oidc/oidc-controller.js'; +import { usecases } from '../../../../../lib/domain/usecases/index.js'; +import { UnauthorizedError } from '../../../../../lib/application/http-errors.js'; describe('Unit | Application | Controller | Authentication | OIDC', function () { const identityProvider = 'OIDC'; diff --git a/api/tests/unit/application/badges/index_test.js b/api/tests/unit/application/badges/index_test.js index a347c852d78..9aa2823e1e6 100644 --- a/api/tests/unit/application/badges/index_test.js +++ b/api/tests/unit/application/badges/index_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, HttpTestServer } = require('../../../test-helper'); -const badgesController = require('../../../../lib/application/badges/badges-controller'); -const badgesRouter = require('../../../../lib/application/badges'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); +import { expect, sinon, HttpTestServer } from '../../../test-helper.js'; +import { badgesController } from '../../../../lib/application/badges/badges-controller.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as badgesRouter from '../../../../lib/application/badges/index.js'; describe('Unit | Application | Badges | Routes', function () { describe('DELETE /api/admin/badges/{id}', function () { diff --git a/api/tests/unit/application/cache/cache-controller_test.js b/api/tests/unit/application/cache/cache-controller_test.js index c975b983fd4..128c816eb9c 100644 --- a/api/tests/unit/application/cache/cache-controller_test.js +++ b/api/tests/unit/application/cache/cache-controller_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, hFake } = require('../../../test-helper'); -const cacheController = require('../../../../lib/application/cache/cache-controller'); -const learningContentDatasources = require('../../../../lib/infrastructure/datasources/learning-content'); -const logger = require('../../../../lib/infrastructure/logger'); +import { expect, sinon, hFake } from '../../../test-helper.js'; +import { cacheController } from '../../../../lib/application/cache/cache-controller.js'; +import * as learningContentDatasources from '../../../../lib/infrastructure/datasources/learning-content/index.js'; +import { logger } from '../../../../lib/infrastructure/logger.js'; describe('Unit | Controller | cache-controller', function () { describe('#refreshCacheEntry', function () { diff --git a/api/tests/unit/application/cache/index_test.js b/api/tests/unit/application/cache/index_test.js index bb79f659298..83d3780cd19 100644 --- a/api/tests/unit/application/cache/index_test.js +++ b/api/tests/unit/application/cache/index_test.js @@ -1,8 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const moduleUnderTest = require('../../../../lib/application/cache'); -const cacheController = require('../../../../lib/application/cache/cache-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { cacheController } from '../../../../lib/application/cache/cache-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/cache/index.js'; describe('Unit | Router | cache-router', function () { describe('PATCH /api/cache/{model}/{id}', function () { diff --git a/api/tests/unit/application/campaign-participations/campaign-participation-controller_test.js b/api/tests/unit/application/campaign-participations/campaign-participation-controller_test.js index 28c965ed6bd..6055baf5e49 100644 --- a/api/tests/unit/application/campaign-participations/campaign-participation-controller_test.js +++ b/api/tests/unit/application/campaign-participations/campaign-participation-controller_test.js @@ -1,11 +1,13 @@ -const { sinon, expect, domainBuilder, hFake } = require('../../../test-helper'); -const campaignParticipationController = require('../../../../lib/application/campaign-participations/campaign-participation-controller'); -const events = require('../../../../lib/domain/events/index.js'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const CampaignParticipationResultsShared = require('../../../../lib/domain/events/CampaignParticipationResultsShared'); -const CampaignParticipationStarted = require('../../../../lib/domain/events/CampaignParticipationStarted'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const { FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +import { sinon, expect, domainBuilder, hFake } from '../../../test-helper.js'; +import { campaignParticipationController } from '../../../../lib/application/campaign-participations/campaign-participation-controller.js'; +import * as events from '../../../../lib/domain/events/index.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { CampaignParticipationResultsShared } from '../../../../lib/domain/events/CampaignParticipationResultsShared.js'; +import { CampaignParticipationStarted } from '../../../../lib/domain/events/CampaignParticipationStarted.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { FRENCH_SPOKEN } = LOCALE; describe('Unit | Application | Controller | Campaign-Participation', function () { describe('#shareCampaignResult', function () { diff --git a/api/tests/unit/application/campaign-participations/index_test.js b/api/tests/unit/application/campaign-participations/index_test.js index d3e8b579349..d6243159224 100644 --- a/api/tests/unit/application/campaign-participations/index_test.js +++ b/api/tests/unit/application/campaign-participations/index_test.js @@ -1,8 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); - -const moduleUnderTest = require('../../../../lib/application/campaign-participations'); -const campaignParticipationController = require('../../../../lib/application/campaign-participations/campaign-participation-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { campaignParticipationController } from '../../../../lib/application/campaign-participations/campaign-participation-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/campaign-participations/index.js'; describe('Unit | Application | Router | campaign-participation-router ', function () { describe('POST /api/campaign-participations', function () { diff --git a/api/tests/unit/application/campaign/campaign-controller_test.js b/api/tests/unit/application/campaign/campaign-controller_test.js index 26a3620259b..7c3ed13c973 100644 --- a/api/tests/unit/application/campaign/campaign-controller_test.js +++ b/api/tests/unit/application/campaign/campaign-controller_test.js @@ -1,10 +1,10 @@ -const { sinon, expect, domainBuilder, hFake, catchErr } = require('../../../test-helper'); +import { sinon, expect, domainBuilder, hFake, catchErr } from '../../../test-helper.js'; +import { campaignController } from '../../../../lib/application/campaigns/campaign-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { UserNotAuthorizedToAccessEntityError, ForbiddenAccess } from '../../../../lib/domain/errors.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; -const campaignController = require('../../../../lib/application/campaigns/campaign-controller'); - -const usecases = require('../../../../lib/domain/usecases/index.js'); -const { UserNotAuthorizedToAccessEntityError, ForbiddenAccess } = require('../../../../lib/domain/errors'); -const { FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +const { FRENCH_SPOKEN } = LOCALE; describe('Unit | Application | Controller | Campaign', function () { describe('#save', function () { diff --git a/api/tests/unit/application/campaign/index_test.js b/api/tests/unit/application/campaign/index_test.js index e087684c75d..d2692261715 100644 --- a/api/tests/unit/application/campaign/index_test.js +++ b/api/tests/unit/application/campaign/index_test.js @@ -1,10 +1,10 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const moduleUnderTest = require('../../../../lib/application/campaigns'); -const campaignController = require('../../../../lib/application/campaigns/campaign-controller'); -const campaignStatsController = require('../../../../lib/application/campaigns/campaign-stats-controller'); -const campaignManagementController = require('../../../../lib/application/campaigns/campaign-management-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { campaignController } from '../../../../lib/application/campaigns/campaign-controller.js'; +import { campaignStatsController } from '../../../../lib/application/campaigns/campaign-stats-controller.js'; +import { campaignManagementController } from '../../../../lib/application/campaigns/campaign-management-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/campaigns/index.js'; describe('Unit | Application | Router | campaign-router ', function () { describe('POST /api/campaigns', function () { diff --git a/api/tests/unit/application/campaigns-administration/campaign-controller_test.js b/api/tests/unit/application/campaigns-administration/campaign-controller_test.js index 6a713fff248..3841eae9839 100644 --- a/api/tests/unit/application/campaigns-administration/campaign-controller_test.js +++ b/api/tests/unit/application/campaigns-administration/campaign-controller_test.js @@ -1,13 +1,12 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); - -const campaignController = require('../../../../lib/application/campaigns-administration/campaign-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { campaignController } from '../../../../lib/application/campaigns-administration/campaign-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | Application | Controller | Campaign Administration', function () { describe('#archiveCampaigns', function () { let csvCampaignsIdsParserStub; beforeEach(function () { - sinon.stub(usecases, 'campaignAdministrationArchiveCampaign'); + sinon.stub(usecases, 'archiveCampaigns'); csvCampaignsIdsParserStub = { extractCampaignsIds: sinon.stub() }; }); @@ -19,7 +18,7 @@ describe('Unit | Application | Controller | Campaign Administration', function ( const request = { auth: { credentials: { userId } }, payload: path }; csvCampaignsIdsParserStub.extractCampaignsIds.withArgs(path).returns(ids); - usecases.campaignAdministrationArchiveCampaign.withArgs({ userId, ids }); + usecases.archiveCampaigns.withArgs({ userId, ids }); // when const response = await campaignController.archiveCampaigns(request, hFake, { diff --git a/api/tests/unit/application/campaigns-administration/index_test.js b/api/tests/unit/application/campaigns-administration/index_test.js index 08ae0cdd0b9..2e01eb45165 100644 --- a/api/tests/unit/application/campaigns-administration/index_test.js +++ b/api/tests/unit/application/campaigns-administration/index_test.js @@ -1,8 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const campaignController = require('../../../../lib/application/campaigns-administration/campaign-controller'); - -const moduleUnderTest = require('../../../../lib/application/campaigns-administration'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { campaignController } from '../../../../lib/application/campaigns-administration/campaign-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/campaigns-administration/index.js'; describe('Unit | Application | Router | campaign-participation-router ', function () { describe('PATCH /api/admin/campaigns/archive-campaigns', function () { diff --git a/api/tests/unit/application/certification-candidates/certification-candidates-controller_test.js b/api/tests/unit/application/certification-candidates/certification-candidates-controller_test.js index fbd1b6d3f84..6c7ed142ab5 100644 --- a/api/tests/unit/application/certification-candidates/certification-candidates-controller_test.js +++ b/api/tests/unit/application/certification-candidates/certification-candidates-controller_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, hFake } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const certificationCandidateController = require('../../../../lib/application/certification-candidates/certification-candidates-controller'); +import { expect, sinon, hFake } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { certificationCandidatesController } from '../../../../lib/application/certification-candidates/certification-candidates-controller.js'; describe('Unit | Controller | certifications-candidate-controller', function () { describe('#authorizeToStart', function () { @@ -25,7 +25,7 @@ describe('Unit | Controller | certifications-candidate-controller', function () .resolves(); // when - const response = await certificationCandidateController.authorizeToStart(request, hFake); + const response = await certificationCandidatesController.authorizeToStart(request, hFake); // then expect(response.statusCode).to.equal(204); @@ -52,30 +52,29 @@ describe('Unit | Controller | certifications-candidate-controller', function () .resolves(); // when - const response = await certificationCandidateController.authorizeToResume(request, hFake); + const response = await certificationCandidatesController.authorizeToResume(request, hFake); // then expect(response.statusCode).to.equal(204); }); }); -}); - -describe('#endAssessmentBySupervisor', function () { - const certificationCandidateId = 2; + describe('#endAssessmentBySupervisor', function () { + const certificationCandidateId = 2; - it('should call the endAssessmentBySupervisor use case', async function () { - // given - sinon.stub(usecases, 'endAssessmentBySupervisor'); - usecases.endAssessmentBySupervisor.resolves(); + it('should call the endAssessmentBySupervisor use case', async function () { + // given + sinon.stub(usecases, 'endAssessmentBySupervisor'); + usecases.endAssessmentBySupervisor.resolves(); - // when - await certificationCandidateController.endAssessmentBySupervisor({ - params: { id: certificationCandidateId }, - }); + // when + await certificationCandidatesController.endAssessmentBySupervisor({ + params: { id: certificationCandidateId }, + }); - // then - expect(usecases.endAssessmentBySupervisor).to.have.been.calledWithExactly({ - certificationCandidateId, + // then + expect(usecases.endAssessmentBySupervisor).to.have.been.calledWithExactly({ + certificationCandidateId, + }); }); }); }); diff --git a/api/tests/unit/application/certification-candidates/index_test.js b/api/tests/unit/application/certification-candidates/index_test.js index a90fc708fd6..5bcf16e057e 100644 --- a/api/tests/unit/application/certification-candidates/index_test.js +++ b/api/tests/unit/application/certification-candidates/index_test.js @@ -1,8 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/certification-candidates'); -const sessionSupervisorAuthorization = require('../../../../lib/application/preHandlers/session-supervisor-authorization'); -const certificationCandidatesController = require('../../../../lib/application/certification-candidates/certification-candidates-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import * as moduleUnderTest from '../../../../lib/application/certification-candidates/index.js'; +import { certificationCandidatesController } from '../../../../lib/application/certification-candidates/certification-candidates-controller.js'; +import { assessmentSupervisorAuthorization as sessionSupervisorAuthorization } from '../../../../lib/application/preHandlers/session-supervisor-authorization.js'; describe('Unit | Application | CertificationCandidates | Routes', function () { describe('GET certification-candidates/{id}/authorize-to-start', function () { diff --git a/api/tests/unit/application/certification-center-invitations/certification-center-invitation-controller_test.js b/api/tests/unit/application/certification-center-invitations/certification-center-invitation-controller_test.js index 573feb0a846..2b6f0aca4dc 100644 --- a/api/tests/unit/application/certification-center-invitations/certification-center-invitation-controller_test.js +++ b/api/tests/unit/application/certification-center-invitations/certification-center-invitation-controller_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, hFake, domainBuilder } = require('../../../test-helper'); -const certificationCenterInvitationController = require('../../../../lib/application/certification-center-invitations/certification-center-invitation-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const CertificationCenterInvitation = require('../../../../lib/domain/models/CertificationCenterInvitation'); +import { expect, sinon, hFake, domainBuilder } from '../../../test-helper.js'; +import { certificationCenterInvitationController } from '../../../../lib/application/certification-center-invitations/certification-center-invitation-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { CertificationCenterInvitation } from '../../../../lib/domain/models/CertificationCenterInvitation.js'; describe('Unit | Application | Certification-center-Invitations | Certification-center-invitation-controller', function () { describe('#acceptCertificationCenterInvitation', function () { diff --git a/api/tests/unit/application/certification-centers/certification-center-controller_test.js b/api/tests/unit/application/certification-centers/certification-center-controller_test.js index 7acefdd3fa7..28a115ab20f 100644 --- a/api/tests/unit/application/certification-centers/certification-center-controller_test.js +++ b/api/tests/unit/application/certification-centers/certification-center-controller_test.js @@ -1,8 +1,7 @@ -const { expect, sinon, domainBuilder, hFake } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const Session = require('../../../../lib/domain/models/Session'); - -const certificationCenterController = require('../../../../lib/application/certification-centers/certification-center-controller'); +import { expect, sinon, domainBuilder, hFake } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { Session } from '../../../../lib/domain/models/Session.js'; +import { certificationCenterController } from '../../../../lib/application/certification-centers/certification-center-controller.js'; describe('Unit | Controller | certifications-center-controller', function () { describe('#saveSession', function () { diff --git a/api/tests/unit/application/certification-centers/index_test.js b/api/tests/unit/application/certification-centers/index_test.js index 3ee5da93cf7..08c94070292 100644 --- a/api/tests/unit/application/certification-centers/index_test.js +++ b/api/tests/unit/application/certification-centers/index_test.js @@ -1,13 +1,16 @@ -const { writeFile, stat, unlink } = require('fs').promises; +import fs from 'fs'; +import { writeFile, stat, unlink } from 'fs/promises'; -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { certificationCenterController } from '../../../../lib/application/certification-centers/certification-center-controller.js'; -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const moduleUnderTest = require('../../../../lib/application/certification-centers'); -const certificationCenterController = require('../../../../lib/application/certification-centers/certification-center-controller'); -const FormData = require('form-data'); -const fs = require('fs'); -const streamToPromise = require('stream-to-promise'); +import * as moduleUnderTest from '../../../../lib/application/certification-centers/index.js'; +import FormData from 'form-data'; +import streamToPromise from 'stream-to-promise'; + +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Unit | Router | certification-center-router', function () { describe('POST /api/certification-centers/{certificationCenterId}/session', function () { diff --git a/api/tests/unit/application/certification-courses/certification-course-controller_test.js b/api/tests/unit/application/certification-courses/certification-course-controller_test.js index c1e128281a1..413e9c149de 100644 --- a/api/tests/unit/application/certification-courses/certification-course-controller_test.js +++ b/api/tests/unit/application/certification-courses/certification-course-controller_test.js @@ -1,15 +1,9 @@ -const { - sinon, - expect, - hFake, - generateValidRequestAuthorizationHeader, - domainBuilder, -} = require('../../../test-helper'); -const certificationCourseController = require('../../../../lib/application/certification-courses/certification-course-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); - -const CertificationCourse = require('../../../../lib/domain/models/CertificationCourse'); +import { sinon, expect, hFake, generateValidRequestAuthorizationHeader, domainBuilder } from '../../../test-helper.js'; + +import { certificationCourseController } from '../../../../lib/application/certification-courses/certification-course-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import { CertificationCourse } from '../../../../lib/domain/models/CertificationCourse.js'; describe('Unit | Controller | certification-course-controller', function () { let certificationDetailsSerializer; diff --git a/api/tests/unit/application/certification-courses/index_test.js b/api/tests/unit/application/certification-courses/index_test.js index fd8755c8050..24636122f6e 100644 --- a/api/tests/unit/application/certification-courses/index_test.js +++ b/api/tests/unit/application/certification-courses/index_test.js @@ -1,8 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const moduleUnderTest = require('../../../../lib/application/certification-courses'); -const certificationCoursesController = require('../../../../lib/application/certification-courses/certification-course-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { certificationCourseController as certificationCoursesController } from '../../../../lib/application/certification-courses/certification-course-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/certification-courses/index.js'; describe('Unit | Application | Certifications Course | Route', function () { describe('GET /api/admin/certifications/{id}/details', function () { diff --git a/api/tests/unit/application/certification-issue-reports/certification-issue-report-controller_test.js b/api/tests/unit/application/certification-issue-reports/certification-issue-report-controller_test.js index 08a027a11f6..f7b7c5bd86f 100644 --- a/api/tests/unit/application/certification-issue-reports/certification-issue-report-controller_test.js +++ b/api/tests/unit/application/certification-issue-reports/certification-issue-report-controller_test.js @@ -1,6 +1,6 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); -const certificationIssueReportController = require('../../../../lib/application/certification-issue-reports/certification-issue-report-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { certificationIssueReportController } from '../../../../lib/application/certification-issue-reports/certification-issue-report-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | Controller | certification-issue-report-controller', function () { describe('#deleteCertificationIssueReport', function () { diff --git a/api/tests/unit/application/certification-issue-reports/index_test.js b/api/tests/unit/application/certification-issue-reports/index_test.js index 24767251dd6..c06c44708f4 100644 --- a/api/tests/unit/application/certification-issue-reports/index_test.js +++ b/api/tests/unit/application/certification-issue-reports/index_test.js @@ -1,8 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const certificationIssueReportController = require('../../../../lib/application/certification-issue-reports/certification-issue-report-controller'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const moduleUnderTest = require('../../../../lib/application/certification-issue-reports'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { certificationIssueReportController } from '../../../../lib/application/certification-issue-reports/certification-issue-report-controller.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as moduleUnderTest from '../../../../lib/application/certification-issue-reports/index.js'; describe('Unit | Application | Certifications Issue Report | Route', function () { describe('DELETE /api/certification-issue-reports/{id}', function () { diff --git a/api/tests/unit/application/certification-point-of-contacts/certification-point-of-contact-controller_test.js b/api/tests/unit/application/certification-point-of-contacts/certification-point-of-contact-controller_test.js index 9ec296b0f58..30ce64eda4d 100644 --- a/api/tests/unit/application/certification-point-of-contacts/certification-point-of-contact-controller_test.js +++ b/api/tests/unit/application/certification-point-of-contacts/certification-point-of-contact-controller_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder, hFake } = require('../../../test-helper'); -const certificationPointOfContactController = require('../../../../lib/application/certification-point-of-contacts/certification-point-of-contact-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon, domainBuilder, hFake } from '../../../test-helper.js'; +import { certificationPointOfContactController } from '../../../../lib/application/certification-point-of-contacts/certification-point-of-contact-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | Controller | certifications-point-of-contact-controller', function () { describe('#get', function () { diff --git a/api/tests/unit/application/certification-point-of-contacts/index_test.js b/api/tests/unit/application/certification-point-of-contacts/index_test.js index 50cd1c17df9..f0bd8fde193 100644 --- a/api/tests/unit/application/certification-point-of-contacts/index_test.js +++ b/api/tests/unit/application/certification-point-of-contacts/index_test.js @@ -1,7 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/certification-point-of-contacts'); -const certificationPointOfContactController = require('../../../../lib/application/certification-point-of-contacts/certification-point-of-contact-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { certificationPointOfContactController } from '../../../../lib/application/certification-point-of-contacts/certification-point-of-contact-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/certification-point-of-contacts/index.js'; describe('Unit | Router | certification-point-of-contact-router', function () { describe('GET /api/certification-point-of-contacts/me', function () { diff --git a/api/tests/unit/application/certification-report/certification-report-controller_test.js b/api/tests/unit/application/certification-report/certification-report-controller_test.js index 55a26467c60..1ee9a41760e 100644 --- a/api/tests/unit/application/certification-report/certification-report-controller_test.js +++ b/api/tests/unit/application/certification-report/certification-report-controller_test.js @@ -1,6 +1,6 @@ -const { sinon, expect, hFake, domainBuilder } = require('../../../test-helper'); -const certificationReportController = require('../../../../lib/application/certification-reports/certification-report-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { sinon, expect, hFake, domainBuilder } from '../../../test-helper.js'; +import { certificationReportController } from '../../../../lib/application/certification-reports/certification-report-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | Controller | certification-report-controller', function () { describe('#saveCertificationIssueReport', function () { diff --git a/api/tests/unit/application/certification-report/index_test.js b/api/tests/unit/application/certification-report/index_test.js index 7522270b587..be30b2506c7 100644 --- a/api/tests/unit/application/certification-report/index_test.js +++ b/api/tests/unit/application/certification-report/index_test.js @@ -1,9 +1,9 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const certificationReportController = require('../../../../lib/application/certification-reports/certification-report-controller'); -const { NotFoundError } = require('../../../../lib/application/http-errors'); -const authorization = require('../../../../lib/application/preHandlers/authorization'); -const moduleUnderTest = require('../../../../lib/application/certification-reports'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { certificationReportController } from '../../../../lib/application/certification-reports/certification-report-controller.js'; +import { NotFoundError } from '../../../../lib/application/http-errors.js'; +import { authorization } from '../../../../lib/application/preHandlers/authorization.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as moduleUnderTest from '../../../../lib/application/certification-reports/index.js'; describe('Unit | Application | Certifications Report | Route', function () { describe('POST /api/certification-reports/{id}/certification-issue-reports', function () { diff --git a/api/tests/unit/application/certifications/certification-controller_test.js b/api/tests/unit/application/certifications/certification-controller_test.js index 45987e65c14..fc634b66b32 100644 --- a/api/tests/unit/application/certifications/certification-controller_test.js +++ b/api/tests/unit/application/certifications/certification-controller_test.js @@ -1,9 +1,8 @@ -const { expect, sinon, domainBuilder, hFake } = require('../../../test-helper'); - -const certificationController = require('../../../../lib/application/certifications/certification-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const ChallengeNeutralized = require('../../../../lib/domain/events/ChallengeNeutralized'); -const ChallengeDeneutralized = require('../../../../lib/domain/events/ChallengeDeneutralized'); +import { expect, sinon, domainBuilder, hFake } from '../../../test-helper.js'; +import { certificationController } from '../../../../lib/application/certifications/certification-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { ChallengeNeutralized } from '../../../../lib/domain/events/ChallengeNeutralized.js'; +import { ChallengeDeneutralized } from '../../../../lib/domain/events/ChallengeDeneutralized.js'; describe('Unit | Controller | certifications-controller', function () { describe('#findUserCertifications', function () { diff --git a/api/tests/unit/application/certifications/index_test.js b/api/tests/unit/application/certifications/index_test.js index 5a4f7f4d426..d135cdec5c4 100644 --- a/api/tests/unit/application/certifications/index_test.js +++ b/api/tests/unit/application/certifications/index_test.js @@ -1,8 +1,7 @@ -const { sinon, expect, HttpTestServer } = require('../../../test-helper'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); - -const certificationController = require('../../../../lib/application/certifications/certification-controller'); -const moduleUnderTest = require('../../../../lib/application/certifications'); +import { sinon, expect, HttpTestServer } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { certificationController } from '../../../../lib/application/certifications/certification-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/certifications/index.js'; describe('Unit | Application | Certification | Routes', function () { context('POST /api/admin/certification/neutralize-challenge', function () { diff --git a/api/tests/unit/application/challenges/challenge-controller_test.js b/api/tests/unit/application/challenges/challenge-controller_test.js index 3ad2287c5b6..dc29a9b6d42 100644 --- a/api/tests/unit/application/challenges/challenge-controller_test.js +++ b/api/tests/unit/application/challenges/challenge-controller_test.js @@ -1,6 +1,5 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); - -const challengeController = require('../../../../lib/application/challenges/challenge-controller'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { challengeController } from '../../../../lib/application/challenges/challenge-controller.js'; describe('Unit | Controller | challenge-controller', function () { let challengeRepository; diff --git a/api/tests/unit/application/challenges/index_test.js b/api/tests/unit/application/challenges/index_test.js index 761cef16bae..0dbb9e29c42 100644 --- a/api/tests/unit/application/challenges/index_test.js +++ b/api/tests/unit/application/challenges/index_test.js @@ -1,6 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const challengeController = require('../../../../lib/application/challenges/challenge-controller'); -const moduleUnderTest = require('../../../../lib/application/challenges'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { challengeController } from '../../../../lib/application/challenges/challenge-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/challenges/index.js'; describe('Unit | Router | challenge-router', function () { describe('GET /api/challenges/{id}', function () { diff --git a/api/tests/unit/application/competence-evaluations/competence-evaluation-controller_test.js b/api/tests/unit/application/competence-evaluations/competence-evaluation-controller_test.js index 08443a3408d..b3f23c22bba 100644 --- a/api/tests/unit/application/competence-evaluations/competence-evaluation-controller_test.js +++ b/api/tests/unit/application/competence-evaluations/competence-evaluation-controller_test.js @@ -1,6 +1,6 @@ -const { sinon, expect, domainBuilder, hFake } = require('../../../test-helper'); -const competenceEvaluationController = require('../../../../lib/application/competence-evaluations/competence-evaluation-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { sinon, expect, domainBuilder, hFake } from '../../../test-helper.js'; +import { competenceEvaluationController } from '../../../../lib/application/competence-evaluations/competence-evaluation-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | Application | Controller | Competence-Evaluation', function () { describe('#startOrResume', function () { diff --git a/api/tests/unit/application/complementary-certification-course-results/index_test.js b/api/tests/unit/application/complementary-certification-course-results/index_test.js index bd5e0707c82..3fbe5bfb7aa 100644 --- a/api/tests/unit/application/complementary-certification-course-results/index_test.js +++ b/api/tests/unit/application/complementary-certification-course-results/index_test.js @@ -1,6 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const moduleUnderTest = require('../../../../lib/application/complementary-certification-course-results'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as moduleUnderTest from '../../../../lib/application/complementary-certification-course-results/index.js'; describe('Unit | Application | Complementary Certification Course Results | Route', function () { describe('POST /api/admin/complementary-certification-course-results', function () { diff --git a/api/tests/unit/application/complementary-certifications/index_test.js b/api/tests/unit/application/complementary-certifications/index_test.js index cc9f23df70e..73983fa8e54 100644 --- a/api/tests/unit/application/complementary-certifications/index_test.js +++ b/api/tests/unit/application/complementary-certifications/index_test.js @@ -1,7 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const moduleUnderTest = require('../../../../lib/application/complementary-certifications'); -const complementaryCertificationController = require('../../../../lib/application/complementary-certifications/complementary-certification-controller'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { complementaryCertificationController } from '../../../../lib/application/complementary-certifications/complementary-certification-controller.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as moduleUnderTest from '../../../../lib/application/complementary-certifications/index.js'; describe('Unit | Application | Router | complementary-certifications-router', function () { describe('GET /api/habilitations', function () { diff --git a/api/tests/unit/application/countries/country-controller_test.js b/api/tests/unit/application/countries/country-controller_test.js index d48c788e7da..8db9c6e9f95 100644 --- a/api/tests/unit/application/countries/country-controller_test.js +++ b/api/tests/unit/application/countries/country-controller_test.js @@ -1,14 +1,7 @@ -const { - expect, - hFake, - sinon, - generateValidRequestAuthorizationHeader, - domainBuilder, -} = require('../../../test-helper'); +import { expect, hFake, sinon, generateValidRequestAuthorizationHeader, domainBuilder } from '../../../test-helper.js'; -const usecases = require('../../../../lib/domain/usecases/index.js'); - -const countryController = require('../../../../lib/application/countries/country-controller'); +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { countryController } from '../../../../lib/application/countries/country-controller.js'; describe('Unit | Controller | country-controller', function () { describe('#findCountries', function () { diff --git a/api/tests/unit/application/countries/index_test.js b/api/tests/unit/application/countries/index_test.js index 91fc0731d51..d2174f280d3 100644 --- a/api/tests/unit/application/countries/index_test.js +++ b/api/tests/unit/application/countries/index_test.js @@ -1,7 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/countries'); -const countryController = require('../../../../lib/application/countries/country-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { countryController } from '../../../../lib/application/countries/country-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/countries/index.js'; describe('Unit | Router | country-router', function () { describe('GET /api/countries', function () { diff --git a/api/tests/unit/application/courses/course-controller_test.js b/api/tests/unit/application/courses/course-controller_test.js index 8c45b79d733..3bc237e9f7b 100644 --- a/api/tests/unit/application/courses/course-controller_test.js +++ b/api/tests/unit/application/courses/course-controller_test.js @@ -1,8 +1,6 @@ -const { expect, hFake, sinon, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); - -const Course = require('../../../../lib/domain/models/Course'); - -const courseController = require('../../../../lib/application/courses/course-controller'); +import { expect, hFake, sinon, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { Course } from '../../../../lib/domain/models/Course.js'; +import { courseController } from '../../../../lib/application/courses/course-controller.js'; describe('Unit | Controller | course-controller', function () { let courseServiceStub; diff --git a/api/tests/unit/application/courses/index_test.js b/api/tests/unit/application/courses/index_test.js index bbb3be8a306..7a78a95a8b1 100644 --- a/api/tests/unit/application/courses/index_test.js +++ b/api/tests/unit/application/courses/index_test.js @@ -1,7 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/courses'); -const courseController = require('../../../../lib/application/courses/course-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { courseController } from '../../../../lib/application/courses/course-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/courses/index.js'; describe('Unit | Router | course-router', function () { describe('GET /api/courses/{id}', function () { diff --git a/api/tests/unit/application/error-manager_test.js b/api/tests/unit/application/error-manager_test.js index 0fa6b43ce0f..a0eb012ef9d 100644 --- a/api/tests/unit/application/error-manager_test.js +++ b/api/tests/unit/application/error-manager_test.js @@ -1,6 +1,6 @@ -const { expect, hFake, sinon } = require('../../test-helper'); +import { expect, hFake, sinon } from '../../test-helper.js'; -const { +import { AccountRecoveryDemandExpired, AdminMemberError, AlreadyRegisteredEmailAndUsernameError, @@ -40,11 +40,11 @@ const { SendingEmailToInvalidEmailAddressError, LocaleFormatError, LocaleNotSupportedError, -} = require('../../../lib/domain/errors'); -const { HttpErrors } = require('../../../lib/application/http-errors.js'); +} from '../../../lib/domain/errors.js'; -const { handle } = require('../../../lib/application/error-manager'); -const { SESSION_SUPERVISING } = require('../../../lib/domain/constants/session-supervising'); +import { HttpErrors } from '../../../lib/application/http-errors.js'; +import { handle } from '../../../lib/application/error-manager.js'; +import { SESSION_SUPERVISING } from '../../../lib/domain/constants/session-supervising.js'; describe('Unit | Application | ErrorManager', function () { describe('#handle', function () { diff --git a/api/tests/unit/application/errors_test.js b/api/tests/unit/application/errors_test.js index 74a68b41ee3..502a3a18c55 100644 --- a/api/tests/unit/application/errors_test.js +++ b/api/tests/unit/application/errors_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../test-helper'); -const { BaseHttpError, MissingQueryParamError } = require('../../../lib/application/http-errors'); +import { expect } from '../../test-helper.js'; +import { BaseHttpError, MissingQueryParamError } from '../../../lib/application/http-errors.js'; describe('Unit | Application | HTTP Errors', function () { describe('#BaseHttpError', function () { diff --git a/api/tests/unit/application/feedbacks/feedback-controller_test.js b/api/tests/unit/application/feedbacks/feedback-controller_test.js index b1177518a68..0907ee020ed 100644 --- a/api/tests/unit/application/feedbacks/feedback-controller_test.js +++ b/api/tests/unit/application/feedbacks/feedback-controller_test.js @@ -1,10 +1,11 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; -const { cloneDeep } = require('lodash'); +import lodash from 'lodash'; -const Feedback = require('../../../../lib/infrastructure/orm-models/Feedback'); +const { cloneDeep } = lodash; -const moduleUnderTest = require('../../../../lib/application/feedbacks'); +import { Feedback } from '../../../../lib/infrastructure/orm-models/Feedback.js'; +import * as moduleUnderTest from '../../../../lib/application/feedbacks/index.js'; describe('Unit | Controller | feedback-controller', function () { let httpTestServer; diff --git a/api/tests/unit/application/feedbacks/index_test.js b/api/tests/unit/application/feedbacks/index_test.js index 18f7b4719fc..7262c2c7164 100644 --- a/api/tests/unit/application/feedbacks/index_test.js +++ b/api/tests/unit/application/feedbacks/index_test.js @@ -1,7 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/feedbacks'); -const feedbackController = require('../../../../lib/application/feedbacks/feedback-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { feedbackController } from '../../../../lib/application/feedbacks/feedback-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/feedbacks/index.js'; describe('Unit | Router | feedback-router', function () { describe('POST /api/feedbacks', function () { diff --git a/api/tests/unit/application/frameworks/frameworks-controller_test.js b/api/tests/unit/application/frameworks/frameworks-controller_test.js index 4a003c3ebe8..b3d3afc02fe 100644 --- a/api/tests/unit/application/frameworks/frameworks-controller_test.js +++ b/api/tests/unit/application/frameworks/frameworks-controller_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, hFake } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const frameworksController = require('../../../../lib/application/frameworks/frameworks-controller'); +import { expect, sinon, hFake } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { frameworksController } from '../../../../lib/application/frameworks/frameworks-controller.js'; describe('Unit | Controller | frameworks-controller', function () { let frameworks; diff --git a/api/tests/unit/application/frameworks/index_test.js b/api/tests/unit/application/frameworks/index_test.js index 3f540723da9..06b5c0d3fe1 100644 --- a/api/tests/unit/application/frameworks/index_test.js +++ b/api/tests/unit/application/frameworks/index_test.js @@ -1,8 +1,7 @@ -const { expect, HttpTestServer, sinon, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const frameworksController = require('../../../../lib/application/frameworks/frameworks-controller'); -const moduleUnderTest = require('../../../../lib/application/frameworks'); +import { expect, HttpTestServer, sinon, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { frameworksController } from '../../../../lib/application/frameworks/frameworks-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/frameworks/index.js'; describe('Unit | Application | Frameworks | Routes', function () { describe('GET /api/admin/frameworks', function () { diff --git a/api/tests/unit/application/healthcheck/healthcheck-controller_test.js b/api/tests/unit/application/healthcheck/healthcheck-controller_test.js index 294b6461f56..93abbf56ff6 100644 --- a/api/tests/unit/application/healthcheck/healthcheck-controller_test.js +++ b/api/tests/unit/application/healthcheck/healthcheck-controller_test.js @@ -1,15 +1,15 @@ -const { expect, sinon, hFake } = require('../../../test-helper'); -const { knex } = require('../../../../db/knex-database-connection'); -const { redisMonitor } = require('../../../../lib/infrastructure/utils/redis-monitor'); - -const healthcheckController = require('../../../../lib/application/healthcheck/healthcheck-controller'); +import { expect, sinon, hFake } from '../../../test-helper.js'; +import { knex } from '../../../../db/knex-database-connection.js'; +import { redisMonitor } from '../../../../lib/infrastructure/utils/redis-monitor.js'; +import { healthcheckController } from '../../../../lib/application/healthcheck/healthcheck-controller.js'; describe('Unit | Controller | healthcheckController', function () { describe('#get', function () { it('should reply with the API description', async function () { - // when + // given const mockedRequest = { i18n: { __: sinon.stub() } }; + // when const response = await healthcheckController.get(mockedRequest, hFake); // then diff --git a/api/tests/unit/application/healthcheck/index_test.js b/api/tests/unit/application/healthcheck/index_test.js index de218a6517b..ddb55dbcdd1 100644 --- a/api/tests/unit/application/healthcheck/index_test.js +++ b/api/tests/unit/application/healthcheck/index_test.js @@ -1,7 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/healthcheck'); -const healthcheckController = require('../../../../lib/application/healthcheck/healthcheck-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { healthcheckController } from '../../../../lib/application/healthcheck/healthcheck-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/healthcheck/index.js'; describe('Unit | Router | HealthcheckRouter', function () { describe('GET /api', function () { diff --git a/api/tests/unit/application/lcms/index_test.js b/api/tests/unit/application/lcms/index_test.js index fe67fe7ad80..6dffd23f379 100644 --- a/api/tests/unit/application/lcms/index_test.js +++ b/api/tests/unit/application/lcms/index_test.js @@ -1,10 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); - -const moduleUnderTest = require('../../../../lib/application/lcms'); - -const lcmsController = require('../../../../lib/application/lcms/lcms-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { lcmsController } from '../../../../lib/application/lcms/lcms-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/lcms/index.js'; describe('Unit | Router | lcms-router', function () { let httpTestServer; diff --git a/api/tests/unit/application/lcms/lcms-controller_test.js b/api/tests/unit/application/lcms/lcms-controller_test.js index bf6dcae4baa..cf1683dcab7 100644 --- a/api/tests/unit/application/lcms/lcms-controller_test.js +++ b/api/tests/unit/application/lcms/lcms-controller_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, hFake } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const lcmsController = require('../../../../lib/application/lcms/lcms-controller'); +import { expect, sinon, hFake } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { lcmsController } from '../../../../lib/application/lcms/lcms-controller.js'; describe('Unit | Controller | lcms-controller', function () { describe('#createRelease', function () { diff --git a/api/tests/unit/application/memberships/index_test.js b/api/tests/unit/application/memberships/index_test.js index 6622e526b66..a6d7b9d6c8f 100644 --- a/api/tests/unit/application/memberships/index_test.js +++ b/api/tests/unit/application/memberships/index_test.js @@ -1,10 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); - -const moduleUnderTest = require('../../../../lib/application/memberships'); - -const membershipController = require('../../../../lib/application/memberships/membership-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { membershipController } from '../../../../lib/application/memberships/membership-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/memberships/index.js'; describe('Unit | Router | membership-router', function () { describe('PATCH /api/admin/memberships/{id}', function () { diff --git a/api/tests/unit/application/memberships/membership-controller_test.js b/api/tests/unit/application/memberships/membership-controller_test.js index 84dd25ccece..2b39786aca7 100644 --- a/api/tests/unit/application/memberships/membership-controller_test.js +++ b/api/tests/unit/application/memberships/membership-controller_test.js @@ -1,8 +1,7 @@ -const { expect, sinon, hFake, domainBuilder } = require('../../../test-helper'); - -const membershipController = require('../../../../lib/application/memberships/membership-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const Membership = require('../../../../lib/domain/models/Membership'); +import { expect, sinon, hFake, domainBuilder } from '../../../test-helper.js'; +import { membershipController } from '../../../../lib/application/memberships/membership-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; describe('Unit | Controller | membership-controller', function () { describe('#create', function () { diff --git a/api/tests/unit/application/organization-invitations/index_test.js b/api/tests/unit/application/organization-invitations/index_test.js index ce7e4bb16c9..855f71a3fb2 100644 --- a/api/tests/unit/application/organization-invitations/index_test.js +++ b/api/tests/unit/application/organization-invitations/index_test.js @@ -1,7 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/organization-invitations'); -const organizationInvitationController = require('../../../../lib/application/organization-invitations/organization-invitation-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { organizationInvitationController } from '../../../../lib/application/organization-invitations/organization-invitation-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/organization-invitations/index.js'; describe('Unit | Router | organization-invitation-router', function () { describe('POST /api/organization-invitations/{id}/response', function () { diff --git a/api/tests/unit/application/organization-invitations/organization-invitation-controller_test.js b/api/tests/unit/application/organization-invitations/organization-invitation-controller_test.js index 3d9cdfd895a..fd090dd2245 100644 --- a/api/tests/unit/application/organization-invitations/organization-invitation-controller_test.js +++ b/api/tests/unit/application/organization-invitations/organization-invitation-controller_test.js @@ -1,8 +1,7 @@ -const { expect, sinon, catchErr, domainBuilder, hFake } = require('../../../test-helper'); - -const { MissingQueryParamError } = require('../../../../lib/application/http-errors'); -const organizationInvitationController = require('../../../../lib/application/organization-invitations/organization-invitation-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon, catchErr, domainBuilder, hFake } from '../../../test-helper.js'; +import { MissingQueryParamError } from '../../../../lib/application/http-errors.js'; +import { organizationInvitationController } from '../../../../lib/application/organization-invitations/organization-invitation-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | Application | Organization-Invitations | organization-invitation-controller', function () { describe('#acceptOrganizationInvitation', function () { diff --git a/api/tests/unit/application/organization-learners/index_test.js b/api/tests/unit/application/organization-learners/index_test.js index 5fb8815d113..de6b5cf20b7 100644 --- a/api/tests/unit/application/organization-learners/index_test.js +++ b/api/tests/unit/application/organization-learners/index_test.js @@ -1,8 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const organizationLearnerController = require('../../../../lib/application/organization-learners/organization-learner-controller'); -const moduleUnderTest = require('../../../../lib/application/organization-learners'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { organizationLearnerController } from '../../../../lib/application/organization-learners/organization-learner-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/organization-learners/index.js'; describe('Unit | Application | Router | organization-learner-router', function () { context('Routes /admin', function () { diff --git a/api/tests/unit/application/organization-learners/organization-learner-controller_test.js b/api/tests/unit/application/organization-learners/organization-learner-controller_test.js index 2629621b3a2..037ad26d535 100644 --- a/api/tests/unit/application/organization-learners/organization-learner-controller_test.js +++ b/api/tests/unit/application/organization-learners/organization-learner-controller_test.js @@ -1,6 +1,6 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const organizationLearnerController = require('../../../../lib/application/organization-learners/organization-learner-controller'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { organizationLearnerController } from '../../../../lib/application/organization-learners/organization-learner-controller.js'; describe('Unit | Application | Organization-Learner | organization-learner-controller', function () { describe('#getOrganizationLearnerActivity', function () { diff --git a/api/tests/unit/application/organizations-administration/index_test.js b/api/tests/unit/application/organizations-administration/index_test.js index 214c2c8cb23..470289219b1 100644 --- a/api/tests/unit/application/organizations-administration/index_test.js +++ b/api/tests/unit/application/organizations-administration/index_test.js @@ -1,7 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const moduleUnderTest = require('../../../../lib/application/organizations-administration'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import * as moduleUnderTest from '../../../../lib/application/organizations-administration/index.js'; describe('Unit | Router | organization-administration-router', function () { describe('PATCH /api/admin/organizations/{id}', function () { diff --git a/api/tests/unit/application/organizations-administration/organization-administration-controller_test.js b/api/tests/unit/application/organizations-administration/organization-administration-controller_test.js index e07915bfcab..3ebcdd8f000 100644 --- a/api/tests/unit/application/organizations-administration/organization-administration-controller_test.js +++ b/api/tests/unit/application/organizations-administration/organization-administration-controller_test.js @@ -1,6 +1,6 @@ -const { domainBuilder, expect, hFake, sinon } = require('../../../test-helper'); -const organizationController = require('../../../../lib/application/organizations-administration/organization-administration-controller.js'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { domainBuilder, expect, hFake, sinon } from '../../../test-helper.js'; +import * as organizationController from '../../../../lib/application/organizations-administration/organization-administration-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | Application | Organizations | organization-administration-controller', function () { describe('#updateOrganizationInformation', function () { diff --git a/api/tests/unit/application/organizations/helpers.js b/api/tests/unit/application/organizations/helpers.js index 0e55858a29d..af23b563dc4 100644 --- a/api/tests/unit/application/organizations/helpers.js +++ b/api/tests/unit/application/organizations/helpers.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const { mapCertificabilityByLabel } = require('../../../../lib/application/organizations/helpers'); +import { expect } from '../../../test-helper.js'; +import { mapCertificabilityByLabel } from '../../../../lib/application/organizations/helpers.js'; describe('Unit | Application | Organizations | helpers', function () { it('map the certificability eligible value', async function () { diff --git a/api/tests/unit/application/organizations/index_test.js b/api/tests/unit/application/organizations/index_test.js index 962beecb93d..34def26f485 100644 --- a/api/tests/unit/application/organizations/index_test.js +++ b/api/tests/unit/application/organizations/index_test.js @@ -1,11 +1,10 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const organizationController = require('../../../../lib/application/organizations/organization-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const identifiersType = require('../../../../lib/domain/types/identifiers-type'); -const moduleUnderTest = require('../../../../lib/application/organizations'); -const organizationPlacesCategories = require('../../../../lib/domain/constants/organization-places-categories'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { organizationController } from '../../../../lib/application/organizations/organization-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { identifiersType } from '../../../../lib/domain/types/identifiers-type.js'; +import * as moduleUnderTest from '../../../../lib/application/organizations/index.js'; +import * as organizationPlacesCategories from '../../../../lib/domain/constants/organization-places-categories.js'; describe('Unit | Router | organization-router', function () { describe('GET /api/admin/organizations', function () { diff --git a/api/tests/unit/application/organizations/organization-controller_test.js b/api/tests/unit/application/organizations/organization-controller_test.js index d545e827dbb..0fea8261f28 100644 --- a/api/tests/unit/application/organizations/organization-controller_test.js +++ b/api/tests/unit/application/organizations/organization-controller_test.js @@ -1,22 +1,14 @@ -const { - domainBuilder, - expect, - generateValidRequestAuthorizationHeader, - hFake, - sinon, -} = require('../../../test-helper'); - -const Organization = require('../../../../lib/domain/models/Organization'); -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); -const Membership = require('../../../../lib/domain/models/Membership'); -const ScoOrganizationParticipant = require('../../../../lib/domain/read-models/ScoOrganizationParticipant'); -const SupOrganizationParticipant = require('../../../../lib/domain/read-models/SupOrganizationParticipant'); - -const organizationController = require('../../../../lib/application/organizations/organization-controller.js'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const queryParamsUtils = require('../../../../lib/infrastructure/utils/query-params-utils'); - -const { getI18n } = require('../../../tooling/i18n/i18n'); +import { domainBuilder, expect, generateValidRequestAuthorizationHeader, hFake, sinon } from '../../../test-helper.js'; + +import { Organization } from '../../../../lib/domain/models/Organization.js'; +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { ScoOrganizationParticipant } from '../../../../lib/domain/read-models/ScoOrganizationParticipant.js'; +import { SupOrganizationParticipant } from '../../../../lib/domain/read-models/SupOrganizationParticipant.js'; +import { organizationController } from '../../../../lib/application/organizations/organization-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import * as queryParamsUtils from '../../../../lib/infrastructure/utils/query-params-utils.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; describe('Unit | Application | Organizations | organization-controller', function () { let request; diff --git a/api/tests/unit/application/passwords/index_test.js b/api/tests/unit/application/passwords/index_test.js index aed3d83b144..ef66a90af66 100644 --- a/api/tests/unit/application/passwords/index_test.js +++ b/api/tests/unit/application/passwords/index_test.js @@ -1,7 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/passwords'); -const passwordController = require('../../../../lib/application/passwords/password-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { passwordController } from '../../../../lib/application/passwords/password-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/passwords/index.js'; describe('Unit | Router | Password router', function () { describe('POST /api/password-reset-demands', function () { diff --git a/api/tests/unit/application/passwords/password-controller_test.js b/api/tests/unit/application/passwords/password-controller_test.js index 44d4d4074ca..cfa60979643 100644 --- a/api/tests/unit/application/passwords/password-controller_test.js +++ b/api/tests/unit/application/passwords/password-controller_test.js @@ -1,8 +1,6 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); - -const usecases = require('../../../../lib/domain/usecases/index.js'); - -const passwordController = require('../../../../lib/application/passwords/password-controller'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { passwordController } from '../../../../lib/application/passwords/password-controller.js'; describe('Unit | Controller | PasswordController', function () { describe('#createResetDemand', function () { diff --git a/api/tests/unit/application/pole-emploi/index_test.js b/api/tests/unit/application/pole-emploi/index_test.js index 9ef3ed34842..752863f937f 100644 --- a/api/tests/unit/application/pole-emploi/index_test.js +++ b/api/tests/unit/application/pole-emploi/index_test.js @@ -1,11 +1,12 @@ -const { +import { expect, HttpTestServer, sinon, generateValidRequestAuthorizationHeaderForApplication, -} = require('../../../test-helper'); -const poleEmploiController = require('../../../../lib/application/pole-emploi/pole-emploi-controller'); -const moduleUnderTest = require('../../../../lib/application/pole-emploi'); +} from '../../../test-helper.js'; + +import { poleEmploiController } from '../../../../lib/application/pole-emploi/pole-emploi-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/pole-emploi/index.js'; describe('Unit | Router | pole-emploi-router', function () { describe('GET /api/pole-emploi/envois', function () { diff --git a/api/tests/unit/application/pole-emploi/pole-emploi-controller_test.js b/api/tests/unit/application/pole-emploi/pole-emploi-controller_test.js index 8a65c055a23..4974a416147 100644 --- a/api/tests/unit/application/pole-emploi/pole-emploi-controller_test.js +++ b/api/tests/unit/application/pole-emploi/pole-emploi-controller_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, hFake } = require('../../../test-helper'); -const poleEmploiController = require('../../../../lib/application/pole-emploi/pole-emploi-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon, hFake } from '../../../test-helper.js'; +import { poleEmploiController } from '../../../../lib/application/pole-emploi/pole-emploi-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | Controller | pole-emploi-controller', function () { describe('#getSendings', function () { diff --git a/api/tests/unit/application/pre-response-utils_test.js b/api/tests/unit/application/pre-response-utils_test.js index e22e707f867..2eb7960c65a 100644 --- a/api/tests/unit/application/pre-response-utils_test.js +++ b/api/tests/unit/application/pre-response-utils_test.js @@ -1,8 +1,7 @@ -const { expect, sinon, hFake } = require('../../test-helper'); -const { BaseHttpError } = require('../../../lib/application/http-errors'); -const { handleDomainAndHttpErrors } = require('../../../lib/application/pre-response-utils'); - -const { DomainError } = require('../../../lib/domain/errors'); +import { expect, sinon, hFake } from '../../test-helper.js'; +import { BaseHttpError } from '../../../lib/application/http-errors.js'; +import { handleDomainAndHttpErrors } from '../../../lib/application/pre-response-utils.js'; +import { DomainError } from '../../../lib/domain/errors.js'; describe('Unit | Application | PreResponse-utils', function () { describe('#handleDomainAndHttpErrors', function () { diff --git a/api/tests/unit/application/preHandlers/assessment-authorization_test.js b/api/tests/unit/application/preHandlers/assessment-authorization_test.js deleted file mode 100644 index ef2dc06caeb..00000000000 --- a/api/tests/unit/application/preHandlers/assessment-authorization_test.js +++ /dev/null @@ -1,108 +0,0 @@ -const { expect, sinon, hFake } = require('../../../test-helper'); -const AssessmentAuthorization = require('../../../../lib/application/preHandlers/assessment-authorization'); - -describe('Unit | Pre-handler | Assessment Authorization', function () { - describe('#verify', function () { - const request = { - headers: { authorization: 'VALID_TOKEN' }, - params: { - id: 8, - }, - }; - let requestResponseUtils; - let assessmentRepository; - let validationErrorSerializer; - - beforeEach(function () { - requestResponseUtils = { - extractUserIdFromRequest: sinon.stub(), - }; - assessmentRepository = { - getByAssessmentIdAndUserId: sinon.stub(), - }; - validationErrorSerializer = { - serialize: sinon.stub(), - }; - }); - - it('should get userId from token', async function () { - // given - requestResponseUtils.extractUserIdFromRequest.returns('userId'); - assessmentRepository.getByAssessmentIdAndUserId.resolves(); - validationErrorSerializer.serialize.returns(); - - // when - await AssessmentAuthorization.verify(request, hFake, { - requestResponseUtils, - assessmentRepository, - validationErrorSerializer, - }); - - // then - expect(requestResponseUtils.extractUserIdFromRequest).to.have.been.calledWith(request); - }); - - describe('When assessment is linked to userId (userId exist)', function () { - it('should reply with assessment', async function () { - // given - const fetchedAssessment = {}; - const extractedUserId = 'userId'; - requestResponseUtils.extractUserIdFromRequest.returns(extractedUserId); - assessmentRepository.getByAssessmentIdAndUserId.resolves(fetchedAssessment); - - // when - const response = await AssessmentAuthorization.verify(request, hFake, { - requestResponseUtils, - assessmentRepository, - validationErrorSerializer, - }); - - // then - sinon.assert.calledOnce(assessmentRepository.getByAssessmentIdAndUserId); - sinon.assert.calledWith(assessmentRepository.getByAssessmentIdAndUserId, request.params.id, extractedUserId); - expect(response).to.deep.equal(fetchedAssessment); - }); - }); - - describe('When assessment is linked a null userId', function () { - it('should reply with assessment', async function () { - // given - const fetchedAssessment = {}; - const extractedUserId = null; - requestResponseUtils.extractUserIdFromRequest.returns(extractedUserId); - assessmentRepository.getByAssessmentIdAndUserId.resolves(fetchedAssessment); - - // when - const response = await AssessmentAuthorization.verify(request, hFake, { - requestResponseUtils, - assessmentRepository, - validationErrorSerializer, - }); - - // then - expect(assessmentRepository.getByAssessmentIdAndUserId).to.have.been.calledWith(request.params.id, null); - expect(response).to.deep.equal(fetchedAssessment); - }); - }); - - describe('When userId (from token) is not linked to assessment', function () { - it('should take over the request and response with 401 status code', async function () { - // given - const extractedUserId = null; - requestResponseUtils.extractUserIdFromRequest.returns(extractedUserId); - assessmentRepository.getByAssessmentIdAndUserId.rejects(); - - // when - const response = await AssessmentAuthorization.verify(request, hFake, { - requestResponseUtils, - assessmentRepository, - validationErrorSerializer, - }); - - // then - expect(response.statusCode).to.equal(401); - expect(response.isTakeOver).to.be.true; - }); - }); - }); -}); diff --git a/api/tests/unit/application/preHandlers/authorization_test.js b/api/tests/unit/application/preHandlers/authorization_test.js index 16ddcf5ecaa..2a3896c5e32 100644 --- a/api/tests/unit/application/preHandlers/authorization_test.js +++ b/api/tests/unit/application/preHandlers/authorization_test.js @@ -1,9 +1,9 @@ -const { expect, sinon, domainBuilder, catchErr, hFake } = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/application/http-errors'); -const { +import { expect, sinon, domainBuilder, catchErr, hFake } from '../../../test-helper.js'; +import { NotFoundError } from '../../../../lib/application/http-errors.js'; +import { verifyCertificationSessionAuthorization, verifySessionAuthorization, -} = require('../../../../lib/application/preHandlers/authorization'); +} from '../../../../lib/application/preHandlers/authorization.js'; describe('Unit | Pre-handler | Authorization', function () { const userId = 1; diff --git a/api/tests/unit/application/preHandlers/models/CampaignAuthorization_test.js b/api/tests/unit/application/preHandlers/models/CampaignAuthorization_test.js index 83243d6bb53..7d8931f018c 100644 --- a/api/tests/unit/application/preHandlers/models/CampaignAuthorization_test.js +++ b/api/tests/unit/application/preHandlers/models/CampaignAuthorization_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const CampaignAuthorization = require('../../../../../lib/application/preHandlers/models/CampaignAuthorization'); +import { expect } from '../../../../test-helper.js'; +import { CampaignAuthorization } from '../../../../../lib/application/preHandlers/models/CampaignAuthorization.js'; describe('Unit | Domain | models | CampaignAuthorization', function () { describe('#isAllowedToManage', function () { diff --git a/api/tests/unit/application/preHandlers/session-supervisor-authorization_test.js b/api/tests/unit/application/preHandlers/session-supervisor-authorization_test.js index 3c6e8e0bee6..c65fa28f08f 100644 --- a/api/tests/unit/application/preHandlers/session-supervisor-authorization_test.js +++ b/api/tests/unit/application/preHandlers/session-supervisor-authorization_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, hFake } = require('../../../test-helper'); -const sessionSupervisorAuthorization = require('../../../../lib/application/preHandlers/session-supervisor-authorization'); +import { expect, sinon, hFake } from '../../../test-helper.js'; +import { assessmentSupervisorAuthorization as sessionSupervisorAuthorization } from '../../../../lib/application/preHandlers/session-supervisor-authorization.js'; describe('Unit | Pre-handler | Supervisor Authorization', function () { let supervisorAccessRepository; diff --git a/api/tests/unit/application/preHandlers/user-existence-verification_test.js b/api/tests/unit/application/preHandlers/user-existence-verification_test.js index c2bea2b2842..8aa2763c017 100644 --- a/api/tests/unit/application/preHandlers/user-existence-verification_test.js +++ b/api/tests/unit/application/preHandlers/user-existence-verification_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, hFake } = require('../../../test-helper'); -const userVerification = require('../../../../lib/application/preHandlers/user-existence-verification'); -const { UserNotFoundError } = require('../../../../lib/domain/errors'); +import { expect, sinon, hFake } from '../../../test-helper.js'; +import { userVerification } from '../../../../lib/application/preHandlers/user-existence-verification.js'; +import { UserNotFoundError } from '../../../../lib/domain/errors.js'; describe('Unit | Pre-handler | User Verification', function () { describe('#verifyById', function () { diff --git a/api/tests/unit/application/prescribers/index_test.js b/api/tests/unit/application/prescribers/index_test.js index 66b1ffca13c..7f8e0db23cf 100644 --- a/api/tests/unit/application/prescribers/index_test.js +++ b/api/tests/unit/application/prescribers/index_test.js @@ -1,8 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const moduleUnderTest = require('../../../../lib/application/prescribers'); -const prescriberController = require('../../../../lib/application/prescribers/prescriber-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { prescriberController } from '../../../../lib/application/prescribers/prescriber-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/prescribers/index.js'; describe('Unit | Router | prescriber-router', function () { describe('GET /api/prescription/prescribers/{id}', function () { diff --git a/api/tests/unit/application/prescribers/prescriber-controller_test.js b/api/tests/unit/application/prescribers/prescriber-controller_test.js index e8cfa5eee51..14b741f53e8 100644 --- a/api/tests/unit/application/prescribers/prescriber-controller_test.js +++ b/api/tests/unit/application/prescribers/prescriber-controller_test.js @@ -1,8 +1,6 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); - -const usecases = require('../../../../lib/domain/usecases/index.js'); - -const prescriberController = require('../../../../lib/application/prescribers/prescriber-controller'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { prescriberController } from '../../../../lib/application/prescribers/prescriber-controller.js'; describe('Unit | Controller | prescriber-controller', function () { describe('#get', function () { diff --git a/api/tests/unit/application/progressions/index_test.js b/api/tests/unit/application/progressions/index_test.js index f135a065598..b04b7639c6e 100644 --- a/api/tests/unit/application/progressions/index_test.js +++ b/api/tests/unit/application/progressions/index_test.js @@ -1,7 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/progressions'); -const progressionController = require('../../../../lib/application/progressions/progression-controller'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { progressionController } from '../../../../lib/application/progressions/progression-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/progressions/index.js'; describe('Unit | Router | progression-router', function () { describe('GET /api/progressions/{id}', function () { diff --git a/api/tests/unit/application/progressions/progression-controller_test.js b/api/tests/unit/application/progressions/progression-controller_test.js index 0a49039ea79..72bc36493a8 100644 --- a/api/tests/unit/application/progressions/progression-controller_test.js +++ b/api/tests/unit/application/progressions/progression-controller_test.js @@ -1,7 +1,6 @@ -const { expect, sinon, domainBuilder, hFake } = require('../../../test-helper'); - -const usecases = require('../../../../lib/domain/usecases/index.js'); -const progressionController = require('../../../../lib/application/progressions/progression-controller'); +import { expect, sinon, domainBuilder, hFake } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { progressionController } from '../../../../lib/application/progressions/progression-controller.js'; describe('Unit | Controller | progression-controller', function () { const userId = 60; diff --git a/api/tests/unit/application/sco-organization-learners/sco-organization-learner-controller_test.js b/api/tests/unit/application/sco-organization-learners/sco-organization-learner-controller_test.js index 883767703e9..b565684c848 100644 --- a/api/tests/unit/application/sco-organization-learners/sco-organization-learner-controller_test.js +++ b/api/tests/unit/application/sco-organization-learners/sco-organization-learner-controller_test.js @@ -1,8 +1,6 @@ -const { expect, hFake, sinon } = require('../../../test-helper'); - -const usecases = require('../../../../lib/domain/usecases/index.js'); - -const scoOrganizationLearnerController = require('../../../../lib/application/sco-organization-learners/sco-organization-learner-controller'); +import { expect, hFake, sinon } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { scoOrganizationLearnerController } from '../../../../lib/application/sco-organization-learners/sco-organization-learner-controller.js'; describe('Unit | Application | Controller | sco-organization-learner', function () { describe('#createUserAndReconcileToOrganizationLearnerFromExternalUser', function () { diff --git a/api/tests/unit/application/scorecards/index_test.js b/api/tests/unit/application/scorecards/index_test.js index 09f04b45837..cb530ce5925 100644 --- a/api/tests/unit/application/scorecards/index_test.js +++ b/api/tests/unit/application/scorecards/index_test.js @@ -1,6 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const scorecardController = require('../../../../lib/application/scorecards/scorecard-controller'); -const moduleUnderTest = require('../../../../lib/application/scorecards'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { scorecardController } from '../../../../lib/application/scorecards/scorecard-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/scorecards/index.js'; describe('Unit | Router | scorecard-router', function () { describe('GET /api/scorecards/{id}', function () { diff --git a/api/tests/unit/application/scorecards/scorecard-controller_test.js b/api/tests/unit/application/scorecards/scorecard-controller_test.js index 2cdda87058c..a7422b38a78 100644 --- a/api/tests/unit/application/scorecards/scorecard-controller_test.js +++ b/api/tests/unit/application/scorecards/scorecard-controller_test.js @@ -1,9 +1,7 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); - -const scorecardController = require('../../../../lib/application/scorecards/scorecard-controller'); - -const usecases = require('../../../../lib/domain/usecases/index.js'); -const requestResponseUtils = require('../../../../lib/infrastructure/utils/request-response-utils.js'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { scorecardController } from '../../../../lib/application/scorecards/scorecard-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import * as requestResponseUtils from '../../../../lib/infrastructure/utils/request-response-utils.js'; describe('Unit | Controller | scorecard-controller', function () { const authenticatedUserId = '12'; diff --git a/api/tests/unit/application/security-pre-handlers_test.js b/api/tests/unit/application/security-pre-handlers_test.js index 220b28e2d3e..492b85d8c45 100644 --- a/api/tests/unit/application/security-pre-handlers_test.js +++ b/api/tests/unit/application/security-pre-handlers_test.js @@ -1,8 +1,7 @@ -const { expect, sinon, hFake, domainBuilder } = require('../../test-helper'); - -const securityPreHandlers = require('../../../lib/application/security-pre-handlers'); -const tokenService = require('../../../lib/domain/services/token-service'); -const { NotFoundError } = require('../../../lib/domain/errors'); +import { expect, sinon, hFake, domainBuilder } from '../../test-helper.js'; +import { securityPreHandlers } from '../../../lib/application/security-pre-handlers.js'; +import { tokenService } from '../../../lib/domain/services/token-service.js'; +import { NotFoundError } from '../../../lib/domain/errors.js'; describe('Unit | Application | SecurityPreHandlers', function () { describe('#checkAdminMemberHasRoleSuperAdmin', function () { let request; diff --git a/api/tests/unit/application/session/finalized-session-controller_test.js b/api/tests/unit/application/session/finalized-session-controller_test.js index de25eff4ae4..868a8544b03 100644 --- a/api/tests/unit/application/session/finalized-session-controller_test.js +++ b/api/tests/unit/application/session/finalized-session-controller_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, hFake } = require('../../../test-helper'); -const finalizedSessionController = require('../../../../lib/application/sessions/finalized-session-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon, hFake } from '../../../test-helper.js'; +import { finalizedSessionController } from '../../../../lib/application/sessions/finalized-session-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | Controller | finalized-session', function () { let request; diff --git a/api/tests/unit/application/session/index_test.js b/api/tests/unit/application/session/index_test.js index 4ccaa41d330..a689305fabe 100644 --- a/api/tests/unit/application/session/index_test.js +++ b/api/tests/unit/application/session/index_test.js @@ -1,19 +1,20 @@ -const { writeFile, stat, unlink } = require('fs').promises; -const fs = require('fs'); -const FormData = require('form-data'); -const streamToPromise = require('stream-to-promise'); -const { NotFoundError } = require('../../../../lib/application/http-errors'); - -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const sessionController = require('../../../../lib/application/sessions/session-controller'); -const sessionForSupervisingController = require('../../../../lib/application/sessions/session-for-supervising-controller'); -const sessionWithCleaCertifiedCandidateController = require('../../../../lib/application/sessions/session-with-clea-certified-candidate-controller'); -const finalizedSessionController = require('../../../../lib/application/sessions/finalized-session-controller'); -const authorization = require('../../../../lib/application/preHandlers/authorization'); -const moduleUnderTest = require('../../../../lib/application/sessions'); -const sessionSupervisorAuthorization = require('../../../../lib/application/preHandlers/session-supervisor-authorization'); +import fs from 'fs'; +import { writeFile, stat, unlink } from 'fs/promises'; + +import FormData from 'form-data'; +import streamToPromise from 'stream-to-promise'; +import { NotFoundError } from '../../../../lib/application/http-errors.js'; +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { sessionController } from '../../../../lib/application/sessions/session-controller.js'; +import { sessionForSupervisingController } from '../../../../lib/application/sessions/session-for-supervising-controller.js'; +import { sessionWithCleaCertifiedCandidateController } from '../../../../lib/application/sessions/session-with-clea-certified-candidate-controller.js'; +import { finalizedSessionController } from '../../../../lib/application/sessions/finalized-session-controller.js'; +import { authorization } from '../../../../lib/application/preHandlers/authorization.js'; +import * as moduleUnderTest from '../../../../lib/application/sessions/index.js'; +import { assessmentSupervisorAuthorization as sessionSupervisorAuthorization } from '../../../../lib/application/preHandlers/session-supervisor-authorization.js'; +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Unit | Application | Sessions | Routes', function () { describe('GET /api/sessions/{id}', function () { diff --git a/api/tests/unit/application/session/session-controller_test.js b/api/tests/unit/application/session/session-controller_test.js index 874db2e1eef..68527767167 100644 --- a/api/tests/unit/application/session/session-controller_test.js +++ b/api/tests/unit/application/session/session-controller_test.js @@ -1,15 +1,15 @@ -const { expect, sinon, hFake, domainBuilder, catchErr } = require('../../../test-helper'); -const sessionController = require('../../../../lib/application/sessions/session-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const UserAlreadyLinkedToCertificationCandidate = require('../../../../lib/domain/events/UserAlreadyLinkedToCertificationCandidate'); -const UserLinkedToCertificationCandidate = require('../../../../lib/domain/events/UserLinkedToCertificationCandidate'); -const { SessionPublicationBatchResult } = require('../../../../lib/domain/models/SessionPublicationBatchResult'); -const logger = require('../../../../lib/infrastructure/logger'); -const { SessionPublicationBatchError } = require('../../../../lib/application/http-errors'); -const certificationResultUtils = require('../../../../lib/infrastructure/utils/csv/certification-results.js'); -const queryParamsUtils = require('../../../../lib/infrastructure/utils/query-params-utils'); -const events = require('../../../../lib/domain/events'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +import { expect, sinon, hFake, domainBuilder, catchErr } from '../../../test-helper.js'; +import { sessionController } from '../../../../lib/application/sessions/session-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { UserAlreadyLinkedToCertificationCandidate } from '../../../../lib/domain/events/UserAlreadyLinkedToCertificationCandidate.js'; +import { UserLinkedToCertificationCandidate } from '../../../../lib/domain/events/UserLinkedToCertificationCandidate.js'; +import { SessionPublicationBatchResult } from '../../../../lib/domain/models/SessionPublicationBatchResult.js'; +import { logger } from '../../../../lib/infrastructure/logger.js'; +import { SessionPublicationBatchError } from '../../../../lib/application/http-errors.js'; +import * as certificationResultUtils from '../../../../lib/infrastructure/utils/csv/certification-results.js'; +import * as queryParamsUtils from '../../../../lib/infrastructure/utils/query-params-utils.js'; +import * as events from '../../../../lib/domain/events/index.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; describe('Unit | Controller | sessionController', function () { let request; @@ -1012,7 +1012,7 @@ describe('Unit | Controller | sessionController', function () { }; // when - await sessionController.delete(request, hFake); + await sessionController.remove(request, hFake); // then expect(usecases.deleteSession).to.have.been.calledWithExactly({ diff --git a/api/tests/unit/application/session/session-for-supervising-controller_test.js b/api/tests/unit/application/session/session-for-supervising-controller_test.js index c1bec19df4f..aaa3230d874 100644 --- a/api/tests/unit/application/session/session-for-supervising-controller_test.js +++ b/api/tests/unit/application/session/session-for-supervising-controller_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, hFake, domainBuilder } = require('../../../test-helper'); -const sessionForSupervisingController = require('../../../../lib/application/sessions/session-for-supervising-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const sessionForSupervisingSerializer = require('../../../../lib/infrastructure/serializers/jsonapi/session-for-supervising-serializer'); +import { expect, sinon, hFake, domainBuilder } from '../../../test-helper.js'; +import { sessionForSupervisingController } from '../../../../lib/application/sessions/session-for-supervising-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import * as sessionForSupervisingSerializer from '../../../../lib/infrastructure/serializers/jsonapi/session-for-supervising-serializer.js'; describe('Unit | Controller | session-for-supervising', function () { describe('#get', function () { diff --git a/api/tests/unit/application/session/session-with-clea-certified-candidate-controller_test.js b/api/tests/unit/application/session/session-with-clea-certified-candidate-controller_test.js index 9e539a6cdb7..f1bab8ae92a 100644 --- a/api/tests/unit/application/session/session-with-clea-certified-candidate-controller_test.js +++ b/api/tests/unit/application/session/session-with-clea-certified-candidate-controller_test.js @@ -1,6 +1,6 @@ -const { domainBuilder, sinon, hFake, expect } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const sessionWithCleaCertifiedCandidateController = require('../../../../lib/application/sessions/session-with-clea-certified-candidate-controller'); +import { domainBuilder, sinon, hFake, expect } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { sessionWithCleaCertifiedCandidateController } from '../../../../lib/application/sessions/session-with-clea-certified-candidate-controller.js'; describe('Unit | Controller | session-with-clea-certified-candidate', function () { describe('#getCleaCertifiedCandidateDataCsv', function () { diff --git a/api/tests/unit/application/tags/index_test.js b/api/tests/unit/application/tags/index_test.js index 1603ecad9bd..a73103c0001 100644 --- a/api/tests/unit/application/tags/index_test.js +++ b/api/tests/unit/application/tags/index_test.js @@ -1,8 +1,7 @@ -const { domainBuilder, expect, sinon, HttpTestServer } = require('../../../test-helper'); - -const moduleUnderTest = require('../../../../lib/application/tags'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const tagController = require('../../../../lib/application/tags/tag-controller'); +import { domainBuilder, expect, sinon, HttpTestServer } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { tagController } from '../../../../lib/application/tags/tag-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/tags/index.js'; describe('Unit | Application | Router | tag-router', function () { describe('GET /api/admin/tags', function () { diff --git a/api/tests/unit/application/tags/tag-controller_test.js b/api/tests/unit/application/tags/tag-controller_test.js index 21140d03d76..936ec711d6c 100644 --- a/api/tests/unit/application/tags/tag-controller_test.js +++ b/api/tests/unit/application/tags/tag-controller_test.js @@ -1,7 +1,6 @@ -const { expect, sinon, domainBuilder, hFake } = require('../../../test-helper'); - -const tagController = require('../../../../lib/application/tags/tag-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon, domainBuilder, hFake } from '../../../test-helper.js'; +import { tagController } from '../../../../lib/application/tags/tag-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | Application | Tags | tag-controller', function () { describe('#create', function () { diff --git a/api/tests/unit/application/target-profiles/index_test.js b/api/tests/unit/application/target-profiles/index_test.js index 44a0c2d35c3..5107a5265c8 100644 --- a/api/tests/unit/application/target-profiles/index_test.js +++ b/api/tests/unit/application/target-profiles/index_test.js @@ -1,7 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const targetProfileController = require('../../../../lib/application/target-profiles/target-profile-controller'); -const moduleUnderTest = require('../../../../lib/application/target-profiles'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { targetProfileController } from '../../../../lib/application/target-profiles/target-profile-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/target-profiles/index.js'; describe('Unit | Application | Target Profiles | Routes', function () { describe('GET /api/admin/target-profile-summaries', function () { diff --git a/api/tests/unit/application/target-profiles/target-profile-controller_test.js b/api/tests/unit/application/target-profiles/target-profile-controller_test.js index 982f5e7c831..46c0e4598fd 100644 --- a/api/tests/unit/application/target-profiles/target-profile-controller_test.js +++ b/api/tests/unit/application/target-profiles/target-profile-controller_test.js @@ -1,10 +1,7 @@ -const { expect, sinon, hFake, domainBuilder } = require('../../../test-helper'); -const targetProfileController = require('../../../../lib/application/target-profiles/target-profile-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const tokenService = require('../../../../lib/domain/services/token-service'); -const targetProfileAttachOrganizationSerializer = require('../../../../lib/infrastructure/serializers/jsonapi/target-profile-attach-organization-serializer'); -const learningContentPDFPresenter = require('../../../../lib/application/target-profiles/presenter/pdf/learning-content-pdf-presenter'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +import { expect, sinon, hFake, domainBuilder } from '../../../test-helper.js'; +import { targetProfileController } from '../../../../lib/application/target-profiles/target-profile-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; describe('Unit | Controller | target-profile-controller', function () { describe('#createTargetProfile', function () { @@ -103,10 +100,11 @@ describe('Unit | Controller | target-profile-controller', function () { describe('#attachOrganizations', function () { let request; + let targetProfileAttachOrganizationSerializer; beforeEach(function () { sinon.stub(usecases, 'attachOrganizationsToTargetProfile'); - sinon.stub(targetProfileAttachOrganizationSerializer, 'serialize'); + targetProfileAttachOrganizationSerializer = { serialize: sinon.stub() }; request = { params: { @@ -125,7 +123,9 @@ describe('Unit | Controller | target-profile-controller', function () { usecases.attachOrganizationsToTargetProfile.resolves(); targetProfileAttachOrganizationSerializer.serialize.returns(serializer); - const response = await targetProfileController.attachOrganizations(request, hFake); + const response = await targetProfileController.attachOrganizations(request, hFake, { + targetProfileAttachOrganizationSerializer, + }); // then expect(targetProfileAttachOrganizationSerializer.serialize).to.have.been.called; expect(response.statusCode).to.equal(200); @@ -134,7 +134,9 @@ describe('Unit | Controller | target-profile-controller', function () { it('should call usecase', async function () { // when - await targetProfileController.attachOrganizations(request, hFake); + await targetProfileController.attachOrganizations(request, hFake, { + targetProfileAttachOrganizationSerializer, + }); // then expect(usecases.attachOrganizationsToTargetProfile).to.have.been.calledOnce; @@ -234,10 +236,13 @@ describe('Unit | Controller | target-profile-controller', function () { accessToken, }, }; - sinon.stub(tokenService, 'extractUserId').withArgs(accessToken).returns(66); + const tokenService = { + extractUserId: sinon.stub(), + }; + tokenService.extractUserId.withArgs(accessToken).returns(66); // when - const response = await targetProfileController.getContentAsJsonFile(request, hFake); + const response = await targetProfileController.getContentAsJsonFile(request, hFake, { tokenService }); // then expect(response.source).to.equal('json_content'); @@ -257,10 +262,12 @@ describe('Unit | Controller | target-profile-controller', function () { .stub(usecases, 'getLearningContentByTargetProfile') .withArgs({ targetProfileId: 123, language: 'fr' }) .resolves(learningContent); - sinon - .stub(learningContentPDFPresenter, 'present') - .withArgs(learningContent, 'titre du doc', 'fr') - .resolves(pdfBuffer); + + const learningContentPDFPresenter = { + present: sinon.stub(), + }; + + learningContentPDFPresenter.present.withArgs(learningContent, 'titre du doc', 'fr').resolves(pdfBuffer); const request = { params: { id: 123, @@ -273,7 +280,9 @@ describe('Unit | Controller | target-profile-controller', function () { }; // when - const response = await targetProfileController.getLearningContentAsPdf(request, hFake); + const response = await targetProfileController.getLearningContentAsPdf(request, hFake, { + learningContentPDFPresenter, + }); // then expect(response.headers['Content-Disposition'].startsWith('attachment; filename=titre du doc_')).to.be.true; diff --git a/api/tests/unit/application/trainings/index_test.js b/api/tests/unit/application/trainings/index_test.js index 05be8b4198f..db7961b59d7 100644 --- a/api/tests/unit/application/trainings/index_test.js +++ b/api/tests/unit/application/trainings/index_test.js @@ -1,8 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const trainingController = require('../../../../lib/application/trainings/training-controller'); -const moduleUnderTest = require('../../../../lib/application/trainings'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { trainingController } from '../../../../lib/application/trainings/training-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/trainings/index.js'; describe('Unit | Router | training-router', function () { describe('GET /api/admin/trainings/${trainingId}', function () { diff --git a/api/tests/unit/application/trainings/training-controller_test.js b/api/tests/unit/application/trainings/training-controller_test.js index abc2867d85f..f71d7e2c631 100644 --- a/api/tests/unit/application/trainings/training-controller_test.js +++ b/api/tests/unit/application/trainings/training-controller_test.js @@ -1,8 +1,8 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); -const trainingController = require('../../../../lib/application/trainings/training-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const TrainingTrigger = require('../../../../lib/domain/models/TrainingTrigger'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { trainingController } from '../../../../lib/application/trainings/training-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { TrainingTrigger } from '../../../../lib/domain/models/TrainingTrigger.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; describe('Unit | Controller | training-controller', function () { describe('#findPaginatedTrainingSummaries', function () { diff --git a/api/tests/unit/application/tutorial-evaluations/index_test.js b/api/tests/unit/application/tutorial-evaluations/index_test.js index ba664e56daf..45cc89a8e6d 100644 --- a/api/tests/unit/application/tutorial-evaluations/index_test.js +++ b/api/tests/unit/application/tutorial-evaluations/index_test.js @@ -1,7 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const tutorialEvaluationsController = require('../../../../lib/application/tutorial-evaluations/tutorial-evaluations-controller'); -const moduleUnderTest = require('../../../../lib/application/tutorial-evaluations'); -const TutorialEvaluation = require('../../../../lib/domain/models/TutorialEvaluation'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { tutorialEvaluationsController } from '../../../../lib/application/tutorial-evaluations/tutorial-evaluations-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/tutorial-evaluations/index.js'; +import { TutorialEvaluation } from '../../../../lib/domain/models/TutorialEvaluation.js'; describe('Unit | Router | tutorial-evaluations-router', function () { describe('PUT /api/users/tutorials/{tutorialId}/evaluate', function () { diff --git a/api/tests/unit/application/tutorial-evaluations/tutorial-evaluations-controller_test.js b/api/tests/unit/application/tutorial-evaluations/tutorial-evaluations-controller_test.js index b4a8e807008..11bd3f85285 100644 --- a/api/tests/unit/application/tutorial-evaluations/tutorial-evaluations-controller_test.js +++ b/api/tests/unit/application/tutorial-evaluations/tutorial-evaluations-controller_test.js @@ -1,7 +1,7 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); -const tutorialEvaluationsController = require('../../../../lib/application/tutorial-evaluations/tutorial-evaluations-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const TutorialEvaluation = require('../../../../lib/domain/models/TutorialEvaluation'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { tutorialEvaluationsController } from '../../../../lib/application/tutorial-evaluations/tutorial-evaluations-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { TutorialEvaluation } from '../../../../lib/domain/models/TutorialEvaluation.js'; describe('Unit | Controller | Tutorial-evaluations', function () { describe('#evaluate', function () { diff --git a/api/tests/unit/application/usecases/checkAdminMemberHasRoleCertif_test.js b/api/tests/unit/application/usecases/checkAdminMemberHasRoleCertif_test.js index c2581d9b4e3..1b03f247dc8 100644 --- a/api/tests/unit/application/usecases/checkAdminMemberHasRoleCertif_test.js +++ b/api/tests/unit/application/usecases/checkAdminMemberHasRoleCertif_test.js @@ -1,10 +1,11 @@ -const { expect, sinon } = require('../../../test-helper'); -const useCase = require('../../../../lib/application/usecases/checkAdminMemberHasRoleCertif'); -const tokenService = require('../../../../lib/domain/services/token-service'); +import { expect, sinon } from '../../../test-helper.js'; +import { tokenService } from '../../../../lib/domain/services/token-service.js'; +import * as useCase from '../../../../lib/application/usecases/checkAdminMemberHasRoleCertif.js'; describe('Unit | Application | Use Case | checkAdminMemberHasRoleCertifUseCase', function () { const userId = '1234'; let adminMemberRepositoryStub; + beforeEach(function () { sinon.stub(tokenService, 'extractUserId').resolves(userId); adminMemberRepositoryStub = { diff --git a/api/tests/unit/application/usecases/checkAdminMemberHasRolePixMetier_test.js b/api/tests/unit/application/usecases/checkAdminMemberHasRolePixMetier_test.js index 4d4877d7f95..49857a3e363 100644 --- a/api/tests/unit/application/usecases/checkAdminMemberHasRolePixMetier_test.js +++ b/api/tests/unit/application/usecases/checkAdminMemberHasRolePixMetier_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const useCase = require('../../../../lib/application/usecases/checkAdminMemberHasRoleMetier'); -const tokenService = require('../../../../lib/domain/services/token-service'); +import { expect, sinon } from '../../../test-helper.js'; +import { tokenService } from '../../../../lib/domain/services/token-service.js'; +import * as useCase from '../../../../lib/application/usecases/checkAdminMemberHasRoleMetier.js'; describe('Unit | Application | Use Case | checkAdminMemberHasRoleMetier', function () { const userId = '1234'; diff --git a/api/tests/unit/application/usecases/checkAdminMemberHasRolePixSupport_test.js b/api/tests/unit/application/usecases/checkAdminMemberHasRolePixSupport_test.js index f4e0ea821f2..fa7a2dfd7dd 100644 --- a/api/tests/unit/application/usecases/checkAdminMemberHasRolePixSupport_test.js +++ b/api/tests/unit/application/usecases/checkAdminMemberHasRolePixSupport_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const useCase = require('../../../../lib/application/usecases/checkAdminMemberHasRoleSupport'); -const tokenService = require('../../../../lib/domain/services/token-service'); +import { expect, sinon } from '../../../test-helper.js'; +import { tokenService } from '../../../../lib/domain/services/token-service.js'; +import * as useCase from '../../../../lib/application/usecases/checkAdminMemberHasRoleSupport.js'; describe('Unit | Application | Use Case | checkAdminMemberHasRoleSupport', function () { const userId = '1234'; diff --git a/api/tests/unit/application/usecases/checkAdminMemberHasRoleSuperAdmin_test.js b/api/tests/unit/application/usecases/checkAdminMemberHasRoleSuperAdmin_test.js index 2b9bd125f71..d15ea4cb35a 100644 --- a/api/tests/unit/application/usecases/checkAdminMemberHasRoleSuperAdmin_test.js +++ b/api/tests/unit/application/usecases/checkAdminMemberHasRoleSuperAdmin_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const useCase = require('../../../../lib/application/usecases/checkAdminMemberHasRoleSuperAdmin'); -const tokenService = require('../../../../lib/domain/services/token-service'); +import { expect, sinon } from '../../../test-helper.js'; +import { tokenService } from '../../../../lib/domain/services/token-service.js'; +import * as useCase from '../../../../lib/application/usecases/checkAdminMemberHasRoleSuperAdmin.js'; describe('Unit | Application | Use Case | checkAdminMemberHasRoleSuperAdmin', function () { const userId = '1234'; diff --git a/api/tests/unit/application/usecases/checkOrganizationIsScoAndManagingStudent_test.js b/api/tests/unit/application/usecases/checkOrganizationIsScoAndManagingStudent_test.js index 4e7dc3aed84..0502afebe8f 100644 --- a/api/tests/unit/application/usecases/checkOrganizationIsScoAndManagingStudent_test.js +++ b/api/tests/unit/application/usecases/checkOrganizationIsScoAndManagingStudent_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const useCase = require('../../../../lib/application/usecases/checkOrganizationIsScoAndManagingStudent'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import * as useCase from '../../../../lib/application/usecases/checkOrganizationIsScoAndManagingStudent.js'; describe('Unit | Application | Use Case | checkOrganizationIsScoAndManagingStudent', function () { context('When organization is SCO managing students', function () { diff --git a/api/tests/unit/application/usecases/checkPix1dEnabled_test.js b/api/tests/unit/application/usecases/checkPix1dEnabled_test.js index ae611f35d05..1edb3d79825 100644 --- a/api/tests/unit/application/usecases/checkPix1dEnabled_test.js +++ b/api/tests/unit/application/usecases/checkPix1dEnabled_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const useCase = require('../../../../lib/application/usecases/checkPix1dEnabled'); -const settings = require('../../../../lib/config'); +import { expect, sinon } from '../../../test-helper.js'; +import * as useCase from '../../../../lib/application/usecases/checkPix1dEnabled.js'; +import { config as settings } from '../../../../lib/config.js'; describe('Unit | Application | Use Case | checkPix1dEnabled', function () { it('should resolve true when the admin member has role super admin', async function () { diff --git a/api/tests/unit/application/usecases/checkUserBelongsToLearnersOrganization_test.js b/api/tests/unit/application/usecases/checkUserBelongsToLearnersOrganization_test.js index 9cca3e08988..1ba7a9268c5 100644 --- a/api/tests/unit/application/usecases/checkUserBelongsToLearnersOrganization_test.js +++ b/api/tests/unit/application/usecases/checkUserBelongsToLearnersOrganization_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const usecase = require('../../../../lib/application/usecases/checkUserBelongsToLearnersOrganization'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import * as usecase from '../../../../lib/application/usecases/checkUserBelongsToLearnersOrganization.js'; describe('Unit | Application | Use Case | checkUserBelongsToLearnersOrganization', function () { let membershipRepositoryStub; diff --git a/api/tests/unit/application/usecases/checkUserBelongsToOrganizationManagingStudents_test.js b/api/tests/unit/application/usecases/checkUserBelongsToOrganizationManagingStudents_test.js index 9dd271a87d7..94bb9ad73b7 100644 --- a/api/tests/unit/application/usecases/checkUserBelongsToOrganizationManagingStudents_test.js +++ b/api/tests/unit/application/usecases/checkUserBelongsToOrganizationManagingStudents_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const usecase = require('../../../../lib/application/usecases/checkUserBelongsToOrganizationManagingStudents'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import * as usecase from '../../../../lib/application/usecases/checkUserBelongsToOrganizationManagingStudents.js'; describe('Unit | Application | Use Case | checkUserBelongsToOrganizationManagingStudents', function () { let membershipRepositoryStub; diff --git a/api/tests/unit/application/usecases/checkUserBelongsToOrganization_test.js b/api/tests/unit/application/usecases/checkUserBelongsToOrganization_test.js index ceb017b3799..8340baf27ad 100644 --- a/api/tests/unit/application/usecases/checkUserBelongsToOrganization_test.js +++ b/api/tests/unit/application/usecases/checkUserBelongsToOrganization_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const useCase = require('../../../../lib/application/usecases/checkUserBelongsToOrganization'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import * as useCase from '../../../../lib/application/usecases/checkUserBelongsToOrganization.js'; describe('Unit | Application | Use Case | checkUserBelongsToOrganization', function () { let membershipRepositoryStub; diff --git a/api/tests/unit/application/usecases/checkUserBelongsToScoOrganizationAndManagesStudents_test.js b/api/tests/unit/application/usecases/checkUserBelongsToScoOrganizationAndManagesStudents_test.js index 3d9b97af91c..1dc022ae32e 100644 --- a/api/tests/unit/application/usecases/checkUserBelongsToScoOrganizationAndManagesStudents_test.js +++ b/api/tests/unit/application/usecases/checkUserBelongsToScoOrganizationAndManagesStudents_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const useCase = require('../../../../lib/application/usecases/checkUserBelongsToScoOrganizationAndManagesStudents'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import * as useCase from '../../../../lib/application/usecases/checkUserBelongsToScoOrganizationAndManagesStudents.js'; describe('Unit | Application | Use Case | checkUserBelongsToScoOrganizationAndManagesStudents', function () { let membershipRepositoryStub; diff --git a/api/tests/unit/application/usecases/checkUserBelongsToSupOrganizationAndManagesStudents_test.js b/api/tests/unit/application/usecases/checkUserBelongsToSupOrganizationAndManagesStudents_test.js index dff54f02dce..135a67e939b 100644 --- a/api/tests/unit/application/usecases/checkUserBelongsToSupOrganizationAndManagesStudents_test.js +++ b/api/tests/unit/application/usecases/checkUserBelongsToSupOrganizationAndManagesStudents_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const useCase = require('../../../../lib/application/usecases/checkUserBelongsToSupOrganizationAndManagesStudents'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import * as useCase from '../../../../lib/application/usecases/checkUserBelongsToSupOrganizationAndManagesStudents.js'; describe('Unit | Application | Use Case | checkUserBelongsToSupOrganizationAndManagesStudents', function () { let membershipRepositoryStub; diff --git a/api/tests/unit/application/usecases/checkUserIsAdminInOrganization_test.js b/api/tests/unit/application/usecases/checkUserIsAdminInOrganization_test.js index e453b1929fd..1bb99d0ed94 100644 --- a/api/tests/unit/application/usecases/checkUserIsAdminInOrganization_test.js +++ b/api/tests/unit/application/usecases/checkUserIsAdminInOrganization_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const useCase = require('../../../../lib/application/usecases/checkUserIsAdminInOrganization'); -const Membership = require('../../../../lib/domain/models/Membership'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import * as useCase from '../../../../lib/application/usecases/checkUserIsAdminInOrganization.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; describe('Unit | Application | Use Case | CheckUserIsAdminInOrganization', function () { let membershipRepositoryStub; diff --git a/api/tests/unit/application/usecases/checkUserIsMemberOfCertificationCenterSession_test.js b/api/tests/unit/application/usecases/checkUserIsMemberOfCertificationCenterSession_test.js index dee014635da..7f9078a0d37 100644 --- a/api/tests/unit/application/usecases/checkUserIsMemberOfCertificationCenterSession_test.js +++ b/api/tests/unit/application/usecases/checkUserIsMemberOfCertificationCenterSession_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const usecase = require('../../../../lib/application/usecases/checkUserIsMemberOfCertificationCenterSession'); +import { expect, sinon } from '../../../test-helper.js'; +import * as usecase from '../../../../lib/application/usecases/checkUserIsMemberOfCertificationCenterSession.js'; describe('Unit | Application | Use Case | CheckUserIsMemberOfCertificationCenterSession', function () { let certificationCourseRepositoryStub; diff --git a/api/tests/unit/application/usecases/checkUserIsMemberOfCertificationCenter_test.js b/api/tests/unit/application/usecases/checkUserIsMemberOfCertificationCenter_test.js index 0efaf662744..9e068d2edea 100644 --- a/api/tests/unit/application/usecases/checkUserIsMemberOfCertificationCenter_test.js +++ b/api/tests/unit/application/usecases/checkUserIsMemberOfCertificationCenter_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const usecase = require('../../../../lib/application/usecases/checkUserIsMemberOfCertificationCenter'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import * as usecase from '../../../../lib/application/usecases/checkUserIsMemberOfCertificationCenter.js'; describe('Unit | Application | Use Case | CheckUserIsMemberOfCertificationCenter', function () { let certificationCenterMembershipRepositoryStub; diff --git a/api/tests/unit/application/usecases/checkUserOwnsCertificationCourse_test.js b/api/tests/unit/application/usecases/checkUserOwnsCertificationCourse_test.js index 7ea14ce0541..41a7f6d3225 100644 --- a/api/tests/unit/application/usecases/checkUserOwnsCertificationCourse_test.js +++ b/api/tests/unit/application/usecases/checkUserOwnsCertificationCourse_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const usecase = require('../../../../lib/application/usecases/checkUserOwnsCertificationCourse'); +import { expect, sinon } from '../../../test-helper.js'; +import * as usecase from '../../../../lib/application/usecases/checkUserOwnsCertificationCourse.js'; describe('Unit | Application | Use Case | checkUserOwnsCertificationCourse', function () { context('When user is member of certification center session', function () { diff --git a/api/tests/unit/application/user-orga-settings/index_test.js b/api/tests/unit/application/user-orga-settings/index_test.js index b00cfa3ac43..22d570d8c0a 100644 --- a/api/tests/unit/application/user-orga-settings/index_test.js +++ b/api/tests/unit/application/user-orga-settings/index_test.js @@ -1,6 +1,6 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const userOrgaSettingsController = require('../../../../lib/application/user-orga-settings/user-orga-settings-controller'); -const moduleUnderTest = require('../../../../lib/application/user-orga-settings'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { userOrgaSettingsController } from '../../../../lib/application/user-orga-settings/user-orga-settings-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/user-orga-settings/index.js'; describe('Unit | Router | user-orga-settings-router', function () { describe('PUT /api/user-orga-settings/{id}', function () { diff --git a/api/tests/unit/application/user-orga-settings/user-orga-settings-controller_test.js b/api/tests/unit/application/user-orga-settings/user-orga-settings-controller_test.js index 0573b29fcea..c9b0f51fcee 100644 --- a/api/tests/unit/application/user-orga-settings/user-orga-settings-controller_test.js +++ b/api/tests/unit/application/user-orga-settings/user-orga-settings-controller_test.js @@ -1,8 +1,6 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); - -const userOrgaSettingsController = require('../../../../lib/application/user-orga-settings/user-orga-settings-controller'); - -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { userOrgaSettingsController } from '../../../../lib/application/user-orga-settings/user-orga-settings-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | Controller | user-orga-settings-controller', function () { describe('#createOrUpdate', function () { diff --git a/api/tests/unit/application/user-tutorials/index_test.js b/api/tests/unit/application/user-tutorials/index_test.js index b14fbbd4927..ab49011dd46 100644 --- a/api/tests/unit/application/user-tutorials/index_test.js +++ b/api/tests/unit/application/user-tutorials/index_test.js @@ -1,7 +1,7 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const userTutorialsController = require('../../../../lib/application/user-tutorials/user-tutorials-controller'); -const moduleUnderTest = require('../../../../lib/application/user-tutorials'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { userTutorialsController } from '../../../../lib/application/user-tutorials/user-tutorials-controller.js'; +import * as moduleUnderTest from '../../../../lib/application/user-tutorials/index.js'; describe('Unit | Router | user-tutorials-router', function () { describe('GET /api/users/{userId}/tutorials', function () { diff --git a/api/tests/unit/application/user-tutorials/user-tutorials-controller_test.js b/api/tests/unit/application/user-tutorials/user-tutorials-controller_test.js index e2ae00b948a..dca25c5514d 100644 --- a/api/tests/unit/application/user-tutorials/user-tutorials-controller_test.js +++ b/api/tests/unit/application/user-tutorials/user-tutorials-controller_test.js @@ -1,6 +1,6 @@ -const { sinon, expect, hFake } = require('../../../test-helper'); -const userTutorialsController = require('../../../../lib/application/user-tutorials/user-tutorials-controller'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { sinon, expect, hFake } from '../../../test-helper.js'; +import { userTutorialsController } from '../../../../lib/application/user-tutorials/user-tutorials-controller.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | Controller | User-tutorials', function () { describe('#add', function () { diff --git a/api/tests/unit/application/users/index_test.js b/api/tests/unit/application/users/index_test.js index 53ff847f433..14768ec5900 100644 --- a/api/tests/unit/application/users/index_test.js +++ b/api/tests/unit/application/users/index_test.js @@ -1,10 +1,9 @@ -const { expect, HttpTestServer, sinon } = require('../../../test-helper'); - -const securityPreHandlers = require('../../../../lib/application/security-pre-handlers'); -const userVerification = require('../../../../lib/application/preHandlers/user-existence-verification'); -const userController = require('../../../../lib/application/users/user-controller'); -const moduleUnderTest = require('../../../../lib/application/users'); -const OidcIdentityProviders = require('../../../../lib/domain/constants/oidc-identity-providers'); +import { expect, HttpTestServer, sinon } from '../../../test-helper.js'; +import { securityPreHandlers } from '../../../../lib/application/security-pre-handlers.js'; +import { userVerification } from '../../../../lib/application/preHandlers/user-existence-verification.js'; +import { userController } from '../../../../lib/application/users/user-controller.js'; +import * as OidcIdentityProviders from '../../../../lib/domain/constants/oidc-identity-providers.js'; +import * as moduleUnderTest from '../../../../lib/application/users/index.js'; describe('Unit | Router | user-router', function () { describe('POST /api/users', function () { diff --git a/api/tests/unit/application/users/user-controller_test.js b/api/tests/unit/application/users/user-controller_test.js index 85a97946bfb..25fc673f3e5 100644 --- a/api/tests/unit/application/users/user-controller_test.js +++ b/api/tests/unit/application/users/user-controller_test.js @@ -1,15 +1,12 @@ -const { sinon, expect, domainBuilder, hFake } = require('../../../test-helper'); - -const User = require('../../../../lib/domain/models/User'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); -const queryParamsUtils = require('../../../../lib/infrastructure/utils/query-params-utils'); -const requestResponseUtils = require('../../../../lib/infrastructure/utils/request-response-utils'); -const { getI18n } = require('../../../tooling/i18n/i18n'); - -const usecases = require('../../../../lib/domain/usecases/index.js'); - -const userController = require('../../../../lib/application/users/user-controller'); -const UserOrganizationForAdmin = require('../../../../lib/domain/read-models/UserOrganizationForAdmin'); +import { sinon, expect, domainBuilder, hFake } from '../../../test-helper.js'; +import { User } from '../../../../lib/domain/models/User.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; +import * as queryParamsUtils from '../../../../lib/infrastructure/utils/query-params-utils.js'; +import * as requestResponseUtils from '../../../../lib/infrastructure/utils/request-response-utils.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { userController } from '../../../../lib/application/users/user-controller.js'; +import { UserOrganizationForAdmin } from '../../../../lib/domain/read-models/UserOrganizationForAdmin.js'; describe('Unit | Controller | user-controller', function () { let userSerializer; diff --git a/api/tests/unit/domain/errors_test.js b/api/tests/unit/domain/errors_test.js index 802b2ef9dea..85971841f2d 100644 --- a/api/tests/unit/domain/errors_test.js +++ b/api/tests/unit/domain/errors_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../test-helper'); -const errors = require('../../../lib/domain/errors'); +import { expect } from '../../test-helper.js'; +import * as errors from '../../../lib/domain/errors.js'; describe('Unit | Domain | Errors', function () { it('should export a AdminMemberError', function () { diff --git a/api/tests/unit/domain/events/AssessmentCompleted_test.js b/api/tests/unit/domain/events/AssessmentCompleted_test.js index 2509d8cee96..5b4f55c888d 100644 --- a/api/tests/unit/domain/events/AssessmentCompleted_test.js +++ b/api/tests/unit/domain/events/AssessmentCompleted_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const AssessmentCompleted = require('../../../../lib/domain/events/AssessmentCompleted'); +import { expect } from '../../../test-helper.js'; +import { AssessmentCompleted } from '../../../../lib/domain/events/AssessmentCompleted.js'; describe('Unit | Domain | Events | AssessmentCompleted', function () { describe('#isCertificationType', function () { diff --git a/api/tests/unit/domain/events/check-event-type_test.js b/api/tests/unit/domain/events/check-event-type_test.js index 64f10e3b584..7cf492dd158 100644 --- a/api/tests/unit/domain/events/check-event-type_test.js +++ b/api/tests/unit/domain/events/check-event-type_test.js @@ -1,5 +1,5 @@ -const { expect, catchErr } = require('../../../test-helper'); -const { checkEventTypes } = require('../../../../lib/domain/events/check-event-types'); +import { expect, catchErr } from '../../../test-helper.js'; +import { checkEventTypes } from '../../../../lib/domain/events/check-event-types.js'; describe('Unit | Domain | Events | check-event-types', function () { it('throw with right message when event of wrong type ', async function () { diff --git a/api/tests/unit/domain/events/event-choreography-certification-rescoring-after-jury_test.js b/api/tests/unit/domain/events/event-choreography-certification-rescoring-after-jury_test.js index 136059a386b..b1beb7844a9 100644 --- a/api/tests/unit/domain/events/event-choreography-certification-rescoring-after-jury_test.js +++ b/api/tests/unit/domain/events/event-choreography-certification-rescoring-after-jury_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const buildEventDispatcherAndHandlersForTest = require('../../../tooling/events/event-dispatcher-builder'); -const CertificationJuryDone = require('../../../../lib/domain/events/CertificationJuryDone'); +import { expect } from '../../../test-helper.js'; +import { buildEventDispatcherAndHandlersForTest } from '../../../tooling/events/event-dispatcher-builder.js'; +import { CertificationJuryDone } from '../../../../lib/domain/events/CertificationJuryDone.js'; describe('Event Choreography | CertificationJuryDone', function () { it('Should trigger the certification rescoring', async function () { diff --git a/api/tests/unit/domain/events/event-choreography-finalized-session_test.js b/api/tests/unit/domain/events/event-choreography-finalized-session_test.js index e4ee5f51cd5..b04c5f71e8d 100644 --- a/api/tests/unit/domain/events/event-choreography-finalized-session_test.js +++ b/api/tests/unit/domain/events/event-choreography-finalized-session_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../test-helper'); -const buildEventDispatcherAndHandlersForTest = require('../../../tooling/events/event-dispatcher-builder'); -const SessionFinalized = require('../../../../lib/domain/events/SessionFinalized'); -const AutoJuryDone = require('../../../../lib/domain/events/AutoJuryDone'); +import { expect } from '../../../test-helper.js'; +import { buildEventDispatcherAndHandlersForTest } from '../../../tooling/events/event-dispatcher-builder.js'; +import { SessionFinalized } from '../../../../lib/domain/events/SessionFinalized.js'; +import { AutoJuryDone } from '../../../../lib/domain/events/AutoJuryDone.js'; describe('Event Choreography | Finalized session', function () { it('Should trigger the automated jury', async function () { diff --git a/api/tests/unit/domain/events/event-choreography-pole-emploi-participation-finished_test.js b/api/tests/unit/domain/events/event-choreography-pole-emploi-participation-finished_test.js index 59ecfdef25d..14cdb27bd60 100644 --- a/api/tests/unit/domain/events/event-choreography-pole-emploi-participation-finished_test.js +++ b/api/tests/unit/domain/events/event-choreography-pole-emploi-participation-finished_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const buildEventDispatcherAndHandlersForTest = require('../../../tooling/events/event-dispatcher-builder'); -const AssessmentCompleted = require('../../../../lib/domain/events/AssessmentCompleted'); +import { expect } from '../../../test-helper.js'; +import { buildEventDispatcherAndHandlersForTest } from '../../../tooling/events/event-dispatcher-builder.js'; +import { AssessmentCompleted } from '../../../../lib/domain/events/AssessmentCompleted.js'; describe('Event Choreography | Pole Emploi Participation Finished', function () { it('Should trigger Pole Emploi participation finished handler on AssessmentCompleted event', async function () { diff --git a/api/tests/unit/domain/events/event-choreography-pole-emploi-participation-started_test.js b/api/tests/unit/domain/events/event-choreography-pole-emploi-participation-started_test.js index bd273197180..5a5ade25795 100644 --- a/api/tests/unit/domain/events/event-choreography-pole-emploi-participation-started_test.js +++ b/api/tests/unit/domain/events/event-choreography-pole-emploi-participation-started_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const buildEventDispatcherAndHandlersForTest = require('../../../tooling/events/event-dispatcher-builder'); -const CampaignParticipationStarted = require('../../../../lib/domain/events/CampaignParticipationStarted'); +import { expect } from '../../../test-helper.js'; +import { buildEventDispatcherAndHandlersForTest } from '../../../tooling/events/event-dispatcher-builder.js'; +import { CampaignParticipationStarted } from '../../../../lib/domain/events/CampaignParticipationStarted.js'; describe('Event Choreography | Pole Emploi Participation Started', function () { it('Should trigger Pole Emploi participation started handler on CampaignParticipationStarted event', async function () { diff --git a/api/tests/unit/domain/events/event-choreography-rescore-certification_test.js b/api/tests/unit/domain/events/event-choreography-rescore-certification_test.js index cf3ff212c55..41d8ee5442f 100644 --- a/api/tests/unit/domain/events/event-choreography-rescore-certification_test.js +++ b/api/tests/unit/domain/events/event-choreography-rescore-certification_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../test-helper'); -const buildEventDispatcherAndHandlersForTest = require('../../../tooling/events/event-dispatcher-builder'); -const ChallengeNeutralized = require('../../../../lib/domain/events/ChallengeNeutralized'); -const ChallengeDeneutralized = require('../../../../lib/domain/events/ChallengeDeneutralized'); +import { expect } from '../../../test-helper.js'; +import { buildEventDispatcherAndHandlersForTest } from '../../../tooling/events/event-dispatcher-builder.js'; +import { ChallengeNeutralized } from '../../../../lib/domain/events/ChallengeNeutralized.js'; +import { ChallengeDeneutralized } from '../../../../lib/domain/events/ChallengeDeneutralized.js'; describe('Event Choreography | Rescore Certification', function () { it('Should trigger Certification Rescoring handler on ChallengeNeutralized event', async function () { diff --git a/api/tests/unit/domain/events/event-choreography-score-certification_test.js b/api/tests/unit/domain/events/event-choreography-score-certification_test.js index 75d341b1dfc..8a972e1387f 100644 --- a/api/tests/unit/domain/events/event-choreography-score-certification_test.js +++ b/api/tests/unit/domain/events/event-choreography-score-certification_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const buildEventDispatcherAndHandlersForTest = require('../../../tooling/events/event-dispatcher-builder'); -const AssessmentCompleted = require('../../../../lib/domain/events/AssessmentCompleted'); +import { expect } from '../../../test-helper.js'; +import { buildEventDispatcherAndHandlersForTest } from '../../../tooling/events/event-dispatcher-builder.js'; +import { AssessmentCompleted } from '../../../../lib/domain/events/AssessmentCompleted.js'; describe('Event Choreography | Score Certification', function () { it('Should trigger Certification Scoring handler on Assessment Completed event', async function () { diff --git a/api/tests/unit/domain/events/event-choreography-score-pix-plus-certification_test.js b/api/tests/unit/domain/events/event-choreography-score-pix-plus-certification_test.js index 22d8c46b3ef..b0c5c88251c 100644 --- a/api/tests/unit/domain/events/event-choreography-score-pix-plus-certification_test.js +++ b/api/tests/unit/domain/events/event-choreography-score-pix-plus-certification_test.js @@ -1,8 +1,8 @@ -const { expect } = require('../../../test-helper'); -const buildEventDispatcherAndHandlersForTest = require('../../../tooling/events/event-dispatcher-builder'); -const AssessmentCompleted = require('../../../../lib/domain/events/AssessmentCompleted'); -const CertificationScoringCompleted = require('../../../../lib/domain/events/CertificationScoringCompleted'); -const CertificationRescoringCompleted = require('../../../../lib/domain/events/CertificationRescoringCompleted'); +import { expect } from '../../../test-helper.js'; +import { buildEventDispatcherAndHandlersForTest } from '../../../tooling/events/event-dispatcher-builder.js'; +import { AssessmentCompleted } from '../../../../lib/domain/events/AssessmentCompleted.js'; +import { CertificationScoringCompleted } from '../../../../lib/domain/events/CertificationScoringCompleted.js'; +import { CertificationRescoringCompleted } from '../../../../lib/domain/events/CertificationRescoringCompleted.js'; describe('Event Choreography | Score Pix+ Certification', function () { it('chains Certification Scoring and Pix+ Certification Scoring on Certification Scoring Completed', async function () { diff --git a/api/tests/unit/domain/events/handle-auto-jury_test.js b/api/tests/unit/domain/events/handle-auto-jury_test.js index 45055f168d3..898eabdf30a 100644 --- a/api/tests/unit/domain/events/handle-auto-jury_test.js +++ b/api/tests/unit/domain/events/handle-auto-jury_test.js @@ -1,13 +1,13 @@ -const { sinon, expect, catchErr, domainBuilder } = require('../../../test-helper'); -const handleAutoJury = require('../../../../lib/domain/events/handle-auto-jury'); -const SessionFinalized = require('../../../../lib/domain/events/SessionFinalized'); -const AutoJuryDone = require('../../../../lib/domain/events/AutoJuryDone'); -const CertificationJuryDone = require('../../../../lib/domain/events/CertificationJuryDone'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const { +import { sinon, expect, catchErr, domainBuilder } from '../../../test-helper.js'; +import { handleAutoJury } from '../../../../lib/domain/events/handle-auto-jury.js'; +import { SessionFinalized } from '../../../../lib/domain/events/SessionFinalized.js'; +import { AutoJuryDone } from '../../../../lib/domain/events/AutoJuryDone.js'; +import { CertificationJuryDone } from '../../../../lib/domain/events/CertificationJuryDone.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { CertificationIssueReportSubcategories, - CertificationIssueReportCategories, -} = require('../../../../lib/domain/models/CertificationIssueReportCategory'); + CertificationIssueReportCategory, +} from '../../../../lib/domain/models/CertificationIssueReportCategory.js'; describe('Unit | Domain | Events | handle-auto-jury', function () { it('fails when event is not of correct type', async function () { @@ -49,12 +49,12 @@ describe('Unit | Domain | Events | handle-auto-jury', function () { }); const certificationCourse = domainBuilder.buildCertificationCourse(); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, subcategory: CertificationIssueReportSubcategories.WEBSITE_BLOCKED, questionNumber: 1, }); const certificationIssueReport2 = domainBuilder.buildCertificationIssueReport({ - category: CertificationIssueReportCategories.FRAUD, + category: CertificationIssueReportCategory.FRAUD, subcategory: undefined, questionNumber: 1, }); @@ -170,7 +170,7 @@ describe('Unit | Domain | Events | handle-auto-jury', function () { }); const certificationCourse = domainBuilder.buildCertificationCourse(); const certificationIssueReport1 = domainBuilder.buildCertificationIssueReport({ - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, subcategory: CertificationIssueReportSubcategories.WEBSITE_BLOCKED, questionNumber: 1, }); @@ -593,7 +593,7 @@ describe('Unit | Domain | Events | handle-auto-jury', function () { }); const certificationCourse = domainBuilder.buildCertificationCourse({ id: 4567, sessionId: 1234 }); const certificationIssueReport1 = domainBuilder.buildCertificationIssueReport({ - category: CertificationIssueReportCategories.FRAUD, + category: CertificationIssueReportCategory.FRAUD, subcategory: null, questionNumber: 1, }); @@ -659,12 +659,12 @@ describe('Unit | Domain | Events | handle-auto-jury', function () { }); const certificationCourse = domainBuilder.buildCertificationCourse({ id: 4567, sessionId: 1234 }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, subcategory: CertificationIssueReportSubcategories.IMAGE_NOT_DISPLAYING, questionNumber: 1, }); const certificationIssueReport2 = domainBuilder.buildCertificationIssueReport({ - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, subcategory: CertificationIssueReportSubcategories.WEBSITE_BLOCKED, questionNumber: 1, }); diff --git a/api/tests/unit/domain/events/handle-certification-rescoring_test.js b/api/tests/unit/domain/events/handle-certification-rescoring_test.js index 9f92cfc9f10..9d274d33b75 100644 --- a/api/tests/unit/domain/events/handle-certification-rescoring_test.js +++ b/api/tests/unit/domain/events/handle-certification-rescoring_test.js @@ -1,12 +1,13 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const { handleCertificationRescoring } = require('../../../../lib/domain/events')._forTestOnly.handlers; -const ChallengeNeutralized = require('../../../../lib/domain/events/ChallengeNeutralized'); -const ChallengeDeneutralized = require('../../../../lib/domain/events/ChallengeDeneutralized'); -const CertificationJuryDone = require('../../../../lib/domain/events/CertificationJuryDone'); -const CertificationAssessment = require('../../../../lib/domain/models/CertificationAssessment'); -const CertificationResult = require('../../../../lib/domain/models/CertificationResult'); -const AssessmentResult = require('../../../../lib/domain/models/AssessmentResult'); -const { CertificationComputeError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { _forTestOnly } from '../../../../lib/domain/events/index.js'; +const { handleCertificationRescoring } = _forTestOnly.handlers; +import { ChallengeNeutralized } from '../../../../lib/domain/events/ChallengeNeutralized.js'; +import { ChallengeDeneutralized } from '../../../../lib/domain/events/ChallengeDeneutralized.js'; +import { CertificationJuryDone } from '../../../../lib/domain/events/CertificationJuryDone.js'; +import { CertificationAssessment } from '../../../../lib/domain/models/CertificationAssessment.js'; +import { CertificationResult } from '../../../../lib/domain/models/CertificationResult.js'; +import { AssessmentResult } from '../../../../lib/domain/models/AssessmentResult.js'; +import { CertificationComputeError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Events | handle-certification-rescoring', function () { it('computes and persists the assessment result and competence marks when computation succeeds', async function () { diff --git a/api/tests/unit/domain/events/handle-certification-scoring_test.js b/api/tests/unit/domain/events/handle-certification-scoring_test.js index 2258cb21167..e091bf9485d 100644 --- a/api/tests/unit/domain/events/handle-certification-scoring_test.js +++ b/api/tests/unit/domain/events/handle-certification-scoring_test.js @@ -1,10 +1,11 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const { handleCertificationScoring } = require('../../../../lib/domain/events')._forTestOnly.handlers; -const AssessmentResult = require('../../../../lib/domain/models/AssessmentResult'); -const { CertificationComputeError } = require('../../../../lib/domain/errors'); -const AssessmentCompleted = require('../../../../lib/domain/events/AssessmentCompleted'); -const CertificationCourse = require('../../../../lib/domain/models/CertificationCourse'); -const CertificationScoringCompleted = require('../../../../lib/domain/events/CertificationScoringCompleted'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { _forTestOnly } from '../../../../lib/domain/events/index.js'; +const { handleCertificationScoring } = _forTestOnly.handlers; +import { AssessmentResult } from '../../../../lib/domain/models/AssessmentResult.js'; +import { CertificationComputeError } from '../../../../lib/domain/errors.js'; +import { AssessmentCompleted } from '../../../../lib/domain/events/AssessmentCompleted.js'; +import { CertificationCourse } from '../../../../lib/domain/models/CertificationCourse.js'; +import { CertificationScoringCompleted } from '../../../../lib/domain/events/CertificationScoringCompleted.js'; describe('Unit | Domain | Events | handle-certification-scoring', function () { let scoringCertificationService; diff --git a/api/tests/unit/domain/events/handle-complementary-certifications-scoring_test.js b/api/tests/unit/domain/events/handle-complementary-certifications-scoring_test.js index b6341e88d0c..17c0bea0f99 100644 --- a/api/tests/unit/domain/events/handle-complementary-certifications-scoring_test.js +++ b/api/tests/unit/domain/events/handle-complementary-certifications-scoring_test.js @@ -1,7 +1,8 @@ -const { ReproducibilityRate } = require('../../../../lib/domain/models/ReproducibilityRate'); -const ComplementaryCertificationCourseResult = require('../../../../lib/domain/models/ComplementaryCertificationCourseResult'); -const { catchErr, expect, sinon, domainBuilder } = require('../../../test-helper'); -const { handleComplementaryCertificationsScoring } = require('../../../../lib/domain/events')._forTestOnly.handlers; +import { ReproducibilityRate } from '../../../../lib/domain/models/ReproducibilityRate.js'; +import { ComplementaryCertificationCourseResult } from '../../../../lib/domain/models/ComplementaryCertificationCourseResult.js'; +import { catchErr, expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { _forTestOnly } from '../../../../lib/domain/events/index.js'; +const { handleComplementaryCertificationsScoring } = _forTestOnly.handlers; describe('Unit | Domain | Events | handle-complementary-certification-certifications-scoring', function () { const certificationAssessmentRepository = {}; diff --git a/api/tests/unit/domain/events/handle-pole-emploi-participation-finished_test.js b/api/tests/unit/domain/events/handle-pole-emploi-participation-finished_test.js index 412dd3b4884..a91851a28d0 100644 --- a/api/tests/unit/domain/events/handle-pole-emploi-participation-finished_test.js +++ b/api/tests/unit/domain/events/handle-pole-emploi-participation-finished_test.js @@ -1,8 +1,9 @@ -const { catchErr, expect, sinon, domainBuilder } = require('../../../test-helper'); -const AssessmentCompleted = require('../../../../lib/domain/events/AssessmentCompleted'); -const PoleEmploiSending = require('../../../../lib/domain/models/PoleEmploiSending'); -const PoleEmploiPayload = require('../../../../lib/infrastructure/externals/pole-emploi/PoleEmploiPayload'); -const { handlePoleEmploiParticipationFinished } = require('../../../../lib/domain/events')._forTestOnly.handlers; +import { catchErr, expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { AssessmentCompleted } from '../../../../lib/domain/events/AssessmentCompleted.js'; +import { PoleEmploiSending } from '../../../../lib/domain/models/PoleEmploiSending.js'; +import { PoleEmploiPayload } from '../../../../lib/infrastructure/externals/pole-emploi/PoleEmploiPayload.js'; +import { _forTestOnly } from '../../../../lib/domain/events/index.js'; +const { handlePoleEmploiParticipationFinished } = _forTestOnly.handlers; describe('Unit | Domain | Events | handle-pole-emploi-participation-finished', function () { let event, dependencies, expectedResults; diff --git a/api/tests/unit/domain/events/handle-pole-emploi-participation-started_test.js b/api/tests/unit/domain/events/handle-pole-emploi-participation-started_test.js index f08fd3a04e4..154936cb7d1 100644 --- a/api/tests/unit/domain/events/handle-pole-emploi-participation-started_test.js +++ b/api/tests/unit/domain/events/handle-pole-emploi-participation-started_test.js @@ -1,8 +1,9 @@ -const { catchErr, expect, sinon, domainBuilder } = require('../../../test-helper'); -const CampaignParticipationStarted = require('../../../../lib/domain/events/CampaignParticipationStarted'); -const PoleEmploiSending = require('../../../../lib/domain/models/PoleEmploiSending'); -const PoleEmploiPayload = require('../../../../lib/infrastructure/externals/pole-emploi/PoleEmploiPayload'); -const { handlePoleEmploiParticipationStarted } = require('../../../../lib/domain/events')._forTestOnly.handlers; +import { catchErr, expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { CampaignParticipationStarted } from '../../../../lib/domain/events/CampaignParticipationStarted.js'; +import { PoleEmploiSending } from '../../../../lib/domain/models/PoleEmploiSending.js'; +import { PoleEmploiPayload } from '../../../../lib/infrastructure/externals/pole-emploi/PoleEmploiPayload.js'; +import { _forTestOnly } from '../../../../lib/domain/events/index.js'; +const { handlePoleEmploiParticipationStarted } = _forTestOnly.handlers; describe('Unit | Domain | Events | handle-pole-emploi-participation-started', function () { let event, dependencies, expectedResults; diff --git a/api/tests/unit/domain/events/handle-session-finalized_test.js b/api/tests/unit/domain/events/handle-session-finalized_test.js index 4094d2f8630..db1f57d28fe 100644 --- a/api/tests/unit/domain/events/handle-session-finalized_test.js +++ b/api/tests/unit/domain/events/handle-session-finalized_test.js @@ -1,9 +1,9 @@ -const { catchErr, expect, domainBuilder, sinon } = require('../../../test-helper'); -const handleFinalizedSession = require('../../../../lib/domain/events/handle-session-finalized'); -const JuryCertificationSummary = require('../../../../lib/domain/read-models/JuryCertificationSummary'); -const { status: assessmentResultStatuses } = require('../../../../lib/domain/models/AssessmentResult'); -const AutoJuryDone = require('../../../../lib/domain/events/AutoJuryDone'); -const FinalizedSession = require('../../../../lib/domain/models/FinalizedSession'); +import { catchErr, expect, domainBuilder, sinon } from '../../../test-helper.js'; +import { handleSessionFinalized as handleFinalizedSession } from '../../../../lib/domain/events/handle-session-finalized.js'; +import { JuryCertificationSummary } from '../../../../lib/domain/read-models/JuryCertificationSummary.js'; +import { status as assessmentResultStatuses } from '../../../../lib/domain/models/AssessmentResult.js'; +import { AutoJuryDone } from '../../../../lib/domain/events/AutoJuryDone.js'; +import { FinalizedSession } from '../../../../lib/domain/models/FinalizedSession.js'; const juryCertificationSummaryRepository = { findBySessionId: sinon.stub() }; const finalizedSessionRepository = { save: sinon.stub() }; diff --git a/api/tests/unit/domain/models/AdminMember_test.js b/api/tests/unit/domain/models/AdminMember_test.js index a67f747ddbe..bab14f9dd28 100644 --- a/api/tests/unit/domain/models/AdminMember_test.js +++ b/api/tests/unit/domain/models/AdminMember_test.js @@ -1,8 +1,10 @@ -const { expect } = require('../../../test-helper'); -const { ROLES } = require('../../../../lib/domain/constants').PIX_ADMIN; -const { ObjectValidationError } = require('../../../../lib/domain/errors'); +import { expect } from '../../../test-helper.js'; +import { PIX_ADMIN } from '../../../../lib/domain/constants.js'; -const AdminMember = require('../../../../lib/domain/models/AdminMember'); +const { ROLES } = PIX_ADMIN; + +import { ObjectValidationError } from '../../../../lib/domain/errors.js'; +import { AdminMember } from '../../../../lib/domain/models/AdminMember.js'; describe('Unit | Domain | Models | AdminMember', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/models/AnswerCollectionForScoring_test.js b/api/tests/unit/domain/models/AnswerCollectionForScoring_test.js index e50fe23894c..c662fadb2d2 100644 --- a/api/tests/unit/domain/models/AnswerCollectionForScoring_test.js +++ b/api/tests/unit/domain/models/AnswerCollectionForScoring_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const AnswerCollectionForScoring = require('../../../../lib/domain/models/AnswerCollectionForScoring'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { AnswerCollectionForScoring } from '../../../../lib/domain/models/AnswerCollectionForScoring.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; describe('Unit | Domain | Models | AnswerCollectionForScoring', function () { context('#numberOfChallenges', function () { diff --git a/api/tests/unit/domain/models/AnswerStatus_test.js b/api/tests/unit/domain/models/AnswerStatus_test.js index 8cf564ca45c..cf5538f1cf6 100644 --- a/api/tests/unit/domain/models/AnswerStatus_test.js +++ b/api/tests/unit/domain/models/AnswerStatus_test.js @@ -1,5 +1,8 @@ -const { expect } = require('chai'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); +import chai from 'chai'; + +const { expect } = chai; + +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; describe('AnswerStatus', function () { context('AnswerStatus#isOK', function () { diff --git a/api/tests/unit/domain/models/Answer_test.js b/api/tests/unit/domain/models/Answer_test.js index a7095dc46fe..e976e09cbac 100644 --- a/api/tests/unit/domain/models/Answer_test.js +++ b/api/tests/unit/domain/models/Answer_test.js @@ -1,6 +1,6 @@ -const Answer = require('../../../../lib/domain/models/Answer'); -const Skill = require('../../../../lib/domain/models/Skill'); -const { expect, domainBuilder } = require('../../../test-helper'); +import { Answer } from '../../../../lib/domain/models/Answer.js'; +import { Skill } from '../../../../lib/domain/models/Skill.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | Answer', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/models/AssessmentResult_test.js b/api/tests/unit/domain/models/AssessmentResult_test.js index 283ce6c50e3..1b8ec11c00e 100644 --- a/api/tests/unit/domain/models/AssessmentResult_test.js +++ b/api/tests/unit/domain/models/AssessmentResult_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const AssessmentResult = require('../../../../lib/domain/models/AssessmentResult'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { AssessmentResult } from '../../../../lib/domain/models/AssessmentResult.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; describe('Unit | Domain | Models | AssessmentResult', function () { describe('#buildAlgoErrorResult', function () { diff --git a/api/tests/unit/domain/models/Assessment_test.js b/api/tests/unit/domain/models/Assessment_test.js index 07eba66240f..0c60c8cf994 100644 --- a/api/tests/unit/domain/models/Assessment_test.js +++ b/api/tests/unit/domain/models/Assessment_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; describe('Unit | Domain | Models | Assessment', function () { describe('#constuctor', function () { diff --git a/api/tests/unit/domain/models/AuthenticationMethod_test.js b/api/tests/unit/domain/models/AuthenticationMethod_test.js index 00911f4dfb0..beb72f3b476 100644 --- a/api/tests/unit/domain/models/AuthenticationMethod_test.js +++ b/api/tests/unit/domain/models/AuthenticationMethod_test.js @@ -1,8 +1,7 @@ -const { expect } = require('../../../test-helper'); -const { ObjectValidationError } = require('../../../../lib/domain/errors'); - -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); -const OidcIdentityProviders = require('../../../../lib/domain/constants/oidc-identity-providers'); +import { expect } from '../../../test-helper.js'; +import { ObjectValidationError } from '../../../../lib/domain/errors.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; +import * as OidcIdentityProviders from '../../../../lib/domain/constants/oidc-identity-providers.js'; describe('Unit | Domain | Models | AuthenticationMethod', function () { describe('buildPixAuthenticationMethod', function () { diff --git a/api/tests/unit/domain/models/AuthenticationSessionContent_test.js b/api/tests/unit/domain/models/AuthenticationSessionContent_test.js index 4760d4d87a1..b1a9f3c4305 100644 --- a/api/tests/unit/domain/models/AuthenticationSessionContent_test.js +++ b/api/tests/unit/domain/models/AuthenticationSessionContent_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const AuthenticationSessionContent = require('../../../../lib/domain/models/AuthenticationSessionContent'); +import { expect } from '../../../test-helper.js'; +import { AuthenticationSessionContent } from '../../../../lib/domain/models/AuthenticationSessionContent.js'; describe('Unit | Domain | Models | AuthenticationSessionContent', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/models/BadgeAcquisition_test.js b/api/tests/unit/domain/models/BadgeAcquisition_test.js index 3b17c23945c..284733e13d5 100644 --- a/api/tests/unit/domain/models/BadgeAcquisition_test.js +++ b/api/tests/unit/domain/models/BadgeAcquisition_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | BadgeAcquisition', function () { describe('#get badgeKey', function () { diff --git a/api/tests/unit/domain/models/BadgeForCalculation_test.js b/api/tests/unit/domain/models/BadgeForCalculation_test.js index 10ab113705b..a39c9dcb145 100644 --- a/api/tests/unit/domain/models/BadgeForCalculation_test.js +++ b/api/tests/unit/domain/models/BadgeForCalculation_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | BadgeForCalculation', function () { describe('#shouldBeObtained', function () { diff --git a/api/tests/unit/domain/models/CampaignCreator_test.js b/api/tests/unit/domain/models/CampaignCreator_test.js index 0139c78d51b..313fdfe7bf1 100644 --- a/api/tests/unit/domain/models/CampaignCreator_test.js +++ b/api/tests/unit/domain/models/CampaignCreator_test.js @@ -1,8 +1,8 @@ -const CampaignCreator = require('../../../../lib/domain/models/CampaignCreator'); -const { expect, catchErr } = require('../../../test-helper'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const CampaignForCreation = require('../../../../lib/domain/models/CampaignForCreation'); -const { UserNotAuthorizedToCreateCampaignError, EntityValidationError } = require('../../../../lib/domain/errors'); +import { CampaignCreator } from '../../../../lib/domain/models/CampaignCreator.js'; +import { expect, catchErr } from '../../../test-helper.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { CampaignForCreation } from '../../../../lib/domain/models/CampaignForCreation.js'; +import { UserNotAuthorizedToCreateCampaignError, EntityValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | CampaignCreator', function () { describe('#createCampaign', function () { diff --git a/api/tests/unit/domain/models/CampaignForArchiving_test.js b/api/tests/unit/domain/models/CampaignForArchiving_test.js index 2d4edb211e8..5bd4621132d 100644 --- a/api/tests/unit/domain/models/CampaignForArchiving_test.js +++ b/api/tests/unit/domain/models/CampaignForArchiving_test.js @@ -1,6 +1,6 @@ -const { expect, catchErr } = require('../../../test-helper'); -const Campaign = require('../../../../lib/domain/models/CampaignForArchiving'); -const { ArchivedCampaignError, ObjectValidationError } = require('../../../../lib/domain/errors'); +import { expect, catchErr } from '../../../test-helper.js'; +import { CampaignForArchiving as Campaign } from '../../../../lib/domain/models/CampaignForArchiving.js'; +import { ArchivedCampaignError, ObjectValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | CampaignForArchiving', function () { describe('#archive', function () { diff --git a/api/tests/unit/domain/models/CampaignForCreation_test.js b/api/tests/unit/domain/models/CampaignForCreation_test.js index 1e820048020..0796cdd8af3 100644 --- a/api/tests/unit/domain/models/CampaignForCreation_test.js +++ b/api/tests/unit/domain/models/CampaignForCreation_test.js @@ -1,6 +1,6 @@ -const { expect, catchErr } = require('../../../test-helper'); -const CampaignForCreation = require('../../../../lib/domain/models/CampaignForCreation'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); +import { expect, catchErr } from '../../../test-helper.js'; +import { CampaignForCreation } from '../../../../lib/domain/models/CampaignForCreation.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; describe('Unit | Domain | Models | CampaignForCreation', function () { describe('#create', function () { diff --git a/api/tests/unit/domain/models/CampaignParticipant_test.js b/api/tests/unit/domain/models/CampaignParticipant_test.js index ae8e00a33c2..7c489b6866b 100644 --- a/api/tests/unit/domain/models/CampaignParticipant_test.js +++ b/api/tests/unit/domain/models/CampaignParticipant_test.js @@ -1,10 +1,11 @@ -const CampaignParticipant = require('../../../../lib/domain/models/CampaignParticipant'); -const { expect, domainBuilder, catchErr } = require('../../../test-helper'); -const { +import { CampaignParticipant } from '../../../../lib/domain/models/CampaignParticipant.js'; +import { expect, domainBuilder, catchErr } from '../../../test-helper.js'; + +import { EntityValidationError, ForbiddenAccess, AlreadyExistingCampaignParticipationError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | CampaignParticipant', function () { describe('#start', function () { diff --git a/api/tests/unit/domain/models/CampaignParticipationResult_test.js b/api/tests/unit/domain/models/CampaignParticipationResult_test.js index 2a35ce079b6..9de9b6f2c9c 100644 --- a/api/tests/unit/domain/models/CampaignParticipationResult_test.js +++ b/api/tests/unit/domain/models/CampaignParticipationResult_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../test-helper'); -const Area = require('../../../../lib/domain/models/Area'); -const CampaignParticipationResult = require('../../../../lib/domain/models/CampaignParticipationResult'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); +import { expect } from '../../../test-helper.js'; +import { Area } from '../../../../lib/domain/models/Area.js'; +import { CampaignParticipationResult } from '../../../../lib/domain/models/CampaignParticipationResult.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; describe('Unit | Domain | Models | CampaignParticipationResult', function () { describe('#buildFrom', function () { diff --git a/api/tests/unit/domain/models/CampaignParticipation_test.js b/api/tests/unit/domain/models/CampaignParticipation_test.js index fdbeeb3f1d0..a1b18b09588 100644 --- a/api/tests/unit/domain/models/CampaignParticipation_test.js +++ b/api/tests/unit/domain/models/CampaignParticipation_test.js @@ -1,15 +1,17 @@ -const CampaignParticipation = require('../../../../lib/domain/models/CampaignParticipation'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); -const { expect, domainBuilder, sinon, catchErr } = require('../../../test-helper'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const { +import { CampaignParticipation } from '../../../../lib/domain/models/CampaignParticipation.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { expect, domainBuilder, sinon, catchErr } from '../../../test-helper.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; + +import { ArchivedCampaignError, AssessmentNotCompletedError, AlreadySharedCampaignParticipationError, CantImproveCampaignParticipationError, CampaignParticipationDeletedError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; + const { TO_SHARE, SHARED } = CampaignParticipationStatuses; describe('Unit | Domain | Models | CampaignParticipation', function () { diff --git a/api/tests/unit/domain/models/CampaignToStartParticipation_test.js b/api/tests/unit/domain/models/CampaignToStartParticipation_test.js index 6464bc38768..85ae593fec9 100644 --- a/api/tests/unit/domain/models/CampaignToStartParticipation_test.js +++ b/api/tests/unit/domain/models/CampaignToStartParticipation_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; describe('Unit | Domain | Models | CampaignToStartParticipation', function () { describe('#isAssessment', function () { diff --git a/api/tests/unit/domain/models/Campaign_test.js b/api/tests/unit/domain/models/Campaign_test.js index c7c3bc8e79b..13b0f63ac2a 100644 --- a/api/tests/unit/domain/models/Campaign_test.js +++ b/api/tests/unit/domain/models/Campaign_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | Campaign', function () { describe('#organizationId', function () { diff --git a/api/tests/unit/domain/models/CertifiableProfileForLearningContent_test.js b/api/tests/unit/domain/models/CertifiableProfileForLearningContent_test.js index 4b67ff24cf6..3c6a8b29070 100644 --- a/api/tests/unit/domain/models/CertifiableProfileForLearningContent_test.js +++ b/api/tests/unit/domain/models/CertifiableProfileForLearningContent_test.js @@ -1,6 +1,5 @@ -const CertifiableProfileForLearningContent = require('../../../../lib/domain/models/CertifiableProfileForLearningContent'); - -const { expect, domainBuilder } = require('../../../test-helper'); +import { CertifiableProfileForLearningContent } from '../../../../lib/domain/models/CertifiableProfileForLearningContent.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | CertifiableProfileForLearningContent', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/models/CertificationAssessmentScore_test.js b/api/tests/unit/domain/models/CertificationAssessmentScore_test.js index 08413bc9df7..872dd3ce8dd 100644 --- a/api/tests/unit/domain/models/CertificationAssessmentScore_test.js +++ b/api/tests/unit/domain/models/CertificationAssessmentScore_test.js @@ -1,5 +1,5 @@ -const CertificationAssessmentScore = require('../../../../lib/domain/models/CertificationAssessmentScore'); -const { expect, domainBuilder } = require('../../../test-helper'); +import { CertificationAssessmentScore } from '../../../../lib/domain/models/CertificationAssessmentScore.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | CertificationAssessmentScore', function () { describe('#get nbPix', function () { diff --git a/api/tests/unit/domain/models/CertificationAssessment_test.js b/api/tests/unit/domain/models/CertificationAssessment_test.js index b9f47360e47..a8541b7d098 100644 --- a/api/tests/unit/domain/models/CertificationAssessment_test.js +++ b/api/tests/unit/domain/models/CertificationAssessment_test.js @@ -1,14 +1,15 @@ -const _ = require('lodash'); -const CertificationAssessment = require('../../../../lib/domain/models/CertificationAssessment'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const NeutralizationAttempt = require('../../../../lib/domain/models/NeutralizationAttempt'); -const CertificationAnswerStatusChangeAttempt = require('../../../../lib/domain/models/CertificationAnswerStatusChangeAttempt'); -const { expect, domainBuilder } = require('../../../test-helper'); -const { +import _ from 'lodash'; +import { CertificationAssessment } from '../../../../lib/domain/models/CertificationAssessment.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { NeutralizationAttempt } from '../../../../lib/domain/models/NeutralizationAttempt.js'; +import { CertificationAnswerStatusChangeAttempt } from '../../../../lib/domain/models/CertificationAnswerStatusChangeAttempt.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; + +import { ObjectValidationError, ChallengeToBeNeutralizedNotFoundError, ChallengeToBeDeneutralizedNotFoundError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | CertificationAssessment', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/models/CertificationAttestation_test.js b/api/tests/unit/domain/models/CertificationAttestation_test.js index 20bcf7956f9..c32780356c4 100644 --- a/api/tests/unit/domain/models/CertificationAttestation_test.js +++ b/api/tests/unit/domain/models/CertificationAttestation_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | CertificationAttestation', function () { context('#setResultCompetenceTree', function () { diff --git a/api/tests/unit/domain/models/CertificationCandidateForSupervising_test.js b/api/tests/unit/domain/models/CertificationCandidateForSupervising_test.js index 9f48d47ba8d..ede974bf279 100644 --- a/api/tests/unit/domain/models/CertificationCandidateForSupervising_test.js +++ b/api/tests/unit/domain/models/CertificationCandidateForSupervising_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | Certification Candidate for supervising', function () { describe('#authorizeToStart', function () { diff --git a/api/tests/unit/domain/models/CertificationCandidate_test.js b/api/tests/unit/domain/models/CertificationCandidate_test.js index 822e45d5df8..5045e3df6d2 100644 --- a/api/tests/unit/domain/models/CertificationCandidate_test.js +++ b/api/tests/unit/domain/models/CertificationCandidate_test.js @@ -1,12 +1,14 @@ -const { expect, domainBuilder, catchErr } = require('../../../test-helper'); -const CertificationCandidate = require('../../../../lib/domain/models/CertificationCandidate'); -const { +import { expect, domainBuilder, catchErr } from '../../../test-helper.js'; +import { CertificationCandidate } from '../../../../lib/domain/models/CertificationCandidate.js'; + +import { InvalidCertificationCandidate, CertificationCandidatePersonalInfoFieldMissingError, CertificationCandidatePersonalInfoWrongFormat, -} = require('../../../../lib/domain/errors'); -const { CERTIFICATION_CANDIDATES_ERRORS } = require('../../../../lib/domain/constants/certification-candidates-errors'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +} from '../../../../lib/domain/errors.js'; + +import { CERTIFICATION_CANDIDATES_ERRORS } from '../../../../lib/domain/constants/certification-candidates-errors.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; const i18n = getI18n(); const translate = i18n.__; diff --git a/api/tests/unit/domain/models/CertificationCenterInvitation_test.js b/api/tests/unit/domain/models/CertificationCenterInvitation_test.js index 010032e2836..4afcf18379f 100644 --- a/api/tests/unit/domain/models/CertificationCenterInvitation_test.js +++ b/api/tests/unit/domain/models/CertificationCenterInvitation_test.js @@ -1,7 +1,7 @@ -const CertificationCenterInvitation = require('../../../../lib/domain/models/CertificationCenterInvitation'); -const { expect, sinon } = require('../../../test-helper'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); -const randomString = require('randomstring'); +import { CertificationCenterInvitation } from '../../../../lib/domain/models/CertificationCenterInvitation.js'; +import { expect, sinon } from '../../../test-helper.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; +import randomString from 'randomstring'; describe('Unit | Domain | Models | CertificationCenterInvitation', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/models/CertificationCenterInvitedUser_test.js b/api/tests/unit/domain/models/CertificationCenterInvitedUser_test.js index 80ddf9f380d..0b2ea13f472 100644 --- a/api/tests/unit/domain/models/CertificationCenterInvitedUser_test.js +++ b/api/tests/unit/domain/models/CertificationCenterInvitedUser_test.js @@ -1,7 +1,7 @@ -const CertificationCenterInvitedUser = require('../../../../lib/domain/models/CertificationCenterInvitedUser'); -const CertificationCenterInvitation = require('../../../../lib/domain/models/CertificationCenterInvitation'); -const { expect, catchErr, domainBuilder } = require('../../../test-helper'); -const { NotFoundError, AlreadyAcceptedOrCancelledInvitationError } = require('../../../../lib/domain/errors'); +import { CertificationCenterInvitedUser } from '../../../../lib/domain/models/CertificationCenterInvitedUser.js'; +import { CertificationCenterInvitation } from '../../../../lib/domain/models/CertificationCenterInvitation.js'; +import { expect, catchErr, domainBuilder } from '../../../test-helper.js'; +import { NotFoundError, AlreadyAcceptedOrCancelledInvitationError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | CertificationCenterInvitedUser', function () { describe('#acceptInvitation', function () { diff --git a/api/tests/unit/domain/models/CertificationCenter_test.js b/api/tests/unit/domain/models/CertificationCenter_test.js index ccd5d541a6c..d61a5ed9e8e 100644 --- a/api/tests/unit/domain/models/CertificationCenter_test.js +++ b/api/tests/unit/domain/models/CertificationCenter_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | CertificationCenter', function () { describe('#isSco', function () { diff --git a/api/tests/unit/domain/models/CertificationChallengeWithType_test.js b/api/tests/unit/domain/models/CertificationChallengeWithType_test.js index ce1cd41b3fb..4822a48f292 100644 --- a/api/tests/unit/domain/models/CertificationChallengeWithType_test.js +++ b/api/tests/unit/domain/models/CertificationChallengeWithType_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const CertificationChallengeWithType = require('../../../../lib/domain/models/CertificationChallengeWithType'); -const { Type } = require('../../../../lib/domain/models/Challenge'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { CertificationChallengeWithType } from '../../../../lib/domain/models/CertificationChallengeWithType.js'; +import { Type } from '../../../../lib/domain/models/Challenge.js'; describe('Unit | Domain | Models | CertificationChallengeWithType', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/models/CertificationChallenge_test.js b/api/tests/unit/domain/models/CertificationChallenge_test.js index 8ab5e6e246d..9356e2c0e61 100644 --- a/api/tests/unit/domain/models/CertificationChallenge_test.js +++ b/api/tests/unit/domain/models/CertificationChallenge_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const CertificationChallenge = require('../../../../lib/domain/models/CertificationChallenge'); +import { expect } from '../../../test-helper.js'; +import { CertificationChallenge } from '../../../../lib/domain/models/CertificationChallenge.js'; describe('Unit | Domain | Models | CertificationChallenge', function () { describe('#static createForPixCertification', function () { diff --git a/api/tests/unit/domain/models/CertificationContract_test.js b/api/tests/unit/domain/models/CertificationContract_test.js index 60013bd99fe..1c4360fa66f 100644 --- a/api/tests/unit/domain/models/CertificationContract_test.js +++ b/api/tests/unit/domain/models/CertificationContract_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder, catchErr } = require('../../../test-helper'); -const { CertificationComputeError } = require('../../../../lib/domain/errors'); -const CertificationContract = require('../../../../lib/domain/models/CertificationContract'); -const _ = require('lodash'); +import { expect, domainBuilder, catchErr } from '../../../test-helper.js'; +import { CertificationComputeError } from '../../../../lib/domain/errors.js'; +import { CertificationContract } from '../../../../lib/domain/models/CertificationContract.js'; +import _ from 'lodash'; describe('Unit | Domain | Models | CertificationContract', function () { context('#assertThatWeHaveEnoughAnswers', function () { diff --git a/api/tests/unit/domain/models/CertificationCourse_test.js b/api/tests/unit/domain/models/CertificationCourse_test.js index 42461408f58..9e66e446a2d 100644 --- a/api/tests/unit/domain/models/CertificationCourse_test.js +++ b/api/tests/unit/domain/models/CertificationCourse_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | CertificationCourse', function () { describe('#cancel #isCancelled', function () { diff --git a/api/tests/unit/domain/models/CertificationIssueReportResolutionStrategies_test.js b/api/tests/unit/domain/models/CertificationIssueReportResolutionStrategies_test.js index 4d192e32347..5efa4372417 100644 --- a/api/tests/unit/domain/models/CertificationIssueReportResolutionStrategies_test.js +++ b/api/tests/unit/domain/models/CertificationIssueReportResolutionStrategies_test.js @@ -1,20 +1,18 @@ -const { expect, domainBuilder, sinon } = require('../../../test-helper'); -const { - CertificationIssueReportCategories, +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; +import { + CertificationIssueReportCategory, CertificationIssueReportSubcategories, -} = require('../../../../lib/domain/models/CertificationIssueReportCategory'); -const CertificationIssueReportResolutionAttempt = require('../../../../lib/domain/models/CertificationIssueReportResolutionAttempt'); -const { +} from '../../../../lib/domain/models/CertificationIssueReportCategory.js'; +import { CertificationIssueReportResolutionAttempt } from '../../../../lib/domain/models/CertificationIssueReportResolutionAttempt.js'; +import { CertificationIssueReportResolutionStrategies, -} = require('../../../../lib/domain/models/CertificationIssueReportResolutionStrategies'); -const { neutralizeWithoutCheckingStrategy, neutralizeIfImageOrEmbedStrategy, neutralizeIfAttachmentStrategy, neutralizeIfTimedChallengeStrategy, neutralizeOrValidateIfFocusedChallengeStrategy, doNotResolveStrategy, -} = require('../../../../lib/domain/models/CertificationIssueReportResolutionStrategies'); +} from '../../../../lib/domain/models/CertificationIssueReportResolutionStrategies.js'; describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies', function () { context('#NEUTRALIZE_WITHOUT_CHECKING', function () { @@ -29,7 +27,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const certificationIssueReportRepository = { @@ -59,7 +57,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const certificationIssueReportRepository = { @@ -90,7 +88,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const certificationIssueReportRepository = { @@ -120,7 +118,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const certificationIssueReportRepository = { @@ -154,7 +152,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const challengeWithImage = domainBuilder.buildChallenge({ illustrationUrl: 'image_url' }); @@ -189,7 +187,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const challengeWithImage = domainBuilder.buildChallenge({ illustrationUrl: 'image_url' }); @@ -226,7 +224,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const challengeWithEmbed = domainBuilder.buildChallenge({ embedUrl: 'embed_url' }); @@ -261,7 +259,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const challengeWithEmbed = domainBuilder.buildChallenge({ embedUrl: 'embed_url' }); @@ -293,7 +291,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const certificationIssueReportRepository = { @@ -321,7 +319,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const certificationIssueReportRepository = { @@ -350,7 +348,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const challengeWithoutIllustrationAndEmbed = domainBuilder.buildChallenge({ @@ -390,7 +388,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const challengeWithoutIllustration = domainBuilder.buildChallenge({ illustrationUrl: null }); @@ -431,7 +429,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const challengeWithImage = domainBuilder.buildChallenge({ illustrationUrl: 'image_url' }); @@ -466,7 +464,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const challengeWithImage = domainBuilder.buildChallenge({ illustrationUrl: 'image_url' }); @@ -504,7 +502,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.FILE_NOT_OPENING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const challengeWithAttachment = domainBuilder.buildChallenge({ @@ -541,7 +539,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.FILE_NOT_OPENING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); @@ -576,7 +574,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.SOFTWARE_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const certificationIssueReportRepository = { @@ -604,7 +602,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.FILE_NOT_OPENING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const certificationIssueReportRepository = { @@ -633,7 +631,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.FILE_NOT_OPENING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const challengeWithoutAttachment = domainBuilder.buildChallenge({ attachments: [] }); @@ -667,7 +665,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.FILE_NOT_OPENING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const challengeWithoutAttachment = domainBuilder.buildChallenge({ attachments: [] }); @@ -708,7 +706,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.FILE_NOT_OPENING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const challengeWithAttachment = domainBuilder.buildChallenge({ @@ -745,7 +743,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.FILE_NOT_OPENING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const challengeWithAttachment = domainBuilder.buildChallenge({ @@ -785,7 +783,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.EXTRA_TIME_EXCEEDED, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const timedChallenge = domainBuilder.buildChallenge({ @@ -822,7 +820,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.EXTRA_TIME_EXCEEDED, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); @@ -857,7 +855,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.EXTRA_TIME_EXCEEDED, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const certificationIssueReportRepository = { @@ -885,7 +883,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.EXTRA_TIME_EXCEEDED, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const certificationIssueReportRepository = { @@ -914,7 +912,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.EXTRA_TIME_EXCEEDED, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const notTimedChallenge = domainBuilder.buildChallenge({}); @@ -948,7 +946,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.EXTRA_TIME_EXCEEDED, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const notTimedChallenge = domainBuilder.buildChallenge({}); @@ -989,7 +987,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.EXTRA_TIME_EXCEEDED, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const timedChallenge = domainBuilder.buildChallenge({ @@ -1026,7 +1024,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.EXTRA_TIME_EXCEEDED, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const timedChallenge = domainBuilder.buildChallenge({ @@ -1069,7 +1067,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.UNINTENTIONAL_FOCUS_OUT, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const focusedChallenge = domainBuilder.buildChallenge({ focused: true }); @@ -1106,7 +1104,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.UNINTENTIONAL_FOCUS_OUT, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); @@ -1150,7 +1148,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.UNINTENTIONAL_FOCUS_OUT, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const focusedChallenge = domainBuilder.buildChallenge({ focused: true }); @@ -1187,7 +1185,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' }); const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.UNINTENTIONAL_FOCUS_OUT, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); @@ -1224,7 +1222,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.UNINTENTIONAL_FOCUS_OUT, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const certificationIssueReportRepository = { @@ -1252,7 +1250,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.UNINTENTIONAL_FOCUS_OUT, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const certificationIssueReportRepository = { @@ -1282,7 +1280,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.UNINTENTIONAL_FOCUS_OUT, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const notFocusedChallenge = domainBuilder.buildChallenge({ focused: false }); @@ -1316,7 +1314,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.UNINTENTIONAL_FOCUS_OUT, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); const notFocusedChallenge = domainBuilder.buildChallenge({ focused: false }); @@ -1355,7 +1353,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.EMBED_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); @@ -1375,7 +1373,7 @@ describe('Unit | Domain | Models | CertificationIssueReportResolutionStrategies' // given const certificationIssueReport = domainBuilder.buildCertificationIssueReport({ subcategory: CertificationIssueReportSubcategories.EMBED_NOT_WORKING, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, questionNumber: 1, }); diff --git a/api/tests/unit/domain/models/CertificationIssueReport_test.js b/api/tests/unit/domain/models/CertificationIssueReport_test.js index 54b6ab35fb0..16fed7db56e 100644 --- a/api/tests/unit/domain/models/CertificationIssueReport_test.js +++ b/api/tests/unit/domain/models/CertificationIssueReport_test.js @@ -1,14 +1,15 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const CertificationIssueReport = require('../../../../lib/domain/models/CertificationIssueReport'); -const { - CertificationIssueReportCategories, +import { expect, domainBuilder } from '../../../test-helper.js'; +import { CertificationIssueReport } from '../../../../lib/domain/models/CertificationIssueReport.js'; +import { + CertificationIssueReportCategory, CertificationIssueReportSubcategories, -} = require('../../../../lib/domain/models/CertificationIssueReportCategory'); -const { +} from '../../../../lib/domain/models/CertificationIssueReportCategory.js'; + +import { InvalidCertificationIssueReportForSaving, DeprecatedCertificationIssueReportSubcategoryError, DeprecatedCertificationIssueReportCategoryError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; const MISSING_VALUE = null; const EMPTY_VALUE = ''; @@ -23,7 +24,7 @@ describe('Unit | Domain | Models | CertificationIssueReport', function () { beforeEach(function () { certificationIssueReportDTO = { certificationCourseId: 123, - category: CertificationIssueReportCategories.NON_BLOCKING_TECHNICAL_ISSUE, + category: CertificationIssueReportCategory.NON_BLOCKING_TECHNICAL_ISSUE, description: 'Une description obligatoire', }; }); @@ -61,7 +62,7 @@ describe('Unit | Domain | Models | CertificationIssueReport', function () { beforeEach(function () { certificationIssueReportDTO = { certificationCourseId: 123, - category: CertificationIssueReportCategories.NON_BLOCKING_CANDIDATE_ISSUE, + category: CertificationIssueReportCategory.NON_BLOCKING_CANDIDATE_ISSUE, description: 'Une description obligatoire', }; }); @@ -99,7 +100,7 @@ describe('Unit | Domain | Models | CertificationIssueReport', function () { beforeEach(function () { certificationIssueReportDTO = { certificationCourseId: 123, - category: CertificationIssueReportCategories.SIGNATURE_ISSUE, + category: CertificationIssueReportCategory.SIGNATURE_ISSUE, description: 'Une description obligatoire', }; }); @@ -127,7 +128,7 @@ describe('Unit | Domain | Models | CertificationIssueReport', function () { beforeEach(function () { certificationIssueReportDTO = { certificationCourseId: 123, - category: CertificationIssueReportCategories.CANDIDATE_INFORMATIONS_CHANGES, + category: CertificationIssueReportCategory.CANDIDATE_INFORMATIONS_CHANGES, description: 'Une description obligatoire', subcategory: CertificationIssueReportSubcategories.NAME_OR_BIRTHDATE, }; @@ -181,7 +182,7 @@ describe('Unit | Domain | Models | CertificationIssueReport', function () { beforeEach(function () { certificationIssueReportDTO = { certificationCourseId: 123, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, subcategory: CertificationIssueReportSubcategories.IMAGE_NOT_DISPLAYING, questionNumber: 5, }; @@ -231,7 +232,7 @@ describe('Unit | Domain | Models | CertificationIssueReport', function () { const createIssueReport = () => CertificationIssueReport.create({ ...certificationIssueReportDTO, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, subcategory: CertificationIssueReportSubcategories.LINK_NOT_WORKING, }); @@ -277,7 +278,7 @@ describe('Unit | Domain | Models | CertificationIssueReport', function () { it('should be valid', function () { const certificationIssueReportDTO = { certificationCourseId: 123, - category: CertificationIssueReportCategories.FRAUD, + category: CertificationIssueReportCategory.FRAUD, }; expect(() => CertificationIssueReport.create(certificationIssueReportDTO)).not.to.throw(); @@ -290,7 +291,7 @@ describe('Unit | Domain | Models | CertificationIssueReport', function () { beforeEach(function () { certificationIssueReportDTO = { certificationCourseId: 123, - category: CertificationIssueReportCategories.TECHNICAL_PROBLEM, + category: CertificationIssueReportCategory.TECHNICAL_PROBLEM, description: 'Une description obligatoire', }; }); diff --git a/api/tests/unit/domain/models/CertificationOfficer_test.js b/api/tests/unit/domain/models/CertificationOfficer_test.js index 94a2000be3a..1717b40714f 100644 --- a/api/tests/unit/domain/models/CertificationOfficer_test.js +++ b/api/tests/unit/domain/models/CertificationOfficer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const CertificationOfficer = require('../../../../lib/domain/models/CertificationOfficer'); +import { expect } from '../../../test-helper.js'; +import { CertificationOfficer } from '../../../../lib/domain/models/CertificationOfficer.js'; describe('Unit | Domain | Models | CertificationOfficer', function () { describe('#getFullName', function () { diff --git a/api/tests/unit/domain/models/CertificationReport_test.js b/api/tests/unit/domain/models/CertificationReport_test.js index d1e88c4694f..04977d80583 100644 --- a/api/tests/unit/domain/models/CertificationReport_test.js +++ b/api/tests/unit/domain/models/CertificationReport_test.js @@ -1,9 +1,9 @@ -const { expect, EMPTY_BLANK_AND_NULL, domainBuilder, catchErr } = require('../../../test-helper'); -const CertificationReport = require('../../../../lib/domain/models/CertificationReport'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const { InvalidCertificationReportForFinalization } = require('../../../../lib/domain/errors'); -const keys = require('lodash/keys'); - +import { expect, EMPTY_BLANK_AND_NULL, domainBuilder, catchErr } from '../../../test-helper.js'; +import { CertificationReport } from '../../../../lib/domain/models/CertificationReport.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { InvalidCertificationReportForFinalization } from '../../../../lib/domain/errors.js'; +import lodash from 'lodash'; +const { keys } = lodash; describe('Unit | Domain | Models | CertificationReport', function () { describe('#constructor', function () { // eslint-disable-next-line mocha/no-setup-in-describe diff --git a/api/tests/unit/domain/models/CertificationResult_test.js b/api/tests/unit/domain/models/CertificationResult_test.js index 92cd63be54f..a7b6e8c0db9 100644 --- a/api/tests/unit/domain/models/CertificationResult_test.js +++ b/api/tests/unit/domain/models/CertificationResult_test.js @@ -1,5 +1,5 @@ -const CertificationResult = require('../../../../lib/domain/models/CertificationResult'); -const { expect, domainBuilder } = require('../../../test-helper'); +import { CertificationResult } from '../../../../lib/domain/models/CertificationResult.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | CertificationResult', function () { context('#static from', function () { diff --git a/api/tests/unit/domain/models/CertifiedLevel_test.js b/api/tests/unit/domain/models/CertifiedLevel_test.js index 342a69cfce2..5a56c909fb5 100644 --- a/api/tests/unit/domain/models/CertifiedLevel_test.js +++ b/api/tests/unit/domain/models/CertifiedLevel_test.js @@ -1,7 +1,6 @@ -const { expect } = require('../../../test-helper'); -const { CertifiedLevel } = require('../../../../lib/domain/models/CertifiedLevel'); - -const { MINIMUM_REPRODUCIBILITY_RATE_TO_BE_TRUSTED, UNCERTIFIED_LEVEL } = require('../../../../lib/domain/constants'); +import { expect } from '../../../test-helper.js'; +import { CertifiedLevel } from '../../../../lib/domain/models/CertifiedLevel.js'; +import { MINIMUM_REPRODUCIBILITY_RATE_TO_BE_TRUSTED, UNCERTIFIED_LEVEL } from '../../../../lib/domain/constants.js'; describe('Unit | Domain | Models | CertifiedLevel', function () { context('when 3 challenges were answered', function () { diff --git a/api/tests/unit/domain/models/CertifiedScore_test.js b/api/tests/unit/domain/models/CertifiedScore_test.js index d93c424bb59..1755bd545d8 100644 --- a/api/tests/unit/domain/models/CertifiedScore_test.js +++ b/api/tests/unit/domain/models/CertifiedScore_test.js @@ -1,8 +1,7 @@ -const { expect } = require('../../../test-helper'); -const { CertifiedScore } = require('../../../../lib/domain/models/CertifiedScore'); -const { CertifiedLevel } = require('../../../../lib/domain/models/CertifiedLevel'); - -const { PIX_COUNT_BY_LEVEL } = require('../../../../lib/domain/constants'); +import { expect } from '../../../test-helper.js'; +import { CertifiedScore } from '../../../../lib/domain/models/CertifiedScore.js'; +import { CertifiedLevel } from '../../../../lib/domain/models/CertifiedLevel.js'; +import { PIX_COUNT_BY_LEVEL } from '../../../../lib/domain/constants.js'; describe('Unit | Domain | Models | CertifiedScore', function () { it('is equal to the estimated score if the estimated level is certified', function () { diff --git a/api/tests/unit/domain/models/Challenge_test.js b/api/tests/unit/domain/models/Challenge_test.js index f41f4824500..1e088e1336b 100644 --- a/api/tests/unit/domain/models/Challenge_test.js +++ b/api/tests/unit/domain/models/Challenge_test.js @@ -1,12 +1,12 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const Challenge = require('../../../../lib/domain/models/Challenge'); -const Skill = require('../../../../lib/domain/models/Skill'); -const Validator = require('../../../../lib/domain/models/Validator'); -const ValidatorQCM = require('../../../../lib/domain/models/ValidatorQCM'); -const ValidatorQCU = require('../../../../lib/domain/models/ValidatorQCU'); -const ValidatorQROC = require('../../../../lib/domain/models/ValidatorQROC'); -const ValidatorQROCMDep = require('../../../../lib/domain/models/ValidatorQROCMDep'); -const ValidatorQROCMInd = require('../../../../lib/domain/models/ValidatorQROCMInd'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { Challenge } from '../../../../lib/domain/models/Challenge.js'; +import { Skill } from '../../../../lib/domain/models/Skill.js'; +import { Validator } from '../../../../lib/domain/models/Validator.js'; +import { ValidatorQCM } from '../../../../lib/domain/models/ValidatorQCM.js'; +import { ValidatorQCU } from '../../../../lib/domain/models/ValidatorQCU.js'; +import { ValidatorQROC } from '../../../../lib/domain/models/ValidatorQROC.js'; +import { ValidatorQROCMDep } from '../../../../lib/domain/models/ValidatorQROCMDep.js'; +import { ValidatorQROCMInd } from '../../../../lib/domain/models/ValidatorQROCMInd.js'; describe('Unit | Domain | Models | Challenge', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/models/CompetenceMark_test.js b/api/tests/unit/domain/models/CompetenceMark_test.js index 2928bc6d2c1..9c9f92cb20e 100644 --- a/api/tests/unit/domain/models/CompetenceMark_test.js +++ b/api/tests/unit/domain/models/CompetenceMark_test.js @@ -1,6 +1,6 @@ -const { catchErr, expect, domainBuilder } = require('../../../test-helper'); -const CompetenceMark = require('../../../../lib/domain/models/CompetenceMark'); -const { ObjectValidationError } = require('../../../../lib/domain/errors'); +import { catchErr, expect, domainBuilder } from '../../../test-helper.js'; +import { CompetenceMark } from '../../../../lib/domain/models/CompetenceMark.js'; +import { ObjectValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | Competence Mark', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/models/CompetenceResult_test.js b/api/tests/unit/domain/models/CompetenceResult_test.js index 9b1a13f9731..dc0ae9659df 100644 --- a/api/tests/unit/domain/models/CompetenceResult_test.js +++ b/api/tests/unit/domain/models/CompetenceResult_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const CompetenceResult = require('../../../../lib/domain/models/CompetenceResult'); +import { expect } from '../../../test-helper.js'; +import { CompetenceResult } from '../../../../lib/domain/models/CompetenceResult.js'; describe('Unit | Domain | Models | CompetenceResult', function () { describe('#masteryPercentage', function () { diff --git a/api/tests/unit/domain/models/ComplementaryCertificationCourseResult_test.js b/api/tests/unit/domain/models/ComplementaryCertificationCourseResult_test.js index dd0dd878fa8..64e3d9008c6 100644 --- a/api/tests/unit/domain/models/ComplementaryCertificationCourseResult_test.js +++ b/api/tests/unit/domain/models/ComplementaryCertificationCourseResult_test.js @@ -1,5 +1,5 @@ -const ComplementaryCertificationCourseResult = require('../../../../lib/domain/models/ComplementaryCertificationCourseResult'); -const { expect, domainBuilder } = require('../../../test-helper'); +import { ComplementaryCertificationCourseResult } from '../../../../lib/domain/models/ComplementaryCertificationCourseResult.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | ComplementaryCertificationCourseResult', function () { describe('#isAcquired', function () { diff --git a/api/tests/unit/domain/models/ComplementaryCertificationHabilitation_test.js b/api/tests/unit/domain/models/ComplementaryCertificationHabilitation_test.js index 77b3956c633..764981a6193 100644 --- a/api/tests/unit/domain/models/ComplementaryCertificationHabilitation_test.js +++ b/api/tests/unit/domain/models/ComplementaryCertificationHabilitation_test.js @@ -1,6 +1,6 @@ -const ComplementaryCertificationHabilitation = require('../../../../lib/domain/models/ComplementaryCertificationHabilitation'); -const { expect, domainBuilder } = require('../../../test-helper'); -const _ = require('lodash'); +import { ComplementaryCertificationHabilitation } from '../../../../lib/domain/models/ComplementaryCertificationHabilitation.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; +import _ from 'lodash'; const COMPLEMENTARY_CERTIFICATION_HABILITATION_PROPS = ['id', 'complementaryCertificationId', 'certificationCenterId']; diff --git a/api/tests/unit/domain/models/ComplementaryCertificationScoringWithComplementaryReferential_test.js b/api/tests/unit/domain/models/ComplementaryCertificationScoringWithComplementaryReferential_test.js index 965b382c90c..75b62bb31c4 100644 --- a/api/tests/unit/domain/models/ComplementaryCertificationScoringWithComplementaryReferential_test.js +++ b/api/tests/unit/domain/models/ComplementaryCertificationScoringWithComplementaryReferential_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const ComplementaryCertificationScoringWithComplementaryReferential = require('../../../../lib/domain/models/ComplementaryCertificationScoringWithComplementaryReferential'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { ComplementaryCertificationScoringWithComplementaryReferential } from '../../../../lib/domain/models/ComplementaryCertificationScoringWithComplementaryReferential.js'; describe('Unit | Domain | Models | ComplementaryCertificationScoringWithComplementaryReferential', function () { context('#constructor', function () { diff --git a/api/tests/unit/domain/models/ComplementaryCertificationScoringWithoutComplementaryReferential_test.js b/api/tests/unit/domain/models/ComplementaryCertificationScoringWithoutComplementaryReferential_test.js index 7c2f42488bc..1b4b2a86066 100644 --- a/api/tests/unit/domain/models/ComplementaryCertificationScoringWithoutComplementaryReferential_test.js +++ b/api/tests/unit/domain/models/ComplementaryCertificationScoringWithoutComplementaryReferential_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | ComplementaryCertificationScoringWithoutComplementaryReferential', function () { context('#isAcquired', function () { diff --git a/api/tests/unit/domain/models/CorrectionBlockQROCMDep_test.js b/api/tests/unit/domain/models/CorrectionBlockQROCMDep_test.js index 3de01d20c57..0b9eccabb4a 100644 --- a/api/tests/unit/domain/models/CorrectionBlockQROCMDep_test.js +++ b/api/tests/unit/domain/models/CorrectionBlockQROCMDep_test.js @@ -1,5 +1,5 @@ -const CorrectionBlockQROCMDep = require('../../../../lib/domain/models/CorrectionBlockQROCMDep'); -const { expect } = require('../../../test-helper'); +import { CorrectionBlockQROCMDep } from '../../../../lib/domain/models/CorrectionBlockQROCMDep.js'; +import { expect } from '../../../test-helper.js'; describe('Unit | Domain | Models | CorrectionBlockQROCMDep', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/models/Course_test.js b/api/tests/unit/domain/models/Course_test.js index 836a265089c..36f2b489c1b 100644 --- a/api/tests/unit/domain/models/Course_test.js +++ b/api/tests/unit/domain/models/Course_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const Course = require('../../../../lib/domain/models/Course'); +import { expect } from '../../../test-helper.js'; +import { Course } from '../../../../lib/domain/models/Course.js'; describe('Unit | Domain | Models | Course', function () { describe('#nbChallenges', function () { diff --git a/api/tests/unit/domain/models/EmailingAttempt_test.js b/api/tests/unit/domain/models/EmailingAttempt_test.js index cd03944f876..affbc9c2326 100644 --- a/api/tests/unit/domain/models/EmailingAttempt_test.js +++ b/api/tests/unit/domain/models/EmailingAttempt_test.js @@ -1,6 +1,5 @@ -const { expect } = require('../../../test-helper'); - -const EmailingAttempt = require('../../../../lib/domain/models/EmailingAttempt'); +import { expect } from '../../../test-helper.js'; +import { EmailingAttempt } from '../../../../lib/domain/models/EmailingAttempt.js'; describe('Unit | Domain | Models | EmailingAttempt', function () { describe('#hasFailed', function () { diff --git a/api/tests/unit/domain/models/Examiner_test.js b/api/tests/unit/domain/models/Examiner_test.js index 7ea0c422b45..ad33e388978 100644 --- a/api/tests/unit/domain/models/Examiner_test.js +++ b/api/tests/unit/domain/models/Examiner_test.js @@ -1,8 +1,7 @@ -const Answer = require('../../../../lib/domain/models/Answer'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const Examiner = require('../../../../lib/domain/models/Examiner'); - -const { expect, domainBuilder, sinon } = require('../../../test-helper'); +import { Answer } from '../../../../lib/domain/models/Answer.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { Examiner } from '../../../../lib/domain/models/Examiner.js'; +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; describe('Unit | Domain | Models | Examiner', function () { const challengeFormat = 'nombre'; diff --git a/api/tests/unit/domain/models/FinalizedSession_test.js b/api/tests/unit/domain/models/FinalizedSession_test.js index c15c11b8203..d78829bf86b 100644 --- a/api/tests/unit/domain/models/FinalizedSession_test.js +++ b/api/tests/unit/domain/models/FinalizedSession_test.js @@ -1,10 +1,8 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const FinalizedSession = require('../../../../lib/domain/models/FinalizedSession'); -const JuryCertificationSummary = require('../../../../lib/domain/read-models/JuryCertificationSummary'); -const { status: assessmentResultStatuses } = require('../../../../lib/domain/models/AssessmentResult'); -const { - CertificationIssueReportCategories, -} = require('../../../../lib/domain/models/CertificationIssueReportCategory'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { FinalizedSession } from '../../../../lib/domain/models/FinalizedSession.js'; +import { JuryCertificationSummary } from '../../../../lib/domain/read-models/JuryCertificationSummary.js'; +import { status as assessmentResultStatuses } from '../../../../lib/domain/models/AssessmentResult.js'; +import { CertificationIssueReportCategory } from '../../../../lib/domain/models/CertificationIssueReportCategory.js'; describe('Unit | Domain | Models | FinalizedSession', function () { context('#isPublishable', function () { @@ -333,7 +331,7 @@ function _noneWithRequiredActionButSomeErrorStatus() { cleaCertificationStatus: 'not_passed', certificationIssueReports: [ domainBuilder.buildCertificationIssueReport({ - category: CertificationIssueReportCategories.SIGNATURE_ISSUE, + category: CertificationIssueReportCategory.SIGNATURE_ISSUE, }), ], }), @@ -355,7 +353,7 @@ function _noneWithRequiredActionButSomeStartedStatus() { cleaCertificationStatus: 'not_passed', certificationIssueReports: [ domainBuilder.buildCertificationIssueReport({ - category: CertificationIssueReportCategories.SIGNATURE_ISSUE, + category: CertificationIssueReportCategory.SIGNATURE_ISSUE, }), ], }), @@ -377,7 +375,7 @@ function _someWithUnresolvedRequiredActionButNoErrorOrStartedStatus() { cleaCertificationStatus: 'not_passed', certificationIssueReports: [ domainBuilder.buildCertificationIssueReport({ - category: CertificationIssueReportCategories.FRAUD, + category: CertificationIssueReportCategory.FRAUD, resolvedAt: null, resolution: null, }), @@ -401,7 +399,7 @@ function _someWithResolvedRequiredActionButNoErrorOrStartedStatus() { cleaCertificationStatus: 'not_passed', certificationIssueReports: [ domainBuilder.buildCertificationIssueReport({ - category: CertificationIssueReportCategories.FRAUD, + category: CertificationIssueReportCategory.FRAUD, resolvedAt: new Date('2020-01-01'), resolution: 'des points gratos offerts', }), @@ -425,7 +423,7 @@ function _someWhichAreUnfinishedButHaveNoAbortReason() { cleaCertificationStatus: 'not_passed', certificationIssueReports: [ domainBuilder.buildCertificationIssueReport({ - category: CertificationIssueReportCategories.FRAUD, + category: CertificationIssueReportCategory.FRAUD, resolvedAt: new Date('2020-01-01'), resolution: 'des points gratos offerts', }), diff --git a/api/tests/unit/domain/models/JuryCertification_test.js b/api/tests/unit/domain/models/JuryCertification_test.js index 7df1341d08c..b5d452dae53 100644 --- a/api/tests/unit/domain/models/JuryCertification_test.js +++ b/api/tests/unit/domain/models/JuryCertification_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const JuryCertification = require('../../../../lib/domain/models/JuryCertification'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { JuryCertification } from '../../../../lib/domain/models/JuryCertification.js'; describe('Unit | Domain | Models | JuryCertification', function () { describe('#from', function () { diff --git a/api/tests/unit/domain/models/KnowledgeElement_test.js b/api/tests/unit/domain/models/KnowledgeElement_test.js index f13554c1026..60239e95890 100644 --- a/api/tests/unit/domain/models/KnowledgeElement_test.js +++ b/api/tests/unit/domain/models/KnowledgeElement_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const dayjs = require('dayjs'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import dayjs from 'dayjs'; describe('Unit | Domain | Models | KnowledgeElement', function () { describe('#isValidated', function () { diff --git a/api/tests/unit/domain/models/Membership_test.js b/api/tests/unit/domain/models/Membership_test.js index bf9ec643550..067584bdbbb 100644 --- a/api/tests/unit/domain/models/Membership_test.js +++ b/api/tests/unit/domain/models/Membership_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const Membership = require('../../../../lib/domain/models/Membership'); -const { InvalidMembershipOrganizationRoleError } = require('../../../../lib/domain/errors'); +import { expect } from '../../../test-helper.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { InvalidMembershipOrganizationRoleError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | Membership', function () { describe('#validateRole', function () { diff --git a/api/tests/unit/domain/models/OrganizationInvitation_test.js b/api/tests/unit/domain/models/OrganizationInvitation_test.js index 4a3f6ff7c5e..d350a409355 100644 --- a/api/tests/unit/domain/models/OrganizationInvitation_test.js +++ b/api/tests/unit/domain/models/OrganizationInvitation_test.js @@ -1,6 +1,6 @@ -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); -const { expect } = require('../../../test-helper'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; +import { expect } from '../../../test-helper.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | OrganizationInvitation', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/models/OrganizationInvitedUser_test.js b/api/tests/unit/domain/models/OrganizationInvitedUser_test.js index c7dd3a98f93..28b5c8974c4 100644 --- a/api/tests/unit/domain/models/OrganizationInvitedUser_test.js +++ b/api/tests/unit/domain/models/OrganizationInvitedUser_test.js @@ -1,10 +1,11 @@ -const OrganizationInvitedUser = require('../../../../lib/domain/models/OrganizationInvitedUser'); -const { expect, catchErr, domainBuilder } = require('../../../test-helper'); -const { +import { OrganizationInvitedUser } from '../../../../lib/domain/models/OrganizationInvitedUser.js'; +import { expect, catchErr, domainBuilder } from '../../../test-helper.js'; + +import { NotFoundError, AlreadyExistingMembershipError, AlreadyAcceptedOrCancelledInvitationError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | OrganizationInvitedUser', function () { describe('#acceptInvitation', function () { diff --git a/api/tests/unit/domain/models/OrganizationPlacesLot_test.js b/api/tests/unit/domain/models/OrganizationPlacesLot_test.js index c2f4634c0f4..e480b1acbb0 100644 --- a/api/tests/unit/domain/models/OrganizationPlacesLot_test.js +++ b/api/tests/unit/domain/models/OrganizationPlacesLot_test.js @@ -1,8 +1,7 @@ -/* eslint-disable mocha/no-setup-in-describe */ -const { expect } = require('../../../test-helper'); -const categories = require('../../../../lib/domain/constants/organization-places-categories'); -const OrganizationPlacesLot = require('../../../../lib/domain/models/OrganizationPlacesLot'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); +import { expect } from '../../../test-helper.js'; +import * as categories from '../../../../lib/domain/constants/organization-places-categories.js'; +import { OrganizationPlacesLot } from '../../../../lib/domain/models/OrganizationPlacesLot.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | OrganizationPlaces', function () { describe('#constructor', function () { @@ -497,4 +496,3 @@ describe('Unit | Domain | Models | OrganizationPlaces', function () { }); }); }); -/* eslint-enable mocha/no-setup-in-describe */ diff --git a/api/tests/unit/domain/models/Organization_test.js b/api/tests/unit/domain/models/Organization_test.js index 2e0c4efc03f..791600510b5 100644 --- a/api/tests/unit/domain/models/Organization_test.js +++ b/api/tests/unit/domain/models/Organization_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const Organization = require('../../../../lib/domain/models/Organization'); -const Tag = require('../../../../lib/domain/models/Tag'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { Organization } from '../../../../lib/domain/models/Organization.js'; +import { Tag } from '../../../../lib/domain/models/Tag.js'; describe('Unit | Domain | Models | Organization', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/models/OrganizationsToAttachToTargetProfile_test.js b/api/tests/unit/domain/models/OrganizationsToAttachToTargetProfile_test.js index 6f9125deb80..e72beb1f01a 100644 --- a/api/tests/unit/domain/models/OrganizationsToAttachToTargetProfile_test.js +++ b/api/tests/unit/domain/models/OrganizationsToAttachToTargetProfile_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder, catchErr } = require('../../../test-helper'); +import { expect, domainBuilder, catchErr } from '../../../test-helper.js'; const id = 1; describe('Unit | Domain | Models | OrganizationsToAttachToTargetProfile', function () { diff --git a/api/tests/unit/domain/models/ParticipantResultsShared_test.js b/api/tests/unit/domain/models/ParticipantResultsShared_test.js index 9d996619451..c21a10228f9 100644 --- a/api/tests/unit/domain/models/ParticipantResultsShared_test.js +++ b/api/tests/unit/domain/models/ParticipantResultsShared_test.js @@ -1,8 +1,9 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const ParticipantResultsShared = require('../../../../lib/domain/models/ParticipantResultsShared'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const { MAX_REACHABLE_PIX_BY_COMPETENCE } = require('../../../../lib/domain/constants'); -const noop = require('lodash/noop'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { ParticipantResultsShared } from '../../../../lib/domain/models/ParticipantResultsShared.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { MAX_REACHABLE_PIX_BY_COMPETENCE } from '../../../../lib/domain/constants.js'; +import lodash from 'lodash'; +const { noop } = lodash; describe('Unit | Domain | Models | ParticipantResultsShared', function () { context('#masteryRate', function () { diff --git a/api/tests/unit/domain/models/ParticipationForCampaignManagement_test.js b/api/tests/unit/domain/models/ParticipationForCampaignManagement_test.js index 2e7f589fed6..2fc3029cfba 100644 --- a/api/tests/unit/domain/models/ParticipationForCampaignManagement_test.js +++ b/api/tests/unit/domain/models/ParticipationForCampaignManagement_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const ParticipationForCampaignManagement = require('../../../../lib/domain/models/ParticipationForCampaignManagement'); +import { expect } from '../../../test-helper.js'; +import { ParticipationForCampaignManagement } from '../../../../lib/domain/models/ParticipationForCampaignManagement.js'; describe('Unit | Domain | Models | ParticipationForCampaignManagement', function () { context('#userFullName', function () { diff --git a/api/tests/unit/domain/models/PartnerCertificationScoring_test.js b/api/tests/unit/domain/models/PartnerCertificationScoring_test.js index 9ff4874320a..2471ea6de62 100644 --- a/api/tests/unit/domain/models/PartnerCertificationScoring_test.js +++ b/api/tests/unit/domain/models/PartnerCertificationScoring_test.js @@ -1,6 +1,6 @@ -const PartnerCertificationScoring = require('../../../../lib/domain/models/PartnerCertificationScoring'); -const { expect } = require('../../../test-helper'); -const { ObjectValidationError } = require('../../../../lib/domain/errors'); +import { PartnerCertificationScoring } from '../../../../lib/domain/models/PartnerCertificationScoring.js'; +import { expect } from '../../../test-helper.js'; +import { ObjectValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | PartnerCertificationScoring', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/models/PlacementProfile_test.js b/api/tests/unit/domain/models/PlacementProfile_test.js index acddf577b85..d4dd979dd37 100644 --- a/api/tests/unit/domain/models/PlacementProfile_test.js +++ b/api/tests/unit/domain/models/PlacementProfile_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const PlacementProfile = require('../../../../lib/domain/models/PlacementProfile'); -const UserCompetence = require('../../../../lib/domain/models/UserCompetence'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { PlacementProfile } from '../../../../lib/domain/models/PlacementProfile.js'; +import { UserCompetence } from '../../../../lib/domain/models/UserCompetence.js'; describe('Unit | Domain | Models | PlacementProfile', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/models/PoleEmploiSending_test.js b/api/tests/unit/domain/models/PoleEmploiSending_test.js index b91712113a7..124ca94cd91 100644 --- a/api/tests/unit/domain/models/PoleEmploiSending_test.js +++ b/api/tests/unit/domain/models/PoleEmploiSending_test.js @@ -1,5 +1,5 @@ -const PoleEmploiSending = require('../../../../lib/domain/models/PoleEmploiSending'); -const { expect, domainBuilder } = require('../../../test-helper'); +import { PoleEmploiSending } from '../../../../lib/domain/models/PoleEmploiSending.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | PoleEmploiSending', function () { let expectedPoleEmploiSending; diff --git a/api/tests/unit/domain/models/PrivateCertificate_test.js b/api/tests/unit/domain/models/PrivateCertificate_test.js index 3f228d0c643..5c5dde53fe7 100644 --- a/api/tests/unit/domain/models/PrivateCertificate_test.js +++ b/api/tests/unit/domain/models/PrivateCertificate_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const PrivateCertificate = require('../../../../lib/domain/models/PrivateCertificate'); -const { status: assessmentResultStatuses } = require('../../../../lib/domain/models/AssessmentResult'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { PrivateCertificate } from '../../../../lib/domain/models/PrivateCertificate.js'; +import { status as assessmentResultStatuses } from '../../../../lib/domain/models/AssessmentResult.js'; describe('Unit | Domain | Models | PrivateCertificate', function () { context('#static buildFrom', function () { diff --git a/api/tests/unit/domain/models/Progression_test.js b/api/tests/unit/domain/models/Progression_test.js index 65290dab881..7d477378737 100644 --- a/api/tests/unit/domain/models/Progression_test.js +++ b/api/tests/unit/domain/models/Progression_test.js @@ -1,5 +1,5 @@ -const Progression = require('../../../../lib/domain/models/Progression'); -const { expect, domainBuilder } = require('../../../test-helper'); +import { Progression } from '../../../../lib/domain/models/Progression.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | Progression', function () { // TODO: Fix this the next time the file is edited. diff --git a/api/tests/unit/domain/models/ReproducibilityRate_test.js b/api/tests/unit/domain/models/ReproducibilityRate_test.js index 7d9453dea7e..d927450f3b2 100644 --- a/api/tests/unit/domain/models/ReproducibilityRate_test.js +++ b/api/tests/unit/domain/models/ReproducibilityRate_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const { ReproducibilityRate } = require('../../../../lib/domain/models/ReproducibilityRate'); -const { MINIMUM_REPRODUCIBILITY_RATE_TO_BE_CERTIFIED } = require('../../../../lib/domain/constants'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { ReproducibilityRate } from '../../../../lib/domain/models/ReproducibilityRate.js'; +import { MINIMUM_REPRODUCIBILITY_RATE_TO_BE_CERTIFIED } from '../../../../lib/domain/constants.js'; describe('Unit | Domain | Models | ReproducibilityRate', function () { context('#static from', function () { diff --git a/api/tests/unit/domain/models/ResultCompetenceTree_test.js b/api/tests/unit/domain/models/ResultCompetenceTree_test.js index be664225ad0..d72a85a6233 100644 --- a/api/tests/unit/domain/models/ResultCompetenceTree_test.js +++ b/api/tests/unit/domain/models/ResultCompetenceTree_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const ResultCompetence = require('../../../../lib/domain/models/ResultCompetence'); -const ResultCompetenceTree = require('../../../../lib/domain/models/ResultCompetenceTree'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { ResultCompetence } from '../../../../lib/domain/models/ResultCompetence.js'; +import { ResultCompetenceTree } from '../../../../lib/domain/models/ResultCompetenceTree.js'; describe('Unit | Domain | Models | ResultCompetence', function () { describe('#generateTreeFromCompetenceMarks', function () { diff --git a/api/tests/unit/domain/models/SCOCertificationCandidate_test.js b/api/tests/unit/domain/models/SCOCertificationCandidate_test.js index 9efadbee72f..05a2366d616 100644 --- a/api/tests/unit/domain/models/SCOCertificationCandidate_test.js +++ b/api/tests/unit/domain/models/SCOCertificationCandidate_test.js @@ -1,6 +1,6 @@ -const { expect, catchErr } = require('../../../test-helper'); -const SCOCertificationCandidate = require('../../../../lib/domain/models/SCOCertificationCandidate'); -const { InvalidCertificationCandidate } = require('../../../../lib/domain/errors'); +import { expect, catchErr } from '../../../test-helper.js'; +import { SCOCertificationCandidate } from '../../../../lib/domain/models/SCOCertificationCandidate.js'; +import { InvalidCertificationCandidate } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | SCO Certification Candidate', function () { describe('validate', function () { diff --git a/api/tests/unit/domain/models/Scorecard_test.js b/api/tests/unit/domain/models/Scorecard_test.js index 9af8d2e68c2..8284ab9bd2b 100644 --- a/api/tests/unit/domain/models/Scorecard_test.js +++ b/api/tests/unit/domain/models/Scorecard_test.js @@ -1,9 +1,7 @@ -// eslint-disable-next-line eslint-comments/disable-enable-pair -/* eslint-disable mocha/no-setup-in-describe */ -const { expect, sinon } = require('../../../test-helper'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const Scorecard = require('../../../../lib/domain/models/Scorecard'); -const { constants } = require('../../../../lib/domain/constants'); +import { expect, sinon } from '../../../test-helper.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { Scorecard } from '../../../../lib/domain/models/Scorecard.js'; +import { constants } from '../../../../lib/domain/constants.js'; describe('Unit | Domain | Models | Scorecard', function () { let computeDaysSinceLastKnowledgeElementStub; @@ -272,11 +270,11 @@ describe('Unit | Domain | Models | Scorecard', function () { }); before(function () { - constants.MINIMUM_DELAY_IN_DAYS_FOR_RESET = 7; + sinon.stub(constants, 'MINIMUM_DELAY_IN_DAYS_FOR_RESET').value(7); }); after(function () { - constants.MINIMUM_DELAY_IN_DAYS_FOR_RESET = originalConstantValue; + sinon.stub(constants, 'MINIMUM_DELAY_IN_DAYS_FOR_RESET').value(originalConstantValue); }); [ @@ -315,11 +313,11 @@ describe('Unit | Domain | Models | Scorecard', function () { }); before(function () { - constants.MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING = 4; + sinon.stub(constants, 'MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING').value(4); }); after(function () { - constants.MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING = originalConstantValue; + sinon.stub(constants, 'MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING').value(originalConstantValue); }); [ @@ -407,8 +405,7 @@ describe('Unit | Domain | Models | Scorecard', function () { // given const level = 2; const maxReachableLevel = 1; - sinon.stub(constants, 'MAX_REACHABLE_LEVEL').value(maxReachableLevel); - const scorecard = new Scorecard({ level }); + const scorecard = new Scorecard({ level, maxReachableLevel }); // when const result = scorecard.isMaxLevel; @@ -447,8 +444,7 @@ describe('Unit | Domain | Models | Scorecard', function () { it(`should return ${testCase.expectedResult} when level is ${testCase.level} and status ${testCase.status}`, function () { // given const maxReachableLevel = 2; - sinon.stub(constants, 'MAX_REACHABLE_LEVEL').value(maxReachableLevel); - const scorecard = new Scorecard({ level: testCase.level, status: testCase.status }); + const scorecard = new Scorecard({ level: testCase.level, status: testCase.status, maxReachableLevel }); // when const result = scorecard.isFinishedWithMaxLevel; @@ -508,8 +504,7 @@ describe('Unit | Domain | Models | Scorecard', function () { it(`should return ${testCase.expectedResult} when status is ${testCase.status}, level is ${testCase.level}`, function () { // given const maxReachableLevel = 2; - sinon.stub(constants, 'MAX_REACHABLE_LEVEL').value(maxReachableLevel); - const scorecard = new Scorecard({ status: testCase.status, level: testCase.level }); + const scorecard = new Scorecard({ status: testCase.status, level: testCase.level, maxReachableLevel }); // when const result = scorecard.isProgressable; diff --git a/api/tests/unit/domain/models/SessionJuryComment_test.js b/api/tests/unit/domain/models/SessionJuryComment_test.js index a5cd599ba1b..48f97b7d365 100644 --- a/api/tests/unit/domain/models/SessionJuryComment_test.js +++ b/api/tests/unit/domain/models/SessionJuryComment_test.js @@ -1,6 +1,6 @@ -const SessionJuryComment = require('../../../../lib/domain/models/SessionJuryComment'); -const { expect, domainBuilder, sinon } = require('../../../test-helper'); -const _ = require('lodash'); +import { SessionJuryComment } from '../../../../lib/domain/models/SessionJuryComment.js'; +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; +import _ from 'lodash'; const SESSION_JURY_COMMENT_PROPS = ['id', 'comment', 'authorId', 'updatedAt']; diff --git a/api/tests/unit/domain/models/SessionMassImportReport_test.js b/api/tests/unit/domain/models/SessionMassImportReport_test.js index 3969e1a7b3a..ffa14bf84fc 100644 --- a/api/tests/unit/domain/models/SessionMassImportReport_test.js +++ b/api/tests/unit/domain/models/SessionMassImportReport_test.js @@ -1,5 +1,5 @@ -const SessionMassImportReport = require('../../../../lib/domain/models/SessionMassImportReport'); -const { expect } = require('../../../test-helper'); +import { SessionMassImportReport } from '../../../../lib/domain/models/SessionMassImportReport.js'; +import { expect } from '../../../test-helper.js'; describe('Unit | Domain | Models | SessionMassImportReport', function () { context('#addErrorsReports', function () { diff --git a/api/tests/unit/domain/models/Session_test.js b/api/tests/unit/domain/models/Session_test.js index 59beb6cde4b..edfeec65a71 100644 --- a/api/tests/unit/domain/models/Session_test.js +++ b/api/tests/unit/domain/models/Session_test.js @@ -1,7 +1,6 @@ -const Session = require('../../../../lib/domain/models/Session'); -const { expect, sinon } = require('../../../test-helper'); -const _ = require('lodash'); -const { domainBuilder } = require('../../../test-helper'); +import { Session } from '../../../../lib/domain/models/Session.js'; +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import _ from 'lodash'; const SESSION_PROPS = [ 'id', diff --git a/api/tests/unit/domain/models/ShareableCertificate_test.js b/api/tests/unit/domain/models/ShareableCertificate_test.js index b232c7c9412..8884510d10b 100644 --- a/api/tests/unit/domain/models/ShareableCertificate_test.js +++ b/api/tests/unit/domain/models/ShareableCertificate_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | ShareableCertificate', function () { context('#setResultCompetenceTree', function () { diff --git a/api/tests/unit/domain/models/Skill_test.js b/api/tests/unit/domain/models/Skill_test.js index 4094a4ddaa3..b80d73c646e 100644 --- a/api/tests/unit/domain/models/Skill_test.js +++ b/api/tests/unit/domain/models/Skill_test.js @@ -1,5 +1,5 @@ -const Skill = require('../../../../lib/domain/models/Skill'); -const { expect, domainBuilder } = require('../../../test-helper'); +import { Skill } from '../../../../lib/domain/models/Skill.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | Skill', function () { describe('#Difficulty', function () { diff --git a/api/tests/unit/domain/models/Solution_test.js b/api/tests/unit/domain/models/Solution_test.js index 662ec4cb6ba..0193b0bf2c7 100644 --- a/api/tests/unit/domain/models/Solution_test.js +++ b/api/tests/unit/domain/models/Solution_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const Solution = require('../../../../lib/domain/models/Solution'); +import { expect } from '../../../test-helper.js'; +import { Solution } from '../../../../lib/domain/models/Solution.js'; describe('Unit | Domain | Models | Solution', function () { describe('#enabledTreatments', function () { diff --git a/api/tests/unit/domain/models/SupOrganizationLearnerSet_test.js b/api/tests/unit/domain/models/SupOrganizationLearnerSet_test.js index 97eb56778a2..ad7d17584df 100644 --- a/api/tests/unit/domain/models/SupOrganizationLearnerSet_test.js +++ b/api/tests/unit/domain/models/SupOrganizationLearnerSet_test.js @@ -1,7 +1,7 @@ -const SupOrganizationLearnerSet = require('../../../../lib/domain/models/SupOrganizationLearnerSet'); -const { expect, catchErr } = require('../../../test-helper'); -const { getI18n } = require('../../../tooling/i18n/i18n'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); +import { SupOrganizationLearnerSet } from '../../../../lib/domain/models/SupOrganizationLearnerSet.js'; +import { expect, catchErr } from '../../../test-helper.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Models | SupOrganizationLearnerSet', function () { let i18n; diff --git a/api/tests/unit/domain/models/SupOrganizationLearner_test.js b/api/tests/unit/domain/models/SupOrganizationLearner_test.js index 4015c762f02..d7f8d181be0 100644 --- a/api/tests/unit/domain/models/SupOrganizationLearner_test.js +++ b/api/tests/unit/domain/models/SupOrganizationLearner_test.js @@ -1,5 +1,5 @@ -const SupOrganizationLearner = require('../../../../lib/domain/models/SupOrganizationLearner'); -const { expect, catchErr } = require('../../../test-helper'); +import { SupOrganizationLearner } from '../../../../lib/domain/models/SupOrganizationLearner.js'; +import { expect, catchErr } from '../../../test-helper.js'; describe('Unit | Domain | Models | SupOrganizationLearner', function () { describe('#validate', function () { diff --git a/api/tests/unit/domain/models/TargetProfile_test.js b/api/tests/unit/domain/models/TargetProfile_test.js index 8ab8472f207..b576361f30d 100644 --- a/api/tests/unit/domain/models/TargetProfile_test.js +++ b/api/tests/unit/domain/models/TargetProfile_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | TargetProfile', function () { describe('#hasBadges', function () { diff --git a/api/tests/unit/domain/models/Thematic_test.js b/api/tests/unit/domain/models/Thematic_test.js index f01074e665a..ea1b5072e80 100644 --- a/api/tests/unit/domain/models/Thematic_test.js +++ b/api/tests/unit/domain/models/Thematic_test.js @@ -1,5 +1,5 @@ -const Thematic = require('../../../../lib/domain/models/Thematic'); -const { expect } = require('../../../test-helper'); +import { Thematic } from '../../../../lib/domain/models/Thematic.js'; +import { expect } from '../../../test-helper.js'; describe('Unit | Domain | Models | Thematic', function () { it('should return a thematic', function () { diff --git a/api/tests/unit/domain/models/TrainingTriggerTube_test.js b/api/tests/unit/domain/models/TrainingTriggerTube_test.js index 313c5ecb092..8bee07b12c1 100644 --- a/api/tests/unit/domain/models/TrainingTriggerTube_test.js +++ b/api/tests/unit/domain/models/TrainingTriggerTube_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const TrainingTriggerTube = require('../../../../lib/domain/models/TrainingTriggerTube'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { TrainingTriggerTube } from '../../../../lib/domain/models/TrainingTriggerTube.js'; describe('Unit | Domain | Models | TrainingTriggerTube', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/models/TrainingTrigger_test.js b/api/tests/unit/domain/models/TrainingTrigger_test.js index b79d391613c..d8e16ffbb43 100644 --- a/api/tests/unit/domain/models/TrainingTrigger_test.js +++ b/api/tests/unit/domain/models/TrainingTrigger_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder, catchErr, sinon } = require('../../../test-helper'); -const TrainingTrigger = require('../../../../lib/domain/models/TrainingTrigger'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); +import { expect, domainBuilder, catchErr, sinon } from '../../../test-helper.js'; +import { TrainingTrigger } from '../../../../lib/domain/models/TrainingTrigger.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; describe('Unit | Domain | Models | TrainingTrigger', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/models/Training_test.js b/api/tests/unit/domain/models/Training_test.js index ee6ca5dc7d3..9631462ff02 100644 --- a/api/tests/unit/domain/models/Training_test.js +++ b/api/tests/unit/domain/models/Training_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder, sinon } = require('../../../test-helper'); -const Training = require('../../../../lib/domain/models/Training'); +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; +import { Training } from '../../../../lib/domain/models/Training.js'; describe('Unit | Domain | Models | Training', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/models/Tube_test.js b/api/tests/unit/domain/models/Tube_test.js index 4a820f54034..7f7e5ce1d20 100644 --- a/api/tests/unit/domain/models/Tube_test.js +++ b/api/tests/unit/domain/models/Tube_test.js @@ -1,5 +1,5 @@ -const Tube = require('../../../../lib/domain/models/Tube'); -const { expect, domainBuilder } = require('../../../test-helper'); +import { Tube } from '../../../../lib/domain/models/Tube.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | Tube', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/models/UserCompetence_test.js b/api/tests/unit/domain/models/UserCompetence_test.js index b29b61713b8..3c686aae7b3 100644 --- a/api/tests/unit/domain/models/UserCompetence_test.js +++ b/api/tests/unit/domain/models/UserCompetence_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | UserCompetence', function () { describe('#isCertifiable', function () { diff --git a/api/tests/unit/domain/models/UserDetailsForAdmin_test.js b/api/tests/unit/domain/models/UserDetailsForAdmin_test.js index 134897cc9fb..3bfad955f45 100644 --- a/api/tests/unit/domain/models/UserDetailsForAdmin_test.js +++ b/api/tests/unit/domain/models/UserDetailsForAdmin_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const UserDetailsForAdmin = require('../../../../lib/domain/models/UserDetailsForAdmin'); +import { expect, sinon } from '../../../test-helper.js'; +import { UserDetailsForAdmin } from '../../../../lib/domain/models/UserDetailsForAdmin.js'; describe('Unit | Domain | Models | UserDetailsForAdmin', function () { let localeService; diff --git a/api/tests/unit/domain/models/UserLogin_test.js b/api/tests/unit/domain/models/UserLogin_test.js index f3b83df7877..5002d7c2bff 100644 --- a/api/tests/unit/domain/models/UserLogin_test.js +++ b/api/tests/unit/domain/models/UserLogin_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const UserLogin = require('../../../../lib/domain/models/UserLogin'); +import { expect, sinon } from '../../../test-helper.js'; +import { UserLogin } from '../../../../lib/domain/models/UserLogin.js'; describe('Unit | Domain | Models | UserLogin', function () { let clock; const now = new Date('2022-11-28T12:00:00Z'); diff --git a/api/tests/unit/domain/models/UserToCreate_test.js b/api/tests/unit/domain/models/UserToCreate_test.js index a26f4791383..311a9ba9405 100644 --- a/api/tests/unit/domain/models/UserToCreate_test.js +++ b/api/tests/unit/domain/models/UserToCreate_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const UserToCreate = require('../../../../lib/domain/models/UserToCreate'); +import { expect, sinon } from '../../../test-helper.js'; +import { UserToCreate } from '../../../../lib/domain/models/UserToCreate.js'; describe('Unit | Domain | Models | UserToCreate', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/models/User_test.js b/api/tests/unit/domain/models/User_test.js index ce44be25549..d2b6ba651af 100644 --- a/api/tests/unit/domain/models/User_test.js +++ b/api/tests/unit/domain/models/User_test.js @@ -1,5 +1,5 @@ -const { sinon, expect, domainBuilder } = require('../../../test-helper'); -const User = require('../../../../lib/domain/models/User'); +import { sinon, expect, domainBuilder } from '../../../test-helper.js'; +import { User } from '../../../../lib/domain/models/User.js'; describe('Unit | Domain | Models | User', function () { let config; diff --git a/api/tests/unit/domain/models/ValidatorQCM_test.js b/api/tests/unit/domain/models/ValidatorQCM_test.js index 58c8612f62a..c47977d18bf 100644 --- a/api/tests/unit/domain/models/ValidatorQCM_test.js +++ b/api/tests/unit/domain/models/ValidatorQCM_test.js @@ -1,8 +1,7 @@ -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const Validation = require('../../../../lib/domain/models/Validation'); -const ValidatorQCM = require('../../../../lib/domain/models/ValidatorQCM'); - -const { expect, domainBuilder, sinon } = require('../../../test-helper'); +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { Validation } from '../../../../lib/domain/models/Validation.js'; +import { ValidatorQCM } from '../../../../lib/domain/models/ValidatorQCM.js'; +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; describe('Unit | Domain | Models | ValidatorQCM', function () { let solutionServiceQcmStub; diff --git a/api/tests/unit/domain/models/ValidatorQCU_test.js b/api/tests/unit/domain/models/ValidatorQCU_test.js index 947057c4c55..83d627f6505 100644 --- a/api/tests/unit/domain/models/ValidatorQCU_test.js +++ b/api/tests/unit/domain/models/ValidatorQCU_test.js @@ -1,8 +1,7 @@ -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const Validation = require('../../../../lib/domain/models/Validation'); -const ValidatorQCU = require('../../../../lib/domain/models/ValidatorQCU'); - -const { expect, domainBuilder, sinon } = require('../../../test-helper'); +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { Validation } from '../../../../lib/domain/models/Validation.js'; +import { ValidatorQCU } from '../../../../lib/domain/models/ValidatorQCU.js'; +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; describe('Unit | Domain | Models | ValidatorQCU', function () { let solutionServiceQCUStub; diff --git a/api/tests/unit/domain/models/ValidatorQROCMDep_test.js b/api/tests/unit/domain/models/ValidatorQROCMDep_test.js index 875e84e38a4..36a64e27803 100644 --- a/api/tests/unit/domain/models/ValidatorQROCMDep_test.js +++ b/api/tests/unit/domain/models/ValidatorQROCMDep_test.js @@ -1,8 +1,7 @@ -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const Validation = require('../../../../lib/domain/models/Validation'); -const ValidatorQROCMDep = require('../../../../lib/domain/models/ValidatorQROCMDep'); - -const { expect, domainBuilder, sinon } = require('../../../test-helper'); +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { Validation } from '../../../../lib/domain/models/Validation.js'; +import { ValidatorQROCMDep } from '../../../../lib/domain/models/ValidatorQROCMDep.js'; +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; describe('Unit | Domain | Models | ValidatorQROCMDep', function () { let solutionServiceQROCMDepStub; diff --git a/api/tests/unit/domain/models/ValidatorQROCMInd_test.js b/api/tests/unit/domain/models/ValidatorQROCMInd_test.js index 71539c6a56d..85aef9a2f08 100644 --- a/api/tests/unit/domain/models/ValidatorQROCMInd_test.js +++ b/api/tests/unit/domain/models/ValidatorQROCMInd_test.js @@ -1,8 +1,7 @@ -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const Validation = require('../../../../lib/domain/models/Validation'); -const ValidatorQROCMInd = require('../../../../lib/domain/models/ValidatorQROCMInd'); - -const { expect, domainBuilder, sinon } = require('../../../test-helper'); +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { Validation } from '../../../../lib/domain/models/Validation.js'; +import { ValidatorQROCMInd } from '../../../../lib/domain/models/ValidatorQROCMInd.js'; +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; describe('Unit | Domain | Models | ValidatorQROCMInd', function () { let solutionServiceQROCMIndStub; diff --git a/api/tests/unit/domain/models/ValidatorQROC_test.js b/api/tests/unit/domain/models/ValidatorQROC_test.js index f02d3c62e8c..51f04709ada 100644 --- a/api/tests/unit/domain/models/ValidatorQROC_test.js +++ b/api/tests/unit/domain/models/ValidatorQROC_test.js @@ -1,13 +1,14 @@ -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const solutionServiceQroc = require('../../../../lib/domain/services/solution-service-qroc'); -const Validation = require('../../../../lib/domain/models/Validation'); -const ValidatorQROC = require('../../../../lib/domain/models/ValidatorQROC'); - -const { expect, domainBuilder, sinon } = require('../../../test-helper'); +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { Validation } from '../../../../lib/domain/models/Validation.js'; +import { ValidatorQROC } from '../../../../lib/domain/models/ValidatorQROC.js'; +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; describe('Unit | Domain | Models | ValidatorQROC', function () { + let solutionServiceQROCStub; beforeEach(function () { - sinon.stub(solutionServiceQroc, 'match'); + solutionServiceQROCStub = { + match: sinon.stub().returns(AnswerStatus.OK), + }; }); describe('#assess', function () { @@ -19,11 +20,10 @@ describe('Unit | Domain | Models | ValidatorQROC', function () { beforeEach(function () { // given - solutionServiceQroc.match.returns(AnswerStatus.OK); solution = domainBuilder.buildSolution({ type: 'QROC' }); uncorrectedAnswer = domainBuilder.buildAnswer.uncorrected(); - validator = new ValidatorQROC({ solution: solution }); + validator = new ValidatorQROC({ solution: solution }, solutionServiceQROCStub); // when validation = validator.assess({ answer: uncorrectedAnswer }); @@ -31,7 +31,7 @@ describe('Unit | Domain | Models | ValidatorQROC', function () { it('should call solutionServiceQROC', function () { // then - expect(solutionServiceQroc.match).to.have.been.calledWith({ + expect(solutionServiceQROCStub.match).to.have.been.calledWith({ answer: uncorrectedAnswer.value, solution: solution, challengeFormat, diff --git a/api/tests/unit/domain/models/Validator_test.js b/api/tests/unit/domain/models/Validator_test.js index 88f16ac4d74..46c2bae78d7 100644 --- a/api/tests/unit/domain/models/Validator_test.js +++ b/api/tests/unit/domain/models/Validator_test.js @@ -1,8 +1,7 @@ -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const Validator = require('../../../../lib/domain/models/Validator'); -const Validation = require('../../../../lib/domain/models/Validation'); - -const { expect, domainBuilder } = require('../../../test-helper'); +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { Validator } from '../../../../lib/domain/models/Validator.js'; +import { Validation } from '../../../../lib/domain/models/Validation.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | Validator', function () { describe('#assess', function () { diff --git a/api/tests/unit/domain/models/competence_test.js b/api/tests/unit/domain/models/competence_test.js index 9d170abce3e..7cc358f2bbc 100644 --- a/api/tests/unit/domain/models/competence_test.js +++ b/api/tests/unit/domain/models/competence_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const Competence = require('../../../../lib/domain/models/Competence'); +import { expect } from '../../../test-helper.js'; +import { Competence } from '../../../../lib/domain/models/Competence.js'; describe('Unit | Domain | Models | Competence', function () { describe('@reference', function () { diff --git a/api/tests/unit/domain/models/organizations-administration/OrganizationForAdmin_test.js b/api/tests/unit/domain/models/organizations-administration/OrganizationForAdmin_test.js index 156626b2fe5..c4c9ffdbd36 100644 --- a/api/tests/unit/domain/models/organizations-administration/OrganizationForAdmin_test.js +++ b/api/tests/unit/domain/models/organizations-administration/OrganizationForAdmin_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper.js'); -const OrganizationForAdmin = require('../../../../../lib/domain/models/organizations-administration/Organization.js'); +import { expect } from '../../../../test-helper.js'; +import { OrganizationForAdmin } from '../../../../../lib/domain/models/organizations-administration/Organization.js'; describe('Unit | Domain | Models | OrganizationForAdmin', function () { describe('#archivistFullName', function () { diff --git a/api/tests/unit/domain/models/target-profile-management/StageCollectionUpdate_test.js b/api/tests/unit/domain/models/target-profile-management/StageCollectionUpdate_test.js index d0a8ba26a93..8541f2f8d74 100644 --- a/api/tests/unit/domain/models/target-profile-management/StageCollectionUpdate_test.js +++ b/api/tests/unit/domain/models/target-profile-management/StageCollectionUpdate_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const { InvalidStageError } = require('../../../../../lib/domain/errors'); -const StageCollectionUpdate = require('../../../../../lib/domain/models/target-profile-management/StageCollectionUpdate'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import { InvalidStageError } from '../../../../../lib/domain/errors.js'; +import { StageCollectionUpdate } from '../../../../../lib/domain/models/target-profile-management/StageCollectionUpdate.js'; describe('Unit | Domain | Models | target-profile-management/StageCollectionUpdate', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/models/user-campaign-results/StageCollection_test.js b/api/tests/unit/domain/models/user-campaign-results/StageCollection_test.js index f5e26a7fb67..86e914eb15b 100644 --- a/api/tests/unit/domain/models/user-campaign-results/StageCollection_test.js +++ b/api/tests/unit/domain/models/user-campaign-results/StageCollection_test.js @@ -1,6 +1,5 @@ -const { expect } = require('../../../../test-helper'); - -const StageCollection = require('../../../../../lib/domain/models/user-campaign-results/StageCollection'); +import { expect } from '../../../../test-helper.js'; +import { StageCollection } from '../../../../../lib/domain/models/user-campaign-results/StageCollection.js'; describe('Unit | Domain | Models | StageCollection', function () { context('getReachedStageIndex', function () { diff --git a/api/tests/unit/domain/read-models/AllowedCertificationCenterAccess_test.js b/api/tests/unit/domain/read-models/AllowedCertificationCenterAccess_test.js index 6f01832fa04..6776bc6211a 100644 --- a/api/tests/unit/domain/read-models/AllowedCertificationCenterAccess_test.js +++ b/api/tests/unit/domain/read-models/AllowedCertificationCenterAccess_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder, sinon } = require('../../../test-helper'); -const settings = require('../../../../lib/config'); +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; +import { config as settings } from '../../../../lib/config.js'; describe('Unit | Domain | Read-Models | AllowedCertificationCenterAccess', function () { context('#isInWhitelist', function () { diff --git a/api/tests/unit/domain/read-models/CampaignAnalysis_test.js b/api/tests/unit/domain/read-models/CampaignAnalysis_test.js index 17099863b59..0a29781b876 100644 --- a/api/tests/unit/domain/read-models/CampaignAnalysis_test.js +++ b/api/tests/unit/domain/read-models/CampaignAnalysis_test.js @@ -1,5 +1,5 @@ -const CampaignAnalysis = require('../../../../lib/domain/read-models/CampaignAnalysis'); -const { expect, domainBuilder } = require('../../../test-helper'); +import { CampaignAnalysis } from '../../../../lib/domain/read-models/CampaignAnalysis.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Read-Models | CampaignAnalysis', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/read-models/CampaignAssessmentParticipationCompetenceResult_test.js b/api/tests/unit/domain/read-models/CampaignAssessmentParticipationCompetenceResult_test.js index 34c6a574e25..a56adc3a72a 100644 --- a/api/tests/unit/domain/read-models/CampaignAssessmentParticipationCompetenceResult_test.js +++ b/api/tests/unit/domain/read-models/CampaignAssessmentParticipationCompetenceResult_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const CampaignAssessmentParticipationCompetenceResult = require('../../../../lib/domain/read-models/CampaignAssessmentParticipationCompetenceResult'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { CampaignAssessmentParticipationCompetenceResult } from '../../../../lib/domain/read-models/CampaignAssessmentParticipationCompetenceResult.js'; describe('Unit | Domain | Models | CampaignAssessmentParticipationCompetenceResult', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/read-models/CampaignAssessmentParticipationResult_test.js b/api/tests/unit/domain/read-models/CampaignAssessmentParticipationResult_test.js index 2d5b5344749..f07f6d02c59 100644 --- a/api/tests/unit/domain/read-models/CampaignAssessmentParticipationResult_test.js +++ b/api/tests/unit/domain/read-models/CampaignAssessmentParticipationResult_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const CampaignAssessmentParticipationResult = require('../../../../lib/domain/read-models/CampaignAssessmentParticipationResult'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { CampaignAssessmentParticipationResult } from '../../../../lib/domain/read-models/CampaignAssessmentParticipationResult.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED, TO_SHARE } = CampaignParticipationStatuses; diff --git a/api/tests/unit/domain/read-models/CampaignAssessmentParticipation_test.js b/api/tests/unit/domain/read-models/CampaignAssessmentParticipation_test.js index 887b1d74196..4b0802d2f38 100644 --- a/api/tests/unit/domain/read-models/CampaignAssessmentParticipation_test.js +++ b/api/tests/unit/domain/read-models/CampaignAssessmentParticipation_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const CampaignAssessmentParticipation = require('../../../../lib/domain/read-models/CampaignAssessmentParticipation'); +import { expect } from '../../../test-helper.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { CampaignAssessmentParticipation } from '../../../../lib/domain/read-models/CampaignAssessmentParticipation.js'; describe('Unit | Domain | Models | CampaignAssessmentParticipation', function () { describe('#progression', function () { diff --git a/api/tests/unit/domain/read-models/CampaignCollectiveResult_test.js b/api/tests/unit/domain/read-models/CampaignCollectiveResult_test.js index 0c2f784099f..ad08863e3da 100644 --- a/api/tests/unit/domain/read-models/CampaignCollectiveResult_test.js +++ b/api/tests/unit/domain/read-models/CampaignCollectiveResult_test.js @@ -1,5 +1,5 @@ -const CampaignCollectiveResult = require('../../../../lib/domain/read-models/CampaignCollectiveResult'); -const { expect, domainBuilder } = require('../../../test-helper'); +import { CampaignCollectiveResult } from '../../../../lib/domain/read-models/CampaignCollectiveResult.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Read-Models | CampaignCollectiveResult', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/read-models/CampaignParticipationInfo_test.js b/api/tests/unit/domain/read-models/CampaignParticipationInfo_test.js index 9596f8cd712..42a32f2cc19 100644 --- a/api/tests/unit/domain/read-models/CampaignParticipationInfo_test.js +++ b/api/tests/unit/domain/read-models/CampaignParticipationInfo_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const CampaignParticipationInfo = require('../../../../lib/domain/read-models/CampaignParticipationInfo'); -const { ObjectValidationError } = require('../../../../lib/domain/errors'); +import { expect } from '../../../test-helper.js'; +import { CampaignParticipationInfo } from '../../../../lib/domain/read-models/CampaignParticipationInfo.js'; +import { ObjectValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Read-models | CampaignParticipationInfo', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/read-models/CampaignParticipationOverview_test.js b/api/tests/unit/domain/read-models/CampaignParticipationOverview_test.js index dc951ccc626..1795844ec4f 100644 --- a/api/tests/unit/domain/read-models/CampaignParticipationOverview_test.js +++ b/api/tests/unit/domain/read-models/CampaignParticipationOverview_test.js @@ -1,6 +1,6 @@ -const CampaignParticipationOverview = require('../../../../lib/domain/read-models/CampaignParticipationOverview'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); -const { expect, domainBuilder } = require('../../../test-helper'); +import { CampaignParticipationOverview } from '../../../../lib/domain/read-models/CampaignParticipationOverview.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; const { SHARED, STARTED } = CampaignParticipationStatuses; diff --git a/api/tests/unit/domain/read-models/CampaignProfile_test.js b/api/tests/unit/domain/read-models/CampaignProfile_test.js index 556668a87bb..9c7b08433b2 100644 --- a/api/tests/unit/domain/read-models/CampaignProfile_test.js +++ b/api/tests/unit/domain/read-models/CampaignProfile_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const CampaignProfile = require('../../../../lib/domain/read-models/CampaignProfile'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { CampaignProfile } from '../../../../lib/domain/read-models/CampaignProfile.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED, TO_SHARE } = CampaignParticipationStatuses; diff --git a/api/tests/unit/domain/read-models/CampaignReport_test.js b/api/tests/unit/domain/read-models/CampaignReport_test.js index 9f7c900a4bd..b70c3304372 100644 --- a/api/tests/unit/domain/read-models/CampaignReport_test.js +++ b/api/tests/unit/domain/read-models/CampaignReport_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; describe('Unit | Domain | Models | CampaignReport', function () { it('should define target profile informations', function () { diff --git a/api/tests/unit/domain/read-models/CampaignToJoin_test.js b/api/tests/unit/domain/read-models/CampaignToJoin_test.js index 5aed621c53e..2a26a630793 100644 --- a/api/tests/unit/domain/read-models/CampaignToJoin_test.js +++ b/api/tests/unit/domain/read-models/CampaignToJoin_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; describe('Unit | Domain | Models | CampaignToJoin', function () { describe('#isAssessment', function () { diff --git a/api/tests/unit/domain/read-models/CertificationDetails_test.js b/api/tests/unit/domain/read-models/CertificationDetails_test.js index b28b4efac12..ee2f2ed5ece 100644 --- a/api/tests/unit/domain/read-models/CertificationDetails_test.js +++ b/api/tests/unit/domain/read-models/CertificationDetails_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const CertificationDetails = require('../../../../lib/domain/read-models/CertificationDetails'); -const { states } = require('../../../../lib/domain/models/CertificationAssessment'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { CertificationDetails } from '../../../../lib/domain/read-models/CertificationDetails.js'; +import { states } from '../../../../lib/domain/models/CertificationAssessment.js'; describe('Unit | Domain | Read-models | CertificationDetails', function () { describe('static #from', function () { diff --git a/api/tests/unit/domain/read-models/CertificationEligibility_test.js b/api/tests/unit/domain/read-models/CertificationEligibility_test.js index 8a6c399c8f0..34e37351921 100644 --- a/api/tests/unit/domain/read-models/CertificationEligibility_test.js +++ b/api/tests/unit/domain/read-models/CertificationEligibility_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const CertificationEligibility = require('../../../../lib/domain/read-models/CertificationEligibility'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { CertificationEligibility } from '../../../../lib/domain/read-models/CertificationEligibility.js'; describe('Unit | Domain | Read-models | CertificationEligibility', function () { describe('static #notCertifiable', function () { diff --git a/api/tests/unit/domain/read-models/CertifiedBadge_test.js b/api/tests/unit/domain/read-models/CertifiedBadge_test.js index 8a099c8d428..78aa3e8e3b2 100644 --- a/api/tests/unit/domain/read-models/CertifiedBadge_test.js +++ b/api/tests/unit/domain/read-models/CertifiedBadge_test.js @@ -1,6 +1,6 @@ -const ComplementaryCertificationCourseResult = require('../../../../lib/domain/models/ComplementaryCertificationCourseResult'); -const CertifiedBadge = require('../../../../lib/domain/read-models/CertifiedBadge'); -const { expect } = require('../../../test-helper'); +import { ComplementaryCertificationCourseResult } from '../../../../lib/domain/models/ComplementaryCertificationCourseResult.js'; +import { CertifiedBadge } from '../../../../lib/domain/read-models/CertifiedBadge.js'; +import { expect } from '../../../test-helper.js'; describe('Unit | Domain | Read-models | CertifiedBadge', function () { describe('#getAcquiredCertifiedBadgesDTO', function () { diff --git a/api/tests/unit/domain/read-models/CleaCertifiedCandidate_test.js b/api/tests/unit/domain/read-models/CleaCertifiedCandidate_test.js index 1ba22f60d66..285c2ef67ea 100644 --- a/api/tests/unit/domain/read-models/CleaCertifiedCandidate_test.js +++ b/api/tests/unit/domain/read-models/CleaCertifiedCandidate_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const CleaCertifiedCandidate = require('../../../../lib/domain/read-models/CleaCertifiedCandidate'); +import { expect } from '../../../test-helper.js'; +import { CleaCertifiedCandidate } from '../../../../lib/domain/read-models/CleaCertifiedCandidate.js'; describe('Unit | Domain | Models | CleaCertifiedCandidate', function () { describe('#isBornInAForeignCountry', function () { diff --git a/api/tests/unit/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal_test.js b/api/tests/unit/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal_test.js index d0ea9c3e6cf..8d6ae9cad58 100644 --- a/api/tests/unit/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal_test.js +++ b/api/tests/unit/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal_test.js @@ -1,6 +1,6 @@ -const ComplementaryCertificationCourseResultsForJuryCertificationWithExternal = require('../../../../lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal'); -const ComplementaryCertificationCourseResult = require('../../../../lib/domain/models/ComplementaryCertificationCourseResult'); -const { expect, domainBuilder } = require('../../../test-helper'); +import { ComplementaryCertificationCourseResultsForJuryCertificationWithExternal } from '../../../../lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertificationWithExternal.js'; +import { ComplementaryCertificationCourseResult } from '../../../../lib/domain/models/ComplementaryCertificationCourseResult.js'; +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Models | ComplementaryCertificationCourseResultsForJuryCertificationWithExternal', function () { describe('#finalResult', function () { diff --git a/api/tests/unit/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification_test.js b/api/tests/unit/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification_test.js index 4fe1b071a8a..54c37533a36 100644 --- a/api/tests/unit/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification_test.js +++ b/api/tests/unit/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const ComplementaryCertificationCourseResultsForJuryCertification = require('../../../../lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { ComplementaryCertificationCourseResultsForJuryCertification } from '../../../../lib/domain/read-models/ComplementaryCertificationCourseResultsForJuryCertification.js'; describe('Unit | Domain | Models | ComplementaryCertificationCourseResultsForJuryCertification', function () { describe('#status', function () { diff --git a/api/tests/unit/domain/read-models/CpfCertificationResult_test.js b/api/tests/unit/domain/read-models/CpfCertificationResult_test.js index 943ccb01198..489a0228092 100644 --- a/api/tests/unit/domain/read-models/CpfCertificationResult_test.js +++ b/api/tests/unit/domain/read-models/CpfCertificationResult_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Read-Models | CpfCertificationResult', function () { context('#inseeCode', function () { diff --git a/api/tests/unit/domain/read-models/EuropeanNumericLevelFactory_test.js b/api/tests/unit/domain/read-models/EuropeanNumericLevelFactory_test.js index b049df20569..101c06452a7 100644 --- a/api/tests/unit/domain/read-models/EuropeanNumericLevelFactory_test.js +++ b/api/tests/unit/domain/read-models/EuropeanNumericLevelFactory_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const EuropeanNumericLevelFactory = require('../../../../lib/domain/read-models/EuropeanNumericLevelFactory'); -const EuropeanNumericLevel = require('../../../../lib/domain/read-models/EuropeanNumericLevel'); +import { expect } from '../../../test-helper.js'; +import { EuropeanNumericLevelFactory } from '../../../../lib/domain/read-models/EuropeanNumericLevelFactory.js'; +import { EuropeanNumericLevel } from '../../../../lib/domain/read-models/EuropeanNumericLevel.js'; describe('Unit | Domain | Read-models | EuropeanNumericLevelFactory', function () { describe('static #buildFromCompetenceMarks', function () { diff --git a/api/tests/unit/domain/read-models/JuryCertificationSummary_test.js b/api/tests/unit/domain/read-models/JuryCertificationSummary_test.js index 22ac39234f2..fbcf0fa67c9 100644 --- a/api/tests/unit/domain/read-models/JuryCertificationSummary_test.js +++ b/api/tests/unit/domain/read-models/JuryCertificationSummary_test.js @@ -1,7 +1,8 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const JuryCertificationSummary = require('../../../../lib/domain/read-models/JuryCertificationSummary'); -const AssessmentResult = require('../../../../lib/domain/models/AssessmentResult'); -const forIn = require('lodash/forIn'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { JuryCertificationSummary } from '../../../../lib/domain/read-models/JuryCertificationSummary.js'; +import { AssessmentResult } from '../../../../lib/domain/models/AssessmentResult.js'; +import lodash from 'lodash'; +const { forIn } = lodash; describe('Unit | Domain | Models | JuryCertificationSummary', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/read-models/OrganizationLearnerActivity_test.js b/api/tests/unit/domain/read-models/OrganizationLearnerActivity_test.js index 71bc3101ceb..697ba393837 100644 --- a/api/tests/unit/domain/read-models/OrganizationLearnerActivity_test.js +++ b/api/tests/unit/domain/read-models/OrganizationLearnerActivity_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const OrganizationLearnerActivity = require('../../../../lib/domain/read-models/OrganizationLearnerActivity'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { OrganizationLearnerActivity } from '../../../../lib/domain/read-models/OrganizationLearnerActivity.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; describe('Unit | Domain | Read-Models | OrganizationLearnerActivity', function () { it('computes the activity statistics for every status of every campaign types', function () { diff --git a/api/tests/unit/domain/read-models/OrganizationLearnerForAdmin_test.js b/api/tests/unit/domain/read-models/OrganizationLearnerForAdmin_test.js index 16d175aaae0..731151fafcb 100644 --- a/api/tests/unit/domain/read-models/OrganizationLearnerForAdmin_test.js +++ b/api/tests/unit/domain/read-models/OrganizationLearnerForAdmin_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const OrganizationLearnerForAdmin = require('../../../../lib/domain/read-models/OrganizationLearnerForAdmin'); -const { ObjectValidationError } = require('../../../../lib/domain/errors'); +import { expect } from '../../../test-helper.js'; +import { OrganizationLearnerForAdmin } from '../../../../lib/domain/read-models/OrganizationLearnerForAdmin.js'; +import { ObjectValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Read-models | OrganizationLearnerForAdmin', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/read-models/OrganizationPlacesLotManagement_test.js b/api/tests/unit/domain/read-models/OrganizationPlacesLotManagement_test.js index 3533dfd348b..ec86a8e123a 100644 --- a/api/tests/unit/domain/read-models/OrganizationPlacesLotManagement_test.js +++ b/api/tests/unit/domain/read-models/OrganizationPlacesLotManagement_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const OrganizationPlacesLotManagement = require('../../../../lib/domain/read-models/OrganizationPlacesLotManagement'); +import { expect, sinon } from '../../../test-helper.js'; +import { OrganizationPlacesLotManagement } from '../../../../lib/domain/read-models/OrganizationPlacesLotManagement.js'; describe('Unit | Domain | ReadModels | organizationPlacesLotManagement', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/read-models/SessionSummary_test.js b/api/tests/unit/domain/read-models/SessionSummary_test.js index 0e674682de6..a9fe97ace6e 100644 --- a/api/tests/unit/domain/read-models/SessionSummary_test.js +++ b/api/tests/unit/domain/read-models/SessionSummary_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const SessionSummary = require('../../../../lib/domain/read-models/SessionSummary'); +import { expect } from '../../../test-helper.js'; +import { SessionSummary } from '../../../../lib/domain/read-models/SessionSummary.js'; describe('Unit | Domain | Read-Models | SessionSummary', function () { describe('#static from', function () { diff --git a/api/tests/unit/domain/read-models/SharedProfileForCampaign_test.js b/api/tests/unit/domain/read-models/SharedProfileForCampaign_test.js index 4a2cb894811..024954b9a2f 100644 --- a/api/tests/unit/domain/read-models/SharedProfileForCampaign_test.js +++ b/api/tests/unit/domain/read-models/SharedProfileForCampaign_test.js @@ -1,7 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); - -const SharedProfileForCampaign = require('../../../../lib/domain/read-models/SharedProfileForCampaign'); -const Scorecard = require('../../../../lib/domain/models/Scorecard'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { SharedProfileForCampaign } from '../../../../lib/domain/read-models/SharedProfileForCampaign.js'; +import { Scorecard } from '../../../../lib/domain/models/Scorecard.js'; describe('Unit | Domain | Models | SharedProfileForCampaign', function () { describe('#scorecards', function () { diff --git a/api/tests/unit/domain/read-models/TrainingForAdmin_test.js b/api/tests/unit/domain/read-models/TrainingForAdmin_test.js index 7a8c7838689..0b6e53e4d79 100644 --- a/api/tests/unit/domain/read-models/TrainingForAdmin_test.js +++ b/api/tests/unit/domain/read-models/TrainingForAdmin_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | Domain | Read-Models | TrainingForAdmin', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/read-models/TrainingTriggerForAdmin_test.js b/api/tests/unit/domain/read-models/TrainingTriggerForAdmin_test.js index cfa30a5ba5f..e0e07a9e161 100644 --- a/api/tests/unit/domain/read-models/TrainingTriggerForAdmin_test.js +++ b/api/tests/unit/domain/read-models/TrainingTriggerForAdmin_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder, catchErr } = require('../../../test-helper'); -const TrainingTriggerForAdmin = require('../../../../lib/domain/read-models/TrainingTriggerForAdmin'); +import { expect, domainBuilder, catchErr } from '../../../test-helper.js'; +import { TrainingTriggerForAdmin } from '../../../../lib/domain/read-models/TrainingTriggerForAdmin.js'; describe('Unit | Domain | Read-Models | TrainingTriggerForAdmin', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/read-models/campaign-results/CampaignAssessmentParticipationResultMinimal_test.js b/api/tests/unit/domain/read-models/campaign-results/CampaignAssessmentParticipationResultMinimal_test.js index e3c8ad28ec0..d0acc5a8c85 100644 --- a/api/tests/unit/domain/read-models/campaign-results/CampaignAssessmentParticipationResultMinimal_test.js +++ b/api/tests/unit/domain/read-models/campaign-results/CampaignAssessmentParticipationResultMinimal_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const CampaignAssessmentParticipationResultMinimal = require('../../../../../lib/domain/read-models/campaign-results/CampaignAssessmentParticipationResultMinimal'); +import { expect } from '../../../../test-helper.js'; +import { CampaignAssessmentParticipationResultMinimal } from '../../../../../lib/domain/read-models/campaign-results/CampaignAssessmentParticipationResultMinimal.js'; describe('Unit | Domain | Read-Models | CampaignResults | CampaignAssessmentParticipationResultMinimal', function () { describe('constructor', function () { diff --git a/api/tests/unit/domain/read-models/campaign/TargetProfileForSpecifier_test.js b/api/tests/unit/domain/read-models/campaign/TargetProfileForSpecifier_test.js index be1e0649fad..266fc816d21 100644 --- a/api/tests/unit/domain/read-models/campaign/TargetProfileForSpecifier_test.js +++ b/api/tests/unit/domain/read-models/campaign/TargetProfileForSpecifier_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const TargetProfileForSpecifier = require('../../../../../lib/domain/read-models/campaign/TargetProfileForSpecifier'); +import { expect } from '../../../../test-helper.js'; +import { TargetProfileForSpecifier } from '../../../../../lib/domain/read-models/campaign/TargetProfileForSpecifier.js'; describe('TargetProfileForSpecifier', function () { describe('#constructor', function () { diff --git a/api/tests/unit/domain/read-models/campaign/campaignManagment_test.js b/api/tests/unit/domain/read-models/campaign/campaignManagment_test.js index 0db7d282329..6e6b91192d3 100644 --- a/api/tests/unit/domain/read-models/campaign/campaignManagment_test.js +++ b/api/tests/unit/domain/read-models/campaign/campaignManagment_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const CampaignManagement = require('../../../../../lib/domain/read-models/CampaignManagement'); +import { expect } from '../../../../test-helper.js'; +import { CampaignManagement } from '../../../../../lib/domain/read-models/CampaignManagement.js'; describe('campaignManagement', function () { describe('#totalParticipationsCount', function () { diff --git a/api/tests/unit/domain/read-models/participant-results/AssessmentResult_test.js b/api/tests/unit/domain/read-models/participant-results/AssessmentResult_test.js index c9653bb1e7e..ecae65e32bd 100644 --- a/api/tests/unit/domain/read-models/participant-results/AssessmentResult_test.js +++ b/api/tests/unit/domain/read-models/participant-results/AssessmentResult_test.js @@ -1,8 +1,8 @@ -const { domainBuilder, expect, sinon } = require('../../../../test-helper'); -const { constants } = require('../../../../../lib/domain/constants'); -const AssessmentResult = require('../../../../../lib/domain/read-models/participant-results/AssessmentResult'); -const KnowledgeElement = require('../../../../../lib/domain/models/KnowledgeElement'); -const StageCollection = require('../../../../../lib/domain/models/user-campaign-results/StageCollection'); +import { domainBuilder, expect, sinon } from '../../../../test-helper.js'; +import { constants } from '../../../../../lib/domain/constants.js'; +import { AssessmentResult } from '../../../../../lib/domain/read-models/participant-results/AssessmentResult.js'; +import { KnowledgeElement } from '../../../../../lib/domain/models/KnowledgeElement.js'; +import { StageCollection } from '../../../../../lib/domain/models/user-campaign-results/StageCollection.js'; describe('Unit | Domain | Read-Models | ParticipantResult | AssessmentResult', function () { it('computes the number of skills, the number of skill tested and the number of skill validated', function () { @@ -417,12 +417,12 @@ describe('Unit | Domain | Read-Models | ParticipantResult | AssessmentResult', f originalConstantValue = constants.MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING; now = new Date('2020-01-05T05:06:07Z'); clock = sinon.useFakeTimers(now); - constants.MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING = 4; + sinon.stub(constants, 'MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING').value(4); }); afterEach(function () { clock.restore(); - constants.MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING = originalConstantValue; + sinon.stub(constants, 'MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING').value(originalConstantValue); }); context('when the campaign does not allow multiple sendings', function () { @@ -680,11 +680,11 @@ describe('Unit | Domain | Read-Models | ParticipantResult | AssessmentResult', f let clock; before(function () { - constants.MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING = 4; + sinon.stub(constants, 'MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING').value(4); }); after(function () { - constants.MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING = originalConstantValue; + sinon.stub(constants, 'MINIMUM_DELAY_IN_DAYS_BEFORE_IMPROVING').value(originalConstantValue); }); beforeEach(function () { diff --git a/api/tests/unit/domain/read-models/participant-results/BadgeResult_test.js b/api/tests/unit/domain/read-models/participant-results/BadgeResult_test.js index 11acaa177de..78b526232b0 100644 --- a/api/tests/unit/domain/read-models/participant-results/BadgeResult_test.js +++ b/api/tests/unit/domain/read-models/participant-results/BadgeResult_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const BadgeResult = require('../../../../../lib/domain/read-models/participant-results/BadgeResult'); -const KnowledgeElement = require('../../../../../lib/domain/models/KnowledgeElement'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import { BadgeResult } from '../../../../../lib/domain/read-models/participant-results/BadgeResult.js'; +import { KnowledgeElement } from '../../../../../lib/domain/models/KnowledgeElement.js'; describe('Unit | Domain | Read-Models | ParticipantResult | BadgeResult', function () { it('computes the badges results', function () { diff --git a/api/tests/unit/domain/read-models/participant-results/CompetenceResult_test.js b/api/tests/unit/domain/read-models/participant-results/CompetenceResult_test.js index c0add47abf3..13b157d91b4 100644 --- a/api/tests/unit/domain/read-models/participant-results/CompetenceResult_test.js +++ b/api/tests/unit/domain/read-models/participant-results/CompetenceResult_test.js @@ -1,6 +1,6 @@ -const { domainBuilder, expect } = require('../../../../test-helper'); -const CompetenceResult = require('../../../../../lib/domain/read-models/participant-results/CompetenceResult'); -const KnowledgeElement = require('../../../../../lib/domain/models/KnowledgeElement'); +import { domainBuilder, expect } from '../../../../test-helper.js'; +import { CompetenceResult } from '../../../../../lib/domain/read-models/participant-results/CompetenceResult.js'; +import { KnowledgeElement } from '../../../../../lib/domain/models/KnowledgeElement.js'; describe('Unit | Domain | Read-Models | ParticipantResult | CompetenceResult', function () { it('computes the result for the given competence', function () { diff --git a/api/tests/unit/domain/read-models/participant-results/SkillSetResult_test.js b/api/tests/unit/domain/read-models/participant-results/SkillSetResult_test.js index db003842caa..4b448b85e85 100644 --- a/api/tests/unit/domain/read-models/participant-results/SkillSetResult_test.js +++ b/api/tests/unit/domain/read-models/participant-results/SkillSetResult_test.js @@ -1,6 +1,6 @@ -const { domainBuilder, expect } = require('../../../../test-helper'); -const SkillSetResult = require('../../../../../lib/domain/read-models/participant-results/SkillSetResult'); -const KnowledgeElement = require('../../../../../lib/domain/models/KnowledgeElement'); +import { domainBuilder, expect } from '../../../../test-helper.js'; +import { SkillSetResult } from '../../../../../lib/domain/read-models/participant-results/SkillSetResult.js'; +import { KnowledgeElement } from '../../../../../lib/domain/models/KnowledgeElement.js'; describe('Unit | Domain | Read-Models | ParticipantResults | SkillSetResult', function () { it('computes the result for the given competence', function () { diff --git a/api/tests/unit/domain/services/assessment-result-service_test.js b/api/tests/unit/domain/services/assessment-result-service_test.js index 1d8e5feb5c5..0e79d3b25a0 100644 --- a/api/tests/unit/domain/services/assessment-result-service_test.js +++ b/api/tests/unit/domain/services/assessment-result-service_test.js @@ -1,8 +1,8 @@ -const { expect, sinon } = require('../../../test-helper'); +import { expect, sinon } from '../../../test-helper.js'; -const service = require('../../../../lib/domain/services/assessment-result-service'); -const AssessmentResult = require('../../../../lib/domain/models/AssessmentResult'); -const CompetenceMark = require('../../../../lib/domain/models/CompetenceMark'); +import * as service from '../../../../lib/domain/services/assessment-result-service.js'; +import { AssessmentResult } from '../../../../lib/domain/models/AssessmentResult.js'; +import { CompetenceMark } from '../../../../lib/domain/models/CompetenceMark.js'; describe('Unit | Domain | Services | assessment-results', function () { describe('#save', function () { diff --git a/api/tests/unit/domain/services/authentication/authentication-service-registry_test.js b/api/tests/unit/domain/services/authentication/authentication-service-registry_test.js index 2f28af96235..c5db92679f4 100644 --- a/api/tests/unit/domain/services/authentication/authentication-service-registry_test.js +++ b/api/tests/unit/domain/services/authentication/authentication-service-registry_test.js @@ -1,8 +1,6 @@ -const { expect, catchErr } = require('../../../../test-helper'); -const authenticationRegistry = require('../../../../../lib/domain/services/authentication/authentication-service-registry'); -const PoleEmploiOidcAuthenticationService = require('../../../../../lib/domain/services/authentication/pole-emploi-oidc-authentication-service'); -const FwbOidcAuthenticationService = require('../../../../../lib/domain/services/authentication/fwb-oidc-authentication-service'); -const { InvalidIdentityProviderError } = require('../../../../../lib/domain/errors'); +import { expect, catchErr } from '../../../../test-helper.js'; +import * as authenticationRegistry from '../../../../../lib/domain/services/authentication/authentication-service-registry.js'; +import { InvalidIdentityProviderError } from '../../../../../lib/domain/errors.js'; describe('Unit | Domain | Services | authentication registry', function () { describe('#lookupAuthenticationService', function () { @@ -14,7 +12,7 @@ describe('Unit | Domain | Services | authentication registry', function () { const service = await authenticationRegistry.lookupAuthenticationService(identityProvider); // then - expect(service).to.be.an.instanceOf(PoleEmploiOidcAuthenticationService); + expect(service.identityProvider).to.equal('POLE_EMPLOI'); }); it('finds the identity provider service with hasLogoutUrl', async function () { @@ -25,7 +23,7 @@ describe('Unit | Domain | Services | authentication registry', function () { const service = await authenticationRegistry.lookupAuthenticationService(identityProvider); // then - expect(service).to.be.an.instanceOf(FwbOidcAuthenticationService); + expect(service.identityProvider).to.equal('FWB'); expect(service.hasLogoutUrl).to.be.true; }); diff --git a/api/tests/unit/domain/services/authentication/authentication-session-service_test.js b/api/tests/unit/domain/services/authentication/authentication-session-service_test.js index 081f76f930b..155677fc365 100644 --- a/api/tests/unit/domain/services/authentication/authentication-session-service_test.js +++ b/api/tests/unit/domain/services/authentication/authentication-session-service_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const authenticationSessionService = require('../../../../../lib/domain/services/authentication/authentication-session-service'); +import { expect } from '../../../../test-helper.js'; +import * as authenticationSessionService from '../../../../../lib/domain/services/authentication/authentication-session-service.js'; describe('Unit | Domain | Services | authentication session', function () { describe('#getByKey', function () { diff --git a/api/tests/unit/domain/services/authentication/oidc-authentication-service_test.js b/api/tests/unit/domain/services/authentication/oidc-authentication-service_test.js index 31cc0904bf0..69ba7e81449 100644 --- a/api/tests/unit/domain/services/authentication/oidc-authentication-service_test.js +++ b/api/tests/unit/domain/services/authentication/oidc-authentication-service_test.js @@ -1,22 +1,24 @@ -const { expect, sinon, catchErr } = require('../../../../test-helper'); -const settings = require('../../../../../lib/config'); - -const OidcAuthenticationService = require('../../../../../lib/domain/services/authentication/oidc-authentication-service'); -const jsonwebtoken = require('jsonwebtoken'); -const httpAgent = require('../../../../../lib/infrastructure/http/http-agent'); -const AuthenticationSessionContent = require('../../../../../lib/domain/models/AuthenticationSessionContent'); -const { +import { expect, sinon, catchErr } from '../../../../test-helper.js'; +import { config as settings } from '../../../../../lib/config.js'; + +import { OidcAuthenticationService } from '../../../../../lib/domain/services/authentication/oidc-authentication-service.js'; +import jsonwebtoken from 'jsonwebtoken'; +import { httpAgent } from '../../../../../lib/infrastructure/http/http-agent.js'; +import { AuthenticationSessionContent } from '../../../../../lib/domain/models/AuthenticationSessionContent.js'; + +import { InvalidExternalAPIResponseError, OidcInvokingTokenEndpointError, OidcMissingFieldsError, OidcUserInfoFormatError, -} = require('../../../../../lib/domain/errors'); -const DomainTransaction = require('../../../../../lib/infrastructure/DomainTransaction'); -const UserToCreate = require('../../../../../lib/domain/models/UserToCreate'); -const AuthenticationMethod = require('../../../../../lib/domain/models/AuthenticationMethod'); -const OidcIdentityProviders = require('../../../../../lib/domain/constants/oidc-identity-providers'); -const monitoringTools = require('../../../../../lib/infrastructure/monitoring-tools'); -const { OIDC_ERRORS } = require('../../../../../lib/domain/constants'); +} from '../../../../../lib/domain/errors.js'; + +import { DomainTransaction } from '../../../../../lib/infrastructure/DomainTransaction.js'; +import { UserToCreate } from '../../../../../lib/domain/models/UserToCreate.js'; +import { AuthenticationMethod } from '../../../../../lib/domain/models/AuthenticationMethod.js'; +import * as OidcIdentityProviders from '../../../../../lib/domain/constants/oidc-identity-providers.js'; +import { monitoringTools } from '../../../../../lib/infrastructure/monitoring-tools.js'; +import { OIDC_ERRORS } from '../../../../../lib/domain/constants.js'; describe('Unit | Domain | Services | oidc-authentication-service', function () { describe('#createAccessToken', function () { diff --git a/api/tests/unit/domain/services/authentication/pix-authentication-service_test.js b/api/tests/unit/domain/services/authentication/pix-authentication-service_test.js index 196a15dfcea..a09c26f0aad 100644 --- a/api/tests/unit/domain/services/authentication/pix-authentication-service_test.js +++ b/api/tests/unit/domain/services/authentication/pix-authentication-service_test.js @@ -1,9 +1,8 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../../test-helper'); -const { PasswordNotMatching, UserNotFoundError } = require('../../../../../lib/domain/errors'); - -const User = require('../../../../../lib/domain/models/User'); -const UserLogin = require('../../../../../lib/domain/models/UserLogin'); -const pixAuthenticationService = require('../../../../../lib/domain/services/authentication/pix-authentication-service'); +import { expect, sinon, domainBuilder, catchErr } from '../../../../test-helper.js'; +import { PasswordNotMatching, UserNotFoundError } from '../../../../../lib/domain/errors.js'; +import { User } from '../../../../../lib/domain/models/User.js'; +import { UserLogin } from '../../../../../lib/domain/models/UserLogin.js'; +import * as pixAuthenticationService from '../../../../../lib/domain/services/authentication/pix-authentication-service.js'; describe('Unit | Domain | Services | pix-authentication-service', function () { describe('#getUserByUsernameAndPassword', function () { diff --git a/api/tests/unit/domain/services/authentication/pole-emploi-oidc-authentication-service_test.js b/api/tests/unit/domain/services/authentication/pole-emploi-oidc-authentication-service_test.js index 015209f0f11..ba71257539e 100644 --- a/api/tests/unit/domain/services/authentication/pole-emploi-oidc-authentication-service_test.js +++ b/api/tests/unit/domain/services/authentication/pole-emploi-oidc-authentication-service_test.js @@ -1,7 +1,8 @@ -const { expect } = require('../../../../test-helper'); -const AuthenticationMethod = require('../../../../../lib/domain/models/AuthenticationMethod'); -const PoleEmploiOidcAuthenticationService = require('../../../../../lib/domain/services/authentication/pole-emploi-oidc-authentication-service'); -const { temporaryStorage } = require('../../../../../lib/infrastructure/temporary-storage/index.js'); +import { expect } from '../../../../test-helper.js'; +import { AuthenticationMethod } from '../../../../../lib/domain/models/AuthenticationMethod.js'; +import { PoleEmploiOidcAuthenticationService } from '../../../../../lib/domain/services/authentication/pole-emploi-oidc-authentication-service.js'; +import { temporaryStorage } from '../../../../../lib/infrastructure/temporary-storage/index.js'; + const logoutUrlTemporaryStorage = temporaryStorage.withPrefix('logout-url:'); describe('Unit | Domain | Services | pole-emploi-oidc-authentication-service', function () { diff --git a/api/tests/unit/domain/services/campaign-participation-service_test.js b/api/tests/unit/domain/services/campaign-participation-service_test.js index 5023c48748b..e5f29784173 100644 --- a/api/tests/unit/domain/services/campaign-participation-service_test.js +++ b/api/tests/unit/domain/services/campaign-participation-service_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); +import { expect } from '../../../test-helper.js'; -const campaignParticipationService = require('./../../../../lib/domain/services/campaign-participation-service'); +import * as campaignParticipationService from './../../../../lib/domain/services/campaign-participation-service.js'; describe('Unit | Service | Campaign Participation Service', function () { describe('progress', function () { diff --git a/api/tests/unit/domain/services/campaigns/campaign-code-generator_test.js b/api/tests/unit/domain/services/campaigns/campaign-code-generator_test.js index 9025a304cc9..d2265e11cd9 100644 --- a/api/tests/unit/domain/services/campaigns/campaign-code-generator_test.js +++ b/api/tests/unit/domain/services/campaigns/campaign-code-generator_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../../test-helper'); -const randomString = require('randomstring'); -const campaignCodeGenerator = require('../../../../../lib/domain/services/campaigns/campaign-code-generator'); +import { expect, sinon } from '../../../../test-helper.js'; +import randomString from 'randomstring'; +import * as campaignCodeGenerator from '../../../../../lib/domain/services/campaigns/campaign-code-generator.js'; describe('Unit | Domain | Services | campaign code generator', function () { describe('#createCampaignCode', function () { diff --git a/api/tests/unit/domain/services/certification-badges-service_test.js b/api/tests/unit/domain/services/certification-badges-service_test.js index 503c14d4ec9..5e39b969977 100644 --- a/api/tests/unit/domain/services/certification-badges-service_test.js +++ b/api/tests/unit/domain/services/certification-badges-service_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const certificationBadgesService = require('../../../../lib/domain/services/certification-badges-service'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import * as certificationBadgesService from '../../../../lib/domain/services/certification-badges-service.js'; describe('Unit | Service | certification-badges-service', function () { describe('#findStillValidBadgeAcquisitions', function () { diff --git a/api/tests/unit/domain/services/certification-challenges-service_test.js b/api/tests/unit/domain/services/certification-challenges-service_test.js index d2f1aebb4b2..254856ab2ab 100644 --- a/api/tests/unit/domain/services/certification-challenges-service_test.js +++ b/api/tests/unit/domain/services/certification-challenges-service_test.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const { PIX_ORIGIN } = require('../../../../lib/domain/constants'); -const PlacementProfile = require('../../../../lib/domain/models/PlacementProfile'); -const certificationChallengesService = require('../../../../lib/domain/services/certification-challenges-service'); +import _ from 'lodash'; +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { PIX_ORIGIN } from '../../../../lib/domain/constants.js'; +import { PlacementProfile } from '../../../../lib/domain/models/PlacementProfile.js'; +import * as certificationChallengesService from '../../../../lib/domain/services/certification-challenges-service.js'; describe('Unit | Service | Certification Challenge Service', function () { const userId = 63731; diff --git a/api/tests/unit/domain/services/certification-cpf-service_test.js b/api/tests/unit/domain/services/certification-cpf-service_test.js index 8c58baf8760..a2e0921ef4f 100644 --- a/api/tests/unit/domain/services/certification-cpf-service_test.js +++ b/api/tests/unit/domain/services/certification-cpf-service_test.js @@ -1,9 +1,9 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const { +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { CpfBirthInformationValidation, getBirthInformation, -} = require('../../../../lib/domain/services/certification-cpf-service'); -const { CERTIFICATION_CANDIDATES_ERRORS } = require('../../../../lib/domain/constants/certification-candidates-errors'); +} from '../../../../lib/domain/services/certification-cpf-service.js'; +import { CERTIFICATION_CANDIDATES_ERRORS } from '../../../../lib/domain/constants/certification-candidates-errors.js'; describe('Unit | Service | Certification CPF service', function () { let certificationCpfCountryRepository; diff --git a/api/tests/unit/domain/services/course-service_test.js b/api/tests/unit/domain/services/course-service_test.js index fabdfb2ab67..94dbcf62b1c 100644 --- a/api/tests/unit/domain/services/course-service_test.js +++ b/api/tests/unit/domain/services/course-service_test.js @@ -1,6 +1,6 @@ -const courseService = require('../../../../lib/domain/services/course-service'); -const logger = require('../../../../lib/infrastructure/logger'); -const { expect, sinon } = require('../../../test-helper'); +import * as courseService from '../../../../lib/domain/services/course-service.js'; +import { logger } from '../../../../lib/infrastructure/logger.js'; +import { expect, sinon } from '../../../test-helper.js'; describe('Unit | Service | Course Service', function () { describe('#getCourse', function () { diff --git a/api/tests/unit/domain/services/cpf-certification-xml-export-service_test.js b/api/tests/unit/domain/services/cpf-certification-xml-export-service_test.js index 00cdf197d4d..1a7cba283db 100644 --- a/api/tests/unit/domain/services/cpf-certification-xml-export-service_test.js +++ b/api/tests/unit/domain/services/cpf-certification-xml-export-service_test.js @@ -1,29 +1,25 @@ -const { expect, domainBuilder, sinon, streamToPromise } = require('../../../test-helper'); -const { PassThrough } = require('stream'); -const proxyquire = require('proxyquire'); -const dayjs = require('dayjs'); -const utc = require('dayjs/plugin/utc'); -const timezone = require('dayjs/plugin/timezone'); +import { expect, domainBuilder, sinon, streamToPromise } from '../../../test-helper.js'; +import stream from 'stream'; + +const { PassThrough } = stream; + +import dayjs from 'dayjs'; +import utc from 'dayjs/plugin/utc.js'; +import timezone from 'dayjs/plugin/timezone.js'; + dayjs.extend(utc); dayjs.extend(timezone); -const cpfCertificationXmlExportService = proxyquire( - '../../../../lib/domain/services/cpf-certification-xml-export-service', - { - uuid: { - v4: () => { - return '5d079a5d-0a4d-45ac-854d-256b01cacdfe'; - }, - }, - } -); +import * as cpfCertificationXmlExportService from '../../../../lib/domain/services/cpf-certification-xml-export-service.js'; describe('Unit | Services | cpf-certification-xml-export-service', function () { let clock; + let uuidService; beforeEach(function () { const now = dayjs('2022-02-01T10:43:27Z').tz('Europe/Paris').toDate(); clock = sinon.useFakeTimers(now); + uuidService = { v4: sinon.stub() }; }); afterEach(function () { @@ -33,6 +29,9 @@ describe('Unit | Services | cpf-certification-xml-export-service', function () { describe('getXmlExport', function () { it('should return a writable stream with cpf certification results', async function () { // given + + uuidService.v4.returns('5d079a5d-0a4d-45ac-854d-256b01cacdfe'); + const firstCpfCertificationResult = domainBuilder.buildCpfCertificationResult({ id: 1234, firstName: 'Bart', @@ -74,6 +73,7 @@ describe('Unit | Services | cpf-certification-xml-export-service', function () { cpfCertificationXmlExportService.buildXmlExport({ cpfCertificationResults: [firstCpfCertificationResult, secondCpfCertificationResult], writableStream, + uuidService, }); //then diff --git a/api/tests/unit/domain/services/email-validator_test.js b/api/tests/unit/domain/services/email-validator_test.js index b1da2aec77c..d2baa6be631 100644 --- a/api/tests/unit/domain/services/email-validator_test.js +++ b/api/tests/unit/domain/services/email-validator_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const service = require('../../../../lib/domain/services/email-validator'); +import { expect } from '../../../test-helper.js'; +import * as service from '../../../../lib/domain/services/email-validator.js'; describe('Unit | Service | email-validator', function () { it('should return false when email is not provided', function () { diff --git a/api/tests/unit/domain/services/encryption-service_test.js b/api/tests/unit/domain/services/encryption-service_test.js index ab8cd4010dc..e1e7a004108 100644 --- a/api/tests/unit/domain/services/encryption-service_test.js +++ b/api/tests/unit/domain/services/encryption-service_test.js @@ -1,8 +1,8 @@ -const { catchErr, expect } = require('../../../test-helper'); +import { catchErr, expect } from '../../../test-helper.js'; -const bcrypt = require('bcrypt'); -const encryptionService = require('../../../../lib/domain/services/encryption-service'); -const PasswordNotMatching = require('../../../../lib/domain/errors').PasswordNotMatching; +import bcrypt from 'bcrypt'; +import * as encryptionService from '../../../../lib/domain/services/encryption-service.js'; +import { PasswordNotMatching } from '../../../../lib/domain/errors.js'; describe('Unit | Service | Encryption', function () { describe('#checkPassword', function () { diff --git a/api/tests/unit/domain/services/get-competence-level_test.js b/api/tests/unit/domain/services/get-competence-level_test.js index 41afd832a15..b65d50369d7 100644 --- a/api/tests/unit/domain/services/get-competence-level_test.js +++ b/api/tests/unit/domain/services/get-competence-level_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const getCompetenceLevel = require('../../../../lib/domain/services/get-competence-level'); +import { expect, sinon } from '../../../test-helper.js'; +import { getCompetenceLevel } from '../../../../lib/domain/services/get-competence-level.js'; describe('Unit | Domain | Service | Get Competence Level', function () { describe('#getCompetenceLevel', function () { diff --git a/api/tests/unit/domain/services/get-translated-text_test.js b/api/tests/unit/domain/services/get-translated-text_test.js index c902ee1003a..a7124bd0264 100644 --- a/api/tests/unit/domain/services/get-translated-text_test.js +++ b/api/tests/unit/domain/services/get-translated-text_test.js @@ -1,6 +1,5 @@ -const { expect } = require('../../../test-helper'); - -const service = require('../../../../lib/domain/services/get-translated-text'); +import { expect } from '../../../test-helper.js'; +import * as service from '../../../../lib/domain/services/get-translated-text.js'; describe('Unit | Domain | Services | get-translated-text', function () { describe('#getTranslatedKey', function () { const translatedKey = { diff --git a/api/tests/unit/domain/services/improvement-service_test.js b/api/tests/unit/domain/services/improvement-service_test.js index 0048a64f005..4460028f065 100644 --- a/api/tests/unit/domain/services/improvement-service_test.js +++ b/api/tests/unit/domain/services/improvement-service_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const _ = require('lodash'); -const improvementService = require('../../../../lib/domain/services/improvement-service'); -const { constants } = require('../../../../lib/domain/constants'); +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; +import _ from 'lodash'; +import * as improvementService from '../../../../lib/domain/services/improvement-service.js'; +import { constants } from '../../../../lib/domain/constants.js'; describe('Unit | Service | ImprovementService', function () { describe('#filterKnowledgeElementsIfImproving', function () { @@ -29,7 +29,7 @@ describe('Unit | Service | ImprovementService', function () { beforeEach(function () { originalConstantValue = constants.MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING; - constants['MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING'] = 3; + sinon.stub(constants, 'MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING').value(3); const assessmentDate = '2020-07-30'; assessment = domainBuilder.buildAssessment.ofTypeCampaign({ @@ -46,7 +46,7 @@ describe('Unit | Service | ImprovementService', function () { }); afterEach(function () { - constants.MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING = originalConstantValue; + sinon.stub(constants, 'MINIMUM_DELAY_IN_DAYS_BEFORE_RETRYING').value(originalConstantValue); }); it('should return the same list of knowledge-elements if assessment is not improving', function () { diff --git a/api/tests/unit/domain/services/learning-content/learning-content-conversion-service_test.js b/api/tests/unit/domain/services/learning-content/learning-content-conversion-service_test.js index 4f423d032f1..69fcdebda00 100644 --- a/api/tests/unit/domain/services/learning-content/learning-content-conversion-service_test.js +++ b/api/tests/unit/domain/services/learning-content/learning-content-conversion-service_test.js @@ -1,7 +1,5 @@ -const { expect, domainBuilder, sinon } = require('../../../../test-helper'); -const { - findActiveSkillsForCappedTubes, -} = require('../../../../../lib/domain/services/learning-content/learning-content-conversion-service'); +import { expect, domainBuilder, sinon } from '../../../../test-helper.js'; +import { findActiveSkillsForCappedTubes } from '../../../../../lib/domain/services/learning-content/learning-content-conversion-service.js'; describe('Unit | Service | learning-content-conversion-service', function () { describe('#findActiveSkillsForCappedTubes', function () { diff --git a/api/tests/unit/domain/services/locale-service_test.js b/api/tests/unit/domain/services/locale-service_test.js index 2f367ecd911..b80ab30c46e 100644 --- a/api/tests/unit/domain/services/locale-service_test.js +++ b/api/tests/unit/domain/services/locale-service_test.js @@ -1,6 +1,6 @@ -const { expect, catchErrSync } = require('../../../test-helper'); -const { LocaleFormatError, LocaleNotSupportedError } = require('../../../../lib/domain/errors'); -const { getCanonicalLocale } = require('../../../../lib/domain/services/locale-service'); +import { expect, catchErrSync } from '../../../test-helper.js'; +import { LocaleFormatError, LocaleNotSupportedError } from '../../../../lib/domain/errors.js'; +import { getCanonicalLocale } from '../../../../lib/domain/services/locale-service.js'; describe('#getCanonicalLocale', function () { it('throws a LocaleFormatError error', function () { diff --git a/api/tests/unit/domain/services/mail-service_test.js b/api/tests/unit/domain/services/mail-service_test.js index 93b54eefd49..9776c1165dd 100644 --- a/api/tests/unit/domain/services/mail-service_test.js +++ b/api/tests/unit/domain/services/mail-service_test.js @@ -1,17 +1,21 @@ -const { sinon, expect } = require('../../../test-helper'); +import { sinon, expect } from '../../../test-helper.js'; -const mailService = require('../../../../lib/domain/services/mail-service'); -const { mailer } = require('../../../../lib/infrastructure/mailers/mailer'); -const tokenService = require('../../../../lib/domain/services/token-service'); -const settings = require('../../../../lib/config'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +import * as mailService from '../../../../lib/domain/services/mail-service.js'; +import { mailer } from '../../../../lib/infrastructure/mailers/mailer.js'; +import { tokenService } from '../../../../lib/domain/services/token-service.js'; +import { config as settings } from '../../../../lib/config.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; +import fr from '../../../../translations/fr.json' assert { type: 'json' }; +import en from '../../../../translations/en.json' assert { type: 'json' }; const mainTranslationsMapping = { - fr: require('../../../../translations/fr'), - en: require('../../../../translations/en'), + fr, + en, }; -const { ENGLISH_SPOKEN, FRENCH_FRANCE, FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { ENGLISH_SPOKEN, FRENCH_FRANCE, FRENCH_SPOKEN } = LOCALE; describe('Unit | Service | MailService', function () { const senderEmailAddress = 'ne-pas-repondre@pix.fr'; diff --git a/api/tests/unit/domain/services/obfuscation-service_test.js b/api/tests/unit/domain/services/obfuscation-service_test.js index f5a9bb540c9..5d11925bc12 100644 --- a/api/tests/unit/domain/services/obfuscation-service_test.js +++ b/api/tests/unit/domain/services/obfuscation-service_test.js @@ -1,8 +1,8 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const obfuscationService = require('../../../../lib/domain/services/obfuscation-service'); -const User = require('../../../../lib/domain/models/User'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import * as obfuscationService from '../../../../lib/domain/services/obfuscation-service.js'; +import { User } from '../../../../lib/domain/models/User.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Unit | Service | user-authentication-method-obfuscation-service', function () { let authenticationMethodRepository; diff --git a/api/tests/unit/domain/services/organization-invitation-service_test.js b/api/tests/unit/domain/services/organization-invitation-service_test.js index fe3659d596a..91887bb387d 100644 --- a/api/tests/unit/domain/services/organization-invitation-service_test.js +++ b/api/tests/unit/domain/services/organization-invitation-service_test.js @@ -1,16 +1,18 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const Membership = require('../../../../lib/domain/models/Membership'); -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); -const { +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; + +import { createOrUpdateOrganizationInvitation, createScoOrganizationInvitation, createProOrganizationInvitation, -} = require('../../../../lib/domain/services/organization-invitation-service'); -const { +} from '../../../../lib/domain/services/organization-invitation-service.js'; + +import { SendingEmailToInvalidDomainError, SendingEmailToInvalidEmailAddressError, -} = require('../../../../lib/domain/errors'); -const EmailingAttempt = require('../../../../lib/domain/models/EmailingAttempt'); +} from '../../../../lib/domain/errors.js'; +import { EmailingAttempt } from '../../../../lib/domain/models/EmailingAttempt.js'; describe('Unit | Service | Organization-Invitation Service', function () { const userEmailAddress = 'user@example.net'; diff --git a/api/tests/unit/domain/services/password-generator_test.js b/api/tests/unit/domain/services/password-generator_test.js index 83fc2fb14af..0d0a044bf62 100644 --- a/api/tests/unit/domain/services/password-generator_test.js +++ b/api/tests/unit/domain/services/password-generator_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const service = require('../../../../lib/domain/services/password-generator'); -const randomString = require('randomstring'); +import { expect, sinon } from '../../../test-helper.js'; +import * as service from '../../../../lib/domain/services/password-generator.js'; +import randomString from 'randomstring'; describe('Unit | Service | password-generator', function () { let generatedPassword; diff --git a/api/tests/unit/domain/services/pick-challenge-service_test.js b/api/tests/unit/domain/services/pick-challenge-service_test.js index 36f5a5b5bda..d62c29bc0b8 100644 --- a/api/tests/unit/domain/services/pick-challenge-service_test.js +++ b/api/tests/unit/domain/services/pick-challenge-service_test.js @@ -1,7 +1,10 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const pickChallengeService = require('../../../../lib/domain/services/pick-challenge-service'); -const { ENGLISH_SPOKEN, FRENCH_FRANCE, FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; -const _ = require('lodash'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import * as pickChallengeService from '../../../../lib/domain/services/pick-challenge-service.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { ENGLISH_SPOKEN, FRENCH_FRANCE, FRENCH_SPOKEN } = LOCALE; + +import _ from 'lodash'; describe('Unit | Service | PickChallengeService', function () { describe('#pickChallenge', function () { diff --git a/api/tests/unit/domain/services/pole-emploi-service_test.js b/api/tests/unit/domain/services/pole-emploi-service_test.js index 09a4f9d0db2..04b82ee966c 100644 --- a/api/tests/unit/domain/services/pole-emploi-service_test.js +++ b/api/tests/unit/domain/services/pole-emploi-service_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const poleEmploiService = require('../../../../lib/domain/services/pole-emploi-service'); -const settings = require('../../../../lib/config'); +import { expect } from '../../../test-helper.js'; +import * as poleEmploiService from '../../../../lib/domain/services/pole-emploi-service.js'; +import { config as settings } from '../../../../lib/config.js'; describe('Unit | Service | Pole Emploi Service', function () { describe('#generateLink', function () { diff --git a/api/tests/unit/domain/services/recommendation-service_test.js b/api/tests/unit/domain/services/recommendation-service_test.js index db1e2b37694..6d19af86e96 100644 --- a/api/tests/unit/domain/services/recommendation-service_test.js +++ b/api/tests/unit/domain/services/recommendation-service_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); +import { expect } from '../../../test-helper.js'; -const recommendationService = require('./../../../../lib/domain/services/recommendation-service'); +import * as recommendationService from './../../../../lib/domain/services/recommendation-service.js'; describe('Unit | Service | Campaign Recommendation Service', function () { describe('computeRecommendationScore', function () { diff --git a/api/tests/unit/domain/services/refresh-token-service_test.js b/api/tests/unit/domain/services/refresh-token-service_test.js index 3a5c2f3b539..d5ebf12e552 100644 --- a/api/tests/unit/domain/services/refresh-token-service_test.js +++ b/api/tests/unit/domain/services/refresh-token-service_test.js @@ -1,10 +1,10 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const settings = require('../../../../lib/config'); -const tokenService = require('../../../../lib/domain/services/token-service'); -const refreshTokenService = require('../../../../lib/domain/services/refresh-token-service'); -const { UnauthorizedError } = require('../../../../lib/application/http-errors'); -const refreshTokenTemporaryStorage = refreshTokenService.refreshTokenTemporaryStorageForTests; -const userRefreshTokensTemporaryStorage = refreshTokenService.userRefreshTokensTemporaryStorageForTests; +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { tokenService } from '../../../../lib/domain/services/token-service.js'; +import { config as settings } from '../../../../lib/config.js'; +import * as refreshTokenService from '../../../../lib/domain/services/refresh-token-service.js'; +import { UnauthorizedError } from '../../../../lib/application/http-errors.js'; +const refreshTokenTemporaryStorage = refreshTokenService.refreshTokenTemporaryStorage; +const userRefreshTokensTemporaryStorage = refreshTokenService.userRefreshTokensTemporaryStorage; describe('Unit | Domain | Service | Refresh Token Service', function () { describe('#createRefreshTokenFromUserId', function () { diff --git a/api/tests/unit/domain/services/reset-password-service_test.js b/api/tests/unit/domain/services/reset-password-service_test.js index 5e0ce094d4e..6ad90d08fb9 100644 --- a/api/tests/unit/domain/services/reset-password-service_test.js +++ b/api/tests/unit/domain/services/reset-password-service_test.js @@ -1,8 +1,8 @@ -const jsonwebtoken = require('jsonwebtoken'); -const crypto = require('crypto'); -const { sinon, expect } = require('../../../test-helper'); -const settings = require('../../../../lib/config'); -const resetPasswordService = require('../../../../lib/domain/services/reset-password-service'); +import jsonwebtoken from 'jsonwebtoken'; +import crypto from 'crypto'; +import { sinon, expect } from '../../../test-helper.js'; +import { config as settings } from '../../../../lib/config.js'; +import * as resetPasswordService from '../../../../lib/domain/services/reset-password-service.js'; describe('Unit | Service | Password Service', function () { describe('#generateTemporaryKey', function () { diff --git a/api/tests/unit/domain/services/sco-account-recovery-service_test.js b/api/tests/unit/domain/services/sco-account-recovery-service_test.js index 7522dfaba05..6f2c35d4fc0 100644 --- a/api/tests/unit/domain/services/sco-account-recovery-service_test.js +++ b/api/tests/unit/domain/services/sco-account-recovery-service_test.js @@ -1,17 +1,21 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const { +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { retrieveOrganizationLearner, retrieveAndValidateAccountRecoveryDemand, -} = require('../../../../lib/domain/services/sco-account-recovery-service'); -const { +} from '../../../../lib/domain/services/sco-account-recovery-service.js'; + +import { AccountRecoveryDemandExpired, AlreadyRegisteredEmailError, MultipleOrganizationLearnersWithDifferentNationalStudentIdError, UserNotFoundError, UserHasAlreadyLeftSCO, -} = require('../../../../lib/domain/errors'); -const { features } = require('../../../../lib/config'); -const dayjs = require('dayjs'); +} from '../../../../lib/domain/errors.js'; + +import { config } from '../../../../lib/config.js'; +import dayjs from 'dayjs'; + +const { features } = config; describe('Unit | Service | sco-account-recovery-service', function () { describe('#retrieveOrganizationLearner', function () { diff --git a/api/tests/unit/domain/services/scorecard-service_test.js b/api/tests/unit/domain/services/scorecard-service_test.js index 5310f04a23c..0b9820b8029 100644 --- a/api/tests/unit/domain/services/scorecard-service_test.js +++ b/api/tests/unit/domain/services/scorecard-service_test.js @@ -1,9 +1,9 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const Scorecard = require('../../../../lib/domain/models/Scorecard'); -const CompetenceEvaluation = require('../../../../lib/domain/models/CompetenceEvaluation'); -const scorecardService = require('../../../../lib/domain/services/scorecard-service'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { Scorecard } from '../../../../lib/domain/models/Scorecard.js'; +import { CompetenceEvaluation } from '../../../../lib/domain/models/CompetenceEvaluation.js'; +import * as scorecardService from '../../../../lib/domain/services/scorecard-service.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { STARTED, SHARED } = CampaignParticipationStatuses; diff --git a/api/tests/unit/domain/services/scoring/scoring-certification-service_test.js b/api/tests/unit/domain/services/scoring/scoring-certification-service_test.js index 85bc1d178a7..31ed1886820 100644 --- a/api/tests/unit/domain/services/scoring/scoring-certification-service_test.js +++ b/api/tests/unit/domain/services/scoring/scoring-certification-service_test.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const { expect, sinon, domainBuilder, catchErr } = require('../../../../test-helper'); -const scoringCertificationService = require('../../../../../lib/domain/services/scoring/scoring-certification-service'); -const { states } = require('../../../../../lib/domain/models/CertificationAssessment'); -const { CertificationComputeError } = require('../../../../../lib/domain/errors'); +import _ from 'lodash'; +import { expect, sinon, domainBuilder, catchErr } from '../../../../test-helper.js'; +import * as scoringCertificationService from '../../../../../lib/domain/services/scoring/scoring-certification-service.js'; +import { states } from '../../../../../lib/domain/models/CertificationAssessment.js'; +import { CertificationComputeError } from '../../../../../lib/domain/errors.js'; function _buildUserCompetence(competence, pixScore, estimatedLevel) { return domainBuilder.buildUserCompetence({ ...competence, estimatedLevel, pixScore }); diff --git a/api/tests/unit/domain/services/scoring/scoring-service_test.js b/api/tests/unit/domain/services/scoring/scoring-service_test.js index 723354c656a..8dbce7bc7db 100644 --- a/api/tests/unit/domain/services/scoring/scoring-service_test.js +++ b/api/tests/unit/domain/services/scoring/scoring-service_test.js @@ -1,11 +1,10 @@ -const scoringService = require('../../../../../lib/domain/services/scoring/scoring-service'); -const { +import * as scoringService from '../../../../../lib/domain/services/scoring/scoring-service.js'; +import { PIX_COUNT_BY_LEVEL, MAX_REACHABLE_LEVEL, MAX_REACHABLE_PIX_BY_COMPETENCE, -} = require('../../../../../lib/domain/constants'); - -const { expect, domainBuilder } = require('../../../../test-helper'); +} from '../../../../../lib/domain/constants.js'; +import { expect, domainBuilder } from '../../../../test-helper.js'; describe('Unit | Service | Scoring Service', function () { describe('#calculateScoringInformationForCompetence', function () { diff --git a/api/tests/unit/domain/services/session-code-service_test.js b/api/tests/unit/domain/services/session-code-service_test.js index fed03b6e024..a185c9a1b53 100644 --- a/api/tests/unit/domain/services/session-code-service_test.js +++ b/api/tests/unit/domain/services/session-code-service_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const sessionCodeService = require('../../../../lib/domain/services/session-code-service'); +import { expect } from '../../../test-helper.js'; +import * as sessionCodeService from '../../../../lib/domain/services/session-code-service.js'; describe('Unit | Service | CodeSession', function () { describe('#getNewSessionCode', function () { diff --git a/api/tests/unit/domain/services/session-publication-service_test.js b/api/tests/unit/domain/services/session-publication-service_test.js index ef9a1727161..36d3cb246a2 100644 --- a/api/tests/unit/domain/services/session-publication-service_test.js +++ b/api/tests/unit/domain/services/session-publication-service_test.js @@ -1,14 +1,15 @@ -const { domainBuilder, sinon, expect, catchErr } = require('../../../test-helper'); +import { domainBuilder, sinon, expect, catchErr } from '../../../test-helper.js'; +import { publishSession } from '../../../../lib/domain/services/session-publication-service.js'; +import { FinalizedSession } from '../../../../lib/domain/models/FinalizedSession.js'; -const { publishSession } = require('../../../../lib/domain/services/session-publication-service'); -const FinalizedSession = require('../../../../lib/domain/models/FinalizedSession'); -const { +import { SendingEmailToResultRecipientError, SessionAlreadyPublishedError, SendingEmailToRefererError, -} = require('../../../../lib/domain/errors'); -const EmailingAttempt = require('../../../../lib/domain/models/EmailingAttempt'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +} from '../../../../lib/domain/errors.js'; + +import { EmailingAttempt } from '../../../../lib/domain/models/EmailingAttempt.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; describe('Unit | UseCase | session-publication-service', function () { const sessionId = 123; diff --git a/api/tests/unit/domain/services/session-results-link-service_test.js b/api/tests/unit/domain/services/session-results-link-service_test.js index 24e57d4a55b..30239205b38 100644 --- a/api/tests/unit/domain/services/session-results-link-service_test.js +++ b/api/tests/unit/domain/services/session-results-link-service_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const sessionResultsLinkService = require('../../../../lib/domain/services/session-results-link-service'); -const tokenService = require('../../../../lib/domain/services/token-service'); +import { expect, sinon } from '../../../test-helper.js'; +import * as sessionResultsLinkService from '../../../../lib/domain/services/session-results-link-service.js'; +import { tokenService } from '../../../../lib/domain/services/token-service.js'; describe('Unit | Domain | Service | Session Results Link Service', function () { describe('#generateResultsLink', function () { diff --git a/api/tests/unit/domain/services/sessions-mass-import/sessions-import-validation-service_test.js b/api/tests/unit/domain/services/sessions-mass-import/sessions-import-validation-service_test.js index 4dedd23aab7..736b497f88f 100644 --- a/api/tests/unit/domain/services/sessions-mass-import/sessions-import-validation-service_test.js +++ b/api/tests/unit/domain/services/sessions-mass-import/sessions-import-validation-service_test.js @@ -1,10 +1,9 @@ -const { expect, sinon, domainBuilder } = require('../../../../test-helper'); -const sessionsImportValidationService = require('../../../../../lib/domain/services/sessions-mass-import/sessions-import-validation-service'); -const { CpfBirthInformationValidation } = require('../../../../../lib/domain/services/certification-cpf-service'); -const { - CERTIFICATION_CANDIDATES_ERRORS, -} = require('../../../../../lib/domain/constants/certification-candidates-errors'); -const noop = require('lodash/noop'); +import { expect, sinon, domainBuilder } from '../../../../test-helper.js'; +import * as sessionsImportValidationService from '../../../../../lib/domain/services/sessions-mass-import/sessions-import-validation-service.js'; +import { CpfBirthInformationValidation } from '../../../../../lib/domain/services/certification-cpf-service.js'; +import { CERTIFICATION_CANDIDATES_ERRORS } from '../../../../../lib/domain/constants/certification-candidates-errors.js'; +import lodash from 'lodash'; +const { noop } = lodash; describe('Unit | Service | sessions import validation Service', function () { describe('#validateSession', function () { diff --git a/api/tests/unit/domain/services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service_test.js b/api/tests/unit/domain/services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service_test.js index 71df9b39637..58e07a49607 100644 --- a/api/tests/unit/domain/services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service_test.js +++ b/api/tests/unit/domain/services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service_test.js @@ -1,7 +1,8 @@ -const { expect } = require('../../../../test-helper'); -const temporarySessionsStorageForMassImportService = require('../../../../../lib/domain/services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service'); -const { temporaryStorage } = require('../../../../../lib/infrastructure/temporary-storage'); +import { expect } from '../../../../test-helper.js'; +import * as temporarySessionsStorageForMassImportService from '../../../../../lib/domain/services/sessions-mass-import/temporary-sessions-storage-for-mass-import-service.js'; +import { temporaryStorage } from '../../../../../lib/infrastructure/temporary-storage/index.js'; const sessionMassImportTemporaryStorage = temporaryStorage.withPrefix('sessions-mass-import:'); + describe('Unit | Domain | Services | sessions mass import', function () { describe('#save', function () { it('should save sessions accessible with returned uuid', async function () { @@ -63,7 +64,7 @@ describe('Unit | Domain | Services | sessions mass import', function () { const key = await temporarySessionsStorageForMassImportService.save({ sessions, userId }); // when - await temporarySessionsStorageForMassImportService.delete({ + await temporarySessionsStorageForMassImportService.remove({ cachedValidatedSessionsKey: key, userId, }); diff --git a/api/tests/unit/domain/services/smart-random/data-fetcher_test.js b/api/tests/unit/domain/services/smart-random/data-fetcher_test.js index 2b8b0d52bdf..9a4a523e3e7 100644 --- a/api/tests/unit/domain/services/smart-random/data-fetcher_test.js +++ b/api/tests/unit/domain/services/smart-random/data-fetcher_test.js @@ -1,5 +1,5 @@ -const { sinon, expect, domainBuilder } = require('../../../../test-helper'); -const dataFetcher = require('../../../../../lib/domain/services/algorithm-methods/data-fetcher'); +import { sinon, expect, domainBuilder } from '../../../../test-helper.js'; +import * as dataFetcher from '../../../../../lib/domain/services/algorithm-methods/data-fetcher.js'; describe('Unit | Domain | services | smart-random | dataFetcher', function () { describe('#fetchForCampaigns', function () { diff --git a/api/tests/unit/domain/services/smart-random/skills-filter_test.js b/api/tests/unit/domain/services/smart-random/skills-filter_test.js index dc786b52ad8..5eb47c8a7ac 100644 --- a/api/tests/unit/domain/services/smart-random/skills-filter_test.js +++ b/api/tests/unit/domain/services/smart-random/skills-filter_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const skillsFilter = require('../../../../../lib/domain/services/algorithm-methods/skills-filter'); -const Tube = require('../../../../../lib/domain/models/Tube'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as skillsFilter from '../../../../../lib/domain/services/algorithm-methods/skills-filter.js'; +import { Tube } from '../../../../../lib/domain/models/Tube.js'; const KNOWLEDGE_ELEMENT_STATUS = { VALIDATED: 'validated', diff --git a/api/tests/unit/domain/services/solution-service-qcm_test.js b/api/tests/unit/domain/services/solution-service-qcm_test.js index a03884dadcc..6b557d05b01 100644 --- a/api/tests/unit/domain/services/solution-service-qcm_test.js +++ b/api/tests/unit/domain/services/solution-service-qcm_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const service = require('../../../../lib/domain/services/solution-service-qcm'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); +import { expect } from '../../../test-helper.js'; +import * as service from '../../../../lib/domain/services/solution-service-qcm.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; describe('Unit | Service | SolutionServiceQCM ', function () { describe('if solution type is QCM', function () { diff --git a/api/tests/unit/domain/services/solution-service-qcu_test.js b/api/tests/unit/domain/services/solution-service-qcu_test.js index 2b83dcbac05..23459547d96 100644 --- a/api/tests/unit/domain/services/solution-service-qcu_test.js +++ b/api/tests/unit/domain/services/solution-service-qcu_test.js @@ -1,7 +1,6 @@ -const { expect } = require('../../../test-helper'); - -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const service = require('../../../../lib/domain/services/solution-service-qcu'); +import { expect } from '../../../test-helper.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import * as service from '../../../../lib/domain/services/solution-service-qcu.js'; describe('Unit | Service | SolutionServiceQCU ', function () { describe('if solution type is QCU', function () { diff --git a/api/tests/unit/domain/services/solution-service-qroc_test.js b/api/tests/unit/domain/services/solution-service-qroc_test.js index 22dacaccf06..d4db7806446 100644 --- a/api/tests/unit/domain/services/solution-service-qroc_test.js +++ b/api/tests/unit/domain/services/solution-service-qroc_test.js @@ -1,7 +1,6 @@ -const { expect } = require('../../../test-helper'); - -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const service = require('../../../../lib/domain/services/solution-service-qroc'); +import { expect } from '../../../test-helper.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import * as service from '../../../../lib/domain/services/solution-service-qroc.js'; const ANSWER_KO = AnswerStatus.KO; const ANSWER_OK = AnswerStatus.OK; diff --git a/api/tests/unit/domain/services/solution-service-qrocm-dep_test.js b/api/tests/unit/domain/services/solution-service-qrocm-dep_test.js index 70e77df8df9..d20b195fe6f 100644 --- a/api/tests/unit/domain/services/solution-service-qrocm-dep_test.js +++ b/api/tests/unit/domain/services/solution-service-qrocm-dep_test.js @@ -1,10 +1,8 @@ -const { expect, catchErr, sinon } = require('../../../test-helper'); - -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const service = require('../../../../lib/domain/services/solution-service-qrocm-dep'); - -const { YamlParsingError } = require('../../../../lib/domain/errors'); -const CorrectionBlockQROCMDep = require('../../../../lib/domain/models/CorrectionBlockQROCMDep'); +import { expect, catchErr, sinon } from '../../../test-helper.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import * as service from '../../../../lib/domain/services/solution-service-qrocm-dep.js'; +import { YamlParsingError } from '../../../../lib/domain/errors.js'; +import { CorrectionBlockQROCMDep } from '../../../../lib/domain/models/CorrectionBlockQROCMDep.js'; const ANSWER_PARTIALLY = AnswerStatus.PARTIALLY; const ANSWER_OK = AnswerStatus.OK; diff --git a/api/tests/unit/domain/services/solution-service-qrocm-ind_test.js b/api/tests/unit/domain/services/solution-service-qrocm-ind_test.js index e1c4b3007db..98e00f6646a 100644 --- a/api/tests/unit/domain/services/solution-service-qrocm-ind_test.js +++ b/api/tests/unit/domain/services/solution-service-qrocm-ind_test.js @@ -1,8 +1,7 @@ -const { expect, catchErr } = require('../../../test-helper'); - -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const service = require('../../../../lib/domain/services/solution-service-qrocm-ind'); -const { YamlParsingError } = require('../../../../lib/domain/errors'); +import { expect, catchErr } from '../../../test-helper.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import * as service from '../../../../lib/domain/services/solution-service-qrocm-ind.js'; +import { YamlParsingError } from '../../../../lib/domain/errors.js'; const ANSWER_OK = AnswerStatus.OK; const ANSWER_KO = AnswerStatus.KO; diff --git a/api/tests/unit/domain/services/string-comparison-service_test.js b/api/tests/unit/domain/services/string-comparison-service_test.js index ab637787166..35bc15f85ec 100644 --- a/api/tests/unit/domain/services/string-comparison-service_test.js +++ b/api/tests/unit/domain/services/string-comparison-service_test.js @@ -1,11 +1,12 @@ -const { expect } = require('../../../test-helper'); -const { +import { expect } from '../../../test-helper.js'; + +import { areTwoStringsCloseEnough, getSmallestLevenshteinDistance, getSmallestLevenshteinRatio, getLevenshteinRatio, isOneStringCloseEnoughFromMultipleStrings, -} = require('../../../../lib/domain/services/string-comparison-service'); +} from '../../../../lib/domain/services/string-comparison-service.js'; describe('Unit | Service | Validation Comparison', function () { describe('getSmallestLevenshteinDistance', function () { diff --git a/api/tests/unit/domain/services/token-service_test.js b/api/tests/unit/domain/services/token-service_test.js index 785d2f86dbb..07b9bc598ea 100644 --- a/api/tests/unit/domain/services/token-service_test.js +++ b/api/tests/unit/domain/services/token-service_test.js @@ -1,17 +1,19 @@ -const omit = require('lodash/omit'); -const jsonwebtoken = require('jsonwebtoken'); +import lodash from 'lodash'; +const { omit } = lodash; +import jsonwebtoken from 'jsonwebtoken'; -const { catchErr, expect, sinon } = require('../../../test-helper'); +import { catchErr, expect, sinon } from '../../../test-helper.js'; -const { +import { InvalidTemporaryKeyError, InvalidExternalUserTokenError, InvalidResultRecipientTokenError, InvalidSessionResultError, ForbiddenAccess, -} = require('../../../../lib/domain/errors'); -const settings = require('../../../../lib/config'); -const tokenService = require('../../../../lib/domain/services/token-service'); +} from '../../../../lib/domain/errors.js'; + +import { tokenService } from '../../../../lib/domain/services/token-service.js'; +import { config as settings } from '../../../../lib/config.js'; describe('Unit | Domain | Service | Token Service', function () { describe('#createTokenForCampaignResults', function () { diff --git a/api/tests/unit/domain/services/user-reconciliation-service_test.js b/api/tests/unit/domain/services/user-reconciliation-service_test.js index d02dffc79e4..5ad360b4b26 100644 --- a/api/tests/unit/domain/services/user-reconciliation-service_test.js +++ b/api/tests/unit/domain/services/user-reconciliation-service_test.js @@ -1,11 +1,12 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const userReconciliationService = require('../../../../lib/domain/services/user-reconciliation-service'); -const { +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import * as userReconciliationService from '../../../../lib/domain/services/user-reconciliation-service.js'; + +import { AlreadyRegisteredUsernameError, NotFoundError, OrganizationLearnerAlreadyLinkedToUserError, OrganizationLearnerAlreadyLinkedToInvalidUserError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Unit | Service | user-reconciliation-service', function () { let organizationLearners; diff --git a/api/tests/unit/domain/services/user-service_test.js b/api/tests/unit/domain/services/user-service_test.js index 10ec0be3b77..47033fdd4a2 100644 --- a/api/tests/unit/domain/services/user-service_test.js +++ b/api/tests/unit/domain/services/user-service_test.js @@ -1,10 +1,10 @@ -const omit = require('lodash/omit'); +import lodash from 'lodash'; +const { omit } = lodash; -const { expect, sinon, domainBuilder } = require('../../../test-helper'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); - -const userService = require('../../../../lib/domain/services/user-service'); +import * as userService from '../../../../lib/domain/services/user-service.js'; describe('Unit | Service | user-service', function () { let domainTransaction; diff --git a/api/tests/unit/domain/services/validation-treatments_test.js b/api/tests/unit/domain/services/validation-treatments_test.js index 12d3385efa7..14927d73fb8 100644 --- a/api/tests/unit/domain/services/validation-treatments_test.js +++ b/api/tests/unit/domain/services/validation-treatments_test.js @@ -1,10 +1,11 @@ -const { expect } = require('../../../test-helper'); -const { +import { expect } from '../../../test-helper.js'; + +import { normalizeAndRemoveAccents, removeSpecialCharacters, applyPreTreatments, applyTreatments, -} = require('../../../../lib/domain/services/validation-treatments'); +} from '../../../../lib/domain/services/validation-treatments.js'; describe('Unit | Service | Validation Treatments', function () { describe('#normalizeAndRemoveAccents', function () { diff --git a/api/tests/unit/domain/services/verify-certificate-code-service_test.js b/api/tests/unit/domain/services/verify-certificate-code-service_test.js index 6bb4eee0383..6c63537522a 100644 --- a/api/tests/unit/domain/services/verify-certificate-code-service_test.js +++ b/api/tests/unit/domain/services/verify-certificate-code-service_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const _ = require('lodash'); -const verifyCertificateCodeService = require('../../../../lib/domain/services/verify-certificate-code-service'); -const { CertificateVerificationCodeGenerationTooManyTrials } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import _ from 'lodash'; +import * as verifyCertificateCodeService from '../../../../lib/domain/services/verify-certificate-code-service.js'; +import { CertificateVerificationCodeGenerationTooManyTrials } from '../../../../lib/domain/errors.js'; describe('Unit | Service | VerifyCertificateCode', function () { describe('#generateCertificateVerificationCode', function () { diff --git a/api/tests/unit/domain/types/identifiers-type_test.js b/api/tests/unit/domain/types/identifiers-type_test.js index fc80e89f579..eb9b4942e10 100644 --- a/api/tests/unit/domain/types/identifiers-type_test.js +++ b/api/tests/unit/domain/types/identifiers-type_test.js @@ -1,5 +1,6 @@ -const { expect } = require('../../../test-helper'); -const { userId, competenceId } = require('../../../../lib/domain/types/identifiers-type'); +import { expect } from '../../../test-helper.js'; +import { identifiersType } from '../../../../lib/domain/types/identifiers-type.js'; +const { userId, competenceId } = identifiersType; describe('Unit | Domain | Type | identifier-types', function () { describe('#userId', function () { diff --git a/api/tests/unit/domain/usecases/abort-certification-course_test.js b/api/tests/unit/domain/usecases/abort-certification-course_test.js index fb295c2bc9d..4f6df4560a4 100644 --- a/api/tests/unit/domain/usecases/abort-certification-course_test.js +++ b/api/tests/unit/domain/usecases/abort-certification-course_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const abortCertificationCourse = require('../../../../lib/domain/usecases/abort-certification-course'); -const CertificationCourse = require('../../../../lib/domain/models/CertificationCourse'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { abortCertificationCourse } from '../../../../lib/domain/usecases/abort-certification-course.js'; +import { CertificationCourse } from '../../../../lib/domain/models/CertificationCourse.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | abort-certification-course', function () { let certificationCourseRepository; diff --git a/api/tests/unit/domain/usecases/accept-certification-center-invitation_test.js b/api/tests/unit/domain/usecases/accept-certification-center-invitation_test.js index 6267f9ff958..ce363b39f99 100644 --- a/api/tests/unit/domain/usecases/accept-certification-center-invitation_test.js +++ b/api/tests/unit/domain/usecases/accept-certification-center-invitation_test.js @@ -1,8 +1,8 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const acceptCertificationCenterInvitation = require('../../../../lib/domain/usecases/accept-certification-center-invitation'); -const CertificationCenterInvitedUser = require('../../../../lib/domain/models/CertificationCenterInvitedUser'); -const CertificationCenterInvitation = require('../../../../lib/domain/models/CertificationCenterInvitation'); -const { AlreadyExistingMembershipError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { acceptCertificationCenterInvitation } from '../../../../lib/domain/usecases/accept-certification-center-invitation.js'; +import { CertificationCenterInvitedUser } from '../../../../lib/domain/models/CertificationCenterInvitedUser.js'; +import { CertificationCenterInvitation } from '../../../../lib/domain/models/CertificationCenterInvitation.js'; +import { AlreadyExistingMembershipError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | accept-certification-center-invitation', function () { it('should throw an error if user is already member of the certification center', async function () { diff --git a/api/tests/unit/domain/usecases/accept-organization-invitation_test.js b/api/tests/unit/domain/usecases/accept-organization-invitation_test.js index f8a813e6139..425372336cc 100644 --- a/api/tests/unit/domain/usecases/accept-organization-invitation_test.js +++ b/api/tests/unit/domain/usecases/accept-organization-invitation_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const acceptOrganizationInvitation = require('../../../../lib/domain/usecases/accept-organization-invitation'); -const OrganizationInvitedUser = require('../../../../lib/domain/models/OrganizationInvitedUser'); -const { AlreadyExistingMembershipError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { acceptOrganizationInvitation } from '../../../../lib/domain/usecases/accept-organization-invitation.js'; +import { OrganizationInvitedUser } from '../../../../lib/domain/models/OrganizationInvitedUser.js'; +import { AlreadyExistingMembershipError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | accept-organization-invitation', function () { let organizationInvitedUserRepository; diff --git a/api/tests/unit/domain/usecases/accept-pix-certif-terms-of-service_test.js b/api/tests/unit/domain/usecases/accept-pix-certif-terms-of-service_test.js index abead5514d7..4b95e21cd83 100644 --- a/api/tests/unit/domain/usecases/accept-pix-certif-terms-of-service_test.js +++ b/api/tests/unit/domain/usecases/accept-pix-certif-terms-of-service_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const acceptPixCertifTermsOfService = require('../../../../lib/domain/usecases/accept-pix-certif-terms-of-service'); +import { expect, sinon } from '../../../test-helper.js'; +import { acceptPixCertifTermsOfService } from '../../../../lib/domain/usecases/accept-pix-certif-terms-of-service.js'; describe('Unit | UseCase | accept-pix-certif-terms-of-service', function () { let userRepository; diff --git a/api/tests/unit/domain/usecases/accept-pix-orga-terms-of-service_test.js b/api/tests/unit/domain/usecases/accept-pix-orga-terms-of-service_test.js index 9365926659b..cda0daa3709 100644 --- a/api/tests/unit/domain/usecases/accept-pix-orga-terms-of-service_test.js +++ b/api/tests/unit/domain/usecases/accept-pix-orga-terms-of-service_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const acceptPixOrgaTermsOfService = require('../../../../lib/domain/usecases/accept-pix-orga-terms-of-service'); +import { expect, sinon } from '../../../test-helper.js'; +import { acceptPixOrgaTermsOfService } from '../../../../lib/domain/usecases/accept-pix-orga-terms-of-service.js'; describe('Unit | UseCase | accept-pix-orga-terms-of-service', function () { let userRepository; diff --git a/api/tests/unit/domain/usecases/accept-pix-terms-of-service_test.js b/api/tests/unit/domain/usecases/accept-pix-terms-of-service_test.js index a95dff2927e..4ac66e4957e 100644 --- a/api/tests/unit/domain/usecases/accept-pix-terms-of-service_test.js +++ b/api/tests/unit/domain/usecases/accept-pix-terms-of-service_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const acceptPixLastTermsOfService = require('../../../../lib/domain/usecases/accept-pix-last-terms-of-service'); +import { expect, sinon } from '../../../test-helper.js'; +import { acceptPixLastTermsOfService } from '../../../../lib/domain/usecases/accept-pix-last-terms-of-service.js'; describe('Unit | UseCase | accept-pix-last-terms-of-service', function () { let userRepository; diff --git a/api/tests/unit/domain/usecases/account-recovery/get-account-recovery-details_test.js b/api/tests/unit/domain/usecases/account-recovery/get-account-recovery-details_test.js index 1817b0f2ad5..f577f92709a 100644 --- a/api/tests/unit/domain/usecases/account-recovery/get-account-recovery-details_test.js +++ b/api/tests/unit/domain/usecases/account-recovery/get-account-recovery-details_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../../test-helper'); -const getAccountRecoveryDetails = require('../../../../../lib/domain/usecases/account-recovery/get-account-recovery-details'); +import { expect, sinon } from '../../../../test-helper.js'; +import { getAccountRecoveryDetails } from '../../../../../lib/domain/usecases/account-recovery/get-account-recovery-details.js'; describe('Unit | UseCase | get-account-recovery-details', function () { it('should return new email and firstName of account recovery demand', async function () { diff --git a/api/tests/unit/domain/usecases/account-recovery/send-email-for-account-recovery_test.js b/api/tests/unit/domain/usecases/account-recovery/send-email-for-account-recovery_test.js index 132aef8cb50..f656d59fc19 100644 --- a/api/tests/unit/domain/usecases/account-recovery/send-email-for-account-recovery_test.js +++ b/api/tests/unit/domain/usecases/account-recovery/send-email-for-account-recovery_test.js @@ -1,7 +1,7 @@ -const { sinon, expect, catchErr } = require('../../../../test-helper'); -const sendEmailForAccountRecovery = require('../../../../../lib/domain/usecases/account-recovery/send-email-for-account-recovery.js'); -const { AlreadyRegisteredEmailError } = require('../../../../../lib/domain/errors'); -const AccountRecoveryDemand = require('../../../../../lib/domain/models/AccountRecoveryDemand'); +import { sinon, expect, catchErr } from '../../../../test-helper.js'; +import { sendEmailForAccountRecovery } from '../../../../../lib/domain/usecases/account-recovery/send-email-for-account-recovery.js'; +import { AlreadyRegisteredEmailError } from '../../../../../lib/domain/errors.js'; +import { AccountRecoveryDemand } from '../../../../../lib/domain/models/AccountRecoveryDemand.js'; describe('Unit | UseCase | Account-recovery | account-recovery | send-email-for-account-recovery', function () { let userRepository; diff --git a/api/tests/unit/domain/usecases/account-recovery/update-user-for-account-recovery_test.js b/api/tests/unit/domain/usecases/account-recovery/update-user-for-account-recovery_test.js index 1958c1fd297..6e723d08e9d 100644 --- a/api/tests/unit/domain/usecases/account-recovery/update-user-for-account-recovery_test.js +++ b/api/tests/unit/domain/usecases/account-recovery/update-user-for-account-recovery_test.js @@ -1,10 +1,9 @@ -const sinon = require('sinon'); -const { expect, domainBuilder } = require('../../../../test-helper'); -const updateUserForAccountRecovery = require('../../../../../lib/domain/usecases/account-recovery/update-user-for-account-recovery'); -const AuthenticationMethod = require('../../../../../lib/domain/models/AuthenticationMethod'); -const DomainTransaction = require('../../../../../lib/infrastructure/DomainTransaction'); - -const User = require('../../../../../lib/domain/models/User'); +import sinon from 'sinon'; +import { expect, domainBuilder } from '../../../../test-helper.js'; +import { updateUserForAccountRecovery } from '../../../../../lib/domain/usecases/account-recovery/update-user-for-account-recovery.js'; +import { AuthenticationMethod } from '../../../../../lib/domain/models/AuthenticationMethod.js'; +import { DomainTransaction } from '../../../../../lib/infrastructure/DomainTransaction.js'; +import { User } from '../../../../../lib/domain/models/User.js'; describe('Unit | Usecases | update-user-for-account-recovery', function () { let userRepository, diff --git a/api/tests/unit/domain/usecases/add-certification-candidate-to-session_test.js b/api/tests/unit/domain/usecases/add-certification-candidate-to-session_test.js index f88d08a397f..a46e534dd12 100644 --- a/api/tests/unit/domain/usecases/add-certification-candidate-to-session_test.js +++ b/api/tests/unit/domain/usecases/add-certification-candidate-to-session_test.js @@ -1,12 +1,13 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const addCertificationCandidateToSession = require('../../../../lib/domain/usecases/add-certification-candidate-to-session'); -const { CpfBirthInformationValidation } = require('../../../../lib/domain/services/certification-cpf-service'); -const { +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { addCertificationCandidateToSession } from '../../../../lib/domain/usecases/add-certification-candidate-to-session.js'; +import { CpfBirthInformationValidation } from '../../../../lib/domain/services/certification-cpf-service.js'; + +import { CertificationCandidateByPersonalInfoTooManyMatchesError, CpfBirthInformationValidationError, CertificationCandidateAddError, CertificationCandidateOnFinalizedSessionError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | add-certification-candidate-to-session', function () { let certificationCandidateRepository; diff --git a/api/tests/unit/domain/usecases/add-pix-authentication-method-by-email_test.js b/api/tests/unit/domain/usecases/add-pix-authentication-method-by-email_test.js index 878fcbf1259..397ec675cee 100644 --- a/api/tests/unit/domain/usecases/add-pix-authentication-method-by-email_test.js +++ b/api/tests/unit/domain/usecases/add-pix-authentication-method-by-email_test.js @@ -1,6 +1,6 @@ -const { domainBuilder, expect, sinon } = require('../../../test-helper'); -const addPixAuthenticationMethodByEmail = require('../../../../lib/domain/usecases/add-pix-authentication-method-by-email'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); +import { domainBuilder, expect, sinon } from '../../../test-helper.js'; +import { addPixAuthenticationMethodByEmail } from '../../../../lib/domain/usecases/add-pix-authentication-method-by-email.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; describe('Unit | UseCase | add-pix-authentication-method-by-email', function () { let userRepository, authenticationMethodRepository; diff --git a/api/tests/unit/domain/usecases/add-tutorial-evaluation_test.js b/api/tests/unit/domain/usecases/add-tutorial-evaluation_test.js index 4498f524882..965fda1f7da 100644 --- a/api/tests/unit/domain/usecases/add-tutorial-evaluation_test.js +++ b/api/tests/unit/domain/usecases/add-tutorial-evaluation_test.js @@ -1,7 +1,7 @@ -const { sinon, expect, domainBuilder, catchErr } = require('../../../test-helper'); -const addTutorialEvaluation = require('../../../../lib/domain/usecases/add-tutorial-evaluation'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const TutorialEvaluation = require('../../../../lib/domain/models/TutorialEvaluation'); +import { sinon, expect, domainBuilder, catchErr } from '../../../test-helper.js'; +import { addTutorialEvaluation } from '../../../../lib/domain/usecases/add-tutorial-evaluation.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { TutorialEvaluation } from '../../../../lib/domain/models/TutorialEvaluation.js'; describe('Unit | UseCase | add-tutorial-evaluation', function () { let tutorialRepository; diff --git a/api/tests/unit/domain/usecases/add-tutorial-to-user_test.js b/api/tests/unit/domain/usecases/add-tutorial-to-user_test.js index b725ed24ef3..11d23699876 100644 --- a/api/tests/unit/domain/usecases/add-tutorial-to-user_test.js +++ b/api/tests/unit/domain/usecases/add-tutorial-to-user_test.js @@ -1,6 +1,6 @@ -const { sinon, expect, domainBuilder, catchErr } = require('../../../test-helper'); -const addTutorialToUser = require('../../../../lib/domain/usecases/add-tutorial-to-user'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { sinon, expect, domainBuilder, catchErr } from '../../../test-helper.js'; +import { addTutorialToUser } from '../../../../lib/domain/usecases/add-tutorial-to-user.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | add-tutorial-to-user', function () { let tutorialRepository; diff --git a/api/tests/unit/domain/usecases/anonymize-user_test.js b/api/tests/unit/domain/usecases/anonymize-user_test.js index 09f4a20d402..5d9b6ac6014 100644 --- a/api/tests/unit/domain/usecases/anonymize-user_test.js +++ b/api/tests/unit/domain/usecases/anonymize-user_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const anonymizeUser = require('../../../../lib/domain/usecases/anonymize-user'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); +import { expect, sinon } from '../../../test-helper.js'; +import { anonymizeUser } from '../../../../lib/domain/usecases/anonymize-user.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; describe('Unit | UseCase | anonymize-user', function () { let clock; diff --git a/api/tests/unit/domain/usecases/archive-campaign-from-campaign-code_test.js b/api/tests/unit/domain/usecases/archive-campaign-from-campaign-code_test.js index 2e54d291333..fc0dee8ed30 100644 --- a/api/tests/unit/domain/usecases/archive-campaign-from-campaign-code_test.js +++ b/api/tests/unit/domain/usecases/archive-campaign-from-campaign-code_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const archiveCampaignFromCampaignCode = require('../../../../lib/domain/usecases/archive-campaign-from-campaign-code'); -const Campaign = require('../../../../lib/domain/models/CampaignForArchiving'); +import { expect, sinon } from '../../../test-helper.js'; +import { archiveCampaignFromCampaignCode } from '../../../../lib/domain/usecases/archive-campaign-from-campaign-code.js'; +import { CampaignForArchiving as Campaign } from '../../../../lib/domain/models/CampaignForArchiving.js'; describe('Unit | UseCase | archive-campaign', function () { let campaignForArchivingRepository; diff --git a/api/tests/unit/domain/usecases/archive-campaign_test.js b/api/tests/unit/domain/usecases/archive-campaign_test.js index 6da00597531..dbd5aef6238 100644 --- a/api/tests/unit/domain/usecases/archive-campaign_test.js +++ b/api/tests/unit/domain/usecases/archive-campaign_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const Campaign = require('../../../../lib/domain/models/CampaignForArchiving'); -const archiveCampaign = require('../../../../lib/domain/usecases/archive-campaign'); +import { expect, sinon } from '../../../test-helper.js'; +import { CampaignForArchiving as Campaign } from '../../../../lib/domain/models/CampaignForArchiving.js'; +import { archiveCampaign } from '../../../../lib/domain/usecases/archive-campaign.js'; describe('Unit | UseCase | archive-campaign', function () { let clock; diff --git a/api/tests/unit/domain/usecases/archive-organization_test.js b/api/tests/unit/domain/usecases/archive-organization_test.js index 912e95b02da..d93d3518a62 100644 --- a/api/tests/unit/domain/usecases/archive-organization_test.js +++ b/api/tests/unit/domain/usecases/archive-organization_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const archiveOrganization = require('../../../../lib/domain/usecases/archive-organization'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { archiveOrganization } from '../../../../lib/domain/usecases/archive-organization.js'; describe('Unit | UseCase | archive-organization', function () { it('should archive the organization', async function () { diff --git a/api/tests/unit/domain/usecases/assign-certification-officer-to-session_test.js b/api/tests/unit/domain/usecases/assign-certification-officer-to-session_test.js index 4360cd4ef15..5f5060f959a 100644 --- a/api/tests/unit/domain/usecases/assign-certification-officer-to-session_test.js +++ b/api/tests/unit/domain/usecases/assign-certification-officer-to-session_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const assignCertificationOfficerToJurySession = require('../../../../lib/domain/usecases/assign-certification-officer-to-jury-session'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { assignCertificationOfficerToJurySession } from '../../../../lib/domain/usecases/assign-certification-officer-to-jury-session.js'; describe('Unit | UseCase | assign-certification-officer-to-session', function () { it('should return the session id after assigningUser to it', async function () { diff --git a/api/tests/unit/domain/usecases/attach-target-profiles-to-organization_test.js b/api/tests/unit/domain/usecases/attach-target-profiles-to-organization_test.js index 58d30d19b32..1728d119114 100644 --- a/api/tests/unit/domain/usecases/attach-target-profiles-to-organization_test.js +++ b/api/tests/unit/domain/usecases/attach-target-profiles-to-organization_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const attachTargetProfilesToOrganization = require('../../../../lib/domain/usecases/attach-target-profiles-to-organization'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { attachTargetProfilesToOrganization } from '../../../../lib/domain/usecases/attach-target-profiles-to-organization.js'; describe('Unit | UseCase | attach-target-profiles-to-organization', function () { let targetProfileRepository; diff --git a/api/tests/unit/domain/usecases/attach-target-profiles-to-training_test.js b/api/tests/unit/domain/usecases/attach-target-profiles-to-training_test.js index f3993eee1ca..91ad65c1c22 100644 --- a/api/tests/unit/domain/usecases/attach-target-profiles-to-training_test.js +++ b/api/tests/unit/domain/usecases/attach-target-profiles-to-training_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const attachTargetProfilesToTraining = require('../../../../lib/domain/usecases/attach-target-profiles-to-training'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { attachTargetProfilesToTraining } from '../../../../lib/domain/usecases/attach-target-profiles-to-training.js'; describe('Unit | UseCase | attach-target-profiles-to-training', function () { let targetProfileRepository; diff --git a/api/tests/unit/domain/usecases/authenticate-anonymous-user_test.js b/api/tests/unit/domain/usecases/authenticate-anonymous-user_test.js index 1c7c9a4d032..b3019bed4ce 100644 --- a/api/tests/unit/domain/usecases/authenticate-anonymous-user_test.js +++ b/api/tests/unit/domain/usecases/authenticate-anonymous-user_test.js @@ -1,7 +1,6 @@ -const { catchErr, expect, sinon } = require('../../../test-helper'); -const { UserCantBeCreatedError } = require('../../../../lib/domain/errors'); - -const authenticateAnonymousUser = require('../../../../lib/domain/usecases/authenticate-anonymous-user'); +import { catchErr, expect, sinon } from '../../../test-helper.js'; +import { UserCantBeCreatedError } from '../../../../lib/domain/errors.js'; +import { authenticateAnonymousUser } from '../../../../lib/domain/usecases/authenticate-anonymous-user.js'; describe('Unit | UseCase | authenticate-anonymous-user', function () { let campaignCode; diff --git a/api/tests/unit/domain/usecases/authenticate-external-user_test.js b/api/tests/unit/domain/usecases/authenticate-external-user_test.js index 39d8bd360b9..8694278f609 100644 --- a/api/tests/unit/domain/usecases/authenticate-external-user_test.js +++ b/api/tests/unit/domain/usecases/authenticate-external-user_test.js @@ -1,16 +1,16 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { authenticateExternalUser } from '../../../../lib/domain/usecases/authenticate-external-user.js'; -const authenticateExternalUser = require('../../../../lib/domain/usecases/authenticate-external-user'); - -const { +import { MissingOrInvalidCredentialsError, UserNotFoundError, PasswordNotMatching, UnexpectedUserAccountError, UserShouldChangePasswordError, UserAlreadyExistsWithAuthenticationMethodError, -} = require('../../../../lib/domain/errors'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); +} from '../../../../lib/domain/errors.js'; + +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; describe('Unit | Application | UseCase | authenticate-external-user', function () { let tokenService; diff --git a/api/tests/unit/domain/usecases/authenticate-user_test.js b/api/tests/unit/domain/usecases/authenticate-user_test.js index 29d98a89dd0..38be4e44c18 100644 --- a/api/tests/unit/domain/usecases/authenticate-user_test.js +++ b/api/tests/unit/domain/usecases/authenticate-user_test.js @@ -1,17 +1,16 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { authenticateUser } from '../../../../lib/domain/usecases/authenticate-user.js'; +import { User } from '../../../../lib/domain/models/User.js'; +import { AdminMember } from '../../../../lib/domain/models/AdminMember.js'; -const authenticateUser = require('../../../../lib/domain/usecases/authenticate-user'); -const User = require('../../../../lib/domain/models/User'); -const AdminMember = require('../../../../lib/domain/models/AdminMember'); - -const { +import { UserNotFoundError, MissingOrInvalidCredentialsError, ForbiddenAccess, UserShouldChangePasswordError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; -const appMessages = require('../../../../lib/domain/constants'); +import * as appMessages from '../../../../lib/domain/constants.js'; describe('Unit | Application | UseCase | authenticate-user', function () { let refreshTokenService; diff --git a/api/tests/unit/domain/usecases/authentication/authenticate-oidc-user_test.js b/api/tests/unit/domain/usecases/authentication/authenticate-oidc-user_test.js index 51cf280416c..53f9c063312 100644 --- a/api/tests/unit/domain/usecases/authentication/authenticate-oidc-user_test.js +++ b/api/tests/unit/domain/usecases/authentication/authenticate-oidc-user_test.js @@ -1,11 +1,10 @@ -const { expect, sinon, catchErr } = require('../../../../test-helper'); -const { UnexpectedOidcStateError } = require('../../../../../lib/domain/errors'); -const logger = require('../../../../../lib/infrastructure/logger'); - -const authenticateOidcUser = require('../../../../../lib/domain/usecases/authentication/authenticate-oidc-user'); -const AuthenticationSessionContent = require('../../../../../lib/domain/models/AuthenticationSessionContent'); -const AuthenticationMethod = require('../../../../../lib/domain/models/AuthenticationMethod'); -const OidcIdentityProviders = require('../../../../../lib/domain/constants/oidc-identity-providers'); +import { expect, sinon, catchErr } from '../../../../test-helper.js'; +import { UnexpectedOidcStateError } from '../../../../../lib/domain/errors.js'; +import { logger } from '../../../../../lib/infrastructure/logger.js'; +import { authenticateOidcUser } from '../../../../../lib/domain/usecases/authentication/authenticate-oidc-user.js'; +import { AuthenticationSessionContent } from '../../../../../lib/domain/models/AuthenticationSessionContent.js'; +import { AuthenticationMethod } from '../../../../../lib/domain/models/AuthenticationMethod.js'; +import * as OidcIdentityProviders from '../../../../../lib/domain/constants/oidc-identity-providers.js'; describe('Unit | UseCase | authenticate-oidc-user', function () { let oidcAuthenticationService; diff --git a/api/tests/unit/domain/usecases/authorize-certification-candidate-to-resume_test.js b/api/tests/unit/domain/usecases/authorize-certification-candidate-to-resume_test.js index e8cc27f51f6..3067a313938 100644 --- a/api/tests/unit/domain/usecases/authorize-certification-candidate-to-resume_test.js +++ b/api/tests/unit/domain/usecases/authorize-certification-candidate-to-resume_test.js @@ -1,5 +1,5 @@ -const { domainBuilder, expect, sinon } = require('../../../test-helper'); -const authorizeCertificationCandidateToResume = require('../../../../lib/domain/usecases/authorize-certification-candidate-to-resume'); +import { domainBuilder, expect, sinon } from '../../../test-helper.js'; +import { authorizeCertificationCandidateToResume } from '../../../../lib/domain/usecases/authorize-certification-candidate-to-resume.js'; describe('Unit | Domain | Use Cases | authorize-certification-candidate-to-resume', function () { let certificationCandidateForSupervisingRepository; diff --git a/api/tests/unit/domain/usecases/authorize-certification-candidate-to-start_test.js b/api/tests/unit/domain/usecases/authorize-certification-candidate-to-start_test.js index 81b866e7148..2dbfa4943a4 100644 --- a/api/tests/unit/domain/usecases/authorize-certification-candidate-to-start_test.js +++ b/api/tests/unit/domain/usecases/authorize-certification-candidate-to-start_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const authorizeCertificationCandidateToStart = require('../../../../lib/domain/usecases/authorize-certification-candidate-to-start'); -const CertificationCandidateForSupervising = require('../../../../lib/domain/models/CertificationCandidateForSupervising'); +import { expect, sinon } from '../../../test-helper.js'; +import { authorizeCertificationCandidateToStart } from '../../../../lib/domain/usecases/authorize-certification-candidate-to-start.js'; +import { CertificationCandidateForSupervising } from '../../../../lib/domain/models/CertificationCandidateForSupervising.js'; describe('Unit | Domain | Use Cases | authorize-certification-candidate-to-start', function () { let certificationCandidateForSupervisingRepository; diff --git a/api/tests/unit/domain/usecases/begin-campaign-participation-improvement_test.js b/api/tests/unit/domain/usecases/begin-campaign-participation-improvement_test.js index 405be3246b5..3343cf83939 100644 --- a/api/tests/unit/domain/usecases/begin-campaign-participation-improvement_test.js +++ b/api/tests/unit/domain/usecases/begin-campaign-participation-improvement_test.js @@ -1,12 +1,15 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; -const Assessment = require('../../../../lib/domain/models/Assessment'); -const { beginCampaignParticipationImprovement } = require('../../../../lib/domain/usecases/index.js'); -const { +import { AlreadySharedCampaignParticipationError, UserNotAuthorizedToAccessEntityError, -} = require('../../../../lib/domain/errors'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +} from '../../../../lib/domain/errors.js'; + +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; + +const { beginCampaignParticipationImprovement } = usecases; describe('Unit | Usecase | begin-campaign-participation-improvement', function () { let dependencies; diff --git a/api/tests/unit/domain/usecases/campaigns-administration/archive-campaigns_test.js b/api/tests/unit/domain/usecases/campaigns-administration/archive-campaigns_test.js index 1e07a0ece9f..1d55a360ab8 100644 --- a/api/tests/unit/domain/usecases/campaigns-administration/archive-campaigns_test.js +++ b/api/tests/unit/domain/usecases/campaigns-administration/archive-campaigns_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../../test-helper'); -const archiveCampaigns = require('../../../../../lib/domain/usecases/campaigns-administration/archive-campaigns'); +import { expect, sinon } from '../../../../test-helper.js'; +import { archiveCampaigns } from '../../../../../lib/domain/usecases/campaigns-administration/archive-campaigns.js'; describe('Unit | UseCase | archive-campaign', function () { let campaignAdministrationRepository; diff --git a/api/tests/unit/domain/usecases/cancel-certification-course_test.js b/api/tests/unit/domain/usecases/cancel-certification-course_test.js index 6200a0cea5c..f8c837fdc14 100644 --- a/api/tests/unit/domain/usecases/cancel-certification-course_test.js +++ b/api/tests/unit/domain/usecases/cancel-certification-course_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const cancelCertificationCourse = require('../../../../lib/domain/usecases/cancel-certification-course'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { cancelCertificationCourse } from '../../../../lib/domain/usecases/cancel-certification-course.js'; describe('Unit | UseCase | cancel-certification-course', function () { it('should cancel the certification course', async function () { diff --git a/api/tests/unit/domain/usecases/cancel-organization-invitation_test.js b/api/tests/unit/domain/usecases/cancel-organization-invitation_test.js index b501f9890dd..1135abd5c4c 100644 --- a/api/tests/unit/domain/usecases/cancel-organization-invitation_test.js +++ b/api/tests/unit/domain/usecases/cancel-organization-invitation_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const { NotFoundError, UncancellableOrganizationInvitationError } = require('../../../../lib/domain/errors'); -const cancelOrganizationInvitation = require('../../../../lib/domain/usecases/cancel-organization-invitation'); -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { NotFoundError, UncancellableOrganizationInvitationError } from '../../../../lib/domain/errors.js'; +import { cancelOrganizationInvitation } from '../../../../lib/domain/usecases/cancel-organization-invitation.js'; +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; describe('Unit | UseCase | cancel-organization-invitation', function () { let organizationInvitationRepository; diff --git a/api/tests/unit/domain/usecases/change-user-lang_test.js b/api/tests/unit/domain/usecases/change-user-lang_test.js index 92b5f3b3e6c..a1707c84164 100644 --- a/api/tests/unit/domain/usecases/change-user-lang_test.js +++ b/api/tests/unit/domain/usecases/change-user-lang_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const changeUserLang = require('../../../../lib/domain/usecases/change-user-lang'); +import { expect, sinon } from '../../../test-helper.js'; +import { changeUserLang } from '../../../../lib/domain/usecases/change-user-lang.js'; describe('Unit | UseCase | change-user-lang', function () { let userRepository; diff --git a/api/tests/unit/domain/usecases/check-sco-account-recovery_test.js b/api/tests/unit/domain/usecases/check-sco-account-recovery_test.js index b16c6fbc646..813acdc8660 100644 --- a/api/tests/unit/domain/usecases/check-sco-account-recovery_test.js +++ b/api/tests/unit/domain/usecases/check-sco-account-recovery_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const StudentInformationForAccountRecovery = require('../../../../lib/domain/read-models/StudentInformationForAccountRecovery'); -const checkScoAccountRecovery = require('../../../../lib/domain/usecases/check-sco-account-recovery'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { StudentInformationForAccountRecovery } from '../../../../lib/domain/read-models/StudentInformationForAccountRecovery.js'; +import { checkScoAccountRecovery } from '../../../../lib/domain/usecases/check-sco-account-recovery.js'; describe('Unit | UseCase | check-sco-account-recovery', function () { let organizationLearnerRepository; diff --git a/api/tests/unit/domain/usecases/comment-session-as-jury_test.js b/api/tests/unit/domain/usecases/comment-session-as-jury_test.js index b97b2a999c6..7a443fea486 100644 --- a/api/tests/unit/domain/usecases/comment-session-as-jury_test.js +++ b/api/tests/unit/domain/usecases/comment-session-as-jury_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const commentSessionAsJury = require('../../../../lib/domain/usecases/comment-session-as-jury'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { commentSessionAsJury } from '../../../../lib/domain/usecases/comment-session-as-jury.js'; describe('Unit | UseCase | comment-session-as-jury', function () { const sessionJuryCommentRepository = { get: null, save: null }; diff --git a/api/tests/unit/domain/usecases/complete-assessment_test.js b/api/tests/unit/domain/usecases/complete-assessment_test.js index 9beaa4b3fec..04698291a85 100644 --- a/api/tests/unit/domain/usecases/complete-assessment_test.js +++ b/api/tests/unit/domain/usecases/complete-assessment_test.js @@ -1,10 +1,10 @@ -const _ = require('lodash'); -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const completeAssessment = require('../../../../lib/domain/usecases/complete-assessment'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const { AlreadyRatedAssessmentError } = require('../../../../lib/domain/errors'); -const AssessmentCompleted = require('../../../../lib/domain/events/AssessmentCompleted'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); +import _ from 'lodash'; +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { completeAssessment } from '../../../../lib/domain/usecases/complete-assessment.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { AlreadyRatedAssessmentError } from '../../../../lib/domain/errors.js'; +import { AssessmentCompleted } from '../../../../lib/domain/events/AssessmentCompleted.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; describe('Unit | UseCase | complete-assessment', function () { let assessmentRepository; diff --git a/api/tests/unit/domain/usecases/compute-campaign-analysis_test.js b/api/tests/unit/domain/usecases/compute-campaign-analysis_test.js index a442c16ef7d..787b28852ad 100644 --- a/api/tests/unit/domain/usecases/compute-campaign-analysis_test.js +++ b/api/tests/unit/domain/usecases/compute-campaign-analysis_test.js @@ -1,7 +1,10 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const { computeCampaignAnalysis } = require('../../../../lib/domain/usecases/index.js'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); -const { FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { FRENCH_SPOKEN } = LOCALE; +const { computeCampaignAnalysis } = usecases; describe('Unit | UseCase | compute-campaign-analysis', function () { let campaignRepository; diff --git a/api/tests/unit/domain/usecases/compute-campaign-collective-result_test.js b/api/tests/unit/domain/usecases/compute-campaign-collective-result_test.js index c1e3619a92c..5891f2094cf 100644 --- a/api/tests/unit/domain/usecases/compute-campaign-collective-result_test.js +++ b/api/tests/unit/domain/usecases/compute-campaign-collective-result_test.js @@ -1,6 +1,8 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const { computeCampaignCollectiveResult } = require('../../../../lib/domain/usecases/index.js'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; + +const { computeCampaignCollectiveResult } = usecases; describe('Unit | UseCase | compute-campaign-collective-result', function () { const userId = 1; diff --git a/api/tests/unit/domain/usecases/compute-campaign-participation-analysis_test.js b/api/tests/unit/domain/usecases/compute-campaign-participation-analysis_test.js index e236c3143b6..9ce97f64d35 100644 --- a/api/tests/unit/domain/usecases/compute-campaign-participation-analysis_test.js +++ b/api/tests/unit/domain/usecases/compute-campaign-participation-analysis_test.js @@ -1,11 +1,14 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const { computeCampaignParticipationAnalysis } = require('../../../../lib/domain/usecases/index.js'); -const { +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { UserNotAuthorizedToAccessEntityError, CampaignParticipationDeletedError, -} = require('../../../../lib/domain/errors'); -const CampaignParticipationStatuses = require('../../../../lib/domain/models/CampaignParticipationStatuses'); -const { FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +} from '../../../../lib/domain/errors.js'; +import { CampaignParticipationStatuses } from '../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { computeCampaignParticipationAnalysis } = usecases; +const { FRENCH_SPOKEN } = LOCALE; const { TO_SHARE } = CampaignParticipationStatuses; diff --git a/api/tests/unit/domain/usecases/correct-answer-then-update-assessment_test.js b/api/tests/unit/domain/usecases/correct-answer-then-update-assessment_test.js index 1f3739c6b69..ac7a5a8e8b3 100644 --- a/api/tests/unit/domain/usecases/correct-answer-then-update-assessment_test.js +++ b/api/tests/unit/domain/usecases/correct-answer-then-update-assessment_test.js @@ -1,17 +1,16 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { correctAnswerThenUpdateAssessment } from '../../../../lib/domain/usecases/correct-answer-then-update-assessment.js'; -const Assessment = require('../../../../lib/domain/models/Assessment'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const correctAnswerThenUpdateAssessment = require('../../../../lib/domain/usecases/correct-answer-then-update-assessment'); - -const { +import { ChallengeNotAskedError, NotFoundError, ForbiddenAccess, CertificationEndedBySupervisorError, CertificationEndedByFinalizationError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Use Cases | correct-answer-then-update-assessment', function () { const userId = 1; diff --git a/api/tests/unit/domain/usecases/correct-candidate-identity-in-certification-course_test.js b/api/tests/unit/domain/usecases/correct-candidate-identity-in-certification-course_test.js index d8664d4e978..cc7d716ccff 100644 --- a/api/tests/unit/domain/usecases/correct-candidate-identity-in-certification-course_test.js +++ b/api/tests/unit/domain/usecases/correct-candidate-identity-in-certification-course_test.js @@ -1,9 +1,8 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const CertificationCourse = require('../../../../lib/domain/models/CertificationCourse'); - -const correctCandidateIdentityInCertificationCourse = require('../../../../lib/domain/usecases/correct-candidate-identity-in-certification-course'); -const { CpfBirthInformationValidation } = require('../../../../lib/domain/services/certification-cpf-service'); -const { CpfBirthInformationValidationError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { CertificationCourse } from '../../../../lib/domain/models/CertificationCourse.js'; +import { correctCandidateIdentityInCertificationCourse } from '../../../../lib/domain/usecases/correct-candidate-identity-in-certification-course.js'; +import { CpfBirthInformationValidation } from '../../../../lib/domain/services/certification-cpf-service.js'; +import { CpfBirthInformationValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | correct-candidate-identity-in-certification-course', function () { let certificationCourseRepository; diff --git a/api/tests/unit/domain/usecases/create-access-token-from-refresh-token_test.js b/api/tests/unit/domain/usecases/create-access-token-from-refresh-token_test.js index 8acaa6ac805..fedbd9f8d84 100644 --- a/api/tests/unit/domain/usecases/create-access-token-from-refresh-token_test.js +++ b/api/tests/unit/domain/usecases/create-access-token-from-refresh-token_test.js @@ -1,5 +1,5 @@ -const createAccessTokenFromRefreshToken = require('../../../../lib/domain/usecases/create-access-token-from-refresh-token'); -const { expect, sinon } = require('../../../test-helper'); +import { createAccessTokenFromRefreshToken } from '../../../../lib/domain/usecases/create-access-token-from-refresh-token.js'; +import { expect, sinon } from '../../../test-helper.js'; describe('Unit | UseCase | create-access-token-from-refresh-token', function () { context('when refresh token is provided', function () { diff --git a/api/tests/unit/domain/usecases/create-and-reconcile-user-to-organization-learner_test.js b/api/tests/unit/domain/usecases/create-and-reconcile-user-to-organization-learner_test.js index 2a1cf390094..f7709e55662 100644 --- a/api/tests/unit/domain/usecases/create-and-reconcile-user-to-organization-learner_test.js +++ b/api/tests/unit/domain/usecases/create-and-reconcile-user-to-organization-learner_test.js @@ -1,15 +1,15 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; -const { +import { AlreadyRegisteredEmailError, AlreadyRegisteredUsernameError, CampaignCodeError, EntityValidationError, OrganizationLearnerAlreadyLinkedToUserError, NotFoundError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | UseCase | create-and-reconcile-user-to-organization-learner', function () { const organizationId = 1; diff --git a/api/tests/unit/domain/usecases/create-campaign_test.js b/api/tests/unit/domain/usecases/create-campaign_test.js index c5ea2e0de42..440b76f2503 100644 --- a/api/tests/unit/domain/usecases/create-campaign_test.js +++ b/api/tests/unit/domain/usecases/create-campaign_test.js @@ -1,8 +1,8 @@ -const { expect, sinon } = require('../../../test-helper'); -const createCampaign = require('../../../../lib/domain/usecases/create-campaign'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); -const CampaignCreator = require('../../../../lib/domain/models/CampaignCreator'); -const CampaignForCreation = require('../../../../lib/domain/models/CampaignForCreation'); +import { expect, sinon } from '../../../test-helper.js'; +import { createCampaign } from '../../../../lib/domain/usecases/create-campaign.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; +import { CampaignCreator } from '../../../../lib/domain/models/CampaignCreator.js'; +import { CampaignForCreation } from '../../../../lib/domain/models/CampaignForCreation.js'; describe('Unit | UseCase | create-campaign', function () { let campaignRepository; diff --git a/api/tests/unit/domain/usecases/create-certification-center-membership-by-email_test.js b/api/tests/unit/domain/usecases/create-certification-center-membership-by-email_test.js index dc6315c7d80..01765068c41 100644 --- a/api/tests/unit/domain/usecases/create-certification-center-membership-by-email_test.js +++ b/api/tests/unit/domain/usecases/create-certification-center-membership-by-email_test.js @@ -1,8 +1,6 @@ -const { catchErr, expect, sinon } = require('../../../test-helper'); - -const { AlreadyExistingEntityError, UserNotFoundError } = require('../../../../lib/domain/errors'); - -const createCertificationCenterMembershipByEmail = require('../../../../lib/domain/usecases/create-certification-center-membership-by-email'); +import { catchErr, expect, sinon } from '../../../test-helper.js'; +import { AlreadyExistingEntityError, UserNotFoundError } from '../../../../lib/domain/errors.js'; +import { createCertificationCenterMembershipByEmail } from '../../../../lib/domain/usecases/create-certification-center-membership-by-email.js'; describe('Unit | UseCase | create-certification-center-membership-by-email', function () { const certificationCenterId = 1; diff --git a/api/tests/unit/domain/usecases/create-certification-center-membership-for-sco-organization-member_test.js b/api/tests/unit/domain/usecases/create-certification-center-membership-for-sco-organization-member_test.js index 52470720151..df4d7c9dd22 100644 --- a/api/tests/unit/domain/usecases/create-certification-center-membership-for-sco-organization-member_test.js +++ b/api/tests/unit/domain/usecases/create-certification-center-membership-for-sco-organization-member_test.js @@ -1,8 +1,8 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const { - createCertificationCenterMembershipForScoOrganizationMember, -} = require('../../../../lib/domain/usecases/index.js'); -const Membership = require('../../../../lib/domain/models/Membership'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; + +const { createCertificationCenterMembershipForScoOrganizationMember } = usecases; describe('Unit | UseCase | create-certification-center-membership-for-sco-organization-member', function () { let membershipRepository; diff --git a/api/tests/unit/domain/usecases/create-certification-center_test.js b/api/tests/unit/domain/usecases/create-certification-center_test.js index edfca15b17b..b28e4cfeafa 100644 --- a/api/tests/unit/domain/usecases/create-certification-center_test.js +++ b/api/tests/unit/domain/usecases/create-certification-center_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder, sinon } = require('../../../test-helper'); -const createCertificationCenter = require('../../../../lib/domain/usecases/create-certification-center'); -const DataProtectionOfficer = require('../../../../lib/domain/models/DataProtectionOfficer'); +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; +import { createCertificationCenter } from '../../../../lib/domain/usecases/create-certification-center.js'; +import { DataProtectionOfficer } from '../../../../lib/domain/models/DataProtectionOfficer.js'; describe('Unit | UseCase | create-certification-center', function () { describe('#createCertificationCenter', function () { diff --git a/api/tests/unit/domain/usecases/create-lcms-release_test.js b/api/tests/unit/domain/usecases/create-lcms-release_test.js index 607e19ab674..a2786b0acfd 100644 --- a/api/tests/unit/domain/usecases/create-lcms-release_test.js +++ b/api/tests/unit/domain/usecases/create-lcms-release_test.js @@ -1,7 +1,7 @@ -const { expect, sinon } = require('../../../test-helper'); -const lcms = require('../../../../lib/infrastructure/lcms'); -const { learningContentCache } = require('../../../../lib/infrastructure/caches/learning-content-cache'); -const createLcmsRelease = require('../../../../lib/domain/usecases/create-lcms-release'); +import { expect, sinon } from '../../../test-helper.js'; +import { lcms } from '../../../../lib/infrastructure/lcms.js'; +import { learningContentCache } from '../../../../lib/infrastructure/caches/learning-content-cache.js'; +import { createLcmsRelease } from '../../../../lib/domain/usecases/create-lcms-release.js'; describe('Unit | UseCase | create-lcms-release', function () { it('call the createRelease on the lcms module', async function () { diff --git a/api/tests/unit/domain/usecases/create-membership_test.js b/api/tests/unit/domain/usecases/create-membership_test.js index 8e7f2cae1f9..2abe85f4956 100644 --- a/api/tests/unit/domain/usecases/create-membership_test.js +++ b/api/tests/unit/domain/usecases/create-membership_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const createMembership = require('../../../../lib/domain/usecases/create-membership'); -const Membership = require('../../../../lib/domain/models/Membership'); -const { OrganizationArchivedError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { createMembership } from '../../../../lib/domain/usecases/create-membership.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { OrganizationArchivedError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | create-membership', function () { it('should insert a new membership with role ADMIN', async function () { diff --git a/api/tests/unit/domain/usecases/create-oidc-user_test.js b/api/tests/unit/domain/usecases/create-oidc-user_test.js index 283dbbceb41..1cbd95a14a5 100644 --- a/api/tests/unit/domain/usecases/create-oidc-user_test.js +++ b/api/tests/unit/domain/usecases/create-oidc-user_test.js @@ -1,9 +1,9 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const { +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { AuthenticationKeyExpired, UserAlreadyExistsWithAuthenticationMethodError, -} = require('../../../../lib/domain/errors'); -const createOidcUser = require('../../../../lib/domain/usecases/create-oidc-user'); +} from '../../../../lib/domain/errors.js'; +import { createOidcUser } from '../../../../lib/domain/usecases/create-oidc-user.js'; describe('Unit | UseCase | create-oidc-user', function () { let authenticationMethodRepository, userToCreateRepository, userRepository; diff --git a/api/tests/unit/domain/usecases/create-or-update-training-trigger_test.js b/api/tests/unit/domain/usecases/create-or-update-training-trigger_test.js index f34e9831bfc..5be72d76ee2 100644 --- a/api/tests/unit/domain/usecases/create-or-update-training-trigger_test.js +++ b/api/tests/unit/domain/usecases/create-or-update-training-trigger_test.js @@ -1,5 +1,5 @@ -const createOrUpdateTrainingTrigger = require('../../../../lib/domain/usecases/create-or-update-training-trigger'); -const { expect, catchErr, sinon } = require('../../../test-helper'); +import { createOrUpdateTrainingTrigger } from '../../../../lib/domain/usecases/create-or-update-training-trigger.js'; +import { expect, catchErr, sinon } from '../../../test-helper.js'; describe('Unit | UseCase | create-or-update-training-trigger', function () { let trainingRepository; diff --git a/api/tests/unit/domain/usecases/create-or-update-user-orga-settings_test.js b/api/tests/unit/domain/usecases/create-or-update-user-orga-settings_test.js index 2a534abbea2..202e7f62888 100644 --- a/api/tests/unit/domain/usecases/create-or-update-user-orga-settings_test.js +++ b/api/tests/unit/domain/usecases/create-or-update-user-orga-settings_test.js @@ -1,15 +1,15 @@ -const createOrUpdateUserOrgaSettings = require('../../../../lib/domain/usecases/create-or-update-user-orga-settings'); -const { expect, catchErr, sinon } = require('../../../test-helper'); -const { UserNotMemberOfOrganizationError } = require('../../../../lib/domain/errors'); -const membershipRepository = require('../../../../lib/infrastructure/repositories/membership-repository'); +import { createOrUpdateUserOrgaSettings } from '../../../../lib/domain/usecases/create-or-update-user-orga-settings.js'; +import { expect, catchErr, sinon } from '../../../test-helper.js'; +import { UserNotMemberOfOrganizationError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | create-or-update-user-orga-settings', function () { const userId = 1; const organizationId = 3; let userOrgaSettingsRepository; + let membershipRepository; beforeEach(function () { - membershipRepository.findByUserIdAndOrganizationId = sinon.stub(); + membershipRepository = { findByUserIdAndOrganizationId: sinon.stub() }; userOrgaSettingsRepository = { createOrUpdate: sinon.stub() }; }); diff --git a/api/tests/unit/domain/usecases/create-organization-invitation-by-admin_test.js b/api/tests/unit/domain/usecases/create-organization-invitation-by-admin_test.js index 9abad5977bd..47c1510ceb3 100644 --- a/api/tests/unit/domain/usecases/create-organization-invitation-by-admin_test.js +++ b/api/tests/unit/domain/usecases/create-organization-invitation-by-admin_test.js @@ -1,9 +1,7 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); - -const Membership = require('../../../../lib/domain/models/Membership'); - -const createOrganizationInvitationByAdmin = require('../../../../lib/domain/usecases/create-organization-invitation-by-admin'); -const { OrganizationArchivedError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { createOrganizationInvitationByAdmin } from '../../../../lib/domain/usecases/create-organization-invitation-by-admin.js'; +import { OrganizationArchivedError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | create-organization-invitation-by-admin', function () { describe('#createOrganizationInvitationByAdmin', function () { diff --git a/api/tests/unit/domain/usecases/create-organization-invitations_test.js b/api/tests/unit/domain/usecases/create-organization-invitations_test.js index e6b97ddff76..0db9f41354a 100644 --- a/api/tests/unit/domain/usecases/create-organization-invitations_test.js +++ b/api/tests/unit/domain/usecases/create-organization-invitations_test.js @@ -1,7 +1,6 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); - -const createOrganizationInvitations = require('../../../../lib/domain/usecases/create-organization-invitations'); -const { OrganizationArchivedError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { createOrganizationInvitations } from '../../../../lib/domain/usecases/create-organization-invitations.js'; +import { OrganizationArchivedError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | create-organization-invitations', function () { let organizationInvitationRepository, organizationRepository, organizationInvitationService; diff --git a/api/tests/unit/domain/usecases/create-organization-places-lot_test.js b/api/tests/unit/domain/usecases/create-organization-places-lot_test.js index cacb1f90038..a25f4b17e44 100644 --- a/api/tests/unit/domain/usecases/create-organization-places-lot_test.js +++ b/api/tests/unit/domain/usecases/create-organization-places-lot_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const OrganizationPlacesLot = require('../../../../lib/domain/models/OrganizationPlacesLot'); -const createOrganizationPlacesLot = require('../../../../lib/domain/usecases/create-organization-places-lot'); -const organizationPlacesLotManagement = require('../../../../lib/domain/read-models/OrganizationPlacesLotManagement'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { OrganizationPlacesLot } from '../../../../lib/domain/models/OrganizationPlacesLot.js'; +import { createOrganizationPlacesLot } from '../../../../lib/domain/usecases/create-organization-places-lot.js'; +import { OrganizationPlacesLotManagement as organizationPlacesLotManagement } from '../../../../lib/domain/read-models/OrganizationPlacesLotManagement.js'; describe('Unit | UseCase | create-organization-place-lot', function () { let organizationPlacesLotRepository, organizationRepository, organization; diff --git a/api/tests/unit/domain/usecases/create-organization_test.js b/api/tests/unit/domain/usecases/create-organization_test.js index d21e31cd29f..c78df6e9e77 100644 --- a/api/tests/unit/domain/usecases/create-organization_test.js +++ b/api/tests/unit/domain/usecases/create-organization_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const createOrganization = require('../../../../lib/domain/usecases/create-organization.js'); -const OrganizationForAdmin = require('../../../../lib/domain/models/organizations-administration/Organization'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { createOrganization } from '../../../../lib/domain/usecases/create-organization.js'; +import { OrganizationForAdmin } from '../../../../lib/domain/models/organizations-administration/Organization.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | create-organization', function () { let organizationCreationValidator; diff --git a/api/tests/unit/domain/usecases/create-organizations-with-tags-and-target-profiles_test.js b/api/tests/unit/domain/usecases/create-organizations-with-tags-and-target-profiles_test.js index c4501f2f3ee..efe6393fe79 100644 --- a/api/tests/unit/domain/usecases/create-organizations-with-tags-and-target-profiles_test.js +++ b/api/tests/unit/domain/usecases/create-organizations-with-tags-and-target-profiles_test.js @@ -1,16 +1,16 @@ -const { expect, catchErr, sinon, domainBuilder } = require('../../../test-helper'); -const Membership = require('../../../../lib/domain/models/Membership'); -const Organization = require('../../../../lib/domain/models/Organization'); -const OrganizationTag = require('../../../../lib/domain/models/OrganizationTag'); -const domainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const createOrganizationsWithTagsAndTargetProfiles = require('../../../../lib/domain/usecases/create-organizations-with-tags-and-target-profiles'); - -const { +import { expect, catchErr, sinon, domainBuilder } from '../../../test-helper.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { Organization } from '../../../../lib/domain/models/Organization.js'; +import { OrganizationTag } from '../../../../lib/domain/models/OrganizationTag.js'; +import { DomainTransaction as domainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import { createOrganizationsWithTagsAndTargetProfiles } from '../../../../lib/domain/usecases/create-organizations-with-tags-and-target-profiles.js'; + +import { ManyOrganizationsFoundError, ObjectValidationError, OrganizationAlreadyExistError, OrganizationTagNotFound, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | create-organizations-with-tags-and-target-profiles', function () { let organizationRepositoryStub; diff --git a/api/tests/unit/domain/usecases/create-password-reset-demand_test.js b/api/tests/unit/domain/usecases/create-password-reset-demand_test.js index ecb07f71571..da6bf0036f1 100644 --- a/api/tests/unit/domain/usecases/create-password-reset-demand_test.js +++ b/api/tests/unit/domain/usecases/create-password-reset-demand_test.js @@ -1,8 +1,8 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { UserNotFoundError } from '../../../../lib/domain/errors.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; -const { UserNotFoundError } = require('../../../../lib/domain/errors'); - -const { createPasswordResetDemand } = require('../../../../lib/domain/usecases/index.js'); +const { createPasswordResetDemand } = usecases; describe('Unit | UseCase | create-password-reset-demand', function () { const email = 'user@example.net'; diff --git a/api/tests/unit/domain/usecases/create-session_test.js b/api/tests/unit/domain/usecases/create-session_test.js index 75fa822c512..a18a3e30f27 100644 --- a/api/tests/unit/domain/usecases/create-session_test.js +++ b/api/tests/unit/domain/usecases/create-session_test.js @@ -1,8 +1,11 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const { noop } = require('lodash/noop'); -const createSession = require('../../../../lib/domain/usecases/create-session'); -const { ForbiddenAccess } = require('../../../../lib/domain/errors'); -const Session = require('../../../../lib/domain/models/Session'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import _ from 'lodash'; + +const { noop } = _; + +import { createSession } from '../../../../lib/domain/usecases/create-session.js'; +import { ForbiddenAccess } from '../../../../lib/domain/errors.js'; +import { Session } from '../../../../lib/domain/models/Session.js'; describe('Unit | UseCase | create-session', function () { describe('#save', function () { diff --git a/api/tests/unit/domain/usecases/create-tag_test.js b/api/tests/unit/domain/usecases/create-tag_test.js index 7f850291a5c..2417f07fe49 100644 --- a/api/tests/unit/domain/usecases/create-tag_test.js +++ b/api/tests/unit/domain/usecases/create-tag_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder, sinon } = require('../../../test-helper'); -const Tag = require('../../../../lib/domain/models/Tag'); -const createTag = require('../../../../lib/domain/usecases/create-tag'); +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; +import { Tag } from '../../../../lib/domain/models/Tag.js'; +import { createTag } from '../../../../lib/domain/usecases/create-tag.js'; describe('Unit | UseCase | create-tag', function () { it('should allow to create a tag', async function () { diff --git a/api/tests/unit/domain/usecases/create-target-profile_test.js b/api/tests/unit/domain/usecases/create-target-profile_test.js index 950150e16af..8a5f857a7d0 100644 --- a/api/tests/unit/domain/usecases/create-target-profile_test.js +++ b/api/tests/unit/domain/usecases/create-target-profile_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const createTargetProfile = require('../../../../lib/domain/usecases/create-target-profile'); -const { categories } = require('../../../../lib/domain/models/TargetProfile'); -const { TargetProfileCannotBeCreated } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { createTargetProfile } from '../../../../lib/domain/usecases/create-target-profile.js'; +import { categories } from '../../../../lib/domain/models/TargetProfile.js'; +import { TargetProfileCannotBeCreated } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | create-target-profile', function () { let targetProfileRepositoryStub; diff --git a/api/tests/unit/domain/usecases/create-training_test.js b/api/tests/unit/domain/usecases/create-training_test.js index 18ba801788d..7fafb1b0bb7 100644 --- a/api/tests/unit/domain/usecases/create-training_test.js +++ b/api/tests/unit/domain/usecases/create-training_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const createTraining = require('../../../../lib/domain/usecases/create-training'); +import { expect, sinon } from '../../../test-helper.js'; +import { createTraining } from '../../../../lib/domain/usecases/create-training.js'; describe('Unit | UseCase | create-training', function () { it('should call training repository to create the training', async function () { diff --git a/api/tests/unit/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user_test.js b/api/tests/unit/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user_test.js index 7dfb0728999..b890e4b33e6 100644 --- a/api/tests/unit/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user_test.js +++ b/api/tests/unit/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user_test.js @@ -1,5 +1,5 @@ -const { domainBuilder, expect, sinon } = require('../../../test-helper'); -const createUserAndReconcileToOrganizationLearnerFromExternalUser = require('../../../../lib/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user'); +import { domainBuilder, expect, sinon } from '../../../test-helper.js'; +import { createUserAndReconcileToOrganizationLearnerFromExternalUser } from '../../../../lib/domain/usecases/create-user-and-reconcile-to-organization-learner-from-external-user.js'; describe('Unit | UseCase | create-user-and-reconcile-to-organization-learner-from-external-user', function () { let obfuscationService; diff --git a/api/tests/unit/domain/usecases/create-user_test.js b/api/tests/unit/domain/usecases/create-user_test.js index c7ecc41569c..67f8ac7bf6b 100644 --- a/api/tests/unit/domain/usecases/create-user_test.js +++ b/api/tests/unit/domain/usecases/create-user_test.js @@ -1,10 +1,7 @@ -const { catchErr, expect, sinon } = require('../../../test-helper'); - -const { AlreadyRegisteredEmailError, EntityValidationError } = require('../../../../lib/domain/errors'); - -const User = require('../../../../lib/domain/models/User'); - -const createUser = require('../../../../lib/domain/usecases/create-user'); +import { catchErr, expect, sinon } from '../../../test-helper.js'; +import { AlreadyRegisteredEmailError, EntityValidationError } from '../../../../lib/domain/errors.js'; +import { User } from '../../../../lib/domain/models/User.js'; +import { createUser } from '../../../../lib/domain/usecases/create-user.js'; describe('Unit | UseCase | create-user', function () { const userId = 123; diff --git a/api/tests/unit/domain/usecases/deactivate-admin-member_test.js b/api/tests/unit/domain/usecases/deactivate-admin-member_test.js index 82d995799cc..2f6fd531f35 100644 --- a/api/tests/unit/domain/usecases/deactivate-admin-member_test.js +++ b/api/tests/unit/domain/usecases/deactivate-admin-member_test.js @@ -1,5 +1,5 @@ -const { sinon, expect } = require('../../../test-helper'); -const deactivateAdminMember = require('../../../../lib/domain/usecases/deactivate-admin-member'); +import { sinon, expect } from '../../../test-helper.js'; +import { deactivateAdminMember } from '../../../../lib/domain/usecases/deactivate-admin-member.js'; describe('Unit | UseCase | deactivate-admin-member', function () { it("should deactivate the given admin member and revoke all user's refresh tokens", async function () { diff --git a/api/tests/unit/domain/usecases/delete-campaign-participation-for-admin_test.js b/api/tests/unit/domain/usecases/delete-campaign-participation-for-admin_test.js index 3e405944893..c818082d58b 100644 --- a/api/tests/unit/domain/usecases/delete-campaign-participation-for-admin_test.js +++ b/api/tests/unit/domain/usecases/delete-campaign-participation-for-admin_test.js @@ -1,6 +1,8 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const { deleteCampaignParticipationForAdmin } = require('../../../../lib/domain/usecases/index.js'); -const CampaignParticipation = require('../../../../lib/domain/models/CampaignParticipation'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { CampaignParticipation } from '../../../../lib/domain/models/CampaignParticipation.js'; + +const { deleteCampaignParticipationForAdmin } = usecases; describe('Unit | UseCase | delete-campaign-participation-for-admin', function () { //given @@ -21,7 +23,7 @@ describe('Unit | UseCase | delete-campaign-participation-for-admin', function () }; const campaignParticipationRepository = { getAllCampaignParticipationsInCampaignForASameLearner: sinon.stub(), - delete: sinon.stub(), + remove: sinon.stub(), }; const campaignParticipationId = 1234; const domainTransaction = Symbol('domainTransaction'); @@ -64,14 +66,14 @@ describe('Unit | UseCase | delete-campaign-participation-for-admin', function () }); //then - expect(campaignParticipationRepository.delete).to.have.been.calledTwice; + expect(campaignParticipationRepository.remove).to.have.been.calledTwice; campaignParticipations.forEach((campaignParticipation) => { const deletedCampaignParticipation = new CampaignParticipation({ ...campaignParticipation, deletedAt: now, deletedBy: ownerId, }); - expect(campaignParticipationRepository.delete).to.have.been.calledWithExactly({ + expect(campaignParticipationRepository.remove).to.have.been.calledWithExactly({ id: deletedCampaignParticipation.id, deletedAt: deletedCampaignParticipation.deletedAt, deletedBy: deletedCampaignParticipation.deletedBy, diff --git a/api/tests/unit/domain/usecases/delete-campaign-participation_test.js b/api/tests/unit/domain/usecases/delete-campaign-participation_test.js index 74b2e0b0a0c..9bd9ade352f 100644 --- a/api/tests/unit/domain/usecases/delete-campaign-participation_test.js +++ b/api/tests/unit/domain/usecases/delete-campaign-participation_test.js @@ -1,6 +1,8 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const { deleteCampaignParticipation } = require('../../../../lib/domain/usecases/index.js'); -const CampaignParticipation = require('../../../../lib/domain/models/CampaignParticipation'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { CampaignParticipation } from '../../../../lib/domain/models/CampaignParticipation.js'; + +const { deleteCampaignParticipation } = usecases; describe('Unit | UseCase | delete-campaign-participation', function () { //given @@ -18,7 +20,7 @@ describe('Unit | UseCase | delete-campaign-participation', function () { it('should call repository method to delete a campaign participation', async function () { const campaignParticipationRepository = { getAllCampaignParticipationsInCampaignForASameLearner: sinon.stub(), - delete: sinon.stub(), + remove: sinon.stub(), }; const campaignParticipationId = 1234; const domainTransaction = Symbol('domainTransaction'); @@ -60,14 +62,14 @@ describe('Unit | UseCase | delete-campaign-participation', function () { }); //then - expect(campaignParticipationRepository.delete).to.have.been.calledTwice; + expect(campaignParticipationRepository.remove).to.have.been.calledTwice; campaignParticipations.forEach((campaignParticipation) => { const deletedCampaignParticipation = new CampaignParticipation({ ...campaignParticipation, deletedAt: now, deletedBy: ownerId, }); - expect(campaignParticipationRepository.delete).to.have.been.calledWithExactly({ + expect(campaignParticipationRepository.remove).to.have.been.calledWithExactly({ id: deletedCampaignParticipation.id, deletedAt: deletedCampaignParticipation.deletedAt, deletedBy: deletedCampaignParticipation.deletedBy, diff --git a/api/tests/unit/domain/usecases/delete-certification-issue-report_test.js b/api/tests/unit/domain/usecases/delete-certification-issue-report_test.js index 8849dda29f7..ad5aad90bd6 100644 --- a/api/tests/unit/domain/usecases/delete-certification-issue-report_test.js +++ b/api/tests/unit/domain/usecases/delete-certification-issue-report_test.js @@ -1,14 +1,11 @@ -const _ = require('lodash'); -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const deleteCertificationIssueReport = require('../../../../lib/domain/usecases/delete-certification-issue-report'); -const { ForbiddenAccess } = require('../../../../lib/domain/errors'); +import _ from 'lodash'; +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { deleteCertificationIssueReport } from '../../../../lib/domain/usecases/delete-certification-issue-report.js'; +import { ForbiddenAccess } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | delete-certification-issue-report', function () { const certificationCourseRepository = { get: () => _.noop() }; - const certificationIssueReportRepository = { - delete: () => _.noop(), - get: () => _.noop(), - }; + let certificationIssueReportRepository; const sessionRepository = { isFinalized: () => _.noop() }; const certificationIssueReportId = 456; const userId = 789; @@ -24,8 +21,10 @@ describe('Unit | UseCase | delete-certification-issue-report', function () { certificationCourseRepository.get .withArgs(certificationIssueReport.certificationCourseId) .resolves(certificationCourse); - sinon.stub(certificationIssueReportRepository, 'delete'); - sinon.stub(certificationIssueReportRepository, 'get'); + certificationIssueReportRepository = { + remove: sinon.stub(), + get: sinon.stub(), + }; certificationIssueReportRepository.get.withArgs(certificationIssueReportId).resolves(certificationIssueReport); sinon.stub(sessionRepository, 'isFinalized'); }); @@ -51,7 +50,7 @@ describe('Unit | UseCase | delete-certification-issue-report', function () { // given const deletionResult = Symbol('someValue'); sessionRepository.isFinalized.withArgs(sessionId).resolves(false); - certificationIssueReportRepository.delete.withArgs(certificationIssueReportId).resolves(deletionResult); + certificationIssueReportRepository.remove.withArgs(certificationIssueReportId).resolves(deletionResult); // when const actualDeletionResult = await deleteCertificationIssueReport({ diff --git a/api/tests/unit/domain/usecases/delete-organization-place-lot_test.js b/api/tests/unit/domain/usecases/delete-organization-place-lot_test.js index 845036787e2..b85f2a8b3b7 100644 --- a/api/tests/unit/domain/usecases/delete-organization-place-lot_test.js +++ b/api/tests/unit/domain/usecases/delete-organization-place-lot_test.js @@ -1,12 +1,12 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const deleteOrganizationPlaceLot = require('../../../../lib/domain/usecases/delete-organization-place-lot'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { deleteOrganizationPlaceLot } from '../../../../lib/domain/usecases/delete-organization-place-lot.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | delete-organization-place-lot', function () { it('should delete the organization place lot', async function () { // given const organizationPlacesLotRepository = { - delete: sinon.stub(), + remove: sinon.stub(), get: sinon.stub(), }; @@ -19,13 +19,13 @@ describe('Unit | UseCase | delete-organization-place-lot', function () { // then expect(organizationPlacesLotRepository.get).to.have.been.calledWithExactly(999); - expect(organizationPlacesLotRepository.delete).to.have.been.calledWithExactly({ id: 999, deletedBy: 666 }); + expect(organizationPlacesLotRepository.remove).to.have.been.calledWithExactly({ id: 999, deletedBy: 666 }); }); it('should not call sofDelete given wrong organizationId', async function () { // given const organizationPlacesLotRepository = { - delete: sinon.stub(), + remove: sinon.stub(), get: sinon.stub(), }; organizationPlacesLotRepository.get.withArgs(999).rejects(new NotFoundError()); @@ -39,6 +39,6 @@ describe('Unit | UseCase | delete-organization-place-lot', function () { // then expect(response).to.be.instanceOf(NotFoundError); - expect(organizationPlacesLotRepository.delete).to.not.have.been.called; + expect(organizationPlacesLotRepository.remove).to.not.have.been.called; }); }); diff --git a/api/tests/unit/domain/usecases/delete-session-jury-comment_test.js b/api/tests/unit/domain/usecases/delete-session-jury-comment_test.js index 816f6ba893d..0c814ca17bb 100644 --- a/api/tests/unit/domain/usecases/delete-session-jury-comment_test.js +++ b/api/tests/unit/domain/usecases/delete-session-jury-comment_test.js @@ -1,10 +1,10 @@ -const { expect, sinon } = require('../../../test-helper'); -const deleteSessionJuryComment = require('../../../../lib/domain/usecases/delete-session-jury-comment'); +import { expect, sinon } from '../../../test-helper.js'; +import { deleteSessionJuryComment } from '../../../../lib/domain/usecases/delete-session-jury-comment.js'; describe('Unit | UseCase | delete-session-jury-comment', function () { it('should delete the session jury comment', async function () { // given - const sessionJuryCommentRepository = { delete: sinon.stub() }; + const sessionJuryCommentRepository = { remove: sinon.stub() }; // when await deleteSessionJuryComment({ @@ -13,6 +13,6 @@ describe('Unit | UseCase | delete-session-jury-comment', function () { }); // then - expect(sessionJuryCommentRepository.delete).to.have.been.calledWithExactly(123); + expect(sessionJuryCommentRepository.remove).to.have.been.calledWithExactly(123); }); }); diff --git a/api/tests/unit/domain/usecases/delete-session_test.js b/api/tests/unit/domain/usecases/delete-session_test.js index 878eb7bd0f8..f0e9ce4de86 100644 --- a/api/tests/unit/domain/usecases/delete-session_test.js +++ b/api/tests/unit/domain/usecases/delete-session_test.js @@ -1,12 +1,12 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const deleteSession = require('../../../../lib/domain/usecases/delete-session'); -const { SessionStartedDeletionError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { deleteSession } from '../../../../lib/domain/usecases/delete-session.js'; +import { SessionStartedDeletionError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | delete-session', function () { context('when there are no certification courses', function () { it('should delete the session', async function () { // given - const sessionRepository = { delete: sinon.stub() }; + const sessionRepository = { remove: sinon.stub() }; const certificationCourseRepository = { findCertificationCoursesBySessionId: sinon.stub() }; certificationCourseRepository.findCertificationCoursesBySessionId.resolves([]); @@ -18,14 +18,14 @@ describe('Unit | UseCase | delete-session', function () { }); // then - expect(sessionRepository.delete).to.have.been.calledWithExactly(123); + expect(sessionRepository.remove).to.have.been.calledWithExactly(123); }); }); context('when there are certification courses', function () { it('should throw SessionStartedDeletionError error', async function () { // given - const sessionRepository = { delete: sinon.stub() }; + const sessionRepository = { remove: sinon.stub() }; const certificationCourseRepository = { findCertificationCoursesBySessionId: sinon.stub() }; certificationCourseRepository.findCertificationCoursesBySessionId.resolves([ domainBuilder.buildCertificationCourse({ sessionId: 123 }), @@ -40,7 +40,7 @@ describe('Unit | UseCase | delete-session', function () { // then expect(error).to.be.instanceOf(SessionStartedDeletionError); - expect(sessionRepository.delete).to.not.have.been.called; + expect(sessionRepository.remove).to.not.have.been.called; }); }); }); diff --git a/api/tests/unit/domain/usecases/delete-unassociated-badge_test.js b/api/tests/unit/domain/usecases/delete-unassociated-badge_test.js index 7def44fd7f8..a7c3bee85bd 100644 --- a/api/tests/unit/domain/usecases/delete-unassociated-badge_test.js +++ b/api/tests/unit/domain/usecases/delete-unassociated-badge_test.js @@ -1,10 +1,10 @@ -const { sinon, expect, catchErr } = require('../../../test-helper'); +import { sinon, expect, catchErr } from '../../../test-helper.js'; +import { deleteUnassociatedBadge } from '../../../../lib/domain/usecases/delete-unassociated-badge.js'; -const deleteUnassociatedBadge = require('../../../../lib/domain/usecases/delete-unassociated-badge'); -const { +import { AcquiredBadgeForbiddenDeletionError, CertificationBadgeForbiddenDeletionError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | delete-unassociated-badge', function () { let badgeId; @@ -14,7 +14,7 @@ describe('Unit | UseCase | delete-unassociated-badge', function () { badgeId = 'badgeId'; badgeRepository = { isAssociated: sinon.stub(), - delete: sinon.stub(), + remove: sinon.stub(), isRelatedToCertification: sinon.stub(), }; }); @@ -22,7 +22,7 @@ describe('Unit | UseCase | delete-unassociated-badge', function () { context('When the badge is not associated to a badge acquisition', function () { beforeEach(function () { badgeRepository.isAssociated.withArgs(badgeId).resolves(false); - badgeRepository.delete.withArgs(badgeId).resolves(true); + badgeRepository.remove.withArgs(badgeId).resolves(true); }); it('should delete the badge', async function () { @@ -57,7 +57,7 @@ describe('Unit | UseCase | delete-unassociated-badge', function () { context('When the badge is related to a certification', function () { beforeEach(function () { badgeRepository.isRelatedToCertification.withArgs(badgeId).resolves(true); - badgeRepository.delete.withArgs(badgeId).resolves(true); + badgeRepository.remove.withArgs(badgeId).resolves(true); }); it('should not delete the badge', async function () { @@ -75,7 +75,7 @@ describe('Unit | UseCase | delete-unassociated-badge', function () { context('When the badge is not related to a certification', function () { beforeEach(function () { badgeRepository.isRelatedToCertification.withArgs(badgeId).resolves(false); - badgeRepository.delete.withArgs(badgeId).resolves(true); + badgeRepository.remove.withArgs(badgeId).resolves(true); }); it('should delete the badge', async function () { diff --git a/api/tests/unit/domain/usecases/delete-unlinked-certification-candidate_test.js b/api/tests/unit/domain/usecases/delete-unlinked-certification-candidate_test.js index 6725be9feae..5cc56517bd7 100644 --- a/api/tests/unit/domain/usecases/delete-unlinked-certification-candidate_test.js +++ b/api/tests/unit/domain/usecases/delete-unlinked-certification-candidate_test.js @@ -1,7 +1,6 @@ -const { sinon, expect, catchErr } = require('../../../test-helper'); - -const deleteUnlinkedCertificationCandidate = require('../../../../lib/domain/usecases/delete-unlinked-certification-candidate'); -const { CertificationCandidateForbiddenDeletionError } = require('../../../../lib/domain/errors'); +import { sinon, expect, catchErr } from '../../../test-helper.js'; +import { deleteUnlinkedCertificationCandidate } from '../../../../lib/domain/usecases/delete-unlinked-certification-candidate.js'; +import { CertificationCandidateForbiddenDeletionError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | delete-unlinked-sertification-candidate', function () { let certificationCandidateId; @@ -11,14 +10,14 @@ describe('Unit | UseCase | delete-unlinked-sertification-candidate', function () certificationCandidateId = 'dummy certification candidate id'; certificationCandidateRepository = { isNotLinked: sinon.stub(), - delete: sinon.stub(), + remove: sinon.stub(), }; }); context('When the certification candidate is not linked to a user', function () { beforeEach(function () { certificationCandidateRepository.isNotLinked.withArgs(certificationCandidateId).resolves(true); - certificationCandidateRepository.delete.withArgs(certificationCandidateId).resolves(true); + certificationCandidateRepository.remove.withArgs(certificationCandidateId).resolves(true); }); it('should delete the certification candidate', async function () { diff --git a/api/tests/unit/domain/usecases/deneutralize-challenge_test.js b/api/tests/unit/domain/usecases/deneutralize-challenge_test.js index 0a4ef85e9a6..984143b5365 100644 --- a/api/tests/unit/domain/usecases/deneutralize-challenge_test.js +++ b/api/tests/unit/domain/usecases/deneutralize-challenge_test.js @@ -1,7 +1,7 @@ -const { sinon, expect, domainBuilder } = require('../../../test-helper'); -const CertificationAssessment = require('../../../../lib/domain/models/CertificationAssessment'); -const deneutralizeChallenge = require('../../../../lib/domain/usecases/deneutralize-challenge'); -const ChallengeDeneutralized = require('../../../../lib/domain/events/ChallengeDeneutralized'); +import { sinon, expect, domainBuilder } from '../../../test-helper.js'; +import { CertificationAssessment } from '../../../../lib/domain/models/CertificationAssessment.js'; +import { deneutralizeChallenge } from '../../../../lib/domain/usecases/deneutralize-challenge.js'; +import { ChallengeDeneutralized } from '../../../../lib/domain/events/ChallengeDeneutralized.js'; describe('Unit | UseCase | deneutralize-challenge', function () { it('deneutralizes a challenge by its recId', async function () { diff --git a/api/tests/unit/domain/usecases/disable-certification-center-membership_test.js b/api/tests/unit/domain/usecases/disable-certification-center-membership_test.js index ad53d85ba75..e1898179fc3 100644 --- a/api/tests/unit/domain/usecases/disable-certification-center-membership_test.js +++ b/api/tests/unit/domain/usecases/disable-certification-center-membership_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const disableCertificationCenterMembership = require('../../../../lib/domain/usecases/disable-certification-center-membership.js'); +import { expect, sinon } from '../../../test-helper.js'; +import { disableCertificationCenterMembership } from '../../../../lib/domain/usecases/disable-certification-center-membership.js'; describe('Unit | UseCase | disable-certification-center-membership', function () { let certificationCenterMembershipRepository; diff --git a/api/tests/unit/domain/usecases/disable-membership_test.js b/api/tests/unit/domain/usecases/disable-membership_test.js index 1ff9ebc7e9c..db6cce14319 100644 --- a/api/tests/unit/domain/usecases/disable-membership_test.js +++ b/api/tests/unit/domain/usecases/disable-membership_test.js @@ -1,6 +1,6 @@ -const { catchErr, expect, sinon } = require('../../../test-helper'); -const disableMembership = require('../../../../lib/domain/usecases/disable-membership.js'); -const { MembershipUpdateError } = require('../../../../lib/domain/errors'); +import { catchErr, expect, sinon } from '../../../test-helper.js'; +import { disableMembership } from '../../../../lib/domain/usecases/disable-membership.js'; +import { MembershipUpdateError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | disable-membership', function () { let membershipRepository; diff --git a/api/tests/unit/domain/usecases/dissociate-user-from-organization-learner_test.js b/api/tests/unit/domain/usecases/dissociate-user-from-organization-learner_test.js index 57278dccd30..0a5125cee27 100644 --- a/api/tests/unit/domain/usecases/dissociate-user-from-organization-learner_test.js +++ b/api/tests/unit/domain/usecases/dissociate-user-from-organization-learner_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const { OrganizationLearnerCannotBeDissociatedError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { OrganizationLearnerCannotBeDissociatedError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | dissociate-user-from-organization-learner', function () { const organizationId = 1; diff --git a/api/tests/unit/domain/usecases/end-assessment-by-supervisor_test.js b/api/tests/unit/domain/usecases/end-assessment-by-supervisor_test.js index c7586db6724..9d210cc8586 100644 --- a/api/tests/unit/domain/usecases/end-assessment-by-supervisor_test.js +++ b/api/tests/unit/domain/usecases/end-assessment-by-supervisor_test.js @@ -1,6 +1,6 @@ -const _ = require('lodash'); -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const endAssessmentBySupervisor = require('../../../../lib/domain/usecases/end-assessment-by-supervisor'); +import _ from 'lodash'; +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { endAssessmentBySupervisor } from '../../../../lib/domain/usecases/end-assessment-by-supervisor.js'; describe('Unit | UseCase | end-assessment-by-supervisor', function () { let assessmentRepository; diff --git a/api/tests/unit/domain/usecases/enroll-students-to-session_test.js b/api/tests/unit/domain/usecases/enroll-students-to-session_test.js index 4c926051bea..0c9c1afd63a 100644 --- a/api/tests/unit/domain/usecases/enroll-students-to-session_test.js +++ b/api/tests/unit/domain/usecases/enroll-students-to-session_test.js @@ -1,8 +1,7 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); - -const enrolStudentsToSession = require('../../../../lib/domain/usecases/enrol-students-to-session'); -const SCOCertificationCandidate = require('../../../../lib/domain/models/SCOCertificationCandidate'); -const { ForbiddenAccess, UnknownCountryForStudentEnrolmentError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { enrolStudentsToSession } from '../../../../lib/domain/usecases/enrol-students-to-session.js'; +import { SCOCertificationCandidate } from '../../../../lib/domain/models/SCOCertificationCandidate.js'; +import { ForbiddenAccess, UnknownCountryForStudentEnrolmentError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | enrol-students-to-session', function () { context('when referent is allowed to Pix Certif', function () { diff --git a/api/tests/unit/domain/usecases/finalize-session_test.js b/api/tests/unit/domain/usecases/finalize-session_test.js index d77005dc01f..5bb7bcdf131 100644 --- a/api/tests/unit/domain/usecases/finalize-session_test.js +++ b/api/tests/unit/domain/usecases/finalize-session_test.js @@ -1,14 +1,15 @@ -const { sinon, expect, catchErr, domainBuilder } = require('../../../test-helper'); +import { sinon, expect, catchErr, domainBuilder } from '../../../test-helper.js'; +import { finalizeSession } from '../../../../lib/domain/usecases/finalize-session.js'; -const finalizeSession = require('../../../../lib/domain/usecases/finalize-session'); -const { +import { SessionAlreadyFinalizedError, SessionWithoutStartedCertificationError, SessionWithAbortReasonOnCompletedCertificationCourseError, SessionWithMissingAbortReasonError, InvalidCertificationReportForFinalization, -} = require('../../../../lib/domain/errors'); -const SessionFinalized = require('../../../../lib/domain/events/SessionFinalized'); +} from '../../../../lib/domain/errors.js'; + +import { SessionFinalized } from '../../../../lib/domain/events/SessionFinalized.js'; describe('Unit | UseCase | finalize-session', function () { let sessionId; diff --git a/api/tests/unit/domain/usecases/find-all-tags_test.js b/api/tests/unit/domain/usecases/find-all-tags_test.js index 9683d74cf38..6d6b282623b 100644 --- a/api/tests/unit/domain/usecases/find-all-tags_test.js +++ b/api/tests/unit/domain/usecases/find-all-tags_test.js @@ -1,6 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); - -const findAllTags = require('../../../../lib/domain/usecases/find-all-tags'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { findAllTags } from '../../../../lib/domain/usecases/find-all-tags.js'; describe('Unit | UseCase | find-all-tags', function () { let tagRepository; diff --git a/api/tests/unit/domain/usecases/find-answer-by-assessment_test.js b/api/tests/unit/domain/usecases/find-answer-by-assessment_test.js index 62a2928c51c..703d76faa8a 100644 --- a/api/tests/unit/domain/usecases/find-answer-by-assessment_test.js +++ b/api/tests/unit/domain/usecases/find-answer-by-assessment_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const findAnswerByAssessment = require('../../../../lib/domain/usecases/find-answer-by-assessment'); -const { UserNotAuthorizedToAccessEntityError, EntityValidationError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { findAnswerByAssessment } from '../../../../lib/domain/usecases/find-answer-by-assessment.js'; +import { UserNotAuthorizedToAccessEntityError, EntityValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | find-answer-by-challenge-and-assessment', function () { const assessmentId = 123; diff --git a/api/tests/unit/domain/usecases/find-answer-by-challenge-and-assessment_test.js b/api/tests/unit/domain/usecases/find-answer-by-challenge-and-assessment_test.js index e295eb1fc43..b53a372cf09 100644 --- a/api/tests/unit/domain/usecases/find-answer-by-challenge-and-assessment_test.js +++ b/api/tests/unit/domain/usecases/find-answer-by-challenge-and-assessment_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const findAnswerByChallengeAndAssessment = require('../../../../lib/domain/usecases/find-answer-by-challenge-and-assessment'); +import { expect, sinon } from '../../../test-helper.js'; +import { findAnswerByChallengeAndAssessment } from '../../../../lib/domain/usecases/find-answer-by-challenge-and-assessment.js'; describe('Unit | UseCase | find-answer-by-challenge-and-assessment', function () { const challengeId = 'recChallenge'; diff --git a/api/tests/unit/domain/usecases/find-assessment-participation-result-list_test.js b/api/tests/unit/domain/usecases/find-assessment-participation-result-list_test.js index cdd5df6fa6e..474011be832 100644 --- a/api/tests/unit/domain/usecases/find-assessment-participation-result-list_test.js +++ b/api/tests/unit/domain/usecases/find-assessment-participation-result-list_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const findAssessmentParticipationResultList = require('../../../../lib/domain/usecases/find-assessment-participation-result-list'); +import { expect, sinon } from '../../../test-helper.js'; +import { findAssessmentParticipationResultList } from '../../../../lib/domain/usecases/find-assessment-participation-result-list.js'; describe('Unit | UseCase | find-assessment-participation-result-list', function () { it('return the assessmentParticipationResultMinimal list', async function () { diff --git a/api/tests/unit/domain/usecases/find-association-between-user-and-organization-learner_test.js b/api/tests/unit/domain/usecases/find-association-between-user-and-organization-learner_test.js index d87ea88ed3a..ed87602d78e 100644 --- a/api/tests/unit/domain/usecases/find-association-between-user-and-organization-learner_test.js +++ b/api/tests/unit/domain/usecases/find-association-between-user-and-organization-learner_test.js @@ -1,11 +1,12 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const findAssociationBetweenUserAndOrganizationLearner = require('../../../../lib/domain/usecases/find-association-between-user-and-organization-learner.js'); -const OrganizationLearner = require('../../../../lib/domain/models/OrganizationLearner'); -const { +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { findAssociationBetweenUserAndOrganizationLearner } from '../../../../lib/domain/usecases/find-association-between-user-and-organization-learner.js'; +import { OrganizationLearner } from '../../../../lib/domain/models/OrganizationLearner.js'; + +import { CampaignCodeError, UserNotAuthorizedToAccessEntityError, OrganizationLearnerDisabledError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | find-association-between-user-and-organization-learner', function () { let organizationLearnerReceivedStub; diff --git a/api/tests/unit/domain/usecases/find-campaign-participation-trainings_test.js b/api/tests/unit/domain/usecases/find-campaign-participation-trainings_test.js index 13ae61d6aa7..e838619b81e 100644 --- a/api/tests/unit/domain/usecases/find-campaign-participation-trainings_test.js +++ b/api/tests/unit/domain/usecases/find-campaign-participation-trainings_test.js @@ -1,6 +1,6 @@ -const { sinon, expect, domainBuilder, catchErr } = require('../../../test-helper'); -const findCampaignParticipationTrainings = require('../../../../lib/domain/usecases/find-campaign-participation-trainings.js'); -const { UserNotAuthorizedToFindTrainings } = require('../../../../lib/domain/errors'); +import { sinon, expect, domainBuilder, catchErr } from '../../../test-helper.js'; +import { findCampaignParticipationTrainings } from '../../../../lib/domain/usecases/find-campaign-participation-trainings.js'; +import { UserNotAuthorizedToFindTrainings } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | find-campaign-participation-trainings', function () { let campaignParticipationRepository; diff --git a/api/tests/unit/domain/usecases/find-campaign-participations-for-user-management_test.js b/api/tests/unit/domain/usecases/find-campaign-participations-for-user-management_test.js index e7d1ad1942d..e5d3db22b4a 100644 --- a/api/tests/unit/domain/usecases/find-campaign-participations-for-user-management_test.js +++ b/api/tests/unit/domain/usecases/find-campaign-participations-for-user-management_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const findCampaignParticipationsForUserManagement = require('../../../../lib/domain/usecases/find-campaign-participations-for-user-management'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { findCampaignParticipationsForUserManagement } from '../../../../lib/domain/usecases/find-campaign-participations-for-user-management.js'; describe('Unit | UseCase | findCampaignParticipationsForUserManagement', function () { const userId = 1; diff --git a/api/tests/unit/domain/usecases/find-campaign-profiles-collection-participation-summaries_test.js b/api/tests/unit/domain/usecases/find-campaign-profiles-collection-participation-summaries_test.js index dde9066bfc4..6f52a4ee94e 100644 --- a/api/tests/unit/domain/usecases/find-campaign-profiles-collection-participation-summaries_test.js +++ b/api/tests/unit/domain/usecases/find-campaign-profiles-collection-participation-summaries_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const findCampaignProfilesCollectionParticipationSummaries = require('../../../../lib/domain/usecases/find-campaign-profiles-collection-participation-summaries'); -const CampaignProfilesCollectionParticipationSummary = require('../../../../lib/domain/read-models/CampaignProfilesCollectionParticipationSummary'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { findCampaignProfilesCollectionParticipationSummaries } from '../../../../lib/domain/usecases/find-campaign-profiles-collection-participation-summaries.js'; +import { CampaignProfilesCollectionParticipationSummary } from '../../../../lib/domain/read-models/CampaignProfilesCollectionParticipationSummary.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | find-campaign-profiles-collection-participation-summaries', function () { // TODO: Fix this the next time the file is edited. diff --git a/api/tests/unit/domain/usecases/find-certification-attestations-for-division_test.js b/api/tests/unit/domain/usecases/find-certification-attestations-for-division_test.js index eec19d9726a..89ac499ba09 100644 --- a/api/tests/unit/domain/usecases/find-certification-attestations-for-division_test.js +++ b/api/tests/unit/domain/usecases/find-certification-attestations-for-division_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const findCertificationAttestationsForDivision = require('../../../../lib/domain/usecases/certificate/find-certification-attestations-for-division'); -const { NoCertificationAttestationForDivisionError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { findCertificationAttestationsForDivision } from '../../../../lib/domain/usecases/certificate/find-certification-attestations-for-division.js'; +import { NoCertificationAttestationForDivisionError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | find-certification-attestations-for-division', function () { const certificateRepository = { diff --git a/api/tests/unit/domain/usecases/find-certification-center-memberships-by-certification-center_test.js b/api/tests/unit/domain/usecases/find-certification-center-memberships-by-certification-center_test.js index 2ce9b0d4ff5..12e668637e0 100644 --- a/api/tests/unit/domain/usecases/find-certification-center-memberships-by-certification-center_test.js +++ b/api/tests/unit/domain/usecases/find-certification-center-memberships-by-certification-center_test.js @@ -1,6 +1,5 @@ -const { domainBuilder, expect, sinon } = require('../../../test-helper'); - -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { domainBuilder, expect, sinon } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | UseCase | find-certification-center-memberships-by-certification-center', function () { it('should result certification-center-memberships by certification center id', async function () { diff --git a/api/tests/unit/domain/usecases/find-certification-center-memberships-by-user_test.js b/api/tests/unit/domain/usecases/find-certification-center-memberships-by-user_test.js index 83a0caca2c5..c6aaabfe969 100644 --- a/api/tests/unit/domain/usecases/find-certification-center-memberships-by-user_test.js +++ b/api/tests/unit/domain/usecases/find-certification-center-memberships-by-user_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const findCertificationCenterMembershipsByUser = require('../../../../lib/domain/usecases/find-certification-center-memberships-by-user'); +import { expect, sinon } from '../../../test-helper.js'; +import { findCertificationCenterMembershipsByUser } from '../../../../lib/domain/usecases/find-certification-center-memberships-by-user.js'; describe('Unit | UseCase | find-certification-center-memberships-by-user', function () { let certificationCenterMembershipRepository; diff --git a/api/tests/unit/domain/usecases/find-competence-evaluations-by-assessment_test.js b/api/tests/unit/domain/usecases/find-competence-evaluations-by-assessment_test.js index c6b4aa62cd3..ab4c2137dd7 100644 --- a/api/tests/unit/domain/usecases/find-competence-evaluations-by-assessment_test.js +++ b/api/tests/unit/domain/usecases/find-competence-evaluations-by-assessment_test.js @@ -1,7 +1,7 @@ -const _ = require('lodash'); -const { expect, sinon, catchErr } = require('../../../test-helper'); -const findCompetenceEvaluationsByAssessment = require('../../../../lib/domain/usecases/find-competence-evaluations-by-assessment'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); +import _ from 'lodash'; +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { findCompetenceEvaluationsByAssessment } from '../../../../lib/domain/usecases/find-competence-evaluations-by-assessment.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | find-competence-evaluations-by-assessment', function () { const userId = 1; diff --git a/api/tests/unit/domain/usecases/find-complementary-certifications_test.js b/api/tests/unit/domain/usecases/find-complementary-certifications_test.js index ccc838b6eed..a52371674b3 100644 --- a/api/tests/unit/domain/usecases/find-complementary-certifications_test.js +++ b/api/tests/unit/domain/usecases/find-complementary-certifications_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder, sinon } = require('../../../test-helper'); -const findComplementaryCertifications = require('../../../../lib/domain/usecases/find-complementary-certifications'); +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; +import { findComplementaryCertifications } from '../../../../lib/domain/usecases/find-complementary-certifications.js'; describe('Unit | UseCase | find-complementary-certifications', function () { let complementaryCertificationRepository; diff --git a/api/tests/unit/domain/usecases/find-countries_test.js b/api/tests/unit/domain/usecases/find-countries_test.js index 48c03a8784a..e486079f70c 100644 --- a/api/tests/unit/domain/usecases/find-countries_test.js +++ b/api/tests/unit/domain/usecases/find-countries_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder, sinon } = require('../../../test-helper'); -const findCountries = require('../../../../lib/domain/usecases/find-countries'); +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; +import { findCountries } from '../../../../lib/domain/usecases/find-countries.js'; describe('Unit | UseCase | find-country', function () { let countryRepository; diff --git a/api/tests/unit/domain/usecases/find-divisions-by-certification-center_test.js b/api/tests/unit/domain/usecases/find-divisions-by-certification-center_test.js index 5baa075a04d..39c77f78ff2 100644 --- a/api/tests/unit/domain/usecases/find-divisions-by-certification-center_test.js +++ b/api/tests/unit/domain/usecases/find-divisions-by-certification-center_test.js @@ -1,6 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); - -const findDivisionsByCertificationCenter = require('../../../../lib/domain/usecases/find-divisions-by-certification-center'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { findDivisionsByCertificationCenter } from '../../../../lib/domain/usecases/find-divisions-by-certification-center.js'; describe('Unit | UseCase | find-divisions-by-certification-center', function () { let organization; diff --git a/api/tests/unit/domain/usecases/find-divisions-by-organization_test.js b/api/tests/unit/domain/usecases/find-divisions-by-organization_test.js index 84df1f20283..a0b1848191b 100644 --- a/api/tests/unit/domain/usecases/find-divisions-by-organization_test.js +++ b/api/tests/unit/domain/usecases/find-divisions-by-organization_test.js @@ -1,6 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); - -const findDivisionsByOrganization = require('../../../../lib/domain/usecases/find-divisions-by-organization'); +import { expect, sinon } from '../../../test-helper.js'; +import { findDivisionsByOrganization } from '../../../../lib/domain/usecases/find-divisions-by-organization.js'; describe('Unit | UseCase | find-divisions-by-organization', function () { describe('when user has access to organization', function () { diff --git a/api/tests/unit/domain/usecases/find-finalized-sessions-to-publish_test.js b/api/tests/unit/domain/usecases/find-finalized-sessions-to-publish_test.js index 3bcb5686ea2..144ec6b44fd 100644 --- a/api/tests/unit/domain/usecases/find-finalized-sessions-to-publish_test.js +++ b/api/tests/unit/domain/usecases/find-finalized-sessions-to-publish_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const findFinalizedSessionsToPublish = require('../../../../lib/domain/usecases/find-finalized-sessions-to-publish'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { findFinalizedSessionsToPublish } from '../../../../lib/domain/usecases/find-finalized-sessions-to-publish.js'; describe('Unit | UseCase | findFinalizedSessionsToPublish', function () { let finalizedSessionRepository; diff --git a/api/tests/unit/domain/usecases/find-finalized-sessions-with-required-action_test.js b/api/tests/unit/domain/usecases/find-finalized-sessions-with-required-action_test.js index c9a5726e1e4..aa0e96d6d98 100644 --- a/api/tests/unit/domain/usecases/find-finalized-sessions-with-required-action_test.js +++ b/api/tests/unit/domain/usecases/find-finalized-sessions-with-required-action_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const findFinalizedSessionsWithRequiredAction = require('../../../../lib/domain/usecases/find-finalized-sessions-with-required-action'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { findFinalizedSessionsWithRequiredAction } from '../../../../lib/domain/usecases/find-finalized-sessions-with-required-action.js'; describe('Unit | UseCase | findFinalizedSessionsWithRequiredAction', function () { context('when there are finalized sessions with required actions', function () { diff --git a/api/tests/unit/domain/usecases/find-groups-by-organization_test.js b/api/tests/unit/domain/usecases/find-groups-by-organization_test.js index 2c1ba8657f8..100dc216947 100644 --- a/api/tests/unit/domain/usecases/find-groups-by-organization_test.js +++ b/api/tests/unit/domain/usecases/find-groups-by-organization_test.js @@ -1,6 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); - -const findDivisionsByOrganization = require('../../../../lib/domain/usecases/find-groups-by-organization'); +import { expect, sinon } from '../../../test-helper.js'; +import { findGroupsByOrganization } from '../../../../lib/domain/usecases/find-groups-by-organization.js'; describe('Unit | UseCase | find-groups-by-organization', function () { it('should return all groups', async function () { @@ -14,7 +13,7 @@ describe('Unit | UseCase | find-groups-by-organization', function () { .resolves([{ name: '3a' }, { name: '3b' }, { name: '5c' }]); // when - const groups = await findDivisionsByOrganization({ + const groups = await findGroupsByOrganization({ organizationId, groupRepository, }); diff --git a/api/tests/unit/domain/usecases/find-latest-ongoing-user-campaign-participation_test.js b/api/tests/unit/domain/usecases/find-latest-ongoing-user-campaign-participation_test.js index 3094cb5982d..1f0dd7ac11c 100644 --- a/api/tests/unit/domain/usecases/find-latest-ongoing-user-campaign-participation_test.js +++ b/api/tests/unit/domain/usecases/find-latest-ongoing-user-campaign-participation_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const findCampaignParticipationsRelatedToUser = require('../../../../lib/domain/usecases/find-latest-ongoing-user-campaign-participations'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { findLatestOngoingUserCampaignParticipations as findCampaignParticipationsRelatedToUser } from '../../../../lib/domain/usecases/find-latest-ongoing-user-campaign-participations.js'; describe('Unit | UseCase | find-latest-user-campaign-participations', function () { let userId; diff --git a/api/tests/unit/domain/usecases/find-organization-places-lot_test.js b/api/tests/unit/domain/usecases/find-organization-places-lot_test.js index 095ea86d3a9..b48bc8691d1 100644 --- a/api/tests/unit/domain/usecases/find-organization-places-lot_test.js +++ b/api/tests/unit/domain/usecases/find-organization-places-lot_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const findOrganizationPlaceLot = require('../../../../lib/domain/usecases/find-organization-places-lot'); +import { expect, sinon } from '../../../test-helper.js'; +import { findOrganizationPlacesLot as findOrganizationPlaceLot } from '../../../../lib/domain/usecases/find-organization-places-lot.js'; describe('Unit | Domain | Use Cases | find-organization-places', function () { it('should get the organization places', async function () { diff --git a/api/tests/unit/domain/usecases/find-organization-target-profile-summaries-for-admin_test.js b/api/tests/unit/domain/usecases/find-organization-target-profile-summaries-for-admin_test.js index a19b93ee79a..dd56ae4154b 100644 --- a/api/tests/unit/domain/usecases/find-organization-target-profile-summaries-for-admin_test.js +++ b/api/tests/unit/domain/usecases/find-organization-target-profile-summaries-for-admin_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | UseCase | find-organization-target-profile-summaries-for-admin', function () { it('should return the result of the repository call', async function () { diff --git a/api/tests/unit/domain/usecases/find-paginated-campaign-managments_test .js b/api/tests/unit/domain/usecases/find-paginated-campaign-managments_test .js index 566d043d33e..aa8fd7fe471 100644 --- a/api/tests/unit/domain/usecases/find-paginated-campaign-managments_test .js +++ b/api/tests/unit/domain/usecases/find-paginated-campaign-managments_test .js @@ -1,6 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); - -const findPaginatedCampaignManagements = require('../../../../lib/domain/usecases/find-paginated-campaign-managements'); +import { expect, sinon } from '../../../test-helper.js'; +import { findPaginatedCampaignManagements } from '../../../../lib/domain/usecases/find-paginated-campaign-managements.js'; describe('Unit | Domain | Use Cases | find-paginated-campaign-managments', function () { describe('#findPaginatedCampaignManagement', function () { diff --git a/api/tests/unit/domain/usecases/find-paginated-certification-center-session-summaries_test.js b/api/tests/unit/domain/usecases/find-paginated-certification-center-session-summaries_test.js index 33cac9c3cb1..db0dc4d1294 100644 --- a/api/tests/unit/domain/usecases/find-paginated-certification-center-session-summaries_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-certification-center-session-summaries_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const { ForbiddenAccess } = require('../../../../lib/domain/errors'); -const findPaginatedCertificationCenterSessionSummaries = require('../../../../lib/domain/usecases/find-paginated-certification-center-session-summaries'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { ForbiddenAccess } from '../../../../lib/domain/errors.js'; +import { findPaginatedCertificationCenterSessionSummaries } from '../../../../lib/domain/usecases/find-paginated-certification-center-session-summaries.js'; describe('Unit | Domain | Use Cases | find-paginated-certification-center-session-summaries', function () { const sessionSummaryRepository = { diff --git a/api/tests/unit/domain/usecases/find-paginated-filtered-certification-centers_test.js b/api/tests/unit/domain/usecases/find-paginated-filtered-certification-centers_test.js index 7e1b7b314e3..afe5ba98191 100644 --- a/api/tests/unit/domain/usecases/find-paginated-filtered-certification-centers_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-filtered-certification-centers_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const CertificationCenter = require('../../../../lib/domain/models/CertificationCenter'); +import { expect, sinon } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { CertificationCenter } from '../../../../lib/domain/models/CertificationCenter.js'; describe('Unit | UseCase | find-paginated-filtered-certification-centers', function () { it('should result certification-centers with filtering and pagination', async function () { diff --git a/api/tests/unit/domain/usecases/find-paginated-filtered-organization-campaigns_test.js b/api/tests/unit/domain/usecases/find-paginated-filtered-organization-campaigns_test.js index 893bf9a0106..c5d96d49b2f 100644 --- a/api/tests/unit/domain/usecases/find-paginated-filtered-organization-campaigns_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-filtered-organization-campaigns_test.js @@ -1,6 +1,5 @@ -const { expect, domainBuilder, sinon } = require('../../../test-helper'); - -const findPaginatedFilteredOrganizationCampaigns = require('../../../../lib/domain/usecases/find-paginated-filtered-organization-campaigns'); +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; +import { findPaginatedFilteredOrganizationCampaigns } from '../../../../lib/domain/usecases/find-paginated-filtered-organization-campaigns.js'; describe('Unit | Domain | Use Cases | find-paginated-filtered-organization-campaigns', function () { const campaignReportRepository = { findPaginatedFilteredByOrganizationId: () => undefined }; diff --git a/api/tests/unit/domain/usecases/find-paginated-filtered-organization-memberships_test.js b/api/tests/unit/domain/usecases/find-paginated-filtered-organization-memberships_test.js index 779b01782eb..2f7e6579133 100644 --- a/api/tests/unit/domain/usecases/find-paginated-filtered-organization-memberships_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-filtered-organization-memberships_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const Memberships = require('../../../../lib/domain/models/Membership'); +import { expect, sinon } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { Membership as Memberships } from '../../../../lib/domain/models/Membership.js'; describe('Unit | UseCase | find-paginated-filtered-organizations-memberships', function () { it('should result organizations with filtering and pagination', async function () { diff --git a/api/tests/unit/domain/usecases/find-paginated-filtered-organizations_test.js b/api/tests/unit/domain/usecases/find-paginated-filtered-organizations_test.js index abdcf0b9318..5e39eec1063 100644 --- a/api/tests/unit/domain/usecases/find-paginated-filtered-organizations_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-filtered-organizations_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const Organization = require('../../../../lib/domain/models/Organization'); +import { expect, sinon } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { Organization } from '../../../../lib/domain/models/Organization.js'; describe('Unit | UseCase | find-paginated-filtered-organizations', function () { it('should result organizations with filtering and pagination', async function () { diff --git a/api/tests/unit/domain/usecases/find-paginated-filtered-sco-participants_test.js b/api/tests/unit/domain/usecases/find-paginated-filtered-sco-participants_test.js index f9bfee24b69..3180f456a8f 100644 --- a/api/tests/unit/domain/usecases/find-paginated-filtered-sco-participants_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-filtered-sco-participants_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const findPaginatedFilteredScoParticipants = require('../../../../lib/domain/usecases/find-paginated-filtered-sco-participants'); +import { expect, sinon } from '../../../test-helper.js'; +import { findPaginatedFilteredScoParticipants } from '../../../../lib/domain/usecases/find-paginated-filtered-sco-participants.js'; describe('Unit | UseCase | findPaginatedFilteredScoParticipants', function () { let scoOrganizationParticipantRepository; diff --git a/api/tests/unit/domain/usecases/find-paginated-filtered-sup-participants_test.js b/api/tests/unit/domain/usecases/find-paginated-filtered-sup-participants_test.js index 03963c14b79..56f25489405 100644 --- a/api/tests/unit/domain/usecases/find-paginated-filtered-sup-participants_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-filtered-sup-participants_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const findPaginatedFilteredSupParticipants = require('../../../../lib/domain/usecases/find-paginated-filtered-sup-participants'); +import { expect, sinon } from '../../../test-helper.js'; +import { findPaginatedFilteredSupParticipants } from '../../../../lib/domain/usecases/find-paginated-filtered-sup-participants.js'; describe('Unit | UseCase | findPaginatedFilteredSupParticipants', function () { let supOrganizationParticipantRepository; diff --git a/api/tests/unit/domain/usecases/find-paginated-filtered-target-profile-summaries-for-admin_test.js b/api/tests/unit/domain/usecases/find-paginated-filtered-target-profile-summaries-for-admin_test.js index 7114c0b459c..fa1604a29b3 100644 --- a/api/tests/unit/domain/usecases/find-paginated-filtered-target-profile-summaries-for-admin_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-filtered-target-profile-summaries-for-admin_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | UseCase | find-paginated-filtered-target-profile-summaries-for-admin', function () { it('should return the result of the repository call', async function () { diff --git a/api/tests/unit/domain/usecases/find-paginated-filtered-tutorials_test.js b/api/tests/unit/domain/usecases/find-paginated-filtered-tutorials_test.js index 9bd09d49741..275c89339a1 100644 --- a/api/tests/unit/domain/usecases/find-paginated-filtered-tutorials_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-filtered-tutorials_test.js @@ -1,6 +1,6 @@ -const { sinon, expect } = require('../../../test-helper'); -const findPaginatedFilteredTutorials = require('../../../../lib/domain/usecases/find-paginated-filtered-tutorials'); -const Tutorial = require('../../../../lib/domain/models/Tutorial'); +import { sinon, expect } from '../../../test-helper.js'; +import { findPaginatedFilteredTutorials } from '../../../../lib/domain/usecases/find-paginated-filtered-tutorials.js'; +import { Tutorial } from '../../../../lib/domain/models/Tutorial.js'; describe('Unit | UseCase | find-paginated-filtered-tutorials', function () { let tutorialRepository; diff --git a/api/tests/unit/domain/usecases/find-paginated-filtered-users_test.js b/api/tests/unit/domain/usecases/find-paginated-filtered-users_test.js index 461c0599e42..a8917c9b04f 100644 --- a/api/tests/unit/domain/usecases/find-paginated-filtered-users_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-filtered-users_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const User = require('../../../../lib/domain/models/User'); +import { expect, sinon } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { User } from '../../../../lib/domain/models/User.js'; describe('Unit | UseCase | find-paginated-filtered-users', function () { it('should search users with filtering and pagination', async function () { diff --git a/api/tests/unit/domain/usecases/find-paginated-participations-for-campaign-management_test.js b/api/tests/unit/domain/usecases/find-paginated-participations-for-campaign-management_test.js index d09821f90c3..4b8925ddd7f 100644 --- a/api/tests/unit/domain/usecases/find-paginated-participations-for-campaign-management_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-participations-for-campaign-management_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const findPaginatedParticipationsForCampaignManagement = require('../../../../lib/domain/usecases/find-paginated-participations-for-campaign-management'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { findPaginatedParticipationsForCampaignManagement } from '../../../../lib/domain/usecases/find-paginated-participations-for-campaign-management.js'; describe('Unit | UseCase | findPaginatedParticipationsForCampaignManagement', function () { const campaignId = 1; diff --git a/api/tests/unit/domain/usecases/find-paginated-target-profile-training-summaries_test.js b/api/tests/unit/domain/usecases/find-paginated-target-profile-training-summaries_test.js index 0e5aaa3bf1b..ba102afc1cf 100644 --- a/api/tests/unit/domain/usecases/find-paginated-target-profile-training-summaries_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-target-profile-training-summaries_test.js @@ -1,5 +1,5 @@ -const { sinon, expect } = require('../../../test-helper'); -const findTargetProfileSummariesForTraining = require('../../../../lib/domain/usecases/find-paginated-target-profile-training-summaries'); +import { sinon, expect } from '../../../test-helper.js'; +import { findPaginatedTargetProfileTrainingSummaries as findPaginatedTargetProfileTrainings } from '../../../../lib/domain/usecases/find-paginated-target-profile-training-summaries.js'; describe('Unit | UseCase | findPaginatedTargetProfileTrainingSummaries', function () { it('should call the repository with the right arguments and return summaries', async function () { @@ -13,7 +13,7 @@ describe('Unit | UseCase | findPaginatedTargetProfileTrainingSummaries', functio trainingRepository.findPaginatedSummariesByTargetProfileId.resolves(response); // when - const result = await findTargetProfileSummariesForTraining({ + const result = await findPaginatedTargetProfileTrainings({ targetProfileId, page, trainingRepository, diff --git a/api/tests/unit/domain/usecases/find-paginated-trainings-summary_test.js b/api/tests/unit/domain/usecases/find-paginated-trainings-summary_test.js index 8b4a760591d..bfc9ae10af6 100644 --- a/api/tests/unit/domain/usecases/find-paginated-trainings-summary_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-trainings-summary_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const findPaginatedTrainingSummaries = require('../../../../lib/domain/usecases/find-paginated-training-summaries'); +import { expect, sinon } from '../../../test-helper.js'; +import { findPaginatedTrainingSummaries } from '../../../../lib/domain/usecases/find-paginated-training-summaries.js'; describe('Unit | UseCase | find-paginated-training-summaries', function () { it('should find filtered training summaries with pagination', async function () { diff --git a/api/tests/unit/domain/usecases/find-paginated-user-recommended-trainings_test.js b/api/tests/unit/domain/usecases/find-paginated-user-recommended-trainings_test.js index 644715a375d..a528b74ac91 100644 --- a/api/tests/unit/domain/usecases/find-paginated-user-recommended-trainings_test.js +++ b/api/tests/unit/domain/usecases/find-paginated-user-recommended-trainings_test.js @@ -1,5 +1,5 @@ -const { sinon, expect } = require('../../../test-helper'); -const findPaginatedUserRecommendedTrainings = require('../../../../lib/domain/usecases/find-paginated-user-recommended-trainings'); +import { sinon, expect } from '../../../test-helper.js'; +import { findPaginatedUserRecommendedTrainings } from '../../../../lib/domain/usecases/find-paginated-user-recommended-trainings.js'; describe('Unit | UseCase | find-user-recommended-trainings', function () { it('should return paginated recommended trainings', async function () { diff --git a/api/tests/unit/domain/usecases/find-pending-organization-invitations_test.js b/api/tests/unit/domain/usecases/find-pending-organization-invitations_test.js index 7051367c248..f30306c5c14 100644 --- a/api/tests/unit/domain/usecases/find-pending-organization-invitations_test.js +++ b/api/tests/unit/domain/usecases/find-pending-organization-invitations_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const findPendingOrganizationInvitations = require('../../../../lib/domain/usecases/find-pending-organization-invitations'); -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { findPendingOrganizationInvitations } from '../../../../lib/domain/usecases/find-pending-organization-invitations.js'; +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; describe('Unit | UseCase | find-pending-organization-invitations', function () { it('should succeed', async function () { diff --git a/api/tests/unit/domain/usecases/find-students-for-enrolment_test.js b/api/tests/unit/domain/usecases/find-students-for-enrolment_test.js index d082a9629ac..9c1fdf8507b 100644 --- a/api/tests/unit/domain/usecases/find-students-for-enrolment_test.js +++ b/api/tests/unit/domain/usecases/find-students-for-enrolment_test.js @@ -1,9 +1,8 @@ -const _ = require('lodash'); -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const StudentForEnrolment = require('../../../../lib/domain/read-models/StudentForEnrolment'); - -const findStudentsForEnrolment = require('../../../../lib/domain/usecases/find-students-for-enrolment'); +import _ from 'lodash'; +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { StudentForEnrolment } from '../../../../lib/domain/read-models/StudentForEnrolment.js'; +import { findStudentsForEnrolment } from '../../../../lib/domain/usecases/find-students-for-enrolment.js'; describe('Unit | UseCase | find-students-for-enrolment', function () { const certificationCenterId = 1; diff --git a/api/tests/unit/domain/usecases/find-target-profile-summaries-for-training_test.js b/api/tests/unit/domain/usecases/find-target-profile-summaries-for-training_test.js index b93fe11629f..c2a8840e977 100644 --- a/api/tests/unit/domain/usecases/find-target-profile-summaries-for-training_test.js +++ b/api/tests/unit/domain/usecases/find-target-profile-summaries-for-training_test.js @@ -1,5 +1,5 @@ -const { sinon, expect } = require('../../../test-helper'); -const findTargetProfileSummariesForTraining = require('../../../../lib/domain/usecases/find-target-profile-summaries-for-training'); +import { sinon, expect } from '../../../test-helper.js'; +import { findTargetProfileSummariesForTraining } from '../../../../lib/domain/usecases/find-target-profile-summaries-for-training.js'; describe('Unit | UseCase | find-target-profile-summaries-for-training', function () { it('should call the repository with the right arguments and return summaries', async function () { diff --git a/api/tests/unit/domain/usecases/find-tutorials_test.js b/api/tests/unit/domain/usecases/find-tutorials_test.js index 274155c1504..68eaa1ec5fc 100644 --- a/api/tests/unit/domain/usecases/find-tutorials_test.js +++ b/api/tests/unit/domain/usecases/find-tutorials_test.js @@ -1,8 +1,8 @@ -const { sinon, expect, domainBuilder } = require('../../../test-helper'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const Scorecard = require('../../../../lib/domain/models/Scorecard'); -const findTutorials = require('../../../../lib/domain/usecases/find-tutorials'); +import { sinon, expect, domainBuilder } from '../../../test-helper.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { Scorecard } from '../../../../lib/domain/models/Scorecard.js'; +import { findTutorials } from '../../../../lib/domain/usecases/find-tutorials.js'; describe('Unit | UseCase | find-tutorials', function () { let authenticatedUserId; diff --git a/api/tests/unit/domain/usecases/find-user-authentication-methods.js b/api/tests/unit/domain/usecases/find-user-authentication-methods.js index 780194f03b2..b716c2ef0c3 100644 --- a/api/tests/unit/domain/usecases/find-user-authentication-methods.js +++ b/api/tests/unit/domain/usecases/find-user-authentication-methods.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const findUserAuthenticationMethods = require('../../../../lib/domain/usecases/find-user-authentication-methods'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { findUserAuthenticationMethods } from '../../../../lib/domain/usecases/find-user-authentication-methods.js'; describe('Unit | UseCase | find-user-authentication-methods', function () { it('should find user authentication methods', async function () { diff --git a/api/tests/unit/domain/usecases/find-user-campaign-participation-overviews_test.js b/api/tests/unit/domain/usecases/find-user-campaign-participation-overviews_test.js index 3dcbfe718fb..99d3525a540 100644 --- a/api/tests/unit/domain/usecases/find-user-campaign-participation-overviews_test.js +++ b/api/tests/unit/domain/usecases/find-user-campaign-participation-overviews_test.js @@ -1,5 +1,5 @@ -const { sinon } = require('../../../test-helper'); -const findUserCampaignParticipationOverviews = require('../../../../lib/domain/usecases/find-user-campaign-participation-overviews'); +import { sinon } from '../../../test-helper.js'; +import { findUserCampaignParticipationOverviews } from '../../../../lib/domain/usecases/find-user-campaign-participation-overviews.js'; describe('Unit | UseCase | find-user-campaign-participation-overviews', function () { let campaignParticipationOverviewRepository; diff --git a/api/tests/unit/domain/usecases/find-user-for-oidc-reconciliation_test.js b/api/tests/unit/domain/usecases/find-user-for-oidc-reconciliation_test.js index bfa6b213b76..ecb2e71080a 100644 --- a/api/tests/unit/domain/usecases/find-user-for-oidc-reconciliation_test.js +++ b/api/tests/unit/domain/usecases/find-user-for-oidc-reconciliation_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const findUserForOidcReconciliation = require('../../../../lib/domain/usecases/find-user-for-oidc-reconciliation'); -const { AuthenticationKeyExpired, DifferentExternalIdentifierError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { findUserForOidcReconciliation } from '../../../../lib/domain/usecases/find-user-for-oidc-reconciliation.js'; +import { AuthenticationKeyExpired, DifferentExternalIdentifierError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | find-user-for-oidc-reconciliation', function () { let authenticationMethodRepository, userRepository, pixAuthenticationService, authenticationSessionService; diff --git a/api/tests/unit/domain/usecases/find-user-organizations-for-admin_test.js b/api/tests/unit/domain/usecases/find-user-organizations-for-admin_test.js index 4fe87cacfad..b76704ffe64 100644 --- a/api/tests/unit/domain/usecases/find-user-organizations-for-admin_test.js +++ b/api/tests/unit/domain/usecases/find-user-organizations-for-admin_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const findUserOrganizationsForAdmin = require('../../../../lib/domain/usecases/find-user-organizations-for-admin'); +import { expect, sinon } from '../../../test-helper.js'; +import { findUserOrganizationsForAdmin } from '../../../../lib/domain/usecases/find-user-organizations-for-admin.js'; describe('Unit | UseCase | findUserOrganizationsForAdmin', function () { it('should fetch user’s organization memberships', async function () { diff --git a/api/tests/unit/domain/usecases/find-user-private-certificates_test.js b/api/tests/unit/domain/usecases/find-user-private-certificates_test.js index faa10be7cb5..282f18d2c1b 100644 --- a/api/tests/unit/domain/usecases/find-user-private-certificates_test.js +++ b/api/tests/unit/domain/usecases/find-user-private-certificates_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const findUserPrivateCertificates = require('../../../../lib/domain/usecases/find-user-private-certificates'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { findUserPrivateCertificates } from '../../../../lib/domain/usecases/find-user-private-certificates.js'; describe('Unit | UseCase | find-user-private-certificates', function () { const certificateRepository = {}; diff --git a/api/tests/unit/domain/usecases/flag-session-results-as-sent-to-prescriber_test.js b/api/tests/unit/domain/usecases/flag-session-results-as-sent-to-prescriber_test.js index 0534e1f73c5..7f5b268e3f6 100644 --- a/api/tests/unit/domain/usecases/flag-session-results-as-sent-to-prescriber_test.js +++ b/api/tests/unit/domain/usecases/flag-session-results-as-sent-to-prescriber_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const flagSessionResultsAsSentToPrescriber = require('../../../../lib/domain/usecases/flag-session-results-as-sent-to-prescriber'); -const Session = require('../../../../lib/domain/models/Session'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { flagSessionResultsAsSentToPrescriber } from '../../../../lib/domain/usecases/flag-session-results-as-sent-to-prescriber.js'; +import { Session } from '../../../../lib/domain/models/Session.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | flag-session-results-as-sent-to-prescriber', function () { let sessionId; diff --git a/api/tests/unit/domain/usecases/generate-username-with-temporary-password_test.js b/api/tests/unit/domain/usecases/generate-username-with-temporary-password_test.js index bf3392c3260..a3aa032d43c 100644 --- a/api/tests/unit/domain/usecases/generate-username-with-temporary-password_test.js +++ b/api/tests/unit/domain/usecases/generate-username-with-temporary-password_test.js @@ -1,8 +1,6 @@ -const { sinon, expect, catchErr, domainBuilder } = require('../../../test-helper'); - -const { UserNotAuthorizedToGenerateUsernamePasswordError } = require('../../../../lib/domain/errors'); - -const generateUsernameWithTemporaryPassword = require('../../../../lib/domain/usecases/generate-username-with-temporary-password.js'); +import { sinon, expect, catchErr, domainBuilder } from '../../../test-helper.js'; +import { UserNotAuthorizedToGenerateUsernamePasswordError } from '../../../../lib/domain/errors.js'; +import { generateUsernameWithTemporaryPassword } from '../../../../lib/domain/usecases/generate-username-with-temporary-password.js'; describe('Unit | UseCase | generate-username-with-temporary-password', function () { const expectedUsername = 'john.harry0207'; diff --git a/api/tests/unit/domain/usecases/generate-username_test.js b/api/tests/unit/domain/usecases/generate-username_test.js index 21eb5554e8d..077ea9cf68d 100644 --- a/api/tests/unit/domain/usecases/generate-username_test.js +++ b/api/tests/unit/domain/usecases/generate-username_test.js @@ -1,12 +1,14 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const { generateUsername } = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { Student } from '../../../../lib/domain/models/Student.js'; -const Student = require('../../../../lib/domain/models/Student'); -const { +import { CampaignCodeError, OrganizationLearnerNotFound, OrganizationLearnerAlreadyLinkedToUserError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; + +const { generateUsername } = usecases; describe('Unit | UseCase | generate-username', function () { const organizationId = 1; diff --git a/api/tests/unit/domain/usecases/get-admin-member-details_test.js b/api/tests/unit/domain/usecases/get-admin-member-details_test.js index 0a07f4deaac..828e90749a7 100644 --- a/api/tests/unit/domain/usecases/get-admin-member-details_test.js +++ b/api/tests/unit/domain/usecases/get-admin-member-details_test.js @@ -1,6 +1,6 @@ -const { catchErr, expect, sinon, domainBuilder } = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const getAdminMemberDetails = require('../../../../lib/domain/usecases/get-admin-member-details'); +import { catchErr, expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { getAdminMemberDetails } from '../../../../lib/domain/usecases/get-admin-member-details.js'; describe('Unit | UseCase | get-admin-member-details', function () { context('when it exists', function () { diff --git a/api/tests/unit/domain/usecases/get-admin-members_test.js b/api/tests/unit/domain/usecases/get-admin-members_test.js index 2214af80133..9dbe2117212 100644 --- a/api/tests/unit/domain/usecases/get-admin-members_test.js +++ b/api/tests/unit/domain/usecases/get-admin-members_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const getAdminMembers = require('../../../../lib/domain/usecases/get-admin-members'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getAdminMembers } from '../../../../lib/domain/usecases/get-admin-members.js'; describe('Unit | UseCase | get-admin-members', function () { it('should return all admin members', async function () { diff --git a/api/tests/unit/domain/usecases/get-answer_test.js b/api/tests/unit/domain/usecases/get-answer_test.js index 6f6135241d0..82068574763 100644 --- a/api/tests/unit/domain/usecases/get-answer_test.js +++ b/api/tests/unit/domain/usecases/get-answer_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const getAnswer = require('../../../../lib/domain/usecases/get-answer'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, sinon } from '../../../test-helper.js'; +import { getAnswer } from '../../../../lib/domain/usecases/get-answer.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | get-answer', function () { const answerId = 1; diff --git a/api/tests/unit/domain/usecases/get-assessment_test.js b/api/tests/unit/domain/usecases/get-assessment_test.js index 28b597a754e..fce5642c027 100644 --- a/api/tests/unit/domain/usecases/get-assessment_test.js +++ b/api/tests/unit/domain/usecases/get-assessment_test.js @@ -1,7 +1,6 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const getAssessment = require('../../../../lib/domain/usecases/get-assessment'); - -const Assessment = require('../../../../lib/domain/models/Assessment'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getAssessment } from '../../../../lib/domain/usecases/get-assessment.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; describe('Unit | UseCase | get-assessment', function () { let assessment; diff --git a/api/tests/unit/domain/usecases/get-attendance-sheet_test.js b/api/tests/unit/domain/usecases/get-attendance-sheet_test.js index d14cc1be64a..546d1c5226f 100644 --- a/api/tests/unit/domain/usecases/get-attendance-sheet_test.js +++ b/api/tests/unit/domain/usecases/get-attendance-sheet_test.js @@ -1,13 +1,15 @@ -const { expect, sinon } = require('../../../test-helper'); -const getAttendanceSheet = require('../../../../lib/domain/usecases/get-attendance-sheet'); -const { +import { expect, sinon } from '../../../test-helper.js'; +import { getAttendanceSheet } from '../../../../lib/domain/usecases/get-attendance-sheet.js'; + +import { ATTENDANCE_SHEET_SESSION_TEMPLATE_VALUES, NON_SCO_ATTENDANCE_SHEET_CANDIDATE_TEMPLATE_VALUES, SCO_ATTENDANCE_SHEET_CANDIDATE_TEMPLATE_VALUES, EXTRA_EMPTY_CANDIDATE_ROWS, -} = require('../../../../lib/infrastructure/files/attendance-sheet/attendance-sheet-placeholders'); -const _ = require('lodash'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); +} from '../../../../lib/infrastructure/files/attendance-sheet/attendance-sheet-placeholders.js'; + +import _ from 'lodash'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | get-attendance-sheet-in-ods-format', function () { describe('getAttendanceSheet', function () { diff --git a/api/tests/unit/domain/usecases/get-available-target-profiles-for-organization_test.js b/api/tests/unit/domain/usecases/get-available-target-profiles-for-organization_test.js index 03ef1c1f135..7d955488865 100644 --- a/api/tests/unit/domain/usecases/get-available-target-profiles-for-organization_test.js +++ b/api/tests/unit/domain/usecases/get-available-target-profiles-for-organization_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const getAvailableTargetProfilesForOrganization = require('../../../../lib/domain/usecases/get-available-target-profiles-for-organization'); +import { expect, sinon } from '../../../test-helper.js'; +import { getAvailableTargetProfilesForOrganization } from '../../../../lib/domain/usecases/get-available-target-profiles-for-organization.js'; describe('Unit | UseCase | get-available-target-profiles-for-organization', function () { it('returns the target profile available for the given organizations', async function () { diff --git a/api/tests/unit/domain/usecases/get-campaign-assessment-participation-result_test.js b/api/tests/unit/domain/usecases/get-campaign-assessment-participation-result_test.js index 8bb4aab9fa2..9817990a005 100644 --- a/api/tests/unit/domain/usecases/get-campaign-assessment-participation-result_test.js +++ b/api/tests/unit/domain/usecases/get-campaign-assessment-participation-result_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const getCampaignAssessmentParticipationResult = require('../../../../lib/domain/usecases/get-campaign-assessment-participation-result'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { getCampaignAssessmentParticipationResult } from '../../../../lib/domain/usecases/get-campaign-assessment-participation-result.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | get-campaign-assessment-participation-result', function () { let campaignRepository, campaignAssessmentParticipationResultRepository; diff --git a/api/tests/unit/domain/usecases/get-campaign-assessment-participation_test.js b/api/tests/unit/domain/usecases/get-campaign-assessment-participation_test.js index 532eac94b2e..dfc3bd0e703 100644 --- a/api/tests/unit/domain/usecases/get-campaign-assessment-participation_test.js +++ b/api/tests/unit/domain/usecases/get-campaign-assessment-participation_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const getCampaignAssessmentParticipation = require('../../../../lib/domain/usecases/get-campaign-assessment-participation'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); -const CampaignAssessmentParticipation = require('../../../../lib/domain/read-models/CampaignAssessmentParticipation'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { getCampaignAssessmentParticipation } from '../../../../lib/domain/usecases/get-campaign-assessment-participation.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; +import { CampaignAssessmentParticipation } from '../../../../lib/domain/read-models/CampaignAssessmentParticipation.js'; describe('Unit | UseCase | get-campaign-assessment-participation', function () { let campaignRepository; diff --git a/api/tests/unit/domain/usecases/get-campaign-by-code_test.js b/api/tests/unit/domain/usecases/get-campaign-by-code_test.js index 01f1d4a6db1..b6416180545 100644 --- a/api/tests/unit/domain/usecases/get-campaign-by-code_test.js +++ b/api/tests/unit/domain/usecases/get-campaign-by-code_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | UseCase | get-campaign-by-code', function () { const code = 'QWERTY123'; diff --git a/api/tests/unit/domain/usecases/get-campaign-profile_test.js b/api/tests/unit/domain/usecases/get-campaign-profile_test.js index 60433824e7e..d01708d277a 100644 --- a/api/tests/unit/domain/usecases/get-campaign-profile_test.js +++ b/api/tests/unit/domain/usecases/get-campaign-profile_test.js @@ -1,7 +1,9 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const getCampaignProfile = require('../../../../lib/domain/usecases/get-campaign-profile'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); -const { FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { getCampaignProfile } from '../../../../lib/domain/usecases/get-campaign-profile.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { FRENCH_SPOKEN } = LOCALE; describe('Unit | UseCase | get-campaign-profile', function () { let campaignRepository, campaignProfileRepository; diff --git a/api/tests/unit/domain/usecases/get-candidate-import-sheet-data_test.js b/api/tests/unit/domain/usecases/get-candidate-import-sheet-data_test.js index d09502b4911..f86cb5c1707 100644 --- a/api/tests/unit/domain/usecases/get-candidate-import-sheet-data_test.js +++ b/api/tests/unit/domain/usecases/get-candidate-import-sheet-data_test.js @@ -1,6 +1,6 @@ -const { expect, catchErr, sinon, domainBuilder } = require('../../../test-helper'); -const getCandidateImportSheetData = require('../../../../lib/domain/usecases/get-candidate-import-sheet-data'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); +import { expect, catchErr, sinon, domainBuilder } from '../../../test-helper.js'; +import { getCandidateImportSheetData } from '../../../../lib/domain/usecases/get-candidate-import-sheet-data.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | get-candidate-import-sheet-data', function () { let sessionRepository; diff --git a/api/tests/unit/domain/usecases/get-certification-attestation_test.js b/api/tests/unit/domain/usecases/get-certification-attestation_test.js index f400b124161..5f1fdd21d30 100644 --- a/api/tests/unit/domain/usecases/get-certification-attestation_test.js +++ b/api/tests/unit/domain/usecases/get-certification-attestation_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const get = require('../../../../lib/domain/usecases/certificate/get-certification-attestation'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { getCertificationAttestation as get } from '../../../../lib/domain/usecases/certificate/get-certification-attestation.js'; describe('Unit | UseCase | get-certification-attestation', function () { const certificateRepository = { diff --git a/api/tests/unit/domain/usecases/get-certification-candidate-subscription_test.js b/api/tests/unit/domain/usecases/get-certification-candidate-subscription_test.js index 664e4dd716b..4fbaf435ce9 100644 --- a/api/tests/unit/domain/usecases/get-certification-candidate-subscription_test.js +++ b/api/tests/unit/domain/usecases/get-certification-candidate-subscription_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const getCertificationCandidateSubscription = require('../../../../lib/domain/usecases/get-certification-candidate-subscription'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getCertificationCandidateSubscription } from '../../../../lib/domain/usecases/get-certification-candidate-subscription.js'; describe('Unit | UseCase | get-certification-candidate-subscription', function () { let certificationBadgesService; diff --git a/api/tests/unit/domain/usecases/get-certification-candidate_test.js b/api/tests/unit/domain/usecases/get-certification-candidate_test.js index 293269f347e..5cc6b1503bf 100644 --- a/api/tests/unit/domain/usecases/get-certification-candidate_test.js +++ b/api/tests/unit/domain/usecases/get-certification-candidate_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const getCertificationCandidate = require('../../../../lib/domain/usecases/get-certification-candidate'); +import { expect, sinon } from '../../../test-helper.js'; +import { getCertificationCandidate } from '../../../../lib/domain/usecases/get-certification-candidate.js'; describe('Unit | Domain | Use Cases | get-certification-candidate', function () { it('should get the certification candidate', async function () { diff --git a/api/tests/unit/domain/usecases/get-certification-center-for-admin_test.js b/api/tests/unit/domain/usecases/get-certification-center-for-admin_test.js index 8c8fa2a3f07..d34d49640a7 100644 --- a/api/tests/unit/domain/usecases/get-certification-center-for-admin_test.js +++ b/api/tests/unit/domain/usecases/get-certification-center-for-admin_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder, sinon } = require('../../../test-helper'); -const getCertificationCenterForAdmin = require('../../../../lib/domain/usecases/get-certification-center-for-admin'); -const CertificationCenterForAdmin = require('../../../../lib/domain/models/CertificationCenterForAdmin'); +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; +import { getCertificationCenterForAdmin } from '../../../../lib/domain/usecases/get-certification-center-for-admin.js'; +import { CertificationCenterForAdmin } from '../../../../lib/domain/models/CertificationCenterForAdmin.js'; describe('Unit | UseCase | get-certification-center-for-admin', function () { let certificationCenterForAdmin; diff --git a/api/tests/unit/domain/usecases/get-certification-center_test.js b/api/tests/unit/domain/usecases/get-certification-center_test.js index 284755fd5ef..99be7c4e695 100644 --- a/api/tests/unit/domain/usecases/get-certification-center_test.js +++ b/api/tests/unit/domain/usecases/get-certification-center_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder, sinon } = require('../../../test-helper'); -const getCertificationCenter = require('../../../../lib/domain/usecases/get-certification-center'); -const CertificationCenter = require('../../../../lib/domain/models/CertificationCenter'); +import { expect, domainBuilder, sinon } from '../../../test-helper.js'; +import { getCertificationCenter } from '../../../../lib/domain/usecases/get-certification-center.js'; +import { CertificationCenter } from '../../../../lib/domain/models/CertificationCenter.js'; describe('Unit | UseCase | get-certification-center', function () { let certificationCenter; diff --git a/api/tests/unit/domain/usecases/get-certification-course_test.js b/api/tests/unit/domain/usecases/get-certification-course_test.js index f78da781e07..dd6e39750ca 100644 --- a/api/tests/unit/domain/usecases/get-certification-course_test.js +++ b/api/tests/unit/domain/usecases/get-certification-course_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const getCertificationCourse = require('../../../../lib/domain/usecases/get-certification-course'); -const CertificationCourse = require('../../../../lib/domain/models/CertificationCourse'); +import { expect, sinon } from '../../../test-helper.js'; +import { getCertificationCourse } from '../../../../lib/domain/usecases/get-certification-course.js'; +import { CertificationCourse } from '../../../../lib/domain/models/CertificationCourse.js'; describe('Unit | UseCase | get-certification-course', function () { let certificationCourse; diff --git a/api/tests/unit/domain/usecases/get-certification-details_test.js b/api/tests/unit/domain/usecases/get-certification-details_test.js index 918c425d164..1c68cf7df1b 100644 --- a/api/tests/unit/domain/usecases/get-certification-details_test.js +++ b/api/tests/unit/domain/usecases/get-certification-details_test.js @@ -1,7 +1,7 @@ -const { sinon, expect, domainBuilder } = require('../../../test-helper'); -const getCertificationDetails = require('../../../../lib/domain/usecases/get-certification-details'); -const CertificationDetails = require('../../../../lib/domain/read-models/CertificationDetails'); -const CertificationAssessmentStates = require('../../../../lib/domain/models/CertificationAssessment').states; +import { sinon, expect, domainBuilder } from '../../../test-helper.js'; +import { getCertificationDetails } from '../../../../lib/domain/usecases/get-certification-details.js'; +import { CertificationDetails } from '../../../../lib/domain/read-models/CertificationDetails.js'; +import { states as CertificationAssessmentStates } from '../../../../lib/domain/models/CertificationAssessment.js'; describe('Unit | UseCase | get-certification-details', function () { context('the certification assessment has not been completed', function () { diff --git a/api/tests/unit/domain/usecases/get-certification-point-of-contact_test.js b/api/tests/unit/domain/usecases/get-certification-point-of-contact_test.js index 9b34e428647..7e63df22034 100644 --- a/api/tests/unit/domain/usecases/get-certification-point-of-contact_test.js +++ b/api/tests/unit/domain/usecases/get-certification-point-of-contact_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const getCertificationPointOfContact = require('../../../../lib/domain/usecases/get-certification-point-of-contact'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getCertificationPointOfContact } from '../../../../lib/domain/usecases/get-certification-point-of-contact.js'; describe('Unit | UseCase | get-certification-point-of-contact', function () { const userId = 123; diff --git a/api/tests/unit/domain/usecases/get-challenge-for-pix-auto-answer_test.js b/api/tests/unit/domain/usecases/get-challenge-for-pix-auto-answer_test.js index 524e6197032..41f6aff4ea3 100644 --- a/api/tests/unit/domain/usecases/get-challenge-for-pix-auto-answer_test.js +++ b/api/tests/unit/domain/usecases/get-challenge-for-pix-auto-answer_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const getChallengeForPixAutoAnswer = require('../../../../lib/domain/usecases/get-challenge-for-pix-auto-answer'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getChallengeForPixAutoAnswer } from '../../../../lib/domain/usecases/get-challenge-for-pix-auto-answer.js'; describe('Unit | UseCase | get-challenge-answer-for-pix-button', function () { let assessment; diff --git a/api/tests/unit/domain/usecases/get-clea-certified-candidate-by-session_test.js b/api/tests/unit/domain/usecases/get-clea-certified-candidate-by-session_test.js index 20de9b5f118..a9b9b2b21a2 100644 --- a/api/tests/unit/domain/usecases/get-clea-certified-candidate-by-session_test.js +++ b/api/tests/unit/domain/usecases/get-clea-certified-candidate-by-session_test.js @@ -1,5 +1,5 @@ -const { sinon, domainBuilder, expect } = require('../../../test-helper'); -const getCleaCertifiedCandidateBySession = require('../../../../lib/domain/usecases/get-clea-certified-candidate-by-session'); +import { sinon, domainBuilder, expect } from '../../../test-helper.js'; +import { getCleaCertifiedCandidateBySession } from '../../../../lib/domain/usecases/get-clea-certified-candidate-by-session.js'; describe('Unit | UseCase | getCleaCertifiedCandidateBySession', function () { let cleaCertifiedCandidateRepository; diff --git a/api/tests/unit/domain/usecases/get-correction-for-answer_test.js b/api/tests/unit/domain/usecases/get-correction-for-answer_test.js index 9a6e98a5037..048f3653f00 100644 --- a/api/tests/unit/domain/usecases/get-correction-for-answer_test.js +++ b/api/tests/unit/domain/usecases/get-correction-for-answer_test.js @@ -1,8 +1,8 @@ -const getCorrectionForAnswer = require('../../../../lib/domain/usecases/get-correction-for-answer'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const Answer = require('../../../../lib/domain/models/Answer'); -const { AssessmentNotCompletedError, NotFoundError } = require('../../../../lib/domain/errors'); -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); +import { getCorrectionForAnswer } from '../../../../lib/domain/usecases/get-correction-for-answer.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { Answer } from '../../../../lib/domain/models/Answer.js'; +import { AssessmentNotCompletedError, NotFoundError } from '../../../../lib/domain/errors.js'; +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; describe('Unit | UseCase | getCorrectionForAnswer', function () { const assessmentRepository = { get: () => undefined }; diff --git a/api/tests/unit/domain/usecases/get-current-user_test.js b/api/tests/unit/domain/usecases/get-current-user_test.js index 4265356aa3e..95f271345c9 100644 --- a/api/tests/unit/domain/usecases/get-current-user_test.js +++ b/api/tests/unit/domain/usecases/get-current-user_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const getCurrentUser = require('../../../../lib/domain/usecases/get-current-user'); +import { expect, sinon } from '../../../test-helper.js'; +import { getCurrentUser } from '../../../../lib/domain/usecases/get-current-user.js'; describe('Unit | UseCase | get-current-user', function () { let userRepository; diff --git a/api/tests/unit/domain/usecases/get-external-authentication-redirection-url_test.js b/api/tests/unit/domain/usecases/get-external-authentication-redirection-url_test.js index bf9d0e4a0f1..ba967d90f36 100644 --- a/api/tests/unit/domain/usecases/get-external-authentication-redirection-url_test.js +++ b/api/tests/unit/domain/usecases/get-external-authentication-redirection-url_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const User = require('../../../../lib/domain/models/User'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); -const getExternalAuthenticationRedirectionUrl = require('../../../../lib/domain/usecases/get-external-authentication-redirection-url'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { User } from '../../../../lib/domain/models/User.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; +import { getExternalAuthenticationRedirectionUrl } from '../../../../lib/domain/usecases/get-external-authentication-redirection-url.js'; describe('Unit | UseCase | get-external-authentication-redirection-url', function () { let userRepository; @@ -53,7 +53,7 @@ describe('Unit | UseCase | get-external-authentication-redirection-url', functio userAttributes, userRepository, tokenService, - settings: samlSettings, + config: samlSettings, }); // then @@ -99,7 +99,7 @@ describe('Unit | UseCase | get-external-authentication-redirection-url', functio userRepository, authenticationMethodRepository, tokenService, - settings: samlSettings, + config: samlSettings, }); // then @@ -128,7 +128,7 @@ describe('Unit | UseCase | get-external-authentication-redirection-url', functio userRepository, authenticationMethodRepository, tokenService, - settings: samlSettings, + config: samlSettings, }); // then @@ -159,7 +159,7 @@ describe('Unit | UseCase | get-external-authentication-redirection-url', functio userRepository, authenticationMethodRepository, tokenService, - settings: samlSettings, + config: samlSettings, }); // then @@ -194,7 +194,7 @@ describe('Unit | UseCase | get-external-authentication-redirection-url', functio userRepository, authenticationMethodRepository, tokenService, - settings: samlSettings, + config: samlSettings, }); // then @@ -229,7 +229,7 @@ describe('Unit | UseCase | get-external-authentication-redirection-url', functio userRepository, authenticationMethodRepository, tokenService, - settings: samlSettings, + config: samlSettings, }); // then @@ -264,7 +264,7 @@ describe('Unit | UseCase | get-external-authentication-redirection-url', functio userRepository, authenticationMethodRepository, tokenService, - settings: samlSettings, + config: samlSettings, }); // then diff --git a/api/tests/unit/domain/usecases/get-framework-areas_test.js b/api/tests/unit/domain/usecases/get-framework-areas_test.js index 30c27bf8131..59ff5af4493 100644 --- a/api/tests/unit/domain/usecases/get-framework-areas_test.js +++ b/api/tests/unit/domain/usecases/get-framework-areas_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | UseCase | get-framework-areas', function () { let expectedTubesResult, diff --git a/api/tests/unit/domain/usecases/get-frameworks_test.js b/api/tests/unit/domain/usecases/get-frameworks_test.js index 08e54383bad..3e6d77f5d29 100644 --- a/api/tests/unit/domain/usecases/get-frameworks_test.js +++ b/api/tests/unit/domain/usecases/get-frameworks_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | UseCase | get-frameworks', function () { let frameworkRepository; diff --git a/api/tests/unit/domain/usecases/get-identity-providers_test.js b/api/tests/unit/domain/usecases/get-identity-providers_test.js index f94b9ba9a05..acb122aaa44 100644 --- a/api/tests/unit/domain/usecases/get-identity-providers_test.js +++ b/api/tests/unit/domain/usecases/get-identity-providers_test.js @@ -1,7 +1,7 @@ -const { expect, sinon } = require('../../../test-helper'); -const getIdentityProviders = require('../../../../lib/domain/usecases/get-identity-providers'); -const OidcIdentityProviders = require('../../../../lib/domain/constants/oidc-identity-providers'); -const config = require('../../../../lib/config'); +import { expect, sinon } from '../../../test-helper.js'; +import { getIdentityProviders } from '../../../../lib/domain/usecases/get-identity-providers.js'; +import * as OidcIdentityProviders from '../../../../lib/domain/constants/oidc-identity-providers.js'; +import { config } from '../../../../lib/config.js'; describe('Unit | UseCase | get-identity-providers', function () { beforeEach(function () { @@ -33,7 +33,7 @@ describe('Unit | UseCase | get-identity-providers', function () { // then const expectedIdentityProviders = [OidcIdentityProviders.POLE_EMPLOI.service, OidcIdentityProviders.CNAV.service]; expect(identityProviders.length).to.equal(2); - expect(identityProviders).to.deep.equal(expectedIdentityProviders); + expect(identityProviders).to.include.members(expectedIdentityProviders); }); context('when an identity provider is not configured', function () { diff --git a/api/tests/unit/domain/usecases/get-import-session-complementary-certification-habilitations-labels_test.js b/api/tests/unit/domain/usecases/get-import-session-complementary-certification-habilitations-labels_test.js index 2e7a03ac7f8..657efdc8477 100644 --- a/api/tests/unit/domain/usecases/get-import-session-complementary-certification-habilitations-labels_test.js +++ b/api/tests/unit/domain/usecases/get-import-session-complementary-certification-habilitations-labels_test.js @@ -1,5 +1,5 @@ -const { sinon, expect, domainBuilder } = require('../../../test-helper'); -const getImportSessionComplementaryCertificationHabilitationsLabels = require('../../../../lib/domain/usecases/get-import-session-complementary-certification-habilitations-labels'); +import { sinon, expect, domainBuilder } from '../../../test-helper.js'; +import { getImportSessionComplementaryCertificationHabilitationsLabels } from '../../../../lib/domain/usecases/get-import-session-complementary-certification-habilitations-labels.js'; describe('Unit | Usecase | get-import-session-complementary-certification-habilitations-labels', function () { it('should return the certification center habilitations labels', async function () { diff --git a/api/tests/unit/domain/usecases/get-jury-certification_test.js b/api/tests/unit/domain/usecases/get-jury-certification_test.js index eab33195713..91e1b28afa1 100644 --- a/api/tests/unit/domain/usecases/get-jury-certification_test.js +++ b/api/tests/unit/domain/usecases/get-jury-certification_test.js @@ -1,5 +1,5 @@ -const { sinon, expect, domainBuilder } = require('../../../test-helper'); -const getJuryCertification = require('../../../../lib/domain/usecases/get-jury-certification'); +import { sinon, expect, domainBuilder } from '../../../test-helper.js'; +import { getJuryCertification } from '../../../../lib/domain/usecases/get-jury-certification.js'; describe('Unit | Usecase | get-jury-certification', function () { it('should return the jury certification', async function () { diff --git a/api/tests/unit/domain/usecases/get-jury-session_test.js b/api/tests/unit/domain/usecases/get-jury-session_test.js index 58e29417aae..2fbc434bc34 100644 --- a/api/tests/unit/domain/usecases/get-jury-session_test.js +++ b/api/tests/unit/domain/usecases/get-jury-session_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const getJurySession = require('../../../../lib/domain/usecases/get-jury-session'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { getJurySession } from '../../../../lib/domain/usecases/get-jury-session.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | get-jury-session', function () { let jurySessionRepository; diff --git a/api/tests/unit/domain/usecases/get-last-challenge-id-from-assessment-id_test.js b/api/tests/unit/domain/usecases/get-last-challenge-id-from-assessment-id_test.js index 8c6c41a3248..8b0168d9b8d 100644 --- a/api/tests/unit/domain/usecases/get-last-challenge-id-from-assessment-id_test.js +++ b/api/tests/unit/domain/usecases/get-last-challenge-id-from-assessment-id_test.js @@ -1,7 +1,6 @@ -const { catchErr, expect, sinon, domainBuilder } = require('../../../test-helper'); - -const getLastChallengeIdFromAssessmentId = require('../../../../lib/domain/usecases/get-last-challenge-id-from-assessment-id'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { catchErr, expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getLastChallengeIdFromAssessmentId } from '../../../../lib/domain/usecases/get-last-challenge-id-from-assessment-id.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | get-last-challenge-id-from-assessment-id', function () { let assessment; diff --git a/api/tests/unit/domain/usecases/get-learning-content-by-target-profile_test.js b/api/tests/unit/domain/usecases/get-learning-content-by-target-profile_test.js index bc0f9b3923c..966f6c13eda 100644 --- a/api/tests/unit/domain/usecases/get-learning-content-by-target-profile_test.js +++ b/api/tests/unit/domain/usecases/get-learning-content-by-target-profile_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const getLearningContentByTargetProfile = require('../../../../lib/domain/usecases/get-learning-content-by-target-profile'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getLearningContentByTargetProfile } from '../../../../lib/domain/usecases/get-learning-content-by-target-profile.js'; describe('Unit | UseCase | get-learning-content-by-target-profile', function () { const learningContentRepository = {}; diff --git a/api/tests/unit/domain/usecases/get-next-challenge-for-campaign-assessment_test.js b/api/tests/unit/domain/usecases/get-next-challenge-for-campaign-assessment_test.js index 9ab2d20e381..1bc7af191fa 100644 --- a/api/tests/unit/domain/usecases/get-next-challenge-for-campaign-assessment_test.js +++ b/api/tests/unit/domain/usecases/get-next-challenge-for-campaign-assessment_test.js @@ -1,10 +1,9 @@ -const flash = require('../../../../lib/domain/services/algorithm-methods/flash'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); - -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const getNextChallengeForCampaignAssessment = require('../../../../lib/domain/usecases/get-next-challenge-for-campaign-assessment'); -const { AssessmentEndedError } = require('../../../../lib/domain/errors'); -const config = require('../../../../lib/config'); +import * as flash from '../../../../lib/domain/services/algorithm-methods/flash.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getNextChallengeForCampaignAssessment } from '../../../../lib/domain/usecases/get-next-challenge-for-campaign-assessment.js'; +import { AssessmentEndedError } from '../../../../lib/domain/errors.js'; +import { config } from '../../../../lib/config.js'; describe('Unit | Domain | Use Cases | get-next-challenge-for-campaign-assessment', function () { describe('#get-next-challenge-for-campaign-assessment', function () { diff --git a/api/tests/unit/domain/usecases/get-next-challenge-for-certification_test.js b/api/tests/unit/domain/usecases/get-next-challenge-for-certification_test.js index 4a134900542..61dfdf667cb 100644 --- a/api/tests/unit/domain/usecases/get-next-challenge-for-certification_test.js +++ b/api/tests/unit/domain/usecases/get-next-challenge-for-certification_test.js @@ -1,7 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); - -const getNextChallengeForCertification = require('../../../../lib/domain/usecases/get-next-challenge-for-certification'); -const Assessment = require('../../../../lib/domain/models/Assessment'); +import { expect, sinon } from '../../../test-helper.js'; +import { getNextChallengeForCertification } from '../../../../lib/domain/usecases/get-next-challenge-for-certification.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; describe('Unit | Domain | Use Cases | get-next-challenge-for-certification', function () { describe('#getNextChallengeForCertification', function () { diff --git a/api/tests/unit/domain/usecases/get-next-challenge-for-competence-evaluation_test.js b/api/tests/unit/domain/usecases/get-next-challenge-for-competence-evaluation_test.js index 9e622a460ca..f5472efdd91 100644 --- a/api/tests/unit/domain/usecases/get-next-challenge-for-competence-evaluation_test.js +++ b/api/tests/unit/domain/usecases/get-next-challenge-for-competence-evaluation_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); -const getNextChallengeForCompetenceEvaluation = require('../../../../lib/domain/usecases/get-next-challenge-for-competence-evaluation'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; +import { getNextChallengeForCompetenceEvaluation } from '../../../../lib/domain/usecases/get-next-challenge-for-competence-evaluation.js'; describe('Unit | Domain | Use Cases | get-next-challenge-for-competence-evaluation', function () { describe('#getNextChallengeForCompetenceEvaluation', function () { diff --git a/api/tests/unit/domain/usecases/get-next-challenge-for-demo_test.js b/api/tests/unit/domain/usecases/get-next-challenge-for-demo_test.js index 58a1cb71711..93ff556cd3c 100644 --- a/api/tests/unit/domain/usecases/get-next-challenge-for-demo_test.js +++ b/api/tests/unit/domain/usecases/get-next-challenge-for-demo_test.js @@ -1,8 +1,6 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); - -const { AssessmentEndedError } = require('../../../../lib/domain/errors'); - -const getNextChallengeForDemo = require('../../../../lib/domain/usecases/get-next-challenge-for-demo'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { AssessmentEndedError } from '../../../../lib/domain/errors.js'; +import { getNextChallengeForDemo } from '../../../../lib/domain/usecases/get-next-challenge-for-demo.js'; describe('Unit | Domain | Use Cases | get-next-challenge-for-demo', function () { describe('#get-next-challenge-for-demo', function () { diff --git a/api/tests/unit/domain/usecases/get-next-challenge-for-preview_test.js b/api/tests/unit/domain/usecases/get-next-challenge-for-preview_test.js index bdf45180af9..398b0eb7c2c 100644 --- a/api/tests/unit/domain/usecases/get-next-challenge-for-preview_test.js +++ b/api/tests/unit/domain/usecases/get-next-challenge-for-preview_test.js @@ -1,7 +1,6 @@ -const { expect } = require('../../../test-helper'); -const getNextChallengeForPreview = require('../../../../lib/domain/usecases/get-next-challenge-for-preview'); - -const { AssessmentEndedError } = require('../../../../lib/domain/errors'); +import { expect } from '../../../test-helper.js'; +import { getNextChallengeForPreview } from '../../../../lib/domain/usecases/get-next-challenge-for-preview.js'; +import { AssessmentEndedError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Use Cases | get-next-challenge-for-preview', function () { describe('#getNextChallengeForPreview', function () { diff --git a/api/tests/unit/domain/usecases/get-organization-details_test.js b/api/tests/unit/domain/usecases/get-organization-details_test.js index c2b6b68dad4..4a8c6bab958 100644 --- a/api/tests/unit/domain/usecases/get-organization-details_test.js +++ b/api/tests/unit/domain/usecases/get-organization-details_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const getOrganizationDetails = require('../../../../lib/domain/usecases/organizations-administration/get-organization-details'); -const Organization = require('../../../../lib/domain/models/Organization'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getOrganizationDetails } from '../../../../lib/domain/usecases/organizations-administration/get-organization-details.js'; +import { Organization } from '../../../../lib/domain/models/Organization.js'; describe('Unit | UseCase | get-organization-details', function () { it('should return the Organization matching the given organization ID', async function () { diff --git a/api/tests/unit/domain/usecases/get-organization-invitation_test.js b/api/tests/unit/domain/usecases/get-organization-invitation_test.js index f8dbed8d606..cfd9cf090e2 100644 --- a/api/tests/unit/domain/usecases/get-organization-invitation_test.js +++ b/api/tests/unit/domain/usecases/get-organization-invitation_test.js @@ -1,11 +1,11 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const getOrganizationInvitation = require('../../../../lib/domain/usecases/get-organization-invitation'); -const OrganizationInvitation = require('../../../../lib/domain/models/OrganizationInvitation'); -const { +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { getOrganizationInvitation } from '../../../../lib/domain/usecases/get-organization-invitation.js'; +import { OrganizationInvitation } from '../../../../lib/domain/models/OrganizationInvitation.js'; +import { NotFoundError, AlreadyExistingInvitationError, CancelledInvitationError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | get-organization-invitation', function () { let organizationInvitationRepository; diff --git a/api/tests/unit/domain/usecases/get-organization-learner-activity_test.js b/api/tests/unit/domain/usecases/get-organization-learner-activity_test.js index 4276c9c2ebd..0b9d074baa5 100644 --- a/api/tests/unit/domain/usecases/get-organization-learner-activity_test.js +++ b/api/tests/unit/domain/usecases/get-organization-learner-activity_test.js @@ -1,7 +1,7 @@ -const { expect, sinon } = require('../../../test-helper'); -const getOrganizationLearnerActivity = require('../../../../lib/domain/usecases/get-organization-learner-activity'); -const OrganizationLearnerParticipation = require('../../../../lib/domain/read-models/OrganizationLearnerParticipation'); -const OrganizationLearnerActivity = require('../../../../lib/domain/read-models/OrganizationLearnerActivity'); +import { expect, sinon } from '../../../test-helper.js'; +import { getOrganizationLearnerActivity } from '../../../../lib/domain/usecases/get-organization-learner-activity.js'; +import { OrganizationLearnerParticipation } from '../../../../lib/domain/read-models/OrganizationLearnerParticipation.js'; +import { OrganizationLearnerActivity } from '../../../../lib/domain/read-models/OrganizationLearnerActivity.js'; describe('Unit | UseCase | get-organisation-learner-activity', function () { it('should return activity for the organization learner matching the given organizationLearnerId', async function () { diff --git a/api/tests/unit/domain/usecases/get-organization-learner_test.js b/api/tests/unit/domain/usecases/get-organization-learner_test.js index bb788c2d141..35ae56e4f0d 100644 --- a/api/tests/unit/domain/usecases/get-organization-learner_test.js +++ b/api/tests/unit/domain/usecases/get-organization-learner_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const getOrganizationLearner = require('../../../../lib/domain/usecases/get-organization-learner'); -const OrganizationLearner = require('../../../../lib/domain/read-models/organization-learner-follow-up/OrganizationLearner'); +import { expect, sinon } from '../../../test-helper.js'; +import { getOrganizationLearner } from '../../../../lib/domain/usecases/get-organization-learner.js'; +import { OrganizationLearner } from '../../../../lib/domain/read-models/organization-learner-follow-up/OrganizationLearner.js'; describe('Unit | UseCase | get-organisation-learner', function () { it('should return organization learner matching the given organizationLearnerId', async function () { diff --git a/api/tests/unit/domain/usecases/get-organization-learners-csv-template_test.js b/api/tests/unit/domain/usecases/get-organization-learners-csv-template_test.js index 0f3b57bb93c..7a3f0fe83ee 100644 --- a/api/tests/unit/domain/usecases/get-organization-learners-csv-template_test.js +++ b/api/tests/unit/domain/usecases/get-organization-learners-csv-template_test.js @@ -1,8 +1,8 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const getOrganizationLearnersCsvTemplate = require('../../../../lib/domain/usecases/get-organization-learners-csv-template'); -const _ = require('lodash'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { getOrganizationLearnersCsvTemplate } from '../../../../lib/domain/usecases/get-organization-learners-csv-template.js'; +import _ from 'lodash'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; describe('Unit | UseCase | get-organization-learners-csv-template', function () { // TODO: Fix this the next time the file is edited. diff --git a/api/tests/unit/domain/usecases/get-organization-members-identity_test.js b/api/tests/unit/domain/usecases/get-organization-members-identity_test.js index 352663eb1ff..0b7406fd6c5 100644 --- a/api/tests/unit/domain/usecases/get-organization-members-identity_test.js +++ b/api/tests/unit/domain/usecases/get-organization-members-identity_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const getOrganizationMemberIdentities = require('../../../../lib/domain/usecases/get-organization-members-identity'); -const OrganizationMemberIdentity = require('../../../../lib/domain/models/OrganizationMemberIdentity'); +import { expect, sinon } from '../../../test-helper.js'; +import { getOrganizationMemberIdentities } from '../../../../lib/domain/usecases/get-organization-members-identity.js'; +import { OrganizationMemberIdentity } from '../../../../lib/domain/models/OrganizationMemberIdentity.js'; describe('Unit | UseCase | get-organization-members', function () { let organizationMemberIdentityRepository; diff --git a/api/tests/unit/domain/usecases/get-paginated-participants-for-an-organization_test.js b/api/tests/unit/domain/usecases/get-paginated-participants-for-an-organization_test.js index 7a15f909c65..e5d15cf4d35 100644 --- a/api/tests/unit/domain/usecases/get-paginated-participants-for-an-organization_test.js +++ b/api/tests/unit/domain/usecases/get-paginated-participants-for-an-organization_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const getPaginatedParticipantsForAnOrganization = require('../../../../lib/domain/usecases/get-paginated-participants-for-an-organization'); +import { expect, sinon } from '../../../test-helper.js'; +import { getPaginatedParticipantsForAnOrganization } from '../../../../lib/domain/usecases/get-paginated-participants-for-an-organization.js'; describe('Unit | UseCase | get-participants-by-organization-id', function () { it('should call organizationParticipantRepository', async function () { diff --git a/api/tests/unit/domain/usecases/get-participations-count-by-mastery-rate_test.js b/api/tests/unit/domain/usecases/get-participations-count-by-mastery-rate_test.js index ef73c8bf5a8..036e8c3d765 100644 --- a/api/tests/unit/domain/usecases/get-participations-count-by-mastery-rate_test.js +++ b/api/tests/unit/domain/usecases/get-participations-count-by-mastery-rate_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const getParticipationsCountByMasteryRate = require('../../../../lib/domain/usecases/get-participations-count-by-mastery-rate'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { getParticipationsCountByMasteryRate } from '../../../../lib/domain/usecases/get-participations-count-by-mastery-rate.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | getParticipationsCountByMasteryRate', function () { context('when the user has access to the campaign', function () { diff --git a/api/tests/unit/domain/usecases/get-prescriber_test.js b/api/tests/unit/domain/usecases/get-prescriber_test.js index b51de841c35..f7982bff5cb 100644 --- a/api/tests/unit/domain/usecases/get-prescriber_test.js +++ b/api/tests/unit/domain/usecases/get-prescriber_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const getPrescriber = require('../../../../lib/domain/usecases/get-prescriber'); -const { UserNotMemberOfOrganizationError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { getPrescriber } from '../../../../lib/domain/usecases/get-prescriber.js'; +import { UserNotMemberOfOrganizationError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | get-prescriber', function () { const userId = 1; diff --git a/api/tests/unit/domain/usecases/get-private-certificate_test.js b/api/tests/unit/domain/usecases/get-private-certificate_test.js index bfcd2f3a97d..0f12238288a 100644 --- a/api/tests/unit/domain/usecases/get-private-certificate_test.js +++ b/api/tests/unit/domain/usecases/get-private-certificate_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const getPrivateCertificate = require('../../../../lib/domain/usecases/certificate/get-private-certificate'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import { getPrivateCertificate } from '../../../../lib/domain/usecases/certificate/get-private-certificate.js'; describe('Unit | UseCase | getPrivateCertificate', function () { const certificateRepository = { diff --git a/api/tests/unit/domain/usecases/get-progression_test.js b/api/tests/unit/domain/usecases/get-progression_test.js index a8e64ead3ec..85270b78059 100644 --- a/api/tests/unit/domain/usecases/get-progression_test.js +++ b/api/tests/unit/domain/usecases/get-progression_test.js @@ -1,9 +1,7 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const getProgression = require('../../../../lib/domain/usecases/get-progression'); - -const Assessment = require('../../../../lib/domain/models/Assessment'); - -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { getProgression } from '../../../../lib/domain/usecases/get-progression.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Unit | Domain | Use Cases | get-progression', function () { const assessmentId = 1234; diff --git a/api/tests/unit/domain/usecases/get-sco-certification-results-by-division_test.js b/api/tests/unit/domain/usecases/get-sco-certification-results-by-division_test.js index 24523f1a58f..3fd03a07dcf 100644 --- a/api/tests/unit/domain/usecases/get-sco-certification-results-by-division_test.js +++ b/api/tests/unit/domain/usecases/get-sco-certification-results-by-division_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const getScoCertificationResultsByDivision = require('../../../../lib/domain/usecases/get-sco-certification-results-by-division'); -const { NoCertificationResultForDivision } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { getScoCertificationResultsByDivision } from '../../../../lib/domain/usecases/get-sco-certification-results-by-division.js'; +import { NoCertificationResultForDivision } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | get-sco-certification-results-by-division', function () { const scoCertificationCandidateRepository = { findIdsByOrganizationIdAndDivision: null }; diff --git a/api/tests/unit/domain/usecases/get-scorecard_test.js b/api/tests/unit/domain/usecases/get-scorecard_test.js index 3e3adc734c9..46bb81cbd71 100644 --- a/api/tests/unit/domain/usecases/get-scorecard_test.js +++ b/api/tests/unit/domain/usecases/get-scorecard_test.js @@ -1,7 +1,7 @@ -const { sinon, expect } = require('../../../test-helper'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); -const Scorecard = require('../../../../lib/domain/models/Scorecard'); -const getScorecard = require('../../../../lib/domain/usecases/get-scorecard'); +import { sinon, expect } from '../../../test-helper.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; +import { Scorecard } from '../../../../lib/domain/models/Scorecard.js'; +import { getScorecard } from '../../../../lib/domain/usecases/get-scorecard.js'; describe('Unit | UseCase | get-scorecard', function () { let scorecardService; diff --git a/api/tests/unit/domain/usecases/get-session-certification-candidates_test.js b/api/tests/unit/domain/usecases/get-session-certification-candidates_test.js index a9875a00047..f4d5c8335f9 100644 --- a/api/tests/unit/domain/usecases/get-session-certification-candidates_test.js +++ b/api/tests/unit/domain/usecases/get-session-certification-candidates_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const getSessionCertificationCandidates = require('../../../../lib/domain/usecases/get-session-certification-candidates'); +import { expect, sinon } from '../../../test-helper.js'; +import { getSessionCertificationCandidates } from '../../../../lib/domain/usecases/get-session-certification-candidates.js'; describe('Unit | Domain | Use Cases | get-session-certification-candidates', function () { const sessionId = 'sessionId'; diff --git a/api/tests/unit/domain/usecases/get-session-certification-reports_test.js b/api/tests/unit/domain/usecases/get-session-certification-reports_test.js index d87e051149a..bbccc095623 100644 --- a/api/tests/unit/domain/usecases/get-session-certification-reports_test.js +++ b/api/tests/unit/domain/usecases/get-session-certification-reports_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const getSessionCertificationReports = require('../../../../lib/domain/usecases/get-session-certification-reports'); +import { expect, sinon } from '../../../test-helper.js'; +import { getSessionCertificationReports } from '../../../../lib/domain/usecases/get-session-certification-reports.js'; describe('Unit | Domain | Use Cases | get-session-certification-reports', function () { it('should return the certification reports', async function () { diff --git a/api/tests/unit/domain/usecases/get-session-for-supervising_test.js b/api/tests/unit/domain/usecases/get-session-for-supervising_test.js index 91cf91b7173..80130931272 100644 --- a/api/tests/unit/domain/usecases/get-session-for-supervising_test.js +++ b/api/tests/unit/domain/usecases/get-session-for-supervising_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const getSessionForSupervising = require('../../../../lib/domain/usecases/get-session-for-supervising'); -const { constants } = require('../../../../lib/domain/constants'); -const dayjs = require('dayjs'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getSessionForSupervising } from '../../../../lib/domain/usecases/get-session-for-supervising.js'; +import { constants } from '../../../../lib/domain/constants.js'; +import dayjs from 'dayjs'; const START_DATETIME_STUB = new Date('2022-10-01T13:00:00Z'); const COMPLEMENTARY_EXTRATIME_STUB = 45; diff --git a/api/tests/unit/domain/usecases/get-session-results-by-result-recipient-email_test.js b/api/tests/unit/domain/usecases/get-session-results-by-result-recipient-email_test.js index f3397da9c9c..9cb647df02a 100644 --- a/api/tests/unit/domain/usecases/get-session-results-by-result-recipient-email_test.js +++ b/api/tests/unit/domain/usecases/get-session-results-by-result-recipient-email_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const getSessionResultsByResultRecipientEmail = require('../../../../lib/domain/usecases/get-session-results-by-result-recipient-email'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getSessionResultsByResultRecipientEmail } from '../../../../lib/domain/usecases/get-session-results-by-result-recipient-email.js'; describe('Unit | Domain | Use Cases | get-session-results-by-result-recipient-email', function () { const sessionRepository = { getWithCertificationCandidates: null }; diff --git a/api/tests/unit/domain/usecases/get-session-results_test.js b/api/tests/unit/domain/usecases/get-session-results_test.js index 187a05b8186..ba3d72933c7 100644 --- a/api/tests/unit/domain/usecases/get-session-results_test.js +++ b/api/tests/unit/domain/usecases/get-session-results_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const getSessionResults = require('../../../../lib/domain/usecases/get-session-results'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getSessionResults } from '../../../../lib/domain/usecases/get-session-results.js'; describe('Unit | Domain | Use Cases | get-session-results', function () { const sessionRepository = { get: null }; diff --git a/api/tests/unit/domain/usecases/get-session_test.js b/api/tests/unit/domain/usecases/get-session_test.js index de43983ef94..0fe9d7e6840 100644 --- a/api/tests/unit/domain/usecases/get-session_test.js +++ b/api/tests/unit/domain/usecases/get-session_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const getSession = require('../../../../lib/domain/usecases/get-session'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { getSession } from '../../../../lib/domain/usecases/get-session.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | get-session', function () { let sessionRepository; diff --git a/api/tests/unit/domain/usecases/get-shareable-certificate_test.js b/api/tests/unit/domain/usecases/get-shareable-certificate_test.js index b120394aa90..298cb71016a 100644 --- a/api/tests/unit/domain/usecases/get-shareable-certificate_test.js +++ b/api/tests/unit/domain/usecases/get-shareable-certificate_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const getCertificationByVerificationCode = require('../../../../lib/domain/usecases/certificate/get-shareable-certificate'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { getShareableCertificate as getCertificationByVerificationCode } from '../../../../lib/domain/usecases/certificate/get-shareable-certificate.js'; describe('Unit | UseCase | get-shareable-certificate', function () { const certificateRepository = { diff --git a/api/tests/unit/domain/usecases/get-supervisor-kit-session-info_test.js b/api/tests/unit/domain/usecases/get-supervisor-kit-session-info_test.js index 80972819d2e..6248aa45dc3 100644 --- a/api/tests/unit/domain/usecases/get-supervisor-kit-session-info_test.js +++ b/api/tests/unit/domain/usecases/get-supervisor-kit-session-info_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const getSupervisorKitSessionInfo = require('../../../../lib/domain/usecases/get-supervisor-kit-session-info'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); -const SessionForSupervisorKit = require('../../../../lib/domain/read-models/SessionForSupervisorKit'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { getSupervisorKitSessionInfo } from '../../../../lib/domain/usecases/get-supervisor-kit-session-info.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; +import { SessionForSupervisorKit } from '../../../../lib/domain/read-models/SessionForSupervisorKit.js'; describe('Unit | UseCase | get-supervisor-kit-main-info', function () { describe('getSupervisorKitSessionInfo', function () { diff --git a/api/tests/unit/domain/usecases/get-target-profile-content-as-json_test.js b/api/tests/unit/domain/usecases/get-target-profile-content-as-json_test.js index be04f26f4a6..682df7c3a64 100644 --- a/api/tests/unit/domain/usecases/get-target-profile-content-as-json_test.js +++ b/api/tests/unit/domain/usecases/get-target-profile-content-as-json_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, catchErr, domainBuilder, MockDate } = require('../../../test-helper'); -const { ForbiddenAccess } = require('../../../../lib/domain/errors'); -const getTargetProfileContentAsJson = require('../../../../lib/domain/usecases/get-target-profile-content-as-json'); +import { expect, sinon, catchErr, domainBuilder, MockDate } from '../../../test-helper.js'; +import { ForbiddenAccess } from '../../../../lib/domain/errors.js'; +import { getTargetProfileContentAsJson } from '../../../../lib/domain/usecases/get-target-profile-content-as-json.js'; describe('Unit | UseCase | get-target-profile-content-as-json', function () { let targetProfileForAdminRepository; diff --git a/api/tests/unit/domain/usecases/get-target-profile-for-admin_test.js b/api/tests/unit/domain/usecases/get-target-profile-for-admin_test.js index 55229bbb617..b9be6512cbc 100644 --- a/api/tests/unit/domain/usecases/get-target-profile-for-admin_test.js +++ b/api/tests/unit/domain/usecases/get-target-profile-for-admin_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | UseCase | get-target-profile-for-admin', function () { it('should get target profile for admin', async function () { diff --git a/api/tests/unit/domain/usecases/get-training_test.js b/api/tests/unit/domain/usecases/get-training_test.js index b8c9d3c8bc3..2a17caebec4 100644 --- a/api/tests/unit/domain/usecases/get-training_test.js +++ b/api/tests/unit/domain/usecases/get-training_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const getTraining = require('../../../../lib/domain/usecases/get-training'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { getTraining } from '../../../../lib/domain/usecases/get-training.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | get-training', function () { let trainingRepository; diff --git a/api/tests/unit/domain/usecases/get-user-by-reset-password-demand_test.js b/api/tests/unit/domain/usecases/get-user-by-reset-password-demand_test.js index b655f6aaee9..9ff7292b716 100644 --- a/api/tests/unit/domain/usecases/get-user-by-reset-password-demand_test.js +++ b/api/tests/unit/domain/usecases/get-user-by-reset-password-demand_test.js @@ -1,13 +1,13 @@ -const { catchErr, domainBuilder, expect, sinon } = require('../../../test-helper'); +import { catchErr, domainBuilder, expect, sinon } from '../../../test-helper.js'; +import { User } from '../../../../lib/domain/models/User.js'; -const User = require('../../../../lib/domain/models/User'); -const { +import { InvalidTemporaryKeyError, PasswordResetDemandNotFoundError, UserNotFoundError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; -const getUserByResetPasswordDemand = require('../../../../lib/domain/usecases/get-user-by-reset-password-demand'); +import { getUserByResetPasswordDemand } from '../../../../lib/domain/usecases/get-user-by-reset-password-demand.js'; describe('Unit | UseCase | get-user-by-reset-password-demand', function () { const temporaryKey = 'ABCDEF123'; diff --git a/api/tests/unit/domain/usecases/get-user-campaign-assessment-result_test.js b/api/tests/unit/domain/usecases/get-user-campaign-assessment-result_test.js index 46dd7f10848..61fd4677525 100644 --- a/api/tests/unit/domain/usecases/get-user-campaign-assessment-result_test.js +++ b/api/tests/unit/domain/usecases/get-user-campaign-assessment-result_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const getUserCampaignAssessmentResult = require('../../../../lib/domain/usecases/get-user-campaign-assessment-result'); -const { NotFoundError, NoCampaignParticipationForUserAndCampaign } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { getUserCampaignAssessmentResult } from '../../../../lib/domain/usecases/get-user-campaign-assessment-result.js'; +import { NotFoundError, NoCampaignParticipationForUserAndCampaign } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | get-user-campaign-assessment-result', function () { const locale = 'locale', diff --git a/api/tests/unit/domain/usecases/get-user-certification-eligibility_test.js b/api/tests/unit/domain/usecases/get-user-certification-eligibility_test.js index 8c1b6df5da4..90aa626ff53 100644 --- a/api/tests/unit/domain/usecases/get-user-certification-eligibility_test.js +++ b/api/tests/unit/domain/usecases/get-user-certification-eligibility_test.js @@ -1,5 +1,5 @@ -const { sinon, expect, domainBuilder } = require('../../../test-helper'); -const getUserCertificationEligibility = require('../../../../lib/domain/usecases/get-user-certification-eligibility'); +import { sinon, expect, domainBuilder } from '../../../test-helper.js'; +import { getUserCertificationEligibility } from '../../../../lib/domain/usecases/get-user-certification-eligibility.js'; describe('Unit | UseCase | get-user-certification-eligibility', function () { let clock; diff --git a/api/tests/unit/domain/usecases/get-user-details-for-admin_test.js b/api/tests/unit/domain/usecases/get-user-details-for-admin_test.js index df26ba9fee3..4db6e331c9e 100644 --- a/api/tests/unit/domain/usecases/get-user-details-for-admin_test.js +++ b/api/tests/unit/domain/usecases/get-user-details-for-admin_test.js @@ -1,6 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); - -const getUserDetailsForAdmin = require('../../../../lib/domain/usecases/get-user-details-for-admin'); +import { expect, sinon } from '../../../test-helper.js'; +import { getUserDetailsForAdmin } from '../../../../lib/domain/usecases/get-user-details-for-admin.js'; describe('Unit | UseCase | get-user-details-for-admin', function () { let userRepository; diff --git a/api/tests/unit/domain/usecases/get-user-profile-shared-for-campaign_test.js b/api/tests/unit/domain/usecases/get-user-profile-shared-for-campaign_test.js index 7a44e438c75..52e951b5098 100644 --- a/api/tests/unit/domain/usecases/get-user-profile-shared-for-campaign_test.js +++ b/api/tests/unit/domain/usecases/get-user-profile-shared-for-campaign_test.js @@ -1,8 +1,8 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const getUserProfileSharedForCampaign = require('../../../../lib/domain/usecases/get-user-profile-shared-for-campaign'); -const Scorecard = require('../../../../lib/domain/models/Scorecard'); -const { NoCampaignParticipationForUserAndCampaign } = require('../../../../lib/domain/errors'); -const { constants } = require('../../../../lib/domain/constants'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { getUserProfileSharedForCampaign } from '../../../../lib/domain/usecases/get-user-profile-shared-for-campaign.js'; +import { Scorecard } from '../../../../lib/domain/models/Scorecard.js'; +import { NoCampaignParticipationForUserAndCampaign } from '../../../../lib/domain/errors.js'; +import { constants } from '../../../../lib/domain/constants.js'; describe('Unit | UseCase | get-user-profile-shared-for-campaign', function () { const sharedAt = new Date('2020-02-01'); diff --git a/api/tests/unit/domain/usecases/get-user-profile_test.js b/api/tests/unit/domain/usecases/get-user-profile_test.js index 8b81cfa21cb..20e077d131f 100644 --- a/api/tests/unit/domain/usecases/get-user-profile_test.js +++ b/api/tests/unit/domain/usecases/get-user-profile_test.js @@ -1,8 +1,8 @@ -const { sinon, expect, domainBuilder } = require('../../../test-helper'); -const Scorecard = require('../../../../lib/domain/models/Scorecard'); -const getUserProfile = require('../../../../lib/domain/usecases/get-user-profile'); -const { constants } = require('../../../../lib/domain/constants'); -const _ = require('lodash'); +import { sinon, expect, domainBuilder } from '../../../test-helper.js'; +import { Scorecard } from '../../../../lib/domain/models/Scorecard.js'; +import { getUserProfile } from '../../../../lib/domain/usecases/get-user-profile.js'; +import { constants } from '../../../../lib/domain/constants.js'; +import _ from 'lodash'; function assertScorecard(userScorecard, expectedUserScorecard) { expect(userScorecard.earnedPix).to.equal(expectedUserScorecard.earnedPix); diff --git a/api/tests/unit/domain/usecases/handle-badge-acquisition_test.js b/api/tests/unit/domain/usecases/handle-badge-acquisition_test.js index e6d9c04caff..6441b391288 100644 --- a/api/tests/unit/domain/usecases/handle-badge-acquisition_test.js +++ b/api/tests/unit/domain/usecases/handle-badge-acquisition_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const handleBadgeAcquisition = require('../../../../lib/domain/usecases/handle-badge-acquisition'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { handleBadgeAcquisition } from '../../../../lib/domain/usecases/handle-badge-acquisition.js'; describe('Unit | UseCase | handle-badge-acquisition', function () { let domainTransaction; diff --git a/api/tests/unit/domain/usecases/handle-training-recommendation_test.js b/api/tests/unit/domain/usecases/handle-training-recommendation_test.js index a60b8ffa28b..01a180f0aab 100644 --- a/api/tests/unit/domain/usecases/handle-training-recommendation_test.js +++ b/api/tests/unit/domain/usecases/handle-training-recommendation_test.js @@ -1,5 +1,5 @@ -const handleTrainingRecommendation = require('../../../../lib/domain/usecases/handle-training-recommendation'); -const { expect, sinon, domainBuilder } = require('../../../test-helper'); +import { handleTrainingRecommendation } from '../../../../lib/domain/usecases/handle-training-recommendation.js'; +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; describe('Unit | UseCase | handle-training-recommendation', function () { let trainingRepository; diff --git a/api/tests/unit/domain/usecases/import-certification-candidates-from-candidates-import-sheet_test.js b/api/tests/unit/domain/usecases/import-certification-candidates-from-candidates-import-sheet_test.js index afdf6b4d581..d289ec3f555 100644 --- a/api/tests/unit/domain/usecases/import-certification-candidates-from-candidates-import-sheet_test.js +++ b/api/tests/unit/domain/usecases/import-certification-candidates-from-candidates-import-sheet_test.js @@ -1,8 +1,8 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const { CertificationCandidateAlreadyLinkedToUserError } = require('../../../../lib/domain/errors'); -const importCertificationCandidatesFromCandidatesImportSheet = require('../../../../lib/domain/usecases/import-certification-candidates-from-candidates-import-sheet'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { CertificationCandidateAlreadyLinkedToUserError } from '../../../../lib/domain/errors.js'; +import { importCertificationCandidatesFromCandidatesImportSheet } from '../../../../lib/domain/usecases/import-certification-candidates-from-candidates-import-sheet.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; const i18n = getI18n(); describe('Unit | UseCase | import-certification-candidates-from-attendance-sheet', function () { diff --git a/api/tests/unit/domain/usecases/import-organization-learners-from-siecle_test.js b/api/tests/unit/domain/usecases/import-organization-learners-from-siecle_test.js index b3ee9db5392..62aab381fba 100644 --- a/api/tests/unit/domain/usecases/import-organization-learners-from-siecle_test.js +++ b/api/tests/unit/domain/usecases/import-organization-learners-from-siecle_test.js @@ -1,13 +1,11 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const importOrganizationLearnersFromSIECLEFormat = require('../../../../lib/domain/usecases/import-organization-learners-from-siecle'); -const { FileValidationError, SiecleXmlImportError } = require('../../../../lib/domain/errors'); -const DomainTransaction = require('../../../../lib/infrastructure/DomainTransaction'); - -const OrganizationLearner = require('../../../../lib/domain/models/OrganizationLearner'); - -const fs = require('fs').promises; - -const { getI18n } = require('../../../tooling/i18n/i18n'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { importOrganizationLearnersFromSIECLEFormat } from '../../../../lib/domain/usecases/import-organization-learners-from-siecle.js'; +import { FileValidationError, SiecleXmlImportError } from '../../../../lib/domain/errors.js'; +import { DomainTransaction } from '../../../../lib/infrastructure/DomainTransaction.js'; +import { OrganizationLearner } from '../../../../lib/domain/models/OrganizationLearner.js'; +import fs from 'fs/promises'; + +import { getI18n } from '../../../tooling/i18n/i18n.js'; const i18n = getI18n(); describe('Unit | UseCase | import-organization-learners-from-siecle', function () { diff --git a/api/tests/unit/domain/usecases/improve-competence-evaluation_test.js b/api/tests/unit/domain/usecases/improve-competence-evaluation_test.js index 6e4db6ff8ef..bcd4c34bf6d 100644 --- a/api/tests/unit/domain/usecases/improve-competence-evaluation_test.js +++ b/api/tests/unit/domain/usecases/improve-competence-evaluation_test.js @@ -1,8 +1,8 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const improveCompetenceEvaluation = require('../../../../lib/domain/usecases/improve-competence-evaluation'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const { MAX_REACHABLE_LEVEL } = require('../../../../lib/domain/constants'); -const { ImproveCompetenceEvaluationForbiddenError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { improveCompetenceEvaluation } from '../../../../lib/domain/usecases/improve-competence-evaluation.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { MAX_REACHABLE_LEVEL } from '../../../../lib/domain/constants.js'; +import { ImproveCompetenceEvaluationForbiddenError } from '../../../../lib/domain/errors.js'; const domainTransaction = Symbol('DomainTransaction'); diff --git a/api/tests/unit/domain/usecases/link-user-to-session-certification-candidate_test.js b/api/tests/unit/domain/usecases/link-user-to-session-certification-candidate_test.js index 1c8e4e97977..dbae63ba0e8 100644 --- a/api/tests/unit/domain/usecases/link-user-to-session-certification-candidate_test.js +++ b/api/tests/unit/domain/usecases/link-user-to-session-certification-candidate_test.js @@ -1,15 +1,17 @@ -const { catchErr, expect, sinon, domainBuilder } = require('../../../test-helper'); -const linkUserToSessionCertificationCandidate = require('../../../../lib/domain/usecases/link-user-to-session-certification-candidate'); -const { +import { catchErr, expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { linkUserToSessionCertificationCandidate } from '../../../../lib/domain/usecases/link-user-to-session-certification-candidate.js'; + +import { CertificationCandidateByPersonalInfoNotFoundError, MatchingReconciledStudentNotFoundError, CertificationCandidateByPersonalInfoTooManyMatchesError, UserAlreadyLinkedToCandidateInSessionError, SessionNotAccessible, UnexpectedUserAccountError, -} = require('../../../../lib/domain/errors'); -const UserLinkedToCertificationCandidate = require('../../../../lib/domain/events/UserLinkedToCertificationCandidate'); -const UserAlreadyLinkedToCertificationCandidate = require('../../../../lib/domain/events/UserAlreadyLinkedToCertificationCandidate'); +} from '../../../../lib/domain/errors.js'; + +import { UserLinkedToCertificationCandidate } from '../../../../lib/domain/events/UserLinkedToCertificationCandidate.js'; +import { UserAlreadyLinkedToCertificationCandidate } from '../../../../lib/domain/events/UserAlreadyLinkedToCertificationCandidate.js'; describe('Unit | Domain | Use Cases | link-user-to-session-certification-candidate', function () { const sessionId = 42; diff --git a/api/tests/unit/domain/usecases/manually-resolve-certification-issue-report_test.js b/api/tests/unit/domain/usecases/manually-resolve-certification-issue-report_test.js index 489a04ecebb..273dcaafab8 100644 --- a/api/tests/unit/domain/usecases/manually-resolve-certification-issue-report_test.js +++ b/api/tests/unit/domain/usecases/manually-resolve-certification-issue-report_test.js @@ -1,8 +1,6 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const manuallyResolveCertificationIssueReport = require('../../../../lib/domain/usecases/manually-resolve-certification-issue-report'); -const { - CertificationIssueReportAutomaticallyResolvedShouldNotBeUpdatedManually, -} = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { manuallyResolveCertificationIssueReport } from '../../../../lib/domain/usecases/manually-resolve-certification-issue-report.js'; +import { CertificationIssueReportAutomaticallyResolvedShouldNotBeUpdatedManually } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | manually-resolve-certification-issue-report', function () { describe('when certification issue report is not resolved', function () { diff --git a/api/tests/unit/domain/usecases/mark-target-profile-as-simplified-access_test.js b/api/tests/unit/domain/usecases/mark-target-profile-as-simplified-access_test.js index 447f1c02fa3..a0cc8276735 100644 --- a/api/tests/unit/domain/usecases/mark-target-profile-as-simplified-access_test.js +++ b/api/tests/unit/domain/usecases/mark-target-profile-as-simplified-access_test.js @@ -1,5 +1,7 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const { markTargetProfileAsSimplifiedAccess } = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; + +const { markTargetProfileAsSimplifiedAccess } = usecases; describe('Unit | UseCase | mark-target-profile-as-simplified-access', function () { it('should call repository method to update "isSimplifiedAccess" in target profile', async function () { diff --git a/api/tests/unit/domain/usecases/neutralize-challenge_test.js b/api/tests/unit/domain/usecases/neutralize-challenge_test.js index ba2e796a327..327c2776754 100644 --- a/api/tests/unit/domain/usecases/neutralize-challenge_test.js +++ b/api/tests/unit/domain/usecases/neutralize-challenge_test.js @@ -1,7 +1,7 @@ -const { sinon, expect, domainBuilder } = require('../../../test-helper'); -const CertificationAssessment = require('../../../../lib/domain/models/CertificationAssessment'); -const neutralizeChallenge = require('../../../../lib/domain/usecases/neutralize-challenge'); -const ChallengeNeutralized = require('../../../../lib/domain/events/ChallengeNeutralized'); +import { sinon, expect, domainBuilder } from '../../../test-helper.js'; +import { CertificationAssessment } from '../../../../lib/domain/models/CertificationAssessment.js'; +import { neutralizeChallenge } from '../../../../lib/domain/usecases/neutralize-challenge.js'; +import { ChallengeNeutralized } from '../../../../lib/domain/events/ChallengeNeutralized.js'; describe('Unit | UseCase | neutralize-challenge', function () { it('neutralizes a challenge by its recId', async function () { diff --git a/api/tests/unit/domain/usecases/organizations-administration/update-organization-information_test.js b/api/tests/unit/domain/usecases/organizations-administration/update-organization-information_test.js index 6c75051ccd8..06873d469dd 100644 --- a/api/tests/unit/domain/usecases/organizations-administration/update-organization-information_test.js +++ b/api/tests/unit/domain/usecases/organizations-administration/update-organization-information_test.js @@ -1,10 +1,11 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../../test-helper'); -const { updateOrganizationInformation } = require('../../../../../lib/domain/usecases/index.js'); -const { NotFoundError } = require('../../../../../lib/domain/errors'); -const Tag = require('../../../../../lib/domain/models/Tag'); -const OrganizationTag = require('../../../../../lib/domain/models/OrganizationTag'); -const OrganizationForAdmin = require('../../../../../lib/domain/models/organizations-administration/Organization'); -const OidcIdentityProviders = require('../../../../../lib/domain/constants/oidc-identity-providers'); +import { expect, sinon, catchErr, domainBuilder } from '../../../../test-helper.js'; +import { NotFoundError } from '../../../../../lib/domain/errors.js'; +import { Tag } from '../../../../../lib/domain/models/Tag.js'; +import { OrganizationTag } from '../../../../../lib/domain/models/OrganizationTag.js'; +import { OrganizationForAdmin } from '../../../../../lib/domain/models/organizations-administration/Organization.js'; +import * as OidcIdentityProviders from '../../../../../lib/domain/constants/oidc-identity-providers.js'; +import { usecases } from '../../../../../lib/domain/usecases/index.js'; +const { updateOrganizationInformation } = usecases; describe('Unit | UseCase | organizations-administration | update-organization-information', function () { let dataProtectionOfficerRepository; @@ -31,7 +32,7 @@ describe('Unit | UseCase | organizations-administration | update-organization-in }; organizationTagRepository = { create: sinon.stub(), - delete: sinon.stub(), + remove: sinon.stub(), findOneByOrganizationIdAndTagId: sinon.stub(), }; tagRepository = { @@ -436,7 +437,7 @@ describe('Unit | UseCase | organizations-administration | update-organization-in // given const organizationTagToAdd = new OrganizationTag({ organizationId, tagId }); expect(organizationTagRepository.create).to.have.been.calledWith(organizationTagToAdd); - expect(organizationTagRepository.delete).to.have.not.been.called; + expect(organizationTagRepository.remove).to.have.not.been.called; }); it('should allow to unassign a tag to organization', async function () { @@ -477,7 +478,7 @@ describe('Unit | UseCase | organizations-administration | update-organization-in }); // given - expect(organizationTagRepository.delete).to.have.been.calledWith({ + expect(organizationTagRepository.remove).to.have.been.calledWith({ organizationTagId: organizationTagToRemove.id, }); expect(organizationTagRepository.create).to.have.not.been.called; diff --git a/api/tests/unit/domain/usecases/outdate-target-profile_test.js b/api/tests/unit/domain/usecases/outdate-target-profile_test.js index b0c638804f6..1b5758614a1 100644 --- a/api/tests/unit/domain/usecases/outdate-target-profile_test.js +++ b/api/tests/unit/domain/usecases/outdate-target-profile_test.js @@ -1,5 +1,7 @@ -const { expect, sinon } = require('../../../test-helper'); -const { outdateTargetProfile } = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; + +const { outdateTargetProfile } = usecases; describe('Unit | UseCase | outdate-target-profile', function () { it('should call repository method to update a target profile name', async function () { diff --git a/api/tests/unit/domain/usecases/publish-session_test.js b/api/tests/unit/domain/usecases/publish-session_test.js index 37197da1e70..bd25eeb5dcb 100644 --- a/api/tests/unit/domain/usecases/publish-session_test.js +++ b/api/tests/unit/domain/usecases/publish-session_test.js @@ -1,6 +1,5 @@ -const { sinon, expect } = require('../../../test-helper'); - -const publishSession = require('../../../../lib/domain/usecases/publish-session'); +import { sinon, expect } from '../../../test-helper.js'; +import { publishSession } from '../../../../lib/domain/usecases/publish-session.js'; describe('Unit | UseCase | publish-session', function () { it('delegates the action to the session-publication-service and return the session', async function () { diff --git a/api/tests/unit/domain/usecases/publish-sessions-in-batch_test.js b/api/tests/unit/domain/usecases/publish-sessions-in-batch_test.js index 0fbda06363a..6138153bb47 100644 --- a/api/tests/unit/domain/usecases/publish-sessions-in-batch_test.js +++ b/api/tests/unit/domain/usecases/publish-sessions-in-batch_test.js @@ -1,6 +1,5 @@ -const { sinon, expect } = require('../../../test-helper'); - -const publishSessionsInBatch = require('../../../../lib/domain/usecases/publish-sessions-in-batch'); +import { sinon, expect } from '../../../test-helper.js'; +import { publishSessionsInBatch } from '../../../../lib/domain/usecases/publish-sessions-in-batch.js'; describe('Unit | UseCase | publish-sessions-in-batch', function () { let sessionPublicationService; diff --git a/api/tests/unit/domain/usecases/reassign-authentication-method-to-another-user_test.js b/api/tests/unit/domain/usecases/reassign-authentication-method-to-another-user_test.js index 6ff4f5cfb95..3ae34974bc8 100644 --- a/api/tests/unit/domain/usecases/reassign-authentication-method-to-another-user_test.js +++ b/api/tests/unit/domain/usecases/reassign-authentication-method-to-another-user_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const reassignAuthenticationMethodToAnotherUser = require('../../../../lib/domain/usecases/reassign-authentication-method-to-another-user'); -const { AuthenticationMethodAlreadyExistsError, UserNotFoundError } = require('../../../../lib/domain/errors'); -const OidcIdentityProviders = require('../../../../lib/domain/constants/oidc-identity-providers'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { reassignAuthenticationMethodToAnotherUser } from '../../../../lib/domain/usecases/reassign-authentication-method-to-another-user.js'; +import { AuthenticationMethodAlreadyExistsError, UserNotFoundError } from '../../../../lib/domain/errors.js'; +import * as OidcIdentityProviders from '../../../../lib/domain/constants/oidc-identity-providers.js'; describe('Unit | UseCase | reassign-authentication-method-to-another-user', function () { let authenticationMethodRepository, userRepository; diff --git a/api/tests/unit/domain/usecases/reconcile-oidc-user_test.js b/api/tests/unit/domain/usecases/reconcile-oidc-user_test.js index 7844a3df1b1..959ea023890 100644 --- a/api/tests/unit/domain/usecases/reconcile-oidc-user_test.js +++ b/api/tests/unit/domain/usecases/reconcile-oidc-user_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const reconcileOidcUser = require('../../../../lib/domain/usecases/reconcile-oidc-user'); -const { AuthenticationKeyExpired, MissingUserAccountError } = require('../../../../lib/domain/errors'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { reconcileOidcUser } from '../../../../lib/domain/usecases/reconcile-oidc-user.js'; +import { AuthenticationKeyExpired, MissingUserAccountError } from '../../../../lib/domain/errors.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; describe('Unit | UseCase | reconcile-oidc-user', function () { let authenticationMethodRepository, userRepository, authenticationSessionService, oidcAuthenticationService; diff --git a/api/tests/unit/domain/usecases/reconcile-sco-organization-learner-automatically_test.js b/api/tests/unit/domain/usecases/reconcile-sco-organization-learner-automatically_test.js index 8a2dc35e340..68575c5c877 100644 --- a/api/tests/unit/domain/usecases/reconcile-sco-organization-learner-automatically_test.js +++ b/api/tests/unit/domain/usecases/reconcile-sco-organization-learner-automatically_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const reconcileScoOrganizationLearnerAutomatically = require('../../../../lib/domain/usecases/reconcile-sco-organization-learner-automatically.js'); -const OrganizationLearner = require('../../../../lib/domain/models/OrganizationLearner'); -const { CampaignCodeError, UserCouldNotBeReconciledError } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { reconcileScoOrganizationLearnerAutomatically } from '../../../../lib/domain/usecases/reconcile-sco-organization-learner-automatically.js'; +import { OrganizationLearner } from '../../../../lib/domain/models/OrganizationLearner.js'; +import { CampaignCodeError, UserCouldNotBeReconciledError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | reconcile-sco-organization-learner-automatically', function () { let reconcileUserByNationalStudentIdAndOrganizationIdStub; diff --git a/api/tests/unit/domain/usecases/reconcile-sco-organization-learner-manually_test.js b/api/tests/unit/domain/usecases/reconcile-sco-organization-learner-manually_test.js index bf10ba30f98..c18c329e041 100644 --- a/api/tests/unit/domain/usecases/reconcile-sco-organization-learner-manually_test.js +++ b/api/tests/unit/domain/usecases/reconcile-sco-organization-learner-manually_test.js @@ -1,13 +1,13 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const OrganizationLearner = require('../../../../lib/domain/models/OrganizationLearner'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { OrganizationLearner } from '../../../../lib/domain/models/OrganizationLearner.js'; -const { +import { CampaignCodeError, NotFoundError, OrganizationLearnerAlreadyLinkedToUserError, UserShouldNotBeReconciledOnAnotherAccountError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | reconcile-sco-organization-learner-manually', function () { let campaignCode; diff --git a/api/tests/unit/domain/usecases/remember-user-has-seen-assessment-instructions_test.js b/api/tests/unit/domain/usecases/remember-user-has-seen-assessment-instructions_test.js index a97ceda563b..15f0d99f0eb 100644 --- a/api/tests/unit/domain/usecases/remember-user-has-seen-assessment-instructions_test.js +++ b/api/tests/unit/domain/usecases/remember-user-has-seen-assessment-instructions_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const rememberUserHasSeenAssessmentInstructions = require('../../../../lib/domain/usecases/remember-user-has-seen-assessment-instructions'); +import { expect, sinon } from '../../../test-helper.js'; +import { rememberUserHasSeenAssessmentInstructions } from '../../../../lib/domain/usecases/remember-user-has-seen-assessment-instructions.js'; describe('Unit | UseCase | remember-user-has-seen-assessment-instructions', function () { let userRepository; diff --git a/api/tests/unit/domain/usecases/remember-user-has-seen-last-data-protection-policy-information_test.js b/api/tests/unit/domain/usecases/remember-user-has-seen-last-data-protection-policy-information_test.js index 958324f99ef..d501690ae75 100644 --- a/api/tests/unit/domain/usecases/remember-user-has-seen-last-data-protection-policy-information_test.js +++ b/api/tests/unit/domain/usecases/remember-user-has-seen-last-data-protection-policy-information_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const rememberUserHasSeenLastDataProtectionPolicyInformation = require('../../../../lib/domain/usecases/remember-user-has-seen-last-data-protection-policy-information'); -const User = require('../../../../lib/domain/models/User'); +import { expect, sinon } from '../../../test-helper.js'; +import { rememberUserHasSeenLastDataProtectionPolicyInformation } from '../../../../lib/domain/usecases/remember-user-has-seen-last-data-protection-policy-information.js'; +import { User } from '../../../../lib/domain/models/User.js'; describe('Unit | UseCase | remember-user-has-seen-data-protection-policy-information', function () { let userRepository; diff --git a/api/tests/unit/domain/usecases/remove-authentication-method_test.js b/api/tests/unit/domain/usecases/remove-authentication-method_test.js index 5bfdd725639..d52ed0e3a77 100644 --- a/api/tests/unit/domain/usecases/remove-authentication-method_test.js +++ b/api/tests/unit/domain/usecases/remove-authentication-method_test.js @@ -1,8 +1,8 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const removeAuthenticationMethod = require('../../../../lib/domain/usecases/remove-authentication-method'); -const { UserNotAuthorizedToRemoveAuthenticationMethod } = require('../../../../lib/domain/errors'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); -const OidcIdentityProviders = require('../../../../lib/domain/constants/oidc-identity-providers'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { removeAuthenticationMethod } from '../../../../lib/domain/usecases/remove-authentication-method.js'; +import { UserNotAuthorizedToRemoveAuthenticationMethod } from '../../../../lib/domain/errors.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; +import * as OidcIdentityProviders from '../../../../lib/domain/constants/oidc-identity-providers.js'; describe('Unit | UseCase | remove-authentication-method', function () { let userRepository; diff --git a/api/tests/unit/domain/usecases/replace-sup-organization-learners_test.js b/api/tests/unit/domain/usecases/replace-sup-organization-learners_test.js index 840421393ec..120e3d07d75 100644 --- a/api/tests/unit/domain/usecases/replace-sup-organization-learners_test.js +++ b/api/tests/unit/domain/usecases/replace-sup-organization-learners_test.js @@ -1,6 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); - -const replaceSupOrganizationLearners = require('../../../../lib/domain/usecases/replace-sup-organization-learner'); +import { expect, sinon } from '../../../test-helper.js'; +import { replaceSupOrganizationLearners } from '../../../../lib/domain/usecases/replace-sup-organization-learner.js'; describe('Unit | UseCase | ImportSupOrganizationLearner', function () { it('parses the csv received and replace the SupOrganizationLearner', async function () { diff --git a/api/tests/unit/domain/usecases/resend-organization-invitation_test.js b/api/tests/unit/domain/usecases/resend-organization-invitation_test.js index 24a245ef16a..d6c1822fe97 100644 --- a/api/tests/unit/domain/usecases/resend-organization-invitation_test.js +++ b/api/tests/unit/domain/usecases/resend-organization-invitation_test.js @@ -1,6 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); - -const resendOrganizationInvitation = require('../../../../lib/domain/usecases/resend-organization-invitation'); +import { expect, sinon } from '../../../test-helper.js'; +import { resendOrganizationInvitation } from '../../../../lib/domain/usecases/resend-organization-invitation.js'; describe('Unit | UseCase | resend-organization-invitation', function () { describe('#resendOrganizationInvitation', function () { diff --git a/api/tests/unit/domain/usecases/reset-scorecard_test.js b/api/tests/unit/domain/usecases/reset-scorecard_test.js index a1ac5f51781..2a3baf08913 100644 --- a/api/tests/unit/domain/usecases/reset-scorecard_test.js +++ b/api/tests/unit/domain/usecases/reset-scorecard_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const Scorecard = require('../../../../lib/domain/models/Scorecard'); -const resetScorecard = require('../../../../lib/domain/usecases/reset-scorecard'); -const { CompetenceResetError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { Scorecard } from '../../../../lib/domain/models/Scorecard.js'; +import { resetScorecard } from '../../../../lib/domain/usecases/reset-scorecard.js'; +import { CompetenceResetError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | reset-scorecard', function () { let knowledgeElements, resetScorecardResult, scorecard; diff --git a/api/tests/unit/domain/usecases/retrieve-last-or-create-certification-course_test.js b/api/tests/unit/domain/usecases/retrieve-last-or-create-certification-course_test.js index e00f3ec57b2..c666c4d7064 100644 --- a/api/tests/unit/domain/usecases/retrieve-last-or-create-certification-course_test.js +++ b/api/tests/unit/domain/usecases/retrieve-last-or-create-certification-course_test.js @@ -1,17 +1,19 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const { +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; + +import { UserNotAuthorizedToCertifyError, NotFoundError, SessionNotAccessible, CandidateNotAuthorizedToJoinSessionError, CandidateNotAuthorizedToResumeCertificationTestError, UnexpectedUserAccountError, -} = require('../../../../lib/domain/errors'); -const retrieveLastOrCreateCertificationCourse = require('../../../../lib/domain/usecases/retrieve-last-or-create-certification-course'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const CertificationCourse = require('../../../../lib/domain/models/CertificationCourse'); -const ComplementaryCertificationCourse = require('../../../../lib/domain/models/ComplementaryCertificationCourse'); -const _ = require('lodash'); +} from '../../../../lib/domain/errors.js'; + +import { retrieveLastOrCreateCertificationCourse } from '../../../../lib/domain/usecases/retrieve-last-or-create-certification-course.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { CertificationCourse } from '../../../../lib/domain/models/CertificationCourse.js'; +import { ComplementaryCertificationCourse } from '../../../../lib/domain/models/ComplementaryCertificationCourse.js'; +import _ from 'lodash'; describe('Unit | UseCase | retrieve-last-or-create-certification-course', function () { let clock; diff --git a/api/tests/unit/domain/usecases/revoke-refresh-token_test.js b/api/tests/unit/domain/usecases/revoke-refresh-token_test.js index ea17b2e45b2..6e9a2dd4f5c 100644 --- a/api/tests/unit/domain/usecases/revoke-refresh-token_test.js +++ b/api/tests/unit/domain/usecases/revoke-refresh-token_test.js @@ -1,5 +1,5 @@ -const revokeRefreshToken = require('../../../../lib/domain/usecases/revoke-refresh-token'); -const { expect, sinon } = require('../../../test-helper'); +import { revokeRefreshToken } from '../../../../lib/domain/usecases/revoke-refresh-token.js'; +import { expect, sinon } from '../../../test-helper.js'; describe('Unit | UseCase | revoke-refresh-token', function () { it('should revoke refresh token', async function () { diff --git a/api/tests/unit/domain/usecases/save-admin-member_test.js b/api/tests/unit/domain/usecases/save-admin-member_test.js index b6023fe904c..e7db6ced5e9 100644 --- a/api/tests/unit/domain/usecases/save-admin-member_test.js +++ b/api/tests/unit/domain/usecases/save-admin-member_test.js @@ -1,8 +1,11 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const saveAdminMember = require('../../../../lib/domain/usecases/save-admin-member'); -const { ROLES } = require('../../../../lib/domain/constants').PIX_ADMIN; -const { AlreadyExistingAdminMemberError, UserNotFoundError } = require('../../../../lib/domain/errors'); -const AdminMember = require('../../../../lib/domain/models/AdminMember'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { saveAdminMember } from '../../../../lib/domain/usecases/save-admin-member.js'; +import { PIX_ADMIN } from '../../../../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; + +import { AlreadyExistingAdminMemberError, UserNotFoundError } from '../../../../lib/domain/errors.js'; +import { AdminMember } from '../../../../lib/domain/models/AdminMember.js'; describe('Unit | UseCase | save-admin-member', function () { context('when admin member email is not found', function () { diff --git a/api/tests/unit/domain/usecases/save-certification-issue-report_test.js b/api/tests/unit/domain/usecases/save-certification-issue-report_test.js index bbd39b26960..a3558b51b85 100644 --- a/api/tests/unit/domain/usecases/save-certification-issue-report_test.js +++ b/api/tests/unit/domain/usecases/save-certification-issue-report_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const saveCertificationIssueReport = require('../../../../lib/domain/usecases/save-certification-issue-report'); -const CertificationIssueReport = require('../../../../lib/domain/models/CertificationIssueReport'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { saveCertificationIssueReport } from '../../../../lib/domain/usecases/save-certification-issue-report.js'; +import { CertificationIssueReport } from '../../../../lib/domain/models/CertificationIssueReport.js'; describe('Unit | UseCase | save-certification-issue-report', function () { describe('#saveCertificationIssueReport', function () { diff --git a/api/tests/unit/domain/usecases/save-computed-campaign-participation-result_test.js b/api/tests/unit/domain/usecases/save-computed-campaign-participation-result_test.js index e395073e926..5b970f8ca98 100644 --- a/api/tests/unit/domain/usecases/save-computed-campaign-participation-result_test.js +++ b/api/tests/unit/domain/usecases/save-computed-campaign-participation-result_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const saveComputedCampaignParticipationResult = require('../../../../lib/domain/usecases/save-computed-campaign-participation-result'); +import { expect, sinon } from '../../../test-helper.js'; +import { saveComputedCampaignParticipationResult } from '../../../../lib/domain/usecases/save-computed-campaign-participation-result.js'; describe('Unit | Domain | UseCases | SaveComputedCompaignParticipationResult', function () { it('should compute results and save', async function () { diff --git a/api/tests/unit/domain/usecases/save-jury-complementary-certification-course-result_test.js b/api/tests/unit/domain/usecases/save-jury-complementary-certification-course-result_test.js index 24537749123..1550068741e 100644 --- a/api/tests/unit/domain/usecases/save-jury-complementary-certification-course-result_test.js +++ b/api/tests/unit/domain/usecases/save-jury-complementary-certification-course-result_test.js @@ -1,8 +1,7 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); - -const saveJuryComplementaryCertificationCourseResult = require('../../../../lib/domain/usecases/save-jury-complementary-certification-course-result'); -const { NotFoundError, InvalidJuryLevelError } = require('../../../../lib/domain/errors'); -const ComplementaryCertificationCourseResult = require('../../../../lib/domain/models/ComplementaryCertificationCourseResult'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { saveJuryComplementaryCertificationCourseResult } from '../../../../lib/domain/usecases/save-jury-complementary-certification-course-result.js'; +import { NotFoundError, InvalidJuryLevelError } from '../../../../lib/domain/errors.js'; +import { ComplementaryCertificationCourseResult } from '../../../../lib/domain/models/ComplementaryCertificationCourseResult.js'; describe('Unit | UseCase | save-jury-complementary-certification-course-results', function () { describe('#saveJuryComplementaryCertificationCourseResult', function () { diff --git a/api/tests/unit/domain/usecases/send-sco-invitation_test.js b/api/tests/unit/domain/usecases/send-sco-invitation_test.js index abcb7e2787a..6e5e50c4948 100644 --- a/api/tests/unit/domain/usecases/send-sco-invitation_test.js +++ b/api/tests/unit/domain/usecases/send-sco-invitation_test.js @@ -1,11 +1,12 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const sendScoInvitation = require('../../../../lib/domain/usecases/send-sco-invitation.js'); -const { +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { sendScoInvitation } from '../../../../lib/domain/usecases/send-sco-invitation.js'; + +import { OrganizationNotFoundError, OrganizationWithoutEmailError, ManyOrganizationsFoundError, OrganizationArchivedError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | send-sco-invitation', function () { let organizationRepository, organizationInvitationRepository, organizationInvitationService; diff --git a/api/tests/unit/domain/usecases/send-shared-participation-results-to-pole-emploi_test.js b/api/tests/unit/domain/usecases/send-shared-participation-results-to-pole-emploi_test.js index c96ea2a9b6a..3bb86f5f996 100644 --- a/api/tests/unit/domain/usecases/send-shared-participation-results-to-pole-emploi_test.js +++ b/api/tests/unit/domain/usecases/send-shared-participation-results-to-pole-emploi_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const PoleEmploiSending = require('../../../../lib/domain/models/PoleEmploiSending'); -const PoleEmploiPayload = require('../../../../lib/infrastructure/externals/pole-emploi/PoleEmploiPayload'); -const sendSharedParticipationResultsToPoleEmploi = require('../../../../lib/domain/usecases/send-shared-participation-results-to-pole-emploi'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { PoleEmploiSending } from '../../../../lib/domain/models/PoleEmploiSending.js'; +import { PoleEmploiPayload } from '../../../../lib/infrastructure/externals/pole-emploi/PoleEmploiPayload.js'; +import { sendSharedParticipationResultsToPoleEmploi } from '../../../../lib/domain/usecases/send-shared-participation-results-to-pole-emploi.js'; describe('Unit | Domain | UseCase | send-shared-participation-results-to-pole-emploi', function () { let dependencies, expectedResults; diff --git a/api/tests/unit/domain/usecases/send-verification-code_test.js b/api/tests/unit/domain/usecases/send-verification-code_test.js index bafc4f02e8a..440acdb8e82 100644 --- a/api/tests/unit/domain/usecases/send-verification-code_test.js +++ b/api/tests/unit/domain/usecases/send-verification-code_test.js @@ -1,13 +1,14 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const { +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; + +import { AlreadyRegisteredEmailError, InvalidPasswordForUpdateEmailError, UserNotAuthorizedToUpdateEmailError, -} = require('../../../../lib/domain/errors'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +} from '../../../../lib/domain/errors.js'; -const usecases = require('../../../../lib/domain/usecases/index.js'); +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; describe('Unit | UseCase | send-verification-code', function () { let authenticationMethodRepository; diff --git a/api/tests/unit/domain/usecases/sessions-mass-import/create-sessions_test.js b/api/tests/unit/domain/usecases/sessions-mass-import/create-sessions_test.js index bb745c92755..fe4655417a2 100644 --- a/api/tests/unit/domain/usecases/sessions-mass-import/create-sessions_test.js +++ b/api/tests/unit/domain/usecases/sessions-mass-import/create-sessions_test.js @@ -1,8 +1,8 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../../test-helper'); -const { NotFoundError } = require('../../../../../lib/domain/errors'); -const createSessions = require('../../../../../lib/domain/usecases/sessions-mass-import/create-sessions'); -const DomainTransaction = require('../../../../../lib/infrastructure/DomainTransaction'); -const Session = require('../../../../../lib/domain/models/Session'); +import { expect, sinon, catchErr, domainBuilder } from '../../../../test-helper.js'; +import { NotFoundError } from '../../../../../lib/domain/errors.js'; +import { createSessions } from '../../../../../lib/domain/usecases/sessions-mass-import/create-sessions.js'; +import { DomainTransaction } from '../../../../../lib/infrastructure/DomainTransaction.js'; +import { Session } from '../../../../../lib/domain/models/Session.js'; describe('Unit | UseCase | sessions-mass-import | create-sessions', function () { let certificationCandidateRepository; @@ -13,7 +13,10 @@ describe('Unit | UseCase | sessions-mass-import | create-sessions', function () beforeEach(function () { certificationCandidateRepository = { saveInSession: sinon.stub(), deleteBySessionId: sinon.stub() }; sessionRepository = { save: sinon.stub() }; - temporarySessionsStorageForMassImportService = { getByKeyAndUserId: sinon.stub(), delete: sinon.stub() }; + temporarySessionsStorageForMassImportService = { + getByKeyAndUserId: sinon.stub(), + remove: sinon.stub(), + }; dependencies = { certificationCandidateRepository, @@ -188,7 +191,7 @@ describe('Unit | UseCase | sessions-mass-import | create-sessions', function () }); // then - expect(temporarySessionsStorageForMassImportService.delete).to.have.been.calledOnceWith({ + expect(temporarySessionsStorageForMassImportService.remove).to.have.been.calledOnceWith({ cachedValidatedSessionsKey, userId, }); diff --git a/api/tests/unit/domain/usecases/sessions-mass-import/validate-sessions_test.js b/api/tests/unit/domain/usecases/sessions-mass-import/validate-sessions_test.js index 33ba895ec46..4fd28e5fd61 100644 --- a/api/tests/unit/domain/usecases/sessions-mass-import/validate-sessions_test.js +++ b/api/tests/unit/domain/usecases/sessions-mass-import/validate-sessions_test.js @@ -1,11 +1,11 @@ -const { domainBuilder, expect, sinon } = require('../../../../test-helper'); -const validateSessions = require('../../../../../lib/domain/usecases/sessions-mass-import/validate-sessions'); -const Session = require('../../../../../lib/domain/models/Session'); -const { CpfBirthInformationValidation } = require('../../../../../lib/domain/services/certification-cpf-service'); -const CertificationCandidate = require('../../../../../lib/domain/models/CertificationCandidate'); -const { CERTIFICATION_SESSIONS_ERRORS } = require('../../../../../lib/domain/constants/sessions-errors'); -const SessionMassImportReport = require('../../../../../lib/domain/models/SessionMassImportReport'); -const { getI18n } = require('../../../../tooling/i18n/i18n'); +import { domainBuilder, expect, sinon } from '../../../../test-helper.js'; +import { validateSessions } from '../../../../../lib/domain/usecases/sessions-mass-import/validate-sessions.js'; +import { Session } from '../../../../../lib/domain/models/Session.js'; +import { CpfBirthInformationValidation } from '../../../../../lib/domain/services/certification-cpf-service.js'; +import { CertificationCandidate } from '../../../../../lib/domain/models/CertificationCandidate.js'; +import { CERTIFICATION_SESSIONS_ERRORS } from '../../../../../lib/domain/constants/sessions-errors.js'; +import { SessionMassImportReport } from '../../../../../lib/domain/models/SessionMassImportReport.js'; +import { getI18n } from '../../../../tooling/i18n/i18n.js'; describe('Unit | UseCase | sessions-mass-import | validate-sessions', function () { let accessCode; @@ -13,13 +13,11 @@ describe('Unit | UseCase | sessions-mass-import | validate-sessions', function ( let certificationCenterName; let certificationCenter; let certificationCenterRepository; - let certificationCandidateRepository; let certificationCourseRepository; let complementaryCertificationRepository; // eslint-disable-next-line mocha/no-setup-in-describe const i18n = getI18n(); let sessionCodeService; - let sessionsImportValidationService; let temporarySessionsStorageForMassImportService; @@ -216,7 +214,6 @@ describe('Unit | UseCase | sessions-mass-import | validate-sessions', function ( userId, certificationCenterId, certificationCenterRepository, - certificationCandidateRepository, certificationCourseRepository, sessionCodeService, i18n, @@ -384,11 +381,13 @@ describe('Unit | UseCase | sessions-mass-import | validate-sessions', function ( ], }); + certificationCenterRepository.get.withArgs(certificationCenterId).resolves(certificationCenter); + // when const sessionsMassImportReport = await validateSessions({ sessions, - certificationCenterId, certificationCenterRepository, + certificationCenterId, sessionCodeService, i18n, sessionsImportValidationService, diff --git a/api/tests/unit/domain/usecases/share-campaign-result_test.js b/api/tests/unit/domain/usecases/share-campaign-result_test.js index fbdbcbcfd92..075b711a05e 100644 --- a/api/tests/unit/domain/usecases/share-campaign-result_test.js +++ b/api/tests/unit/domain/usecases/share-campaign-result_test.js @@ -1,7 +1,7 @@ -const { sinon, expect, domainBuilder, catchErr } = require('../../../test-helper'); -const { UserNotAuthorizedToAccessEntityError } = require('../../../../lib/domain/errors'); -const CampaignParticipationResultsShared = require('../../../../lib/domain/events/CampaignParticipationResultsShared'); -const shareCampaignResult = require('../../../../lib/domain/usecases/share-campaign-result'); +import { sinon, expect, domainBuilder, catchErr } from '../../../test-helper.js'; +import { UserNotAuthorizedToAccessEntityError } from '../../../../lib/domain/errors.js'; +import { CampaignParticipationResultsShared } from '../../../../lib/domain/events/CampaignParticipationResultsShared.js'; +import { shareCampaignResult } from '../../../../lib/domain/usecases/share-campaign-result.js'; describe('Unit | UseCase | share-campaign-result', function () { let campaignParticipationRepository; diff --git a/api/tests/unit/domain/usecases/start-campaign-participation_test.js b/api/tests/unit/domain/usecases/start-campaign-participation_test.js index f475a64981d..6c3c3d7432f 100644 --- a/api/tests/unit/domain/usecases/start-campaign-participation_test.js +++ b/api/tests/unit/domain/usecases/start-campaign-participation_test.js @@ -1,7 +1,7 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const startCampaignParticipation = require('../../../../lib/domain/usecases/start-campaign-participation'); -const CampaignParticipationStarted = require('../../../../lib/domain/events/CampaignParticipationStarted'); -const CampaignParticipant = require('../../../../lib/domain/models/CampaignParticipant'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { startCampaignParticipation } from '../../../../lib/domain/usecases/start-campaign-participation.js'; +import { CampaignParticipationStarted } from '../../../../lib/domain/events/CampaignParticipationStarted.js'; +import { CampaignParticipant } from '../../../../lib/domain/models/CampaignParticipant.js'; describe('Unit | UseCase | start-campaign-participation', function () { const userId = 19837482; diff --git a/api/tests/unit/domain/usecases/start-or-resume-competence-evaluation_test.js b/api/tests/unit/domain/usecases/start-or-resume-competence-evaluation_test.js index 99d7fcf8ab8..84761d778ab 100644 --- a/api/tests/unit/domain/usecases/start-or-resume-competence-evaluation_test.js +++ b/api/tests/unit/domain/usecases/start-or-resume-competence-evaluation_test.js @@ -1,9 +1,9 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const CompetenceEvaluation = require('../../../../lib/domain/models/CompetenceEvaluation'); -const usecases = require('../../../../lib/domain/usecases/index.js'); -const { NotFoundError } = require('../../../../lib/domain/errors'); -const _ = require('lodash'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { CompetenceEvaluation } from '../../../../lib/domain/models/CompetenceEvaluation.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; +import _ from 'lodash'; describe('Unit | UseCase | start-or-resume-competence-evaluation', function () { const userId = 123; diff --git a/api/tests/unit/domain/usecases/start-writing-campaign-assessment-results-to-stream_test.js b/api/tests/unit/domain/usecases/start-writing-campaign-assessment-results-to-stream_test.js index b242512fd59..399d61b8c43 100644 --- a/api/tests/unit/domain/usecases/start-writing-campaign-assessment-results-to-stream_test.js +++ b/api/tests/unit/domain/usecases/start-writing-campaign-assessment-results-to-stream_test.js @@ -1,10 +1,13 @@ -const { PassThrough } = require('stream'); -const { expect, sinon, domainBuilder, streamToPromise, catchErr } = require('../../../test-helper'); -const startWritingCampaignAssessmentResultsToStream = require('../../../../lib/domain/usecases/start-writing-campaign-assessment-results-to-stream'); -const { UserNotAuthorizedToGetCampaignResultsError, CampaignTypeError } = require('../../../../lib/domain/errors'); -const campaignCsvExportService = require('../../../../lib/domain/services/campaign-csv-export-service'); -const { getI18n } = require('../../../tooling/i18n/i18n'); -const StageCollection = require('../../../../lib/domain/models/user-campaign-results/StageCollection'); +import stream from 'stream'; + +const { PassThrough } = stream; + +import { expect, sinon, domainBuilder, streamToPromise, catchErr } from '../../../test-helper.js'; +import { startWritingCampaignAssessmentResultsToStream } from '../../../../lib/domain/usecases/start-writing-campaign-assessment-results-to-stream.js'; +import { UserNotAuthorizedToGetCampaignResultsError, CampaignTypeError } from '../../../../lib/domain/errors.js'; +import * as campaignCsvExportService from '../../../../lib/domain/services/campaign-csv-export-service.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; +import { StageCollection } from '../../../../lib/domain/models/user-campaign-results/StageCollection.js'; describe('Unit | Domain | Use Cases | start-writing-campaign-assessment-results-to-stream', function () { const campaignRepository = { get: () => undefined }; diff --git a/api/tests/unit/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream_test.js b/api/tests/unit/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream_test.js index 07cb0faebe7..bd04af843e7 100644 --- a/api/tests/unit/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream_test.js +++ b/api/tests/unit/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream_test.js @@ -1,9 +1,12 @@ -const { PassThrough } = require('stream'); -const { expect, sinon, domainBuilder, streamToPromise, catchErr } = require('../../../test-helper'); -const startWritingCampaignProfilesCollectionResultsToStream = require('../../../../lib/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream'); -const { UserNotAuthorizedToGetCampaignResultsError, CampaignTypeError } = require('../../../../lib/domain/errors'); -const CampaignProfilesCollectionExport = require('../../../../lib/infrastructure/serializers/csv/campaign-profiles-collection-export'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +import stream from 'stream'; + +const { PassThrough } = stream; + +import { expect, sinon, domainBuilder, streamToPromise, catchErr } from '../../../test-helper.js'; +import { startWritingCampaignProfilesCollectionResultsToStream } from '../../../../lib/domain/usecases/start-writing-campaign-profiles-collection-results-to-stream.js'; +import { UserNotAuthorizedToGetCampaignResultsError, CampaignTypeError } from '../../../../lib/domain/errors.js'; +import { CampaignProfilesCollectionExport } from '../../../../lib/infrastructure/serializers/csv/campaign-profiles-collection-export.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; describe('Unit | Domain | Use Cases | start-writing-campaign-profiles-collection-results-to-stream', function () { const campaignRepository = { get: () => undefined }; diff --git a/api/tests/unit/domain/usecases/supervise-session_test.js b/api/tests/unit/domain/usecases/supervise-session_test.js index 7c2c5d1df83..3044608629e 100644 --- a/api/tests/unit/domain/usecases/supervise-session_test.js +++ b/api/tests/unit/domain/usecases/supervise-session_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, domainBuilder, catchErr } = require('../../../test-helper'); -const superviseSession = require('../../../../lib/domain/usecases/supervise-session'); -const { InvalidSessionSupervisingLoginError, SessionNotAccessible } = require('../../../../lib/domain/errors'); +import { expect, sinon, domainBuilder, catchErr } from '../../../test-helper.js'; +import { superviseSession } from '../../../../lib/domain/usecases/supervise-session.js'; +import { InvalidSessionSupervisingLoginError, SessionNotAccessible } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | supervise-session', function () { let sessionRepository; diff --git a/api/tests/unit/domain/usecases/unarchive-campaign_test.js b/api/tests/unit/domain/usecases/unarchive-campaign_test.js index 201bdcf0681..849a9dafab4 100644 --- a/api/tests/unit/domain/usecases/unarchive-campaign_test.js +++ b/api/tests/unit/domain/usecases/unarchive-campaign_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const unarchiveCampaign = require('../../../../lib/domain/usecases/unarchive-campaign'); -const Campaign = require('../../../../lib/domain/models/CampaignForArchiving'); +import { expect, sinon } from '../../../test-helper.js'; +import { unarchiveCampaign } from '../../../../lib/domain/usecases/unarchive-campaign.js'; +import { CampaignForArchiving as Campaign } from '../../../../lib/domain/models/CampaignForArchiving.js'; describe('Unit | UseCase | unarchive-campaign', function () { let campaignForArchivingRepository; diff --git a/api/tests/unit/domain/usecases/uncancel-certification-course_test.js b/api/tests/unit/domain/usecases/uncancel-certification-course_test.js index 62639891f30..4bd8095b288 100644 --- a/api/tests/unit/domain/usecases/uncancel-certification-course_test.js +++ b/api/tests/unit/domain/usecases/uncancel-certification-course_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const uncancelCertificationCourse = require('../../../../lib/domain/usecases/uncancel-certification-course'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { uncancelCertificationCourse } from '../../../../lib/domain/usecases/uncancel-certification-course.js'; describe('Unit | UseCase | uncancel-certification-course', function () { it('should uncancel the certification course', async function () { diff --git a/api/tests/unit/domain/usecases/unpublish-session_test.js b/api/tests/unit/domain/usecases/unpublish-session_test.js index a97ad23dd8a..e05939e2ac7 100644 --- a/api/tests/unit/domain/usecases/unpublish-session_test.js +++ b/api/tests/unit/domain/usecases/unpublish-session_test.js @@ -1,6 +1,6 @@ -const { domainBuilder, sinon, expect } = require('../../../test-helper'); -const unpublishSession = require('../../../../lib/domain/usecases/unpublish-session'); -const FinalizedSession = require('../../../../lib/domain/models/FinalizedSession'); +import { domainBuilder, sinon, expect } from '../../../test-helper.js'; +import { unpublishSession } from '../../../../lib/domain/usecases/unpublish-session.js'; +import { FinalizedSession } from '../../../../lib/domain/models/FinalizedSession.js'; describe('Unit | UseCase | unpublish-session', function () { let certificationRepository; diff --git a/api/tests/unit/domain/usecases/update-admin-member_test.js b/api/tests/unit/domain/usecases/update-admin-member_test.js index a5eb7a79520..aa6e8b54071 100644 --- a/api/tests/unit/domain/usecases/update-admin-member_test.js +++ b/api/tests/unit/domain/usecases/update-admin-member_test.js @@ -1,6 +1,8 @@ -const { expect, sinon } = require('../../../test-helper'); -const updateAdminMember = require('../../../../lib/domain/usecases/update-admin-member'); -const { ROLES } = require('../../../../lib/domain/constants').PIX_ADMIN; +import { expect, sinon } from '../../../test-helper.js'; +import { updateAdminMember } from '../../../../lib/domain/usecases/update-admin-member.js'; +import { PIX_ADMIN } from '../../../../lib/domain/constants.js'; + +const { ROLES } = PIX_ADMIN; describe('Unit | UseCase | update-admin-member', function () { it('should update the given admin member', async function () { diff --git a/api/tests/unit/domain/usecases/update-campaign-details-management_test.js b/api/tests/unit/domain/usecases/update-campaign-details-management_test.js index cc882cfc883..875dacb9c7c 100644 --- a/api/tests/unit/domain/usecases/update-campaign-details-management_test.js +++ b/api/tests/unit/domain/usecases/update-campaign-details-management_test.js @@ -1,7 +1,7 @@ -const { expect, catchErr, domainBuilder } = require('../../../test-helper'); -const updateCampaignDetailsManagement = require('../../../../lib/domain/usecases/update-campaign-details-management'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); -const sinon = require('sinon'); +import { expect, catchErr, domainBuilder } from '../../../test-helper.js'; +import { updateCampaignDetailsManagement } from '../../../../lib/domain/usecases/update-campaign-details-management.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; +import sinon from 'sinon'; describe('Unit | UseCase | update-campaign-details-management', function () { let campaignManagementRepository; diff --git a/api/tests/unit/domain/usecases/update-campaign_test.js b/api/tests/unit/domain/usecases/update-campaign_test.js index 1fd5b2b1111..8c9fb63cc07 100644 --- a/api/tests/unit/domain/usecases/update-campaign_test.js +++ b/api/tests/unit/domain/usecases/update-campaign_test.js @@ -1,6 +1,6 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const updateCampaign = require('../../../../lib/domain/usecases/update-campaign'); -const { UserNotAuthorizedToUpdateResourceError, EntityValidationError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { updateCampaign } from '../../../../lib/domain/usecases/update-campaign.js'; +import { UserNotAuthorizedToUpdateResourceError, EntityValidationError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | update-campaign', function () { let originalCampaign; diff --git a/api/tests/unit/domain/usecases/update-certification-center-referer_test.js b/api/tests/unit/domain/usecases/update-certification-center-referer_test.js index 955684accc3..4dcff72f432 100644 --- a/api/tests/unit/domain/usecases/update-certification-center-referer_test.js +++ b/api/tests/unit/domain/usecases/update-certification-center-referer_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const updateCertificationCenterReferer = require('../../../../lib/domain/usecases/update-certification-center-referer'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import { updateCertificationCenterReferer } from '../../../../lib/domain/usecases/update-certification-center-referer.js'; describe('Unit | UseCase | update-certification-center-referer', function () { context('when there is already a referer', function () { diff --git a/api/tests/unit/domain/usecases/update-expired-password_test.js b/api/tests/unit/domain/usecases/update-expired-password_test.js index 3a7e1522bf7..ca169139f89 100644 --- a/api/tests/unit/domain/usecases/update-expired-password_test.js +++ b/api/tests/unit/domain/usecases/update-expired-password_test.js @@ -1,9 +1,8 @@ -const { sinon, expect, domainBuilder, catchErr } = require('../../../test-helper'); - -const { ForbiddenAccess, UserNotFoundError } = require('../../../../lib/domain/errors'); -const AuthenticationMethod = require('../../../../lib/domain/models/AuthenticationMethod'); -const updateExpiredPassword = require('../../../../lib/domain/usecases/update-expired-password'); -const logger = require('../../../../lib/infrastructure/logger'); +import { sinon, expect, domainBuilder, catchErr } from '../../../test-helper.js'; +import { ForbiddenAccess, UserNotFoundError } from '../../../../lib/domain/errors.js'; +import { AuthenticationMethod } from '../../../../lib/domain/models/AuthenticationMethod.js'; +import { updateExpiredPassword } from '../../../../lib/domain/usecases/update-expired-password.js'; +import { logger } from '../../../../lib/infrastructure/logger.js'; describe('Unit | UseCase | update-expired-password', function () { const passwordResetToken = 'PASSWORD_RESET_TOKEN'; diff --git a/api/tests/unit/domain/usecases/update-last-question-state_test.js b/api/tests/unit/domain/usecases/update-last-question-state_test.js index 5532caec85d..334ca9ad4d0 100644 --- a/api/tests/unit/domain/usecases/update-last-question-state_test.js +++ b/api/tests/unit/domain/usecases/update-last-question-state_test.js @@ -1,6 +1,6 @@ -const { sinon, domainBuilder } = require('../../../test-helper'); -const Assessment = require('../../../../lib/domain/models/Assessment'); -const updateLastQuestionState = require('../../../../lib/domain/usecases/update-last-question-state'); +import { sinon, domainBuilder } from '../../../test-helper.js'; +import { Assessment } from '../../../../lib/domain/models/Assessment.js'; +import { updateLastQuestionState } from '../../../../lib/domain/usecases/update-last-question-state.js'; describe('Unit | UseCase | update-last-question-state', function () { const assessmentId = 'assessmentId'; diff --git a/api/tests/unit/domain/usecases/update-membership_test.js b/api/tests/unit/domain/usecases/update-membership_test.js index 0ff22a65d35..89f91836a68 100644 --- a/api/tests/unit/domain/usecases/update-membership_test.js +++ b/api/tests/unit/domain/usecases/update-membership_test.js @@ -1,7 +1,9 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const { updateMembership } = require('../../../../lib/domain/usecases/index.js'); -const Membership = require('../../../../lib/domain/models/Membership'); -const { InvalidMembershipOrganizationRoleError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; +import { Membership } from '../../../../lib/domain/models/Membership.js'; +import { InvalidMembershipOrganizationRoleError } from '../../../../lib/domain/errors.js'; + +const { updateMembership } = usecases; describe('Unit | UseCase | update-membership', function () { let membershipRepository; diff --git a/api/tests/unit/domain/usecases/update-organization-learner-dependent-user-password_test.js b/api/tests/unit/domain/usecases/update-organization-learner-dependent-user-password_test.js index c0f61363fee..a15aff28e25 100644 --- a/api/tests/unit/domain/usecases/update-organization-learner-dependent-user-password_test.js +++ b/api/tests/unit/domain/usecases/update-organization-learner-dependent-user-password_test.js @@ -1,8 +1,6 @@ -const { sinon, expect, catchErr } = require('../../../test-helper'); - -const { UserNotFoundError, UserNotAuthorizedToUpdatePasswordError } = require('../../../../lib/domain/errors'); - -const updateOrganizationLearnerDependentUserPassword = require('../../../../lib/domain/usecases/update-organization-learner-dependent-user-password'); +import { sinon, expect, catchErr } from '../../../test-helper.js'; +import { UserNotFoundError, UserNotAuthorizedToUpdatePasswordError } from '../../../../lib/domain/errors.js'; +import { updateOrganizationLearnerDependentUserPassword } from '../../../../lib/domain/usecases/update-organization-learner-dependent-user-password.js'; describe('Unit | UseCase | update-organization-learner-dependent-user-password', function () { const userId = 1; diff --git a/api/tests/unit/domain/usecases/update-participant-external-id_test.js b/api/tests/unit/domain/usecases/update-participant-external-id_test.js index 61c968af4df..5d44ffae871 100644 --- a/api/tests/unit/domain/usecases/update-participant-external-id_test.js +++ b/api/tests/unit/domain/usecases/update-participant-external-id_test.js @@ -1,5 +1,7 @@ -const { expect, sinon } = require('../../../test-helper'); -const { updateParticipantExternalId } = require('../../../../lib/domain/usecases/index.js'); +import { expect, sinon } from '../../../test-helper.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; + +const { updateParticipantExternalId } = usecases; describe('Unit | UseCase | update-participation-external-id', function () { it('should call repository method to update the external id for a participation', async function () { diff --git a/api/tests/unit/domain/usecases/update-session_test.js b/api/tests/unit/domain/usecases/update-session_test.js index a59aa2d38e3..af3853aed63 100644 --- a/api/tests/unit/domain/usecases/update-session_test.js +++ b/api/tests/unit/domain/usecases/update-session_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const updateSession = require('../../../../lib/domain/usecases/update-session'); +import { expect, sinon } from '../../../test-helper.js'; +import { updateSession } from '../../../../lib/domain/usecases/update-session.js'; describe('Unit | UseCase | update-session', function () { let originalSession; diff --git a/api/tests/unit/domain/usecases/update-student-number_test.js b/api/tests/unit/domain/usecases/update-student-number_test.js index f99166b4b34..7ccde5c0d4a 100644 --- a/api/tests/unit/domain/usecases/update-student-number_test.js +++ b/api/tests/unit/domain/usecases/update-student-number_test.js @@ -1,8 +1,6 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); - -const { AlreadyExistingEntityError } = require('../../../../lib/domain/errors'); - -const updateStudentNumber = require('../../../../lib/domain/usecases/update-student-number'); +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; +import { AlreadyExistingEntityError } from '../../../../lib/domain/errors.js'; +import { updateStudentNumber } from '../../../../lib/domain/usecases/update-student-number.js'; describe('Unit | UseCase | update-student-number', function () { const organizationId = 2; diff --git a/api/tests/unit/domain/usecases/update-target-profile_test.js b/api/tests/unit/domain/usecases/update-target-profile_test.js index 222a6386e2e..3cbfc46b464 100644 --- a/api/tests/unit/domain/usecases/update-target-profile_test.js +++ b/api/tests/unit/domain/usecases/update-target-profile_test.js @@ -1,6 +1,8 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const { updateTargetProfile } = require('../../../../lib/domain/usecases/index.js'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; +import { usecases } from '../../../../lib/domain/usecases/index.js'; + +const { updateTargetProfile } = usecases; describe('Unit | UseCase | update-target-profile', function () { let targetProfileForUpdateRepository = null; diff --git a/api/tests/unit/domain/usecases/update-training_test.js b/api/tests/unit/domain/usecases/update-training_test.js index a01c2a44246..0c9f6c62a1d 100644 --- a/api/tests/unit/domain/usecases/update-training_test.js +++ b/api/tests/unit/domain/usecases/update-training_test.js @@ -1,6 +1,6 @@ -const { catchErr, expect, sinon } = require('../../../test-helper'); -const updateTraining = require('../../../../lib/domain/usecases/update-training'); -const { NotFoundError } = require('../../../../lib/domain/errors'); +import { catchErr, expect, sinon } from '../../../test-helper.js'; +import { updateTraining } from '../../../../lib/domain/usecases/update-training.js'; +import { NotFoundError } from '../../../../lib/domain/errors.js'; describe('Unit | UseCase | update-training', function () { let trainingRepository; diff --git a/api/tests/unit/domain/usecases/update-user-details-for-administration_test.js b/api/tests/unit/domain/usecases/update-user-details-for-administration_test.js index 1c4c6436a10..7bde2370604 100644 --- a/api/tests/unit/domain/usecases/update-user-details-for-administration_test.js +++ b/api/tests/unit/domain/usecases/update-user-details-for-administration_test.js @@ -1,12 +1,13 @@ -const { catchErr, domainBuilder, expect, sinon } = require('../../../test-helper'); -const { +import { catchErr, domainBuilder, expect, sinon } from '../../../test-helper.js'; + +import { AlreadyRegisteredEmailAndUsernameError, AlreadyRegisteredEmailError, AlreadyRegisteredUsernameError, -} = require('../../../../lib/domain/errors'); -const User = require('../../../../lib/domain/models/User'); +} from '../../../../lib/domain/errors.js'; -const updateUserDetailsForAdministration = require('../../../../lib/domain/usecases/update-user-details-for-administration'); +import { User } from '../../../../lib/domain/models/User.js'; +import { updateUserDetailsForAdministration } from '../../../../lib/domain/usecases/update-user-details-for-administration.js'; describe('Unit | UseCase | update-user-details-for-administration', function () { const userId = 1; diff --git a/api/tests/unit/domain/usecases/update-user-email-with-validation_test.js b/api/tests/unit/domain/usecases/update-user-email-with-validation_test.js index a43ebc17444..f04d7454fd2 100644 --- a/api/tests/unit/domain/usecases/update-user-email-with-validation_test.js +++ b/api/tests/unit/domain/usecases/update-user-email-with-validation_test.js @@ -1,13 +1,14 @@ -const { expect, sinon, catchErr, domainBuilder } = require('../../../test-helper'); -const { +import { expect, sinon, catchErr, domainBuilder } from '../../../test-helper.js'; + +import { AlreadyRegisteredEmailError, InvalidVerificationCodeError, UserNotAuthorizedToUpdateEmailError, EmailModificationDemandNotFoundOrExpiredError, -} = require('../../../../lib/domain/errors'); +} from '../../../../lib/domain/errors.js'; -const EmailModificationDemand = require('../../../../lib/domain/models/EmailModificationDemand'); -const updateUserEmailWithValidation = require('../../../../lib/domain/usecases/update-user-email-with-validation'); +import { EmailModificationDemand } from '../../../../lib/domain/models/EmailModificationDemand.js'; +import { updateUserEmailWithValidation } from '../../../../lib/domain/usecases/update-user-email-with-validation.js'; describe('Unit | UseCase | update-user-email-with-validation', function () { let userEmailRepository; diff --git a/api/tests/unit/domain/usecases/update-user-password_test.js b/api/tests/unit/domain/usecases/update-user-password_test.js index 16e2291bdaf..80a9c509c3d 100644 --- a/api/tests/unit/domain/usecases/update-user-password_test.js +++ b/api/tests/unit/domain/usecases/update-user-password_test.js @@ -1,12 +1,10 @@ -const { catchErr, expect, sinon } = require('../../../test-helper'); - -const User = require('../../../../lib/domain/models/User'); -const { +import { catchErr, expect, sinon } from '../../../test-helper.js'; +import { User } from '../../../../lib/domain/models/User.js'; +import { PasswordResetDemandNotFoundError, UserNotAuthorizedToUpdatePasswordError, -} = require('../../../../lib/domain/errors'); - -const updateUserPassword = require('../../../../lib/domain/usecases/update-user-password'); +} from '../../../../lib/domain/errors.js'; +import { updateUserPassword } from '../../../../lib/domain/usecases/update-user-password.js'; describe('Unit | UseCase | update-user-password', function () { const userId = 1; diff --git a/api/tests/unit/domain/validators/campaign-validator_test.js b/api/tests/unit/domain/validators/campaign-validator_test.js index 8dc8b5e2f28..fefe7ecbde4 100644 --- a/api/tests/unit/domain/validators/campaign-validator_test.js +++ b/api/tests/unit/domain/validators/campaign-validator_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const campaignValidator = require('../../../../lib/domain/validators/campaign-validator'); -const CampaignTypes = require('../../../../lib/domain/models/CampaignTypes'); +import { expect } from '../../../test-helper.js'; +import * as campaignValidator from '../../../../lib/domain/validators/campaign-validator.js'; +import { CampaignTypes } from '../../../../lib/domain/models/CampaignTypes.js'; const MISSING_VALUE = null; const EMPTY_VALUE = ''; diff --git a/api/tests/unit/domain/validators/certification-center-creation-validator_test.js b/api/tests/unit/domain/validators/certification-center-creation-validator_test.js index 48854ab96fe..b1170ba709f 100644 --- a/api/tests/unit/domain/validators/certification-center-creation-validator_test.js +++ b/api/tests/unit/domain/validators/certification-center-creation-validator_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const certificationCenterCreationValidator = require('../../../../lib/domain/validators/certification-center-creation-validator'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); +import { expect } from '../../../test-helper.js'; +import * as certificationCenterCreationValidator from '../../../../lib/domain/validators/certification-center-creation-validator.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; const MISSING_VALUE = ''; diff --git a/api/tests/unit/domain/validators/entity-validator_test.js b/api/tests/unit/domain/validators/entity-validator_test.js index 3d44bf18955..fa7cc97ecec 100644 --- a/api/tests/unit/domain/validators/entity-validator_test.js +++ b/api/tests/unit/domain/validators/entity-validator_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../test-helper'); -const { ObjectValidationError } = require('../../../../lib/domain/errors'); -const Joi = require('joi'); -const { validateEntity } = require('../../../../lib/domain/validators/entity-validator'); +import { expect } from '../../../test-helper.js'; +import { ObjectValidationError } from '../../../../lib/domain/errors.js'; +import Joi from 'joi'; +import { validateEntity } from '../../../../lib/domain/validators/entity-validator.js'; describe('Unit | Domain | Validators | entity-validator', function () { describe('#validateEntity', function () { diff --git a/api/tests/unit/domain/validators/organization-creation-validator_test.js b/api/tests/unit/domain/validators/organization-creation-validator_test.js index d0c6861fd65..7b76f94fdaa 100644 --- a/api/tests/unit/domain/validators/organization-creation-validator_test.js +++ b/api/tests/unit/domain/validators/organization-creation-validator_test.js @@ -1,6 +1,6 @@ -const { expect, catchErr } = require('../../../test-helper'); -const organizationCreationValidator = require('../../../../lib/domain/validators/organization-creation-validator'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); +import { expect, catchErr } from '../../../test-helper.js'; +import * as organizationCreationValidator from '../../../../lib/domain/validators/organization-creation-validator.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; const MISSING_VALUE = ''; diff --git a/api/tests/unit/domain/validators/organization-learner-validator_test.js b/api/tests/unit/domain/validators/organization-learner-validator_test.js index db3dc6665b9..00e605974fc 100644 --- a/api/tests/unit/domain/validators/organization-learner-validator_test.js +++ b/api/tests/unit/domain/validators/organization-learner-validator_test.js @@ -1,8 +1,8 @@ -const { expect, catchErr } = require('../../../test-helper'); -const { +import { expect, catchErr } from '../../../test-helper.js'; +import { checkValidation, FRANCE_COUNTRY_CODE, -} = require('../../../../lib/domain/validators/organization-learner-validator'); +} from '../../../../lib/domain/validators/organization-learner-validator.js'; describe('Unit | Domain | Organization Learner validator', function () { context('#checkValidation', function () { diff --git a/api/tests/unit/domain/validators/password-validator_test.js b/api/tests/unit/domain/validators/password-validator_test.js index 0118da9f922..f58d5b4308c 100644 --- a/api/tests/unit/domain/validators/password-validator_test.js +++ b/api/tests/unit/domain/validators/password-validator_test.js @@ -1,7 +1,6 @@ -const { expect, catchErr } = require('../../../test-helper'); - -const { EntityValidationError } = require('../../../../lib/domain/errors'); -const passwordValidator = require('../../../../lib/domain/validators/password-validator'); +import { expect, catchErr } from '../../../test-helper.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; +import * as passwordValidator from '../../../../lib/domain/validators/password-validator.js'; function _assertErrorMatchesWithExpectedOne(entityValidationErrors, expectedError) { expect(entityValidationErrors).to.be.instanceOf(EntityValidationError); diff --git a/api/tests/unit/domain/validators/session-validator_test.js b/api/tests/unit/domain/validators/session-validator_test.js index a82ff205429..e78aa0ba534 100644 --- a/api/tests/unit/domain/validators/session-validator_test.js +++ b/api/tests/unit/domain/validators/session-validator_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder, catchErr } = require('../../../test-helper'); -const { statuses } = require('../../../../lib/domain/models/Session'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); -const sessionValidator = require('../../../../lib/domain/validators/session-validator'); +import { expect, domainBuilder, catchErr } from '../../../test-helper.js'; +import { statuses } from '../../../../lib/domain/models/Session.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; +import * as sessionValidator from '../../../../lib/domain/validators/session-validator.js'; const MISSING_VALUE = ''; diff --git a/api/tests/unit/domain/validators/target-profile/creation-command-validation_test.js b/api/tests/unit/domain/validators/target-profile/creation-command-validation_test.js index 05be0a5e596..68c82449979 100644 --- a/api/tests/unit/domain/validators/target-profile/creation-command-validation_test.js +++ b/api/tests/unit/domain/validators/target-profile/creation-command-validation_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../../test-helper'); -const creationCommandValidator = require('../../../../../lib/domain/validators/target-profile/creation-command-validation'); -const { EntityValidationError } = require('../../../../../lib/domain/errors'); -const { categories } = require('../../../../../lib/domain/models/TargetProfile'); +import { expect } from '../../../../test-helper.js'; +import * as creationCommandValidator from '../../../../../lib/domain/validators/target-profile/creation-command-validation.js'; +import { EntityValidationError } from '../../../../../lib/domain/errors.js'; +import { categories } from '../../../../../lib/domain/models/TargetProfile.js'; describe('Unit | Domain | Validators | target-profile/creationCommandValidator', function () { describe('#validate', function () { diff --git a/api/tests/unit/domain/validators/user-validator_test.js b/api/tests/unit/domain/validators/user-validator_test.js index 6a63cbb453a..cc573e2211d 100644 --- a/api/tests/unit/domain/validators/user-validator_test.js +++ b/api/tests/unit/domain/validators/user-validator_test.js @@ -1,9 +1,7 @@ -const { expect, catchErr } = require('../../../test-helper'); - -const User = require('../../../../lib/domain/models/User'); -const { EntityValidationError } = require('../../../../lib/domain/errors'); - -const userValidator = require('../../../../lib/domain/validators/user-validator'); +import { expect, catchErr } from '../../../test-helper.js'; +import { User } from '../../../../lib/domain/models/User.js'; +import { EntityValidationError } from '../../../../lib/domain/errors.js'; +import * as userValidator from '../../../../lib/domain/validators/user-validator.js'; const MISSING_VALUE = ''; diff --git a/api/tests/unit/infrastructure/adapters/answer-status-database-adapter_test.js b/api/tests/unit/infrastructure/adapters/answer-status-database-adapter_test.js index bcfebfcff8a..8e03565a86a 100644 --- a/api/tests/unit/infrastructure/adapters/answer-status-database-adapter_test.js +++ b/api/tests/unit/infrastructure/adapters/answer-status-database-adapter_test.js @@ -1,7 +1,9 @@ -const AnswerStatusDatabaseAdapter = require('../../../../lib/infrastructure/adapters/answer-status-database-adapter'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); +import * as AnswerStatusDatabaseAdapter from '../../../../lib/infrastructure/adapters/answer-status-database-adapter.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; -const { expect } = require('chai'); +import chai from 'chai'; + +const { expect } = chai; describe('AnswerStatusDatabaseAdapter', function () { describe('#adapt', function () { diff --git a/api/tests/unit/infrastructure/adapters/answer-status-json-api-adapter_test.js b/api/tests/unit/infrastructure/adapters/answer-status-json-api-adapter_test.js index bfe42b07221..8314670d2ee 100644 --- a/api/tests/unit/infrastructure/adapters/answer-status-json-api-adapter_test.js +++ b/api/tests/unit/infrastructure/adapters/answer-status-json-api-adapter_test.js @@ -1,7 +1,9 @@ -const AnswerStatusJsonApiAdapter = require('../../../../lib/infrastructure/adapters/answer-status-json-api-adapter'); -const AnswerStatus = require('../../../../lib/domain/models/AnswerStatus'); +import { AnswerStatusJsonApiAdapter } from '../../../../lib/infrastructure/adapters/answer-status-json-api-adapter.js'; +import { AnswerStatus } from '../../../../lib/domain/models/AnswerStatus.js'; -const { expect } = require('chai'); +import chai from 'chai'; + +const { expect } = chai; describe('AnswerStatusJsonApiAdapter', function () { describe('#adapt', function () { diff --git a/api/tests/unit/infrastructure/adapters/skill-adapter_test.js b/api/tests/unit/infrastructure/adapters/skill-adapter_test.js index 7aec824242e..0fd3e428317 100644 --- a/api/tests/unit/infrastructure/adapters/skill-adapter_test.js +++ b/api/tests/unit/infrastructure/adapters/skill-adapter_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const skillAdapter = require('../../../../lib/infrastructure/adapters/skill-adapter'); -const Skill = require('../../../../lib/domain/models/Skill'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import * as skillAdapter from '../../../../lib/infrastructure/adapters/skill-adapter.js'; +import { Skill } from '../../../../lib/domain/models/Skill.js'; describe('Unit | Infrastructure | Adapter | skillAdapter', function () { describe('#fromDatasourceObject', function () { diff --git a/api/tests/unit/infrastructure/adapters/solution-adapter_test.js b/api/tests/unit/infrastructure/adapters/solution-adapter_test.js index 2fc504f3abf..b3f0b73ae1b 100644 --- a/api/tests/unit/infrastructure/adapters/solution-adapter_test.js +++ b/api/tests/unit/infrastructure/adapters/solution-adapter_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const solutionAdapter = require('../../../../lib/infrastructure/adapters/solution-adapter'); -const Solution = require('../../../../lib/domain/models/Solution'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import * as solutionAdapter from '../../../../lib/infrastructure/adapters/solution-adapter.js'; +import { Solution } from '../../../../lib/domain/models/Solution.js'; describe('Unit | Adapter | Solution', function () { describe('#fromDatasourceObject', function () { diff --git a/api/tests/unit/infrastructure/adapters/target-profile-adapter_test.js b/api/tests/unit/infrastructure/adapters/target-profile-adapter_test.js index 35dddc0a5f2..40142a4b385 100644 --- a/api/tests/unit/infrastructure/adapters/target-profile-adapter_test.js +++ b/api/tests/unit/infrastructure/adapters/target-profile-adapter_test.js @@ -1,8 +1,8 @@ -const { sinon, databaseBuilder, expect, domainBuilder } = require('../../../test-helper'); -const BookshelfTargetProfile = require('../../../../lib/infrastructure/orm-models/TargetProfile'); -const BookshelfTargetProfileShare = require('../../../../lib/infrastructure/orm-models/TargetProfileShare'); -const TargetProfile = require('../../../../lib/domain/models/TargetProfile'); -const targetProfileAdapter = require('../../../../lib/infrastructure/adapters/target-profile-adapter'); +import { sinon, databaseBuilder, expect, domainBuilder } from '../../../test-helper.js'; +import { BookshelfTargetProfile } from '../../../../lib/infrastructure/orm-models/TargetProfile.js'; +import { BookshelfTargetProfileShare } from '../../../../lib/infrastructure/orm-models/TargetProfileShare.js'; +import { TargetProfile } from '../../../../lib/domain/models/TargetProfile.js'; +import * as targetProfileAdapter from '../../../../lib/infrastructure/adapters/target-profile-adapter.js'; describe('Unit | Infrastructure | Adapter | targetProfileAdapter', function () { it('should adapt TargetProfile object to domain', function () { diff --git a/api/tests/unit/infrastructure/caches/Cache_test.js b/api/tests/unit/infrastructure/caches/Cache_test.js index c29bef3467b..86941bfa342 100644 --- a/api/tests/unit/infrastructure/caches/Cache_test.js +++ b/api/tests/unit/infrastructure/caches/Cache_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const Cache = require('../../../../lib/infrastructure/caches/Cache'); +import { expect } from '../../../test-helper.js'; +import { Cache } from '../../../../lib/infrastructure/caches/Cache.js'; describe('Unit | Infrastructure | Caches | Cache', function () { const cacheInstance = new Cache(); diff --git a/api/tests/unit/infrastructure/caches/DistributedCache_test.js b/api/tests/unit/infrastructure/caches/DistributedCache_test.js index 947656907e6..715695c7328 100644 --- a/api/tests/unit/infrastructure/caches/DistributedCache_test.js +++ b/api/tests/unit/infrastructure/caches/DistributedCache_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const DistributedCache = require('../../../../lib/infrastructure/caches/DistributedCache'); +import { expect, sinon } from '../../../test-helper.js'; +import { DistributedCache } from '../../../../lib/infrastructure/caches/DistributedCache.js'; describe('Unit | Infrastructure | Caches | DistributedCache', function () { let distributedCacheInstance; diff --git a/api/tests/unit/infrastructure/caches/InMemoryCache_test.js b/api/tests/unit/infrastructure/caches/InMemoryCache_test.js index f586b99aa97..4f280be5332 100644 --- a/api/tests/unit/infrastructure/caches/InMemoryCache_test.js +++ b/api/tests/unit/infrastructure/caches/InMemoryCache_test.js @@ -1,6 +1,6 @@ -const NodeCache = require('node-cache'); -const { expect, sinon } = require('../../../test-helper'); -const InMemoryCache = require('../../../../lib/infrastructure/caches/InMemoryCache'); +import NodeCache from 'node-cache'; +import { expect, sinon } from '../../../test-helper.js'; +import { InMemoryCache } from '../../../../lib/infrastructure/caches/InMemoryCache.js'; describe('Unit | Infrastructure | Cache | in-memory-cache', function () { let inMemoryCache; diff --git a/api/tests/unit/infrastructure/caches/LayeredCache_test.js b/api/tests/unit/infrastructure/caches/LayeredCache_test.js index f4914765853..985bf6b8110 100644 --- a/api/tests/unit/infrastructure/caches/LayeredCache_test.js +++ b/api/tests/unit/infrastructure/caches/LayeredCache_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const LayeredCache = require('../../../../lib/infrastructure/caches/LayeredCache'); +import { expect, sinon } from '../../../test-helper.js'; +import { LayeredCache } from '../../../../lib/infrastructure/caches/LayeredCache.js'; describe('Unit | Infrastructure | Caches | LayeredCache', function () { const layeredCacheInstance = new LayeredCache(); diff --git a/api/tests/unit/infrastructure/caches/RedisCache_test.js b/api/tests/unit/infrastructure/caches/RedisCache_test.js index 85029b711bf..513a5637b67 100644 --- a/api/tests/unit/infrastructure/caches/RedisCache_test.js +++ b/api/tests/unit/infrastructure/caches/RedisCache_test.js @@ -1,7 +1,7 @@ -const Redlock = require('redlock'); -const { expect, sinon } = require('../../../test-helper'); -const settings = require('../../../../lib/config'); -const RedisCache = require('../../../../lib/infrastructure/caches/RedisCache'); +import Redlock from 'redlock'; +import { expect, sinon } from '../../../test-helper.js'; +import { config as settings } from '../../../../lib/config.js'; +import { RedisCache } from '../../../../lib/infrastructure/caches/RedisCache.js'; describe('Unit | Infrastructure | Cache | redis-cache', function () { let stubbedClient; diff --git a/api/tests/unit/infrastructure/datasources/learning-content/area-datasource_test.js b/api/tests/unit/infrastructure/datasources/learning-content/area-datasource_test.js index cf4c11ad5a9..0a0c496b8cc 100644 --- a/api/tests/unit/infrastructure/datasources/learning-content/area-datasource_test.js +++ b/api/tests/unit/infrastructure/datasources/learning-content/area-datasource_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../../test-helper'); -const { areaDatasource } = require('../../../../../lib/infrastructure/datasources/learning-content/area-datasource'); -const lcms = require('../../../../../lib/infrastructure/lcms'); +import { expect, sinon } from '../../../../test-helper.js'; +import { areaDatasource } from '../../../../../lib/infrastructure/datasources/learning-content/area-datasource.js'; +import { lcms } from '../../../../../lib/infrastructure/lcms.js'; describe('Unit | Infrastructure | Datasource | Learning Content | AreaDatasource', function () { describe('#findByRecordIds', function () { diff --git a/api/tests/unit/infrastructure/datasources/learning-content/challenge-datasource_test.js b/api/tests/unit/infrastructure/datasources/learning-content/challenge-datasource_test.js index 544a8b0ae4b..7d060f6bd28 100644 --- a/api/tests/unit/infrastructure/datasources/learning-content/challenge-datasource_test.js +++ b/api/tests/unit/infrastructure/datasources/learning-content/challenge-datasource_test.js @@ -1,10 +1,8 @@ -const _ = require('lodash'); -const { expect, sinon } = require('../../../../test-helper'); -const lcms = require('../../../../../lib/infrastructure/lcms'); -const { - challengeDatasource, -} = require('../../../../../lib/infrastructure/datasources/learning-content/challenge-datasource'); -const { learningContentCache } = require('../../../../../lib/infrastructure/caches/learning-content-cache'); +import _ from 'lodash'; +import { expect, sinon } from '../../../../test-helper.js'; +import { lcms } from '../../../../../lib/infrastructure/lcms.js'; +import { challengeDatasource } from '../../../../../lib/infrastructure/datasources/learning-content/challenge-datasource.js'; +import { learningContentCache } from '../../../../../lib/infrastructure/caches/learning-content-cache.js'; describe('Unit | Infrastructure | Datasource | Learning Content | ChallengeDatasource', function () { let competence1, diff --git a/api/tests/unit/infrastructure/datasources/learning-content/competence-datasource_test.js b/api/tests/unit/infrastructure/datasources/learning-content/competence-datasource_test.js index bf42ce45d33..013c58bf214 100644 --- a/api/tests/unit/infrastructure/datasources/learning-content/competence-datasource_test.js +++ b/api/tests/unit/infrastructure/datasources/learning-content/competence-datasource_test.js @@ -1,9 +1,7 @@ -const { expect, sinon } = require('../../../../test-helper'); -const { - competenceDatasource, -} = require('../../../../../lib/infrastructure/datasources/learning-content/competence-datasource'); -const lcms = require('../../../../../lib/infrastructure/lcms'); -const { learningContentCache } = require('../../../../../lib/infrastructure/caches/learning-content-cache'); +import { expect, sinon } from '../../../../test-helper.js'; +import { competenceDatasource } from '../../../../../lib/infrastructure/datasources/learning-content/competence-datasource.js'; +import { lcms } from '../../../../../lib/infrastructure/lcms.js'; +import { learningContentCache } from '../../../../../lib/infrastructure/caches/learning-content-cache.js'; describe('Unit | Infrastructure | Datasource | Learning Content | CompetenceDatasource', function () { beforeEach(function () { diff --git a/api/tests/unit/infrastructure/datasources/learning-content/datasource_test.js b/api/tests/unit/infrastructure/datasources/learning-content/datasource_test.js index 6d80521968c..b0d37eb0170 100644 --- a/api/tests/unit/infrastructure/datasources/learning-content/datasource_test.js +++ b/api/tests/unit/infrastructure/datasources/learning-content/datasource_test.js @@ -1,8 +1,8 @@ -const { expect, sinon } = require('../../../../test-helper'); -const dataSource = require('../../../../../lib/infrastructure/datasources/learning-content/datasource'); -const lcms = require('../../../../../lib/infrastructure/lcms'); -const LearningContentResourceNotFound = require('../../../../../lib/infrastructure/datasources/learning-content/LearningContentResourceNotFound'); -const { learningContentCache } = require('../../../../../lib/infrastructure/caches/learning-content-cache'); +import { expect, sinon } from '../../../../test-helper.js'; +import * as dataSource from '../../../../../lib/infrastructure/datasources/learning-content/datasource.js'; +import { lcms } from '../../../../../lib/infrastructure/lcms.js'; +import { LearningContentResourceNotFound } from '../../../../../lib/infrastructure/datasources/learning-content/LearningContentResourceNotFound.js'; +import { learningContentCache } from '../../../../../lib/infrastructure/caches/learning-content-cache.js'; describe('Unit | Infrastructure | Datasource | Learning Content | datasource', function () { let someDatasource; diff --git a/api/tests/unit/infrastructure/datasources/learning-content/framework-datasource_test.js b/api/tests/unit/infrastructure/datasources/learning-content/framework-datasource_test.js index 075fb6a23c4..d6a810b9586 100644 --- a/api/tests/unit/infrastructure/datasources/learning-content/framework-datasource_test.js +++ b/api/tests/unit/infrastructure/datasources/learning-content/framework-datasource_test.js @@ -1,8 +1,6 @@ -const { expect, sinon } = require('../../../../test-helper'); -const { - frameworkDatasource, -} = require('../../../../../lib/infrastructure/datasources/learning-content/framework-datasource'); -const lcms = require('../../../../../lib/infrastructure/lcms'); +import { expect, sinon } from '../../../../test-helper.js'; +import { frameworkDatasource } from '../../../../../lib/infrastructure/datasources/learning-content/framework-datasource.js'; +import { lcms } from '../../../../../lib/infrastructure/lcms.js'; describe('Unit | Infrastructure | Datasource | Learning Content | FrameworkDatasource', function () { describe('#list', function () { diff --git a/api/tests/unit/infrastructure/datasources/learning-content/skill-datasource_test.js b/api/tests/unit/infrastructure/datasources/learning-content/skill-datasource_test.js index d0db9ff6701..97ab595f0c2 100644 --- a/api/tests/unit/infrastructure/datasources/learning-content/skill-datasource_test.js +++ b/api/tests/unit/infrastructure/datasources/learning-content/skill-datasource_test.js @@ -1,8 +1,8 @@ -const { expect, sinon } = require('../../../../test-helper'); -const _ = require('lodash'); -const { skillDatasource } = require('../../../../../lib/infrastructure/datasources/learning-content/skill-datasource'); -const lcms = require('../../../../../lib/infrastructure/lcms'); -const { learningContentCache } = require('../../../../../lib/infrastructure/caches/learning-content-cache'); +import { expect, sinon } from '../../../../test-helper.js'; +import _ from 'lodash'; +import { skillDatasource } from '../../../../../lib/infrastructure/datasources/learning-content/skill-datasource.js'; +import { lcms } from '../../../../../lib/infrastructure/lcms.js'; +import { learningContentCache } from '../../../../../lib/infrastructure/caches/learning-content-cache.js'; describe('Unit | Infrastructure | Datasource | LearningContent | SkillDatasource', function () { beforeEach(function () { diff --git a/api/tests/unit/infrastructure/datasources/learning-content/thematic-datasource_test.js b/api/tests/unit/infrastructure/datasources/learning-content/thematic-datasource_test.js index 412c67c58e1..0d28e78f315 100644 --- a/api/tests/unit/infrastructure/datasources/learning-content/thematic-datasource_test.js +++ b/api/tests/unit/infrastructure/datasources/learning-content/thematic-datasource_test.js @@ -1,8 +1,6 @@ -const { sinon, expect } = require('../../../../test-helper'); -const lcms = require('../../../../../lib/infrastructure/lcms'); -const { - thematicDatasource, -} = require('../../../../../lib/infrastructure/datasources/learning-content/thematic-datasource'); +import { sinon, expect } from '../../../../test-helper.js'; +import { lcms } from '../../../../../lib/infrastructure/lcms.js'; +import { thematicDatasource } from '../../../../../lib/infrastructure/datasources/learning-content/thematic-datasource.js'; describe('Unit | Infrastructure | Datasource | Learning Content | ThematicDatasource', function () { describe('#findByCompetenceIds', function () { diff --git a/api/tests/unit/infrastructure/datasources/learning-content/tube-datasource_test.js b/api/tests/unit/infrastructure/datasources/learning-content/tube-datasource_test.js index 92d7a3bdc5e..405fca16314 100644 --- a/api/tests/unit/infrastructure/datasources/learning-content/tube-datasource_test.js +++ b/api/tests/unit/infrastructure/datasources/learning-content/tube-datasource_test.js @@ -1,8 +1,8 @@ -const _ = require('lodash'); -const { expect, sinon } = require('../../../../test-helper'); -const lcms = require('../../../../../lib/infrastructure/lcms'); -const { tubeDatasource } = require('../../../../../lib/infrastructure/datasources/learning-content/tube-datasource'); -const { learningContentCache } = require('../../../../../lib/infrastructure/caches/learning-content-cache'); +import _ from 'lodash'; +import { expect, sinon } from '../../../../test-helper.js'; +import { lcms } from '../../../../../lib/infrastructure/lcms.js'; +import { tubeDatasource } from '../../../../../lib/infrastructure/datasources/learning-content/tube-datasource.js'; +import { learningContentCache } from '../../../../../lib/infrastructure/caches/learning-content-cache.js'; describe('Unit | Infrastructure | Datasource | Learning Content | TubeDatasource', function () { beforeEach(function () { diff --git a/api/tests/unit/infrastructure/datasources/learning-content/tutorial-datasource_test.js b/api/tests/unit/infrastructure/datasources/learning-content/tutorial-datasource_test.js index 257cf23f970..bb199588860 100644 --- a/api/tests/unit/infrastructure/datasources/learning-content/tutorial-datasource_test.js +++ b/api/tests/unit/infrastructure/datasources/learning-content/tutorial-datasource_test.js @@ -1,10 +1,8 @@ -const _ = require('lodash'); -const { expect, sinon } = require('../../../../test-helper'); -const lcms = require('../../../../../lib/infrastructure/lcms'); -const { - tutorialDatasource, -} = require('../../../../../lib/infrastructure/datasources/learning-content/tutorial-datasource'); -const { learningContentCache } = require('../../../../../lib/infrastructure/caches/learning-content-cache'); +import _ from 'lodash'; +import { expect, sinon } from '../../../../test-helper.js'; +import { lcms } from '../../../../../lib/infrastructure/lcms.js'; +import { tutorialDatasource } from '../../../../../lib/infrastructure/datasources/learning-content/tutorial-datasource.js'; +import { learningContentCache } from '../../../../../lib/infrastructure/caches/learning-content-cache.js'; describe('Unit | Infrastructure | Datasource | Learning Content | TutorialDatasource', function () { beforeEach(function () { diff --git a/api/tests/unit/infrastructure/events/EventBus_test.js b/api/tests/unit/infrastructure/events/EventBus_test.js index 0c4813d989b..a01f892c0bb 100644 --- a/api/tests/unit/infrastructure/events/EventBus_test.js +++ b/api/tests/unit/infrastructure/events/EventBus_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const Event = require('../../../../lib/domain/events/Event'); -const EventBus = require('../../../../lib/infrastructure/events/EventBus'); +import { expect, sinon } from '../../../test-helper.js'; +import { Event } from '../../../../lib/domain/events/Event.js'; +import { EventBus } from '../../../../lib/infrastructure/events/EventBus.js'; describe('Unit | Infrastructure | Events | EventBus', function () { describe('#publish', function () { diff --git a/api/tests/unit/infrastructure/events/handlers/LogEvent_test.js b/api/tests/unit/infrastructure/events/handlers/LogEvent_test.js index ad0cc2dc249..90526eeea24 100644 --- a/api/tests/unit/infrastructure/events/handlers/LogEvent_test.js +++ b/api/tests/unit/infrastructure/events/handlers/LogEvent_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../../test-helper'); -const Event = require('../../../../../lib/domain/events/Event'); -const LogEvent = require('../../../../../lib/infrastructure/events/subscribers/LogEvent'); +import { expect, sinon } from '../../../../test-helper.js'; +import { Event } from '../../../../../lib/domain/events/Event.js'; +import { LogEvent } from '../../../../../lib/infrastructure/events/subscribers/LogEvent.js'; describe('Unit | Infrastructure | Events | Handler | LogEvent', function () { describe('#handle', function () { diff --git a/api/tests/unit/infrastructure/events/handlers/ScheduleParticipationResultCalculationJob_test.js b/api/tests/unit/infrastructure/events/handlers/ScheduleParticipationResultCalculationJob_test.js index 6c728b013f2..8477a575646 100644 --- a/api/tests/unit/infrastructure/events/handlers/ScheduleParticipationResultCalculationJob_test.js +++ b/api/tests/unit/infrastructure/events/handlers/ScheduleParticipationResultCalculationJob_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../../test-helper'); -const Event = require('../../../../../lib/domain/events/Event'); -const ScheduleParticipationResultCalculationJob = require('../../../../../lib/infrastructure/events/subscribers/ScheduleParticipationResultCalculationJob'); +import { expect, sinon } from '../../../../test-helper.js'; +import { Event } from '../../../../../lib/domain/events/Event.js'; +import { ScheduleParticipationResultCalculationJob } from '../../../../../lib/infrastructure/events/subscribers/ScheduleParticipationResultCalculationJob.js'; describe('Unit | Infrastructure | Events | Handler | ParticipationResultCalculation', function () { describe('#handle', function () { diff --git a/api/tests/unit/infrastructure/events/handlers/ScheduleSendSharedParticipationResultsToPoleEmploiJob_test.js b/api/tests/unit/infrastructure/events/handlers/ScheduleSendSharedParticipationResultsToPoleEmploiJob_test.js index 2b382f3d5e9..ef729a48fc3 100644 --- a/api/tests/unit/infrastructure/events/handlers/ScheduleSendSharedParticipationResultsToPoleEmploiJob_test.js +++ b/api/tests/unit/infrastructure/events/handlers/ScheduleSendSharedParticipationResultsToPoleEmploiJob_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../../test-helper'); -const Event = require('../../../../../lib/domain/events/Event'); -const ScheduleSendSharedParticipationResultsToPoleEmploiJob = require('../../../../../lib/infrastructure/events/subscribers/ScheduleSendSharedParticipationResultsToPoleEmploiJob'); +import { expect, sinon } from '../../../../test-helper.js'; +import { Event } from '../../../../../lib/domain/events/Event.js'; +import { ScheduleSendSharedParticipationResultsToPoleEmploiJob } from '../../../../../lib/infrastructure/events/subscribers/ScheduleSendSharedParticipationResultsToPoleEmploiJob.js'; describe('Unit | Infrastructure | Events | Handler | SharedParticipationResultsToPoleEmploi', function () { describe('#handle', function () { diff --git a/api/tests/unit/infrastructure/exports/campaigns/campaign-profile-collection-result-line_test.js b/api/tests/unit/infrastructure/exports/campaigns/campaign-profile-collection-result-line_test.js index a0d39352d92..9519b9c41d1 100644 --- a/api/tests/unit/infrastructure/exports/campaigns/campaign-profile-collection-result-line_test.js +++ b/api/tests/unit/infrastructure/exports/campaigns/campaign-profile-collection-result-line_test.js @@ -1,8 +1,7 @@ -const { domainBuilder, expect, sinon } = require('../../../../test-helper'); - -const CampaignProfilesCollectionResultLine = require('../../../../../lib/infrastructure/exports/campaigns/campaign-profiles-collection-result-line'); -const PlacementProfile = require('../../../../../lib/domain/models/PlacementProfile'); -const { getI18n } = require('../../../../tooling/i18n/i18n'); +import { domainBuilder, expect, sinon } from '../../../../test-helper.js'; +import { CampaignProfilesCollectionResultLine } from '../../../../../lib/infrastructure/exports/campaigns/campaign-profiles-collection-result-line.js'; +import { PlacementProfile } from '../../../../../lib/domain/models/PlacementProfile.js'; +import { getI18n } from '../../../../tooling/i18n/i18n.js'; describe('Unit | Serializer | CSV | campaign-profiles-collection-result-line', function () { describe('#toCsvLine', function () { diff --git a/api/tests/unit/infrastructure/external-storage/cpf-external-storage_test.js b/api/tests/unit/infrastructure/external-storage/cpf-external-storage_test.js index d0b110f11ca..c6b6f5555d4 100644 --- a/api/tests/unit/infrastructure/external-storage/cpf-external-storage_test.js +++ b/api/tests/unit/infrastructure/external-storage/cpf-external-storage_test.js @@ -1,7 +1,9 @@ -const { expect, sinon } = require('../../../test-helper'); -const cpfExternalStorage = require('../../../../lib/infrastructure/external-storage/cpf-external-storage'); -const { cpf } = require('../../../../lib/config'); -const _ = require('lodash'); +import { expect, sinon } from '../../../test-helper.js'; +import * as cpfExternalStorage from '../../../../lib/infrastructure/external-storage/cpf-external-storage.js'; +import { config } from '../../../../lib/config.js'; +import _ from 'lodash'; + +const { cpf } = config; describe('Unit | Infrastructure | external-storage | cpf-external-storage', function () { let s3Utils; diff --git a/api/tests/unit/infrastructure/externals/pole-emploi/PoleEmploiPayload_test.js b/api/tests/unit/infrastructure/externals/pole-emploi/PoleEmploiPayload_test.js index cb184b5c7d8..4fe0a079014 100644 --- a/api/tests/unit/infrastructure/externals/pole-emploi/PoleEmploiPayload_test.js +++ b/api/tests/unit/infrastructure/externals/pole-emploi/PoleEmploiPayload_test.js @@ -1,5 +1,5 @@ -const PoleEmploiPayload = require('../../../../../lib/infrastructure/externals/pole-emploi/PoleEmploiPayload'); -const { expect, domainBuilder } = require('../../../../test-helper'); +import { PoleEmploiPayload } from '../../../../../lib/infrastructure/externals/pole-emploi/PoleEmploiPayload.js'; +import { expect, domainBuilder } from '../../../../test-helper.js'; describe('Unit | Infrastructure | Externals | Pole-Emploi | PoleEmploiPayload', function () { let user; diff --git a/api/tests/unit/infrastructure/externals/pole-emploi/diabled-pole-emploi-notifier_test.js b/api/tests/unit/infrastructure/externals/pole-emploi/diabled-pole-emploi-notifier_test.js index 7ef559ce2d1..06cafcf9f59 100644 --- a/api/tests/unit/infrastructure/externals/pole-emploi/diabled-pole-emploi-notifier_test.js +++ b/api/tests/unit/infrastructure/externals/pole-emploi/diabled-pole-emploi-notifier_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const { notify } = require('../../../../../lib/infrastructure/externals/pole-emploi/disabled-pole-emploi-notifier'); +import { expect } from '../../../../test-helper.js'; +import { notify } from '../../../../../lib/infrastructure/externals/pole-emploi/disabled-pole-emploi-notifier.js'; describe('Unit | Infrastructure | Externals/Pole-Emploi | pole-emploi-notifier', function () { describe('#notify', function () { diff --git a/api/tests/unit/infrastructure/externals/pole-emploi/pole-emploi-notifier_test.js b/api/tests/unit/infrastructure/externals/pole-emploi/pole-emploi-notifier_test.js deleted file mode 100644 index 474117d0dea..00000000000 --- a/api/tests/unit/infrastructure/externals/pole-emploi/pole-emploi-notifier_test.js +++ /dev/null @@ -1,348 +0,0 @@ -const querystring = require('querystring'); -const dayjs = require('dayjs'); -const { expect, sinon, catchErr, domainBuilder } = require('../../../../test-helper'); -const settings = require('../../../../../lib/config'); -const { UnexpectedUserAccountError } = require('../../../../../lib/domain/errors'); -const AuthenticationMethod = require('../../../../../lib/domain/models/AuthenticationMethod'); -const OidcIdentityProviders = require('../../../../../lib/domain/constants/oidc-identity-providers'); -const { notify } = require('../../../../../lib/infrastructure/externals/pole-emploi/pole-emploi-notifier'); -const httpAgent = require('../../../../../lib/infrastructure/http/http-agent'); -const authenticationMethodRepository = require('../../../../../lib/infrastructure/repositories/authentication-method-repository'); -const monitoringTools = require('../../../../../lib/infrastructure/monitoring-tools'); - -describe('Unit | Infrastructure | Externals/Pole-Emploi | pole-emploi-notifier', function () { - describe('#notify', function () { - let clock; - - // TODO: Fix this the next time the file is edited. - // eslint-disable-next-line mocha/no-setup-in-describe - const originPoleEmploiSendingUrl = settings.poleEmploi.sendingUrl; - // TODO: Fix this the next time the file is edited. - // eslint-disable-next-line mocha/no-setup-in-describe - const originPoleEmploiTokenUrl = settings.poleEmploi.tokenUrl; - - const userId = 123; - let payload; - const code = 'someCode'; - const data = { - access_token: 'accessToken', - refresh_token: 'refreshToken', - expires_in: 10, - }; - - const accessToken = 'someAccessToken'; - const refreshToken = 'someRefreshToken'; - const expiredDate = new Date('2021-01-01'); - const authenticationMethod = { authenticationComplement: { accessToken, expiredDate, refreshToken } }; - - // TODO: Fix this the next time the file is edited. - // eslint-disable-next-line mocha/no-setup-in-describe - const poleEmploiSending = domainBuilder.buildPoleEmploiSending(); - - beforeEach(function () { - clock = sinon.useFakeTimers(Date.now()); - sinon.stub(httpAgent, 'post'); - sinon.stub(authenticationMethodRepository, 'findOneByUserIdAndIdentityProvider'); - sinon.stub(authenticationMethodRepository, 'updateAuthenticationComplementByUserIdAndIdentityProvider'); - sinon.stub(monitoringTools, 'logErrorWithCorrelationIds'); - sinon.stub(monitoringTools, 'logInfoWithCorrelationIds'); - - settings.poleEmploi.tokenUrl = 'someTokenUrlToPoleEmploi'; - settings.poleEmploi.sendingUrl = 'someSendingUrlToPoleEmploi'; - payload = { test: { progression: 0 } }; - }); - - afterEach(function () { - clock.restore(); - settings.poleEmploi.sendingUrl = originPoleEmploiSendingUrl; - settings.poleEmploi.tokenUrl = originPoleEmploiTokenUrl; - - httpAgent.post.restore(); - authenticationMethodRepository.findOneByUserIdAndIdentityProvider.restore(); - authenticationMethodRepository.updateAuthenticationComplementByUserIdAndIdentityProvider.restore(); - }); - - it('should throw an error if the user is not known as PoleEmploi user', async function () { - // given - authenticationMethodRepository.findOneByUserIdAndIdentityProvider - .withArgs({ userId, identityProvider: OidcIdentityProviders.POLE_EMPLOI.service.code }) - .resolves(null); - - // when - const error = await catchErr(notify)(userId, payload); - - // then - expect(error).to.be.instanceOf(UnexpectedUserAccountError); - expect(error.message).to.equal("Le compte utilisateur n'est pas rattaché à l'organisation Pôle Emploi"); - }); - - context('when access token is valid', function () { - it('should send the notification to Pole Emploi', async function () { - // given - const expiredDate = dayjs().add(10, 'm').toDate(); - const authenticationMethod = { authenticationComplement: { accessToken, expiredDate, refreshToken } }; - - const expectedHearders = { - Authorization: `Bearer ${authenticationMethod.authenticationComplement.accessToken}`, - 'Content-type': 'application/json', - Accept: 'application/json', - 'Service-source': 'Pix', - }; - - authenticationMethodRepository.findOneByUserIdAndIdentityProvider - .withArgs({ userId, identityProvider: OidcIdentityProviders.POLE_EMPLOI.service.code }) - .resolves(authenticationMethod); - httpAgent.post.resolves({ isSuccessful: true, code }); - - // when - await notify(userId, payload, poleEmploiSending); - - // then - expect(httpAgent.post).to.have.been.calledWithExactly({ - url: settings.poleEmploi.sendingUrl, - payload, - headers: expectedHearders, - timeout: settings.partner.fetchTimeOut, - }); - }); - - it('should log the notification to Pole Emploi', async function () { - // given - payload = { test: { progression: 100 } }; - const expiredDate = dayjs().add(10, 'm').toDate(); - const authenticationMethod = { authenticationComplement: { accessToken, expiredDate, refreshToken } }; - - authenticationMethodRepository.findOneByUserIdAndIdentityProvider - .withArgs({ userId, identityProvider: OidcIdentityProviders.POLE_EMPLOI.service.code }) - .resolves(authenticationMethod); - httpAgent.post.resolves({ isSuccessful: true, code }); - // when - await notify(userId, payload, poleEmploiSending); - - // then - expect(monitoringTools.logInfoWithCorrelationIds).to.have.been.calledWith({ - event: 'participation-send-pole-emploi', - 'pole-emploi-action': 'send-results', - 'participation-state': 'PARTICIPATION_COMPLETED', - }); - }); - }); - - context('when access token is invalid', function () { - it('should try to refresh the access token', async function () { - // given - const expectedHeaders = { 'content-type': 'application/x-www-form-urlencoded' }; - authenticationMethodRepository.findOneByUserIdAndIdentityProvider - .withArgs({ userId, identityProvider: OidcIdentityProviders.POLE_EMPLOI.service.code }) - .resolves(authenticationMethod); - const params = { - grant_type: 'refresh_token', - refresh_token: refreshToken, - client_secret: settings.poleEmploi.clientSecret, - client_id: settings.poleEmploi.clientId, - }; - httpAgent.post.resolves({ isSuccessful: true, code, data }); - - // when - await notify(userId, payload, poleEmploiSending); - - // then - expect(httpAgent.post).to.have.been.calledWithExactly({ - url: settings.poleEmploi.tokenUrl, - payload: querystring.stringify(params), - headers: expectedHeaders, - timeout: settings.partner.fetchTimeOut, - }); - }); - - it('logs the attempt to refresh the access token', async function () { - // given - authenticationMethodRepository.findOneByUserIdAndIdentityProvider - .withArgs({ userId, identityProvider: OidcIdentityProviders.POLE_EMPLOI.service.code }) - .resolves(authenticationMethod); - httpAgent.post.resolves({ isSuccessful: true, code, data }); - - // when - await notify(userId, payload, poleEmploiSending); - - // then - expect(monitoringTools.logInfoWithCorrelationIds).to.have.been.calledWith({ - event: 'participation-send-pole-emploi', - 'pole-emploi-action': 'refresh-token', - 'participation-state': 'PARTICIPATION_STARTED', - 'expired-date': expiredDate, - }); - }); - - context('when it succeeds', function () { - it('should update the authentication method', async function () { - // given - authenticationMethodRepository.findOneByUserIdAndIdentityProvider - .withArgs({ userId, identityProvider: OidcIdentityProviders.POLE_EMPLOI.service.code }) - .resolves(authenticationMethod); - httpAgent.post.resolves({ isSuccessful: true, code, data }); - const authenticationComplement = new AuthenticationMethod.OidcAuthenticationComplement({ - accessToken: data['access_token'], - refreshToken: data['refresh_token'], - expiredDate: dayjs().add(data['expires_in'], 's').toDate(), - }); - - // when - await notify(userId, payload, poleEmploiSending); - - // then - expect( - authenticationMethodRepository.updateAuthenticationComplementByUserIdAndIdentityProvider - ).to.have.been.calledWith({ - authenticationComplement, - userId, - identityProvider: OidcIdentityProviders.POLE_EMPLOI.service.code, - }); - }); - - it('should send the notification to Pole Emploi', async function () { - // given - const authenticationComplement = new AuthenticationMethod.OidcAuthenticationComplement({ - accessToken: data['access_token'], - refreshToken: data['refresh_token'], - expiredDate: dayjs().add(data['expires_in'], 's').toDate(), - }); - - const expectedHeaders = { - Authorization: `Bearer ${authenticationComplement.accessToken}`, - 'Content-type': 'application/json', - Accept: 'application/json', - 'Service-source': 'Pix', - }; - - authenticationMethodRepository.updateAuthenticationComplementByUserIdAndIdentityProvider - .withArgs({ authenticationComplement, userId }) - .resolves(); - - authenticationMethodRepository.findOneByUserIdAndIdentityProvider - .withArgs({ userId, identityProvider: OidcIdentityProviders.POLE_EMPLOI.service.code }) - .resolves(authenticationMethod); - - httpAgent.post - .onFirstCall() - .resolves({ isSuccessful: true, code, data }) - .onSecondCall() - .resolves({ isSuccessful: true, code }); - - // when - await notify(userId, payload, poleEmploiSending); - - // then - expect(httpAgent.post).to.have.been.calledWithExactly({ - url: settings.poleEmploi.sendingUrl, - payload, - headers: expectedHeaders, - timeout: settings.partner.fetchTimeOut, - }); - }); - }); - - context('when it fails', function () { - it('should log error and return httpResponse with error if retrieve PE tokens fails', async function () { - // given - const errorData = { - error: 'invalid_client', - error_description: 'Invalid authentication method for accessing this endpoint.', - }; - const tokenResponse = { - isSuccessful: false, - code: 400, - data: errorData, - }; - - authenticationMethodRepository.findOneByUserIdAndIdentityProvider.resolves(authenticationMethod); - - httpAgent.post - .withArgs({ - url: settings.poleEmploi.tokenUrl, - headers: sinon.match.any, - payload: sinon.match.any, - timeout: settings.partner.fetchTimeOut, - }) - .resolves(tokenResponse); - - monitoringTools.logErrorWithCorrelationIds.resolves(); - - const expectedLoggerMessage = JSON.stringify(tokenResponse.data); - const expectedResult = { - code: tokenResponse.code, - isSuccessful: tokenResponse.isSuccessful, - }; - - // when - const result = await notify(userId, payload, poleEmploiSending); - - // then - expect(monitoringTools.logErrorWithCorrelationIds).to.have.been.calledWith({ - event: 'participation-send-pole-emploi', - 'pole-emploi-action': 'refresh-token', - 'participation-state': 'PARTICIPATION_STARTED', - message: expectedLoggerMessage, - }); - expect(result).to.deep.equal(expectedResult); - }); - - it('should log error and return httpResponse with error if sending to PE fails', async function () { - // given - payload = { test: { dateValidation: new Date() } }; - - const tokenResponse = { - isSuccessful: true, - data: { - access_token: 'TOKEN', - }, - }; - const httpResponse = { - isSuccessful: false, - code: 429, - data: 'Too Many Requests', - }; - - authenticationMethodRepository.findOneByUserIdAndIdentityProvider.resolves(authenticationMethod); - authenticationMethodRepository.updateAuthenticationComplementByUserIdAndIdentityProvider.resolves(); - - httpAgent.post - .withArgs({ - url: settings.poleEmploi.tokenUrl, - headers: sinon.match.any, - payload: sinon.match.any, - timeout: settings.partner.fetchTimeOut, - }) - .resolves(tokenResponse) - .withArgs({ - url: settings.poleEmploi.sendingUrl, - headers: sinon.match.any, - payload: sinon.match.any, - timeout: settings.partner.fetchTimeOut, - }) - .resolves(httpResponse); - - monitoringTools.logErrorWithCorrelationIds.resolves(); - - const expectedLoggerMessage = httpResponse.data; - const expectedResult = { - code: httpResponse.code, - isSuccessful: httpResponse.isSuccessful, - }; - - // when - const result = await notify(userId, payload, poleEmploiSending); - - // then - expect(monitoringTools.logErrorWithCorrelationIds).to.have.been.calledWith({ - event: 'participation-send-pole-emploi', - 'pole-emploi-action': 'send-results', - 'participation-state': 'PARTICIPATION_SHARED', - message: expectedLoggerMessage, - }); - expect(result).to.deep.equal(expectedResult); - }); - }); - }); - }); -}); diff --git a/api/tests/unit/infrastructure/helpers/csv.js b/api/tests/unit/infrastructure/helpers/csv.js index 015672df812..4e8cf4564c1 100644 --- a/api/tests/unit/infrastructure/helpers/csv.js +++ b/api/tests/unit/infrastructure/helpers/csv.js @@ -1,7 +1,12 @@ -const { expect, catchErr } = require('../../../test-helper'); -const { FileValidationError } = require('../../../../lib/domain/errors'); -const { parseCsvWithHeader, checkCsvHeader } = require('../../../../lib/infrastructure/helpers/csv'); -const { isEmpty } = require('lodash'); +import { expect, catchErr } from '../../../test-helper.js'; +import { FileValidationError } from '../../../../lib/domain/errors.js'; +import { parseCsvWithHeader, checkCsvHeader } from '../../../../lib/infrastructure/helpers/csv.js'; +import lodash from 'lodash'; + +const { isEmpty } = lodash; + +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Unit | Infrastructure | Helpers | csv.js', function () { const emptyFilePath = `${__dirname}/files/organizations-empty-file.csv`; diff --git a/api/tests/unit/infrastructure/http/errors-helper_test.js b/api/tests/unit/infrastructure/http/errors-helper_test.js index 130ebbd0525..ecf3db6bcc6 100644 --- a/api/tests/unit/infrastructure/http/errors-helper_test.js +++ b/api/tests/unit/infrastructure/http/errors-helper_test.js @@ -1,6 +1,5 @@ -const { expect } = require('../../../test-helper'); - -const { serializeHttpErrorResponse } = require('../../../../lib/infrastructure/http/errors-helper'); +import { expect } from '../../../test-helper.js'; +import { serializeHttpErrorResponse } from '../../../../lib/infrastructure/http/errors-helper.js'; describe('serializeHttpErrorResponse', function () { describe('when http error data is null', function () { diff --git a/api/tests/unit/infrastructure/http/http-agent_test.js b/api/tests/unit/infrastructure/http/http-agent_test.js index ab06b1418ad..58e030c6d29 100644 --- a/api/tests/unit/infrastructure/http/http-agent_test.js +++ b/api/tests/unit/infrastructure/http/http-agent_test.js @@ -1,14 +1,12 @@ -const { expect, sinon } = require('../../../test-helper'); -const axios = require('axios'); -const { post, get } = require('../../../../lib/infrastructure/http/http-agent'); -const monitoringTools = require('../../../../lib/infrastructure/monitoring-tools'); +import { expect, sinon } from '../../../test-helper.js'; +import axios from 'axios'; +import { httpAgent } from '../../../../lib/infrastructure/http/http-agent.js'; +import { monitoringTools } from '../../../../lib/infrastructure/monitoring-tools.js'; + +const { post, get } = httpAgent; describe('Unit | Infrastructure | http | http-agent', function () { describe('#post', function () { - afterEach(function () { - axios.post.restore(); - }); - it('should return the response status and success from the http call when successful', async function () { // given const url = 'someUrl'; @@ -122,9 +120,6 @@ describe('Unit | Infrastructure | http | http-agent', function () { }); }); describe('#get', function () { - afterEach(function () { - axios.get.restore(); - }); it('should return the response status and success from the http call when successful', async function () { // given const url = 'someUrl'; diff --git a/api/tests/unit/infrastructure/jobs/campaign-result/ParticipationResultCalculationJobHandler_test.js b/api/tests/unit/infrastructure/jobs/campaign-result/ParticipationResultCalculationJobHandler_test.js index 465e9a531f1..c2bcdd6f4c4 100644 --- a/api/tests/unit/infrastructure/jobs/campaign-result/ParticipationResultCalculationJobHandler_test.js +++ b/api/tests/unit/infrastructure/jobs/campaign-result/ParticipationResultCalculationJobHandler_test.js @@ -1,7 +1,7 @@ -const { expect, sinon } = require('../../../../test-helper'); -const CampaignParticipationResultsShared = require('../../../../../lib/domain/events/CampaignParticipationResultsShared'); -const usecases = require('../../../../../lib/domain/usecases/index.js'); -const ParticipationResultCalculationJobHandler = require('../../../../../lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJobHandler'); +import { expect, sinon } from '../../../../test-helper.js'; +import { CampaignParticipationResultsShared } from '../../../../../lib/domain/events/CampaignParticipationResultsShared.js'; +import { usecases } from '../../../../../lib/domain/usecases/index.js'; +import { ParticipationResultCalculationJobHandler } from '../../../../../lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJobHandler.js'; describe('Unit | Infrastructure | Jobs | saveComputedCampaignParticipationResult', function () { context('#handle', function () { diff --git a/api/tests/unit/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiHandler_test.js b/api/tests/unit/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiHandler_test.js index 375ef5a63c1..2456aae12a4 100644 --- a/api/tests/unit/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiHandler_test.js +++ b/api/tests/unit/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiHandler_test.js @@ -1,7 +1,7 @@ -const { expect, sinon } = require('../../../../test-helper'); -const CampaignParticipationResultsShared = require('../../../../../lib/domain/events/CampaignParticipationResultsShared'); -const SendSharedParticipationResultsToPoleEmploiHandler = require('../../../../../lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiHandler'); -const usecases = require('../../../../../lib/domain/usecases/index.js'); +import { expect, sinon } from '../../../../test-helper.js'; +import { CampaignParticipationResultsShared } from '../../../../../lib/domain/events/CampaignParticipationResultsShared.js'; +import { SendSharedParticipationResultsToPoleEmploiHandler } from '../../../../../lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiHandler.js'; +import { usecases } from '../../../../../lib/domain/usecases/index.js'; describe('Unit | Infrastructure | Jobs | SendSharedParticipationResultsToPoleEmploiHandler', function () { let event; diff --git a/api/tests/unit/infrastructure/jobs/cpf-export/handlers/create-and-upload_test.js b/api/tests/unit/infrastructure/jobs/cpf-export/handlers/create-and-upload_test.js index 4f089df86a9..9ddc0131e5f 100644 --- a/api/tests/unit/infrastructure/jobs/cpf-export/handlers/create-and-upload_test.js +++ b/api/tests/unit/infrastructure/jobs/cpf-export/handlers/create-and-upload_test.js @@ -1,10 +1,15 @@ -const { domainBuilder, expect, sinon } = require('../../../../../test-helper'); -const createAndUpload = require('../../../../../../lib/infrastructure/jobs/cpf-export/handlers/create-and-upload'); -const { PassThrough, Readable } = require('stream'); -const noop = require('lodash/noop'); -const dayjs = require('dayjs'); -const utc = require('dayjs/plugin/utc'); -const timezone = require('dayjs/plugin/timezone'); +import { domainBuilder, expect, sinon } from '../../../../../test-helper.js'; +import { createAndUpload } from '../../../../../../lib/infrastructure/jobs/cpf-export/handlers/create-and-upload.js'; +import stream from 'stream'; +import * as uuidService from 'uuid'; + +const { PassThrough, Readable } = stream; + +import lodash from 'lodash'; +const { noop } = lodash; +import dayjs from 'dayjs'; +import utc from 'dayjs/plugin/utc.js'; +import timezone from 'dayjs/plugin/timezone.js'; dayjs.extend(utc); dayjs.extend(timezone); @@ -66,6 +71,7 @@ describe('Unit | Infrastructure | jobs | cpf-export | create-and-upload', functi expect(cpfCertificationXmlExportService.buildXmlExport).to.have.been.calledWith({ cpfCertificationResults, writableStream: sinon.match(PassThrough), + uuidService, }); expect(cpfExternalStorage.upload).to.have.been.calledWith({ filename: 'pix-cpf-export-20220101-114327.xml.gz', diff --git a/api/tests/unit/infrastructure/jobs/cpf-export/handlers/planner_test.js b/api/tests/unit/infrastructure/jobs/cpf-export/handlers/planner_test.js index f9fea2f0766..616a73bae8f 100644 --- a/api/tests/unit/infrastructure/jobs/cpf-export/handlers/planner_test.js +++ b/api/tests/unit/infrastructure/jobs/cpf-export/handlers/planner_test.js @@ -1,9 +1,13 @@ -const { expect, sinon } = require('../../../../../test-helper'); -const planner = require('../../../../../../lib/infrastructure/jobs/cpf-export/handlers/planner'); -const dayjs = require('dayjs'); -const { cpf } = require('../../../../../../lib/config'); -const utc = require('dayjs/plugin/utc'); -const { noop } = require('lodash'); +import { expect, sinon } from '../../../../../test-helper.js'; +import { planner } from '../../../../../../lib/infrastructure/jobs/cpf-export/handlers/planner.js'; +import dayjs from 'dayjs'; +import { config } from '../../../../../../lib/config.js'; +const { cpf } = config; +import utc from 'dayjs/plugin/utc.js'; +import lodash from 'lodash'; + +const { noop } = lodash; + dayjs.extend(utc); describe('Unit | Infrastructure | jobs | cpf-export | planner', function () { diff --git a/api/tests/unit/infrastructure/jobs/cpf-export/handlers/send-email_test.js b/api/tests/unit/infrastructure/jobs/cpf-export/handlers/send-email_test.js index 92eff6ce445..92257278134 100644 --- a/api/tests/unit/infrastructure/jobs/cpf-export/handlers/send-email_test.js +++ b/api/tests/unit/infrastructure/jobs/cpf-export/handlers/send-email_test.js @@ -1,8 +1,8 @@ -const { expect, sinon } = require('../../../../../test-helper'); -const sendEmail = require('../../../../../../lib/infrastructure/jobs/cpf-export/handlers/send-email'); -const cronParser = require('cron-parser'); -const { cpf } = require('../../../../../../lib/config'); - +import { expect, sinon } from '../../../../../test-helper.js'; +import { sendEmail } from '../../../../../../lib/infrastructure/jobs/cpf-export/handlers/send-email.js'; +import cronParser from 'cron-parser'; +import { config } from '../../../../../../lib/config.js'; +const { cpf } = config; describe('Unit | Infrastructure | jobs | cpf-export | send-email', function () { let cpfExternalStorage; let mailService; diff --git a/api/tests/unit/infrastructure/lcms_test.js b/api/tests/unit/infrastructure/lcms_test.js index 10972b0fe2b..2c978c92593 100644 --- a/api/tests/unit/infrastructure/lcms_test.js +++ b/api/tests/unit/infrastructure/lcms_test.js @@ -1,6 +1,5 @@ -const { expect, nock, catchErr } = require('../../test-helper'); - -const lcms = require('../../../lib/infrastructure/lcms'); +import { expect, nock, catchErr } from '../../test-helper.js'; +import { lcms } from '../../../lib/infrastructure/lcms.js'; describe('Unit | Infrastructure | LCMS', function () { describe('#getLatestRelease', function () { diff --git a/api/tests/unit/infrastructure/mailers/MailingProvider_test.js b/api/tests/unit/infrastructure/mailers/MailingProvider_test.js index 00f98391bac..74be83470c1 100644 --- a/api/tests/unit/infrastructure/mailers/MailingProvider_test.js +++ b/api/tests/unit/infrastructure/mailers/MailingProvider_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const MailingProvider = require('../../../../lib/infrastructure/mailers/MailingProvider'); +import { expect } from '../../../test-helper.js'; +import { MailingProvider } from '../../../../lib/infrastructure/mailers/MailingProvider.js'; describe('Unit | Infrastructure | Mailers | MailingProvider', function () { describe('#sendEmail', function () { diff --git a/api/tests/unit/infrastructure/mailers/SendinblueProvider_test.js b/api/tests/unit/infrastructure/mailers/SendinblueProvider_test.js index e7f559db20e..72866956d71 100644 --- a/api/tests/unit/infrastructure/mailers/SendinblueProvider_test.js +++ b/api/tests/unit/infrastructure/mailers/SendinblueProvider_test.js @@ -1,10 +1,8 @@ -const { sinon, expect, nock, catchErr } = require('../../../test-helper'); -const { mailing } = require('../../../../lib/config'); - -const SendinblueProvider = require('../../../../lib/infrastructure/mailers/SendinblueProvider'); -const { - MailingProviderInvalidEmailError, -} = require('../../../../lib/infrastructure/mailers/MailingProviderInvalidEmailError'); +import { sinon, expect, nock, catchErr } from '../../../test-helper.js'; +import { config } from '../../../../lib/config.js'; +import { SendinblueProvider } from '../../../../lib/infrastructure/mailers/SendinblueProvider.js'; +import { MailingProviderInvalidEmailError } from '../../../../lib/infrastructure/mailers/MailingProviderInvalidEmailError.js'; +const { mailing } = config; describe('Unit | Class | SendinblueProvider', function () { beforeEach(function () { diff --git a/api/tests/unit/infrastructure/mailers/mailer_test.js b/api/tests/unit/infrastructure/mailers/mailer_test.js index 64770f545a9..5206d01e4f0 100644 --- a/api/tests/unit/infrastructure/mailers/mailer_test.js +++ b/api/tests/unit/infrastructure/mailers/mailer_test.js @@ -1,11 +1,10 @@ -const { expect, sinon } = require('../../../test-helper'); -const { mailing } = require('../../../../lib/config'); -const logger = require('../../../../lib/infrastructure/logger'); -const { Mailer } = require('../../../../lib/infrastructure/mailers/mailer'); -const EmailingAttempt = require('../../../../lib/domain/models/EmailingAttempt'); -const { - MailingProviderInvalidEmailError, -} = require('../../../../lib/infrastructure/mailers/MailingProviderInvalidEmailError'); +import { expect, sinon } from '../../../test-helper.js'; +import { config } from '../../../../lib/config.js'; +import { logger } from '../../../../lib/infrastructure/logger.js'; +import { Mailer } from '../../../../lib/infrastructure/mailers/mailer.js'; +import { EmailingAttempt } from '../../../../lib/domain/models/EmailingAttempt.js'; +import { MailingProviderInvalidEmailError } from '../../../../lib/infrastructure/mailers/MailingProviderInvalidEmailError.js'; +const { mailing } = config; describe('Unit | Infrastructure | Mailers | mailer', function () { let mailCheck; diff --git a/api/tests/unit/infrastructure/open-api-doc/pole-emploi/envois-doc_test.js b/api/tests/unit/infrastructure/open-api-doc/pole-emploi/envois-doc_test.js index d428f0afca2..3df2f85d2b3 100644 --- a/api/tests/unit/infrastructure/open-api-doc/pole-emploi/envois-doc_test.js +++ b/api/tests/unit/infrastructure/open-api-doc/pole-emploi/envois-doc_test.js @@ -1,5 +1,5 @@ -const { poleEmploiEnvoisDoc } = require('../../../../../lib/infrastructure/open-api-doc/pole-emploi/envois-doc'); -const { expect } = require('../../../../test-helper'); +import { poleEmploiEnvoisDoc } from '../../../../../lib/infrastructure/open-api-doc/pole-emploi/envois-doc.js'; +import { expect } from '../../../../test-helper.js'; describe('Unit | Infrastructure | Open API Doc | Pole Emploi | Envois Documentation', function () { it('should validate payload for a campaign participation', function () { diff --git a/api/tests/unit/infrastructure/open-api-doc/pole-emploi/erreur-doc_test.js b/api/tests/unit/infrastructure/open-api-doc/pole-emploi/erreur-doc_test.js index 92e7ab4ae4e..bc578479ac5 100644 --- a/api/tests/unit/infrastructure/open-api-doc/pole-emploi/erreur-doc_test.js +++ b/api/tests/unit/infrastructure/open-api-doc/pole-emploi/erreur-doc_test.js @@ -1,5 +1,5 @@ -const ErreurDoc = require('../../../../../lib/infrastructure/open-api-doc/pole-emploi/erreur-doc'); -const { expect } = require('../../../../test-helper'); +import { erreurDoc as ErreurDoc } from '../../../../../lib/infrastructure/open-api-doc/pole-emploi/erreur-doc.js'; +import { expect } from '../../../../test-helper.js'; describe('Unit | Infrastructure | Open API Doc | Pole Emploi | Erreur Documentation', function () { it('should validate payload for a campaign participation', function () { diff --git a/api/tests/unit/infrastructure/repositories/competence-tree-repository_test.js b/api/tests/unit/infrastructure/repositories/competence-tree-repository_test.js index 6ec195377c7..5eee6c26028 100644 --- a/api/tests/unit/infrastructure/repositories/competence-tree-repository_test.js +++ b/api/tests/unit/infrastructure/repositories/competence-tree-repository_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../../test-helper'); -const competenceTreeRepository = require('../../../../lib/infrastructure/repositories/competence-tree-repository'); -const CompetenceTree = require('../../../../lib/domain/models/CompetenceTree'); +import { expect, sinon } from '../../../test-helper.js'; +import * as competenceTreeRepository from '../../../../lib/infrastructure/repositories/competence-tree-repository.js'; +import { CompetenceTree } from '../../../../lib/domain/models/CompetenceTree.js'; describe('Unit | Repository | competence-tree-repository', function () { let areaRepository; diff --git a/api/tests/unit/infrastructure/repositories/correction-repository_test.js b/api/tests/unit/infrastructure/repositories/correction-repository_test.js index 290fcc0dc28..16046dbc8a6 100644 --- a/api/tests/unit/infrastructure/repositories/correction-repository_test.js +++ b/api/tests/unit/infrastructure/repositories/correction-repository_test.js @@ -1,12 +1,10 @@ -const { expect, sinon, domainBuilder } = require('../../../test-helper'); -const correctionRepository = require('../../../../lib/infrastructure/repositories/correction-repository'); -const { - challengeDatasource, -} = require('../../../../lib/infrastructure/datasources/learning-content/challenge-datasource'); -const { skillDatasource } = require('../../../../lib/infrastructure/datasources/learning-content/skill-datasource'); -const Correction = require('../../../../lib/domain/models/Correction'); -const ChallengeLearningContentDataObjectFixture = require('../../../tooling/fixtures/infrastructure/challengeLearningContentDataObjectFixture'); -const SkillLearningContentDataObjectFixture = require('../../../tooling/fixtures/infrastructure/skillLearningContentDataObjectFixture'); +import { expect, sinon, domainBuilder } from '../../../test-helper.js'; +import * as correctionRepository from '../../../../lib/infrastructure/repositories/correction-repository.js'; +import { challengeDatasource } from '../../../../lib/infrastructure/datasources/learning-content/challenge-datasource.js'; +import { skillDatasource } from '../../../../lib/infrastructure/datasources/learning-content/skill-datasource.js'; +import { Correction } from '../../../../lib/domain/models/Correction.js'; +import { ChallengeLearningContentDataObjectFixture } from '../../../tooling/fixtures/infrastructure/challengeLearningContentDataObjectFixture.js'; +import { SkillLearningContentDataObjectFixture } from '../../../tooling/fixtures/infrastructure/skillLearningContentDataObjectFixture.js'; describe('Unit | Repository | correction-repository', function () { let tutorialRepository; diff --git a/api/tests/unit/infrastructure/serializers/csv/campaign-profile-collection-export_test.js b/api/tests/unit/infrastructure/serializers/csv/campaign-profile-collection-export_test.js index 676ded70eea..815ccbd304a 100644 --- a/api/tests/unit/infrastructure/serializers/csv/campaign-profile-collection-export_test.js +++ b/api/tests/unit/infrastructure/serializers/csv/campaign-profile-collection-export_test.js @@ -1,8 +1,10 @@ -const { PassThrough } = require('stream'); -const { domainBuilder, expect, sinon, streamToPromise } = require('../../../../test-helper'); +import stream from 'stream'; -const CampaignProfilesCollectionExport = require('../../../../../lib/infrastructure/serializers/csv/campaign-profiles-collection-export'); -const { getI18n } = require('../../../../tooling/i18n/i18n'); +const { PassThrough } = stream; + +import { domainBuilder, expect, sinon, streamToPromise } from '../../../../test-helper.js'; +import { CampaignProfilesCollectionExport } from '../../../../../lib/infrastructure/serializers/csv/campaign-profiles-collection-export.js'; +import { getI18n } from '../../../../tooling/i18n/i18n.js'; describe('Unit | Serializer | CSV | campaign-profiles-collection-export', function () { describe('#export', function () { diff --git a/api/tests/unit/infrastructure/serializers/csv/csv-learner-parser_test.js b/api/tests/unit/infrastructure/serializers/csv/csv-learner-parser_test.js index 76211a236ae..9170d7f300e 100644 --- a/api/tests/unit/infrastructure/serializers/csv/csv-learner-parser_test.js +++ b/api/tests/unit/infrastructure/serializers/csv/csv-learner-parser_test.js @@ -1,9 +1,7 @@ -const iconv = require('iconv-lite'); -const { sinon, expect, catchErr } = require('../../../../test-helper'); -const { - CsvOrganizationLearnerParser, -} = require('../../../../../lib/infrastructure/serializers/csv/csv-learner-parser'); -const { CsvColumn } = require('../../../../../lib/infrastructure/serializers/csv/csv-column'); +import iconv from 'iconv-lite'; +import { sinon, expect, catchErr } from '../../../../test-helper.js'; +import { CsvOrganizationLearnerParser } from '../../../../../lib/infrastructure/serializers/csv/csv-learner-parser.js'; +import { CsvColumn } from '../../../../../lib/infrastructure/serializers/csv/csv-column.js'; class FakeLearnerSet { constructor() { diff --git a/api/tests/unit/infrastructure/serializers/csv/csv-parser_test.js b/api/tests/unit/infrastructure/serializers/csv/csv-parser_test.js index 3eaa28f59df..3bf3f5395d8 100644 --- a/api/tests/unit/infrastructure/serializers/csv/csv-parser_test.js +++ b/api/tests/unit/infrastructure/serializers/csv/csv-parser_test.js @@ -1,7 +1,7 @@ -const iconv = require('iconv-lite'); -const { expect, catchErr } = require('../../../../test-helper'); -const { CsvParser } = require('../../../../../lib/infrastructure/serializers/csv/csv-parser'); -const { CsvColumn } = require('../../../../../lib/infrastructure/serializers/csv/csv-column'); +import iconv from 'iconv-lite'; +import { expect, catchErr } from '../../../../test-helper.js'; +import { CsvParser } from '../../../../../lib/infrastructure/serializers/csv/csv-parser.js'; +import { CsvColumn } from '../../../../../lib/infrastructure/serializers/csv/csv-column.js'; describe('Unit | Infrastructure | CsvParser', function () { context('The header is correctly formed', function () { diff --git a/api/tests/unit/infrastructure/serializers/csv/csv-serializer_test.js b/api/tests/unit/infrastructure/serializers/csv/csv-serializer_test.js index 4df4f2a7d07..5999cb3f7b4 100644 --- a/api/tests/unit/infrastructure/serializers/csv/csv-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/csv/csv-serializer_test.js @@ -1,9 +1,9 @@ -const { expect, sinon, catchErr } = require('../../../../test-helper'); -const csvSerializer = require('../../../../../lib/infrastructure/serializers/csv/csv-serializer'); -const logger = require('../../../../../lib/infrastructure/logger'); -const _ = require('lodash'); -const { FileValidationError } = require('../../../../../lib/domain/errors'); -const { emptySession } = require('../../../../../lib/infrastructure/utils/csv/sessions-import'); +import { expect, sinon, catchErr } from '../../../../test-helper.js'; +import * as csvSerializer from '../../../../../lib/infrastructure/serializers/csv/csv-serializer.js'; +import { logger } from '../../../../../lib/infrastructure/logger.js'; +import _ from 'lodash'; +import { FileValidationError } from '../../../../../lib/domain/errors.js'; +import { emptySession } from '../../../../../lib/infrastructure/utils/csv/sessions-import.js'; describe('Unit | Serializer | CSV | csv-serializer', function () { describe('#serializeLine', function () { diff --git a/api/tests/unit/infrastructure/serializers/csv/higher-organization-learner-parser_test.js b/api/tests/unit/infrastructure/serializers/csv/higher-organization-learner-parser_test.js index 2c583efc095..9f87f86c445 100644 --- a/api/tests/unit/infrastructure/serializers/csv/higher-organization-learner-parser_test.js +++ b/api/tests/unit/infrastructure/serializers/csv/higher-organization-learner-parser_test.js @@ -1,9 +1,9 @@ -const iconv = require('iconv-lite'); -const { expect, catchErr } = require('../../../../test-helper'); -const SupOrganizationLearnerParser = require('../../../../../lib/infrastructure/serializers/csv/sup-organization-learner-parser'); -const SupOrganizationLearnerImportHeader = require('../../../../../lib/infrastructure/serializers/csv/sup-organization-learner-import-header'); -const _ = require('lodash'); -const { getI18n } = require('../../../../tooling/i18n/i18n'); +import iconv from 'iconv-lite'; +import { expect, catchErr } from '../../../../test-helper.js'; +import { SupOrganizationLearnerParser } from '../../../../../lib/infrastructure/serializers/csv/sup-organization-learner-parser.js'; +import { SupOrganizationLearnerImportHeader } from '../../../../../lib/infrastructure/serializers/csv/sup-organization-learner-import-header.js'; +import _ from 'lodash'; +import { getI18n } from '../../../../tooling/i18n/i18n.js'; const i18n = getI18n(); const supOrganizationLearnerImportHeader = new SupOrganizationLearnerImportHeader(i18n).columns diff --git a/api/tests/unit/infrastructure/serializers/csv/organization-learner-parser_test.js b/api/tests/unit/infrastructure/serializers/csv/organization-learner-parser_test.js index 0b1fe395488..29567c8e27c 100644 --- a/api/tests/unit/infrastructure/serializers/csv/organization-learner-parser_test.js +++ b/api/tests/unit/infrastructure/serializers/csv/organization-learner-parser_test.js @@ -1,9 +1,9 @@ -const iconv = require('iconv-lite'); -const { expect, catchErr } = require('../../../../test-helper'); -const OrganizationLearnerParser = require('../../../../../lib/infrastructure/serializers/csv/organization-learner-parser'); -const { CsvImportError } = require('../../../../../lib/domain/errors'); -const OrganizationLearnerImportHeader = require('../../../../../lib/infrastructure/serializers/csv/organization-learner-import-header'); -const { getI18n } = require('../../../../tooling/i18n/i18n'); +import iconv from 'iconv-lite'; +import { expect, catchErr } from '../../../../test-helper.js'; +import { OrganizationLearnerParser } from '../../../../../lib/infrastructure/serializers/csv/organization-learner-parser.js'; +import { CsvImportError } from '../../../../../lib/domain/errors.js'; +import { OrganizationLearnerImportHeader } from '../../../../../lib/infrastructure/serializers/csv/organization-learner-import-header.js'; +import { getI18n } from '../../../../tooling/i18n/i18n.js'; const i18n = getI18n(); const organizationLearnerCsvColumns = new OrganizationLearnerImportHeader(i18n).columns diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/admin-member-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/admin-member-serializer_test.js index bb37d6afe0c..6426e77348f 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/admin-member-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/admin-member-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/admin-member-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/admin-member-serializer.js'; describe('Unit | Serializer | JSONAPI | admin-member-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/answer-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/answer-serializer_test.js index d74f61f1f2b..58bc5f62def 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/answer-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/answer-serializer_test.js @@ -1,8 +1,8 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const Answer = require('../../../../../lib/domain/models/Answer'); -const AnswerStatus = require('../../../../../lib/domain/models/AnswerStatus'); -const answerStatusJSONAPIAdapter = require('../../../../../lib/infrastructure/adapters/answer-status-json-api-adapter'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/answer-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import { Answer } from '../../../../../lib/domain/models/Answer.js'; +import { AnswerStatus } from '../../../../../lib/domain/models/AnswerStatus.js'; +import { AnswerStatusJsonApiAdapter as answerStatusJSONAPIAdapter } from '../../../../../lib/infrastructure/adapters/answer-status-json-api-adapter.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/answer-serializer.js'; describe('Unit | Serializer | JSONAPI | answer-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/assessment-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/assessment-serializer_test.js index 32ab591a362..2c0149745bc 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/assessment-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/assessment-serializer_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/assessment-serializer'); -const Assessment = require('../../../../../lib/domain/models/Assessment'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/assessment-serializer.js'; +import { Assessment } from '../../../../../lib/domain/models/Assessment.js'; describe('Unit | Serializer | JSONAPI | assessment-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/authentication-methods-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/authentication-methods-serializer_test.js index 9273b412246..0778ff55c16 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/authentication-methods-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/authentication-methods-serializer_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const OidcIdentityProviders = require('../../../../../lib/domain/constants/oidc-identity-providers'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/authentication-methods-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as OidcIdentityProviders from '../../../../../lib/domain/constants/oidc-identity-providers.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/authentication-methods-serializer.js'; describe('Unit | Serializer | JSONAPI | authentication-methods-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/authentication-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/authentication-serializer_test.js index 85f791c09cc..0f475cc5f6c 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/authentication-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/authentication-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/authentication-serializer'); -const Authentication = require('../../../../../lib/domain/models/Authentication'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/authentication-serializer.js'; +import { Authentication } from '../../../../../lib/domain/models/Authentication.js'; describe('Unit | Serializer | JSONAPI | authentication-serializer', function () { const expectedJsonAnswer = { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/badge-creation-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/badge-creation-serializer_test.js index df35d759e8f..f06d284951c 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/badge-creation-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/badge-creation-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/badge-creation-serializer'); +import { expect } from '../../../../test-helper.js'; +import { deserializer } from '../../../../../lib/infrastructure/serializers/jsonapi/badge-creation-serializer.js'; describe('Unit | Serializer | JSONAPI | badge-creation-serializer', function () { describe('#deserialize', function () { @@ -25,7 +25,7 @@ describe('Unit | Serializer | JSONAPI | badge-creation-serializer', function () }; // when - const badgeCreation = await serializer.deserialize(jsonBadge); + const badgeCreation = await deserializer.deserialize(jsonBadge); // then const expectedBadgeCreation = { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/badge-criteria-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/badge-criteria-serializer_test.js index 7aa134f0646..13b7eb795cb 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/badge-criteria-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/badge-criteria-serializer_test.js @@ -1,6 +1,6 @@ -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/badge-criteria-serializer'); -const { expect } = require('../../../../test-helper'); -const BadgeCriterion = require('../../../../../lib/domain/models/BadgeCriterion'); +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/badge-criteria-serializer.js'; +import { expect } from '../../../../test-helper.js'; +import { BadgeCriterion } from '../../../../../lib/domain/models/BadgeCriterion.js'; describe('Unit | Serializer | JSONAPI | badge-criteria-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/badge-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/badge-serializer_test.js index b305a3dc62c..3ac6f783d56 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/badge-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/badge-serializer_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/badge-serializer'); -const BadgeCriterion = require('../../../../../lib/domain/models/BadgeCriterion'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/badge-serializer.js'; +import { BadgeCriterion } from '../../../../../lib/domain/models/BadgeCriterion.js'; describe('Unit | Serializer | JSONAPI | badge-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-analysis-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-analysis-serializer_test.js index 07ecebc14ad..da26b79cb86 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-analysis-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-analysis-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-analysis-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-analysis-serializer.js'; describe('Unit | Serializer | JSONAPI | campaign-analysis-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-assessment-participation-result-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-assessment-participation-result-serializer_test.js index 9eca3f070db..28482b6e0c4 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-assessment-participation-result-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-assessment-participation-result-serializer_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const CampaignAssessmentParticipationResult = require('../../../../../lib/domain/read-models/CampaignAssessmentParticipationResult'); -const CampaignParticipationStatuses = require('../../../../../lib/domain/models/CampaignParticipationStatuses'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-assessment-participation-result-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import { CampaignAssessmentParticipationResult } from '../../../../../lib/domain/read-models/CampaignAssessmentParticipationResult.js'; +import { CampaignParticipationStatuses } from '../../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-assessment-participation-result-serializer.js'; const { SHARED } = CampaignParticipationStatuses; diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-assessment-participation-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-assessment-participation-serializer_test.js index 2e33894e911..a3a0ee5f210 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-assessment-participation-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-assessment-participation-serializer_test.js @@ -1,8 +1,8 @@ -const { expect } = require('../../../../test-helper'); -const Assessment = require('../../../../../lib/domain/models/Assessment'); -const CampaignParticipationStatuses = require('../../../../../lib/domain/models/CampaignParticipationStatuses'); -const CampaignAssessmentParticipation = require('../../../../../lib/domain/read-models/CampaignAssessmentParticipation'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-assessment-participation-serializer'); +import { expect } from '../../../../test-helper.js'; +import { Assessment } from '../../../../../lib/domain/models/Assessment.js'; +import { CampaignParticipationStatuses } from '../../../../../lib/domain/models/CampaignParticipationStatuses.js'; +import { CampaignAssessmentParticipation } from '../../../../../lib/domain/read-models/CampaignAssessmentParticipation.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-assessment-participation-serializer.js'; describe('Unit | Serializer | JSONAPI | campaign-assessment-participation-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-assessment-result-minimal-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-assessment-result-minimal-serializer_test.js index 4e5610e498a..7a41b11b098 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-assessment-result-minimal-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-assessment-result-minimal-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-assessment-result-minimal-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-assessment-result-minimal-serializer.js'; describe('Unit | Serializer | JSONAPI | campaign-assessment-result-minimal-serializer', function () { describe('#serialize campaign-assessment-result-minimal list', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-collective-result-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-collective-result-serializer_test.js index 3d432469b90..4c96094bd6f 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-collective-result-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-collective-result-serializer_test.js @@ -1,6 +1,6 @@ -const _ = require('lodash'); -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-collective-result-serializer'); +import _ from 'lodash'; +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-collective-result-serializer.js'; describe('Unit | Serializer | JSONAPI | campaign-collective-results-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-details-management-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-details-management-serializer_test.js index 22c3265c94c..8e102c66153 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-details-management-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-details-management-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-details-management-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-details-management-serializer.js'; describe('Unit | Serializer | JSONAPI | campaign-details-management-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-management-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-management-serializer_test.js index 1080c3cbc0a..2fe9dad8047 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-management-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-management-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-management-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-management-serializer.js'; describe('Unit | Serializer | JSONAPI | campaign-management-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participant-activity-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participant-activity-serializer_test.js index 0c7c276236b..34670fbd2cc 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participant-activity-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participant-activity-serializer_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-participant-activity-serializer'); -const CampaignParticipantActivity = require('../../../../../lib/domain/read-models/CampaignParticipantActivity'); -const CampaignParticipationStatuses = require('../../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-participant-activity-serializer.js'; +import { CampaignParticipantActivity } from '../../../../../lib/domain/read-models/CampaignParticipantActivity.js'; +import { CampaignParticipationStatuses } from '../../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED, STARTED } = CampaignParticipationStatuses; diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participation-for-user-management-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participation-for-user-management-serializer_test.js index 6106796c8e6..0fe1dcfa9a6 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participation-for-user-management-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participation-for-user-management-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-participation-for-user-management-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-participation-for-user-management-serializer.js'; describe('Unit | Serializer | JSONAPI | campaign-participation-for-user-management-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participation-overview-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participation-overview-serializer_test.js index 3ecc7cfb98a..586edd69598 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participation-overview-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participation-overview-serializer_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-participation-overview-serializer'); -const CampaignParticipationOverview = require('../../../../../lib/domain/read-models/CampaignParticipationOverview'); -const CampaignParticipationStatuses = require('../../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-participation-overview-serializer.js'; +import { CampaignParticipationOverview } from '../../../../../lib/domain/read-models/CampaignParticipationOverview.js'; +import { CampaignParticipationStatuses } from '../../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED, STARTED } = CampaignParticipationStatuses; diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participation-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participation-serializer_test.js index c914f9fb2a0..a47615519c1 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participation-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participation-serializer_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-participation-serializer'); -const CampaignParticipation = require('../../../../../lib/domain/models/CampaignParticipation'); -const CampaignParticipationStatuses = require('../../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-participation-serializer.js'; +import { CampaignParticipation } from '../../../../../lib/domain/models/CampaignParticipation.js'; +import { CampaignParticipationStatuses } from '../../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED } = CampaignParticipationStatuses; describe('Unit | Serializer | JSONAPI | campaign-participation-serializer', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participations-count-by-stage-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participations-count-by-stage-serializer_test.js index 567313ed752..9da1e6ab033 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participations-count-by-stage-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participations-count-by-stage-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-participations-count-by-stage-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-participations-count-by-stage-serializer.js'; describe('Unit | Serializer | JSONAPI | campaign-participations-count-by-stage-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participations-counts-by-day-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participations-counts-by-day-serializer_test.js index 16382a50dae..e78ab93a232 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participations-counts-by-day-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participations-counts-by-day-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-participations-counts-by-day-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-participations-counts-by-day-serializer.js'; describe('Unit | Serializer | JSONAPI | campaign-participations-counts-by-day-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participations-counts-by-status-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participations-counts-by-status-serializer_test.js index 4245a3248e9..e1ced546df2 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participations-counts-by-status-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-participations-counts-by-status-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-participations-counts-by-status-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-participations-counts-by-status-serializer.js'; describe('Unit | Serializer | JSONAPI | campaign-participations-counts-by-status-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-profile-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-profile-serializer_test.js index 84ab3f7602a..4f39c84789c 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-profile-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-profile-serializer_test.js @@ -1,9 +1,9 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-profile-serializer'); -const CampaignProfile = require('../../../../../lib/domain/read-models/CampaignProfile'); -const PlacementProfile = require('../../../../../lib/domain/models/PlacementProfile'); -const UserCompetence = require('../../../../../lib/domain/models/UserCompetence'); -const CampaignParticipationStatuses = require('../../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-profile-serializer.js'; +import { CampaignProfile } from '../../../../../lib/domain/read-models/CampaignProfile.js'; +import { PlacementProfile } from '../../../../../lib/domain/models/PlacementProfile.js'; +import { UserCompetence } from '../../../../../lib/domain/models/UserCompetence.js'; +import { CampaignParticipationStatuses } from '../../../../../lib/domain/models/CampaignParticipationStatuses.js'; const { SHARED } = CampaignParticipationStatuses; diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-profiles-collection-participation-summary-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-profiles-collection-participation-summary-serializer_test.js index 9cbaf9159d6..97e88505437 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-profiles-collection-participation-summary-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-profiles-collection-participation-summary-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-profiles-collection-participation-summary-serializer'); -const CampaignProfilesCollectionParticipationSummary = require('../../../../../lib/domain/read-models/CampaignProfilesCollectionParticipationSummary'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-profiles-collection-participation-summary-serializer.js'; +import { CampaignProfilesCollectionParticipationSummary } from '../../../../../lib/domain/read-models/CampaignProfilesCollectionParticipationSummary.js'; describe('Unit | Serializer | JSONAPI | campaign-profiles-collection-participation-summary-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-report-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-report-serializer_test.js index 557d372df41..4dde054e9e9 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-report-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-report-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-report-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-report-serializer.js'; describe('Unit | Serializer | JSONAPI | campaign-report-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-to-join-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-to-join-serializer_test.js index 86a118bf0af..0baff13debb 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign-to-join-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign-to-join-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const campaignToJoinSerializer = require('../../../../../lib/infrastructure/serializers/jsonapi/campaign-to-join-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as campaignToJoinSerializer from '../../../../../lib/infrastructure/serializers/jsonapi/campaign-to-join-serializer.js'; describe('Unit | Serializer | JSONAPI | campaign-to-join-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/campaign/target-profile-for-specifier-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/campaign/target-profile-for-specifier-serializer_test.js index 290df5d47e9..2419b4c1235 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/campaign/target-profile-for-specifier-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/campaign/target-profile-for-specifier-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../../test-helper'); -const serializer = require('../../../../../../lib/infrastructure/serializers/jsonapi/campaign/target-profile-for-specifier-serializer'); -const TargetProfileForSpecifier = require('../../../../../../lib/domain/read-models/campaign/TargetProfileForSpecifier'); +import { expect } from '../../../../../test-helper.js'; +import * as serializer from '../../../../../../lib/infrastructure/serializers/jsonapi/campaign/target-profile-for-specifier-serializer.js'; +import { TargetProfileForSpecifier } from '../../../../../../lib/domain/read-models/campaign/TargetProfileForSpecifier.js'; describe('Unit | Serializer | JSONAPI | target-profile-for-specifier-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certification-candidate-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certification-candidate-serializer_test.js index 344816bf0ca..9f19c3704d5 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certification-candidate-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certification-candidate-serializer_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const CertificationCandidate = require('../../../../../lib/domain/models/CertificationCandidate'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certification-candidate-serializer'); -const _ = require('lodash'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import { CertificationCandidate } from '../../../../../lib/domain/models/CertificationCandidate.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/certification-candidate-serializer.js'; +import _ from 'lodash'; describe('Unit | Serializer | JSONAPI | certification-candidate-serializer', function () { let certificationCandidate; diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certification-candidate-subscription-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certification-candidate-subscription-serializer_test.js index 9cfcd0d443d..e723409ffba 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certification-candidate-subscription-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certification-candidate-subscription-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certification-candidate-subscription-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/certification-candidate-subscription-serializer.js'; describe('Unit | Serializer | JSONAPI | certification-candidate-subscription-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-for-admin-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-for-admin-serializer_test.js index 9f424f616b3..91858c9f3aa 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-for-admin-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-for-admin-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certification-center-for-admin-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/certification-center-for-admin-serializer.js'; describe('Unit | Serializer | JSONAPI | certification-center-for-admin-serializer', function () { describe('#deserialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-invitation-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-invitation-serializer_test.js index 5febcfb8095..e36cfa36409 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-invitation-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-invitation-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certification-center-invitation-serializer'); -const CertificationCenterInvitation = require('../../../../../lib/domain/models/CertificationCenterInvitation'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/certification-center-invitation-serializer.js'; +import { CertificationCenterInvitation } from '../../../../../lib/domain/models/CertificationCenterInvitation.js'; describe('Unit | Serializer | JSONAPI | certification-center-invitation-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-membership-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-membership-serializer_test.js index 5cd1a11d39c..6b73cf3ba69 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-membership-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-membership-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const certificationCenterMembershipSerializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certification-center-membership-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as certificationCenterMembershipSerializer from '../../../../../lib/infrastructure/serializers/jsonapi/certification-center-membership-serializer.js'; describe('Unit | Serializer | JSONAPI | certification-center-membership-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-serializer_test.js index cfb8322bed6..3e65b152e38 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certification-center-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certification-center-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/certification-center-serializer.js'; describe('Unit | Serializer | JSONAPI | certification-center-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certification-course-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certification-course-serializer_test.js index 71b12567b6f..e4b9c46b485 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certification-course-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certification-course-serializer_test.js @@ -1,11 +1,9 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certification-course-serializer'); -const Assessment = require('../../../../../lib/domain/models/Assessment'); -const CertificationCourse = require('../../../../../lib/domain/models/CertificationCourse'); -const CertificationIssueReport = require('../../../../../lib/domain/models/CertificationIssueReport'); -const { - CertificationIssueReportCategories, -} = require('../../../../../lib/domain/models/CertificationIssueReportCategory'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/certification-course-serializer.js'; +import { Assessment } from '../../../../../lib/domain/models/Assessment.js'; +import { CertificationCourse } from '../../../../../lib/domain/models/CertificationCourse.js'; +import { CertificationIssueReport } from '../../../../../lib/domain/models/CertificationIssueReport.js'; +import { CertificationIssueReportCategory } from '../../../../../lib/domain/models/CertificationIssueReportCategory.js'; describe('Unit | Serializer | JSONAPI | certification-course-serializer', function () { describe('#serialize', function () { @@ -25,7 +23,7 @@ describe('Unit | Serializer | JSONAPI | certification-course-serializer', functi const issueReport = new CertificationIssueReport({ id: 1234, description: "Signalement de l'examinateur", - category: CertificationIssueReportCategories.OTHER, + category: CertificationIssueReportCategory.OTHER, certificationCourseId: certificationCourse.getId(), }); diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certification-details-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certification-details-serializer_test.js index 60df9e19aba..a6957218fe6 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certification-details-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certification-details-serializer_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certification-details-serializer'); -const { states } = require('../../../../../lib/domain/models/CertificationAssessment'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/certification-details-serializer.js'; +import { states } from '../../../../../lib/domain/models/CertificationAssessment.js'; describe('Unit | Serializer | JSONAPI | certification-details-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certification-eligibility-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certification-eligibility-serializer_test.js index ed7ddf20f04..1cb3b09e1fe 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certification-eligibility-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certification-eligibility-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certification-eligibility-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/certification-eligibility-serializer.js'; describe('Unit | Serializer | JSONAPI | certification-eligibility-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certification-issue-report-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certification-issue-report-serializer_test.js index b6e345c0aa3..fb0ba2953eb 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certification-issue-report-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certification-issue-report-serializer_test.js @@ -1,10 +1,10 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certification-issue-report-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/certification-issue-report-serializer.js'; -const { - CertificationIssueReportCategories, +import { + CertificationIssueReportCategory, CertificationIssueReportSubcategories, -} = require('../../../../../lib/domain/models/CertificationIssueReportCategory'); +} from '../../../../../lib/domain/models/CertificationIssueReportCategory.js'; describe('Unit | Serializer | JSONAPI | certification-issue-report-serializer', function () { describe('#serialize()', function () { @@ -68,7 +68,7 @@ describe('Unit | Serializer | JSONAPI | certification-issue-report-serializer', // then const expectedCertificationIssueReport = { certificationCourseId, - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, description, subcategory: CertificationIssueReportSubcategories.IMAGE_NOT_DISPLAYING, questionNumber, diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certification-point-of-contact-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certification-point-of-contact-serializer_test.js index b452adeab7e..b258692d5c8 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certification-point-of-contact-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certification-point-of-contact-serializer_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder, sinon } = require('../../../../test-helper'); -const settings = require('../../../../../lib/config'); -const certificationPointOfContactSerializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certification-point-of-contact-serializer'); +import { expect, domainBuilder, sinon } from '../../../../test-helper.js'; +import { config as settings } from '../../../../../lib/config.js'; +import * as certificationPointOfContactSerializer from '../../../../../lib/infrastructure/serializers/jsonapi/certification-point-of-contact-serializer.js'; describe('Unit | Serializer | JSONAPI | certification-point-of-contact-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certification-report-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certification-report-serializer_test.js index 8214812e002..3bcccf6c67a 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certification-report-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certification-report-serializer_test.js @@ -1,9 +1,9 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certification-report-serializer'); -const { - CertificationIssueReportCategories, +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/certification-report-serializer.js'; +import { + CertificationIssueReportCategory, CertificationIssueReportSubcategories, -} = require('../../../../../lib/domain/models/CertificationIssueReportCategory'); +} from '../../../../../lib/domain/models/CertificationIssueReportCategory.js'; describe('Unit | Serializer | JSONAPI | certification-report-serializer', function () { describe('#serialize()', function () { @@ -53,7 +53,7 @@ describe('Unit | Serializer | JSONAPI | certification-report-serializer', functi id: 123, certificationIssueReports: [ domainBuilder.buildCertificationIssueReport({ - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, description: 'Pas content', subcategory: CertificationIssueReportSubcategories.EMBED_NOT_WORKING, questionNumber: '6', @@ -74,7 +74,7 @@ describe('Unit | Serializer | JSONAPI | certification-report-serializer', functi type: 'certificationIssueReports', id: '123', attributes: { - category: CertificationIssueReportCategories.IN_CHALLENGE, + category: CertificationIssueReportCategory.IN_CHALLENGE, description: 'Pas content', subcategory: CertificationIssueReportSubcategories.EMBED_NOT_WORKING, 'question-number': '6', diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certification-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certification-serializer_test.js index 9a94970cfa0..167b4170f3d 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certification-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certification-serializer_test.js @@ -1,8 +1,8 @@ -const { expect, EMPTY_BLANK_AND_NULL, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certification-serializer'); -const { WrongDateFormatError } = require('../../../../../lib/domain/errors'); -const { NO_EXAMINER_COMMENT } = require('../../../../../lib/domain/models/CertificationReport'); -const CertificationCourse = require('../../../../../lib/domain/models/CertificationCourse'); +import { expect, EMPTY_BLANK_AND_NULL, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/certification-serializer.js'; +import { WrongDateFormatError } from '../../../../../lib/domain/errors.js'; +import { NO_EXAMINER_COMMENT } from '../../../../../lib/domain/models/CertificationReport.js'; +import { CertificationCourse } from '../../../../../lib/domain/models/CertificationCourse.js'; describe('Unit | Serializer | JSONAPI | certification-serializer', function () { describe('#deserialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certifications-ls/certification-ls-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certifications-ls/certification-ls-serializer_test.js index a44dbac6f58..74c6fc4b404 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certifications-ls/certification-ls-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certifications-ls/certification-ls-serializer_test.js @@ -1,10 +1,12 @@ -const { expect } = require('../../../../../test-helper'); -const serializer = require('../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/certification-ls-serializer.js'); -const { +import { expect } from '../../../../../test-helper.js'; +import * as serializer from '../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/certification-ls-serializer.js'; + +import { buildCertificateForLS, buildReferentialOfCompetences, buildCertificationsResults, -} = require('../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-certification-result-for-ls'); +} from '../../../../../../lib/infrastructure/serializers/jsonapi/certifications-livret-scolaire/factory/build-certification-result-for-ls.js'; + const VALIDATED_CERTIFICATION = 'validated'; const REJECTED_CERTIFICATION = 'rejected'; diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/certified-profile-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/certified-profile-serializer_test.js index f76d302cf9e..cef3a969b29 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/certified-profile-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/certified-profile-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/certified-profile-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/certified-profile-serializer.js'; describe('Unit | Serializer | JSONAPI | certified-profile-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/challenge-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/challenge-serializer_test.js index 1dad5c72151..8b5e6f7291f 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/challenge-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/challenge-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/challenge-serializer'); -const Challenge = require('../../../../../lib/domain/models/Challenge'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/challenge-serializer.js'; +import { Challenge } from '../../../../../lib/domain/models/Challenge.js'; describe('Unit | Serializer | JSONAPI | challenge-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/competence-evaluation-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/competence-evaluation-serializer_test.js index e6e0e734b25..9b03a0a0033 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/competence-evaluation-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/competence-evaluation-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/competence-evaluation-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/competence-evaluation-serializer.js'; describe('Unit | Serializer | JSONAPI | competence-evaluation-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/complementary-certification-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/complementary-certification-serializer_test.js index 11e5a5707ab..7a1c219da4f 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/complementary-certification-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/complementary-certification-serializer_test.js @@ -1,5 +1,5 @@ -const { domainBuilder, expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/complementary-certification-serializer'); +import { domainBuilder, expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/complementary-certification-serializer.js'; describe('Unit | Serializer | JSONAPI | complementary-certification-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/correction-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/correction-serializer_test.js index 5e285e01867..319248855bf 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/correction-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/correction-serializer_test.js @@ -1,10 +1,10 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/correction-serializer'); -const Correction = require('../../../../../lib/domain/models/Correction'); -const Hint = require('../../../../../lib/domain/models/Hint'); -const TutorialForUser = require('../../../../../lib/domain/read-models/TutorialForUser'); -const UserSavedTutorial = require('../../../../../lib/domain/models/UserSavedTutorial'); -const TutorialEvaluation = require('../../../../../lib/domain/models/TutorialEvaluation'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/correction-serializer.js'; +import { Correction } from '../../../../../lib/domain/models/Correction.js'; +import { Hint } from '../../../../../lib/domain/models/Hint.js'; +import { TutorialForUser } from '../../../../../lib/domain/read-models/TutorialForUser.js'; +import { UserSavedTutorial } from '../../../../../lib/domain/models/UserSavedTutorial.js'; +import { TutorialEvaluation } from '../../../../../lib/domain/models/TutorialEvaluation.js'; describe('Unit | Serializer | JSONAPI | correction-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/country-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/country-serializer_test.js index 46ab68f8eb4..05690c0dfb0 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/country-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/country-serializer_test.js @@ -1,6 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/country-serializer'); -const { domainBuilder } = require('../../../../test-helper'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/country-serializer.js'; describe('Unit | Serializer | JSONAPI | country-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/course-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/course-serializer_test.js index c78a206bda1..de8421ac904 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/course-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/course-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/course-serializer'); -const Course = require('../../../../../lib/domain/models/Course'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/course-serializer.js'; +import { Course } from '../../../../../lib/domain/models/Course.js'; describe('Unit | Serializer | JSONAPI | course-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/division-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/division-serializer_test.js index b15efeb180c..4a3ebbc1541 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/division-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/division-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/division-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/division-serializer.js'; describe('Unit | Serializer | JSONAPI | division-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/email-verification-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/email-verification-serializer_test.js index af87b32f275..f601a49aa8e 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/email-verification-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/email-verification-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/email-verification-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/email-verification-serializer.js'; describe('Unit | Serializer | JSONAPI | email-verification-serializer', function () { describe('#deserialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/error-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/error-serializer_test.js index 5519b09d11f..e75b96417e6 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/error-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/error-serializer_test.js @@ -1,7 +1,8 @@ -const { expect } = require('../../../../test-helper'); -const JSONAPIError = require('jsonapi-serializer').Error; -const { MissingQueryParamError, ConflictError } = require('../../../../../lib/application/http-errors'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/error-serializer'); +import { expect } from '../../../../test-helper.js'; +import jsonapiSerializer from 'jsonapi-serializer'; +const { Error: JSONAPIError } = jsonapiSerializer; +import { MissingQueryParamError, ConflictError } from '../../../../../lib/application/http-errors.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/error-serializer.js'; describe('Unit | Serializer | JSONAPI | error-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/feature-toggle-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/feature-toggle-serializer_test.js index 5a3e22cc9d7..f2b33d685e5 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/feature-toggle-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/feature-toggle-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/feature-toggle-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/feature-toggle-serializer.js'; describe('Unit | Serializer | JSONAPI | feature-toggle-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/feedback-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/feedback-serializer_test.js index ae2f6f932d6..1a5dadfd7cf 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/feedback-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/feedback-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/feedback-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/feedback-serializer.js'; describe('Unit | Serializer | JSONAPI | feedback-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/framework-areas-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/framework-areas-serializer_test.js index d03a4449fe8..825c2be6e44 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/framework-areas-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/framework-areas-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/framework-areas-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/framework-areas-serializer.js'; describe('Unit | Serializer | JSONAPI | pix-framework-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/framework-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/framework-serializer_test.js index 35c9474f3da..5f6daa62989 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/framework-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/framework-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/framework-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/framework-serializer.js'; describe('Unit | Serializer | JSONAPI | framework-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/group-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/group-serializer_test.js index 7bc67d9de2c..5b8cde6dff3 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/group-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/group-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/group-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/group-serializer.js'; describe('Unit | Serializer | JSONAPI | group-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/jury-certification-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/jury-certification-serializer_test.js index ee24bc60fac..5322554d5af 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/jury-certification-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/jury-certification-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/jury-certification-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/jury-certification-serializer.js'; describe('Unit | Serializer | JSONAPI | jury-certification-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/jury-certification-summary-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/jury-certification-summary-serializer_test.js index 8a852300e52..bcd81f558c1 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/jury-certification-summary-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/jury-certification-summary-serializer_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/jury-certification-summary-serializer'); -const JuryCertificationSummary = require('../../../../../lib/domain/read-models/JuryCertificationSummary'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/jury-certification-summary-serializer.js'; +import { JuryCertificationSummary } from '../../../../../lib/domain/read-models/JuryCertificationSummary.js'; describe('Unit | Serializer | JSONAPI | jury-certification-summary-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/jury-session-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/jury-session-serializer_test.js index b1d86bc033a..a497bdc9bd9 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/jury-session-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/jury-session-serializer_test.js @@ -1,22 +1,20 @@ -const { expect, sinon, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/jury-session-serializer'); +import { expect, sinon, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/jury-session-serializer.js'; describe('Unit | Serializer | JSONAPI | jury-session-serializer', function () { describe('#serializeForPaginatedList()', function () { it('should call serialize method by destructuring passed parameter', function () { // given - const restore = serializer.serialize; - serializer.serialize = sinon.stub(); + const serialize = sinon.stub().resolves(); const jurySessions = Symbol('someJurySessions'); const pagination = Symbol('somePagination'); const parameter = { jurySessions, pagination, someUnusedField: 'unused' }; // when - serializer.serializeForPaginatedList(parameter); + serializer.serializeForPaginatedList(parameter, serialize); // then - expect(serializer.serialize).to.have.been.calledWithExactly(jurySessions, undefined, pagination); - serializer.serialize = restore; + expect(serialize).to.have.been.calledWithExactly(jurySessions, undefined, pagination); }); }); diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/membership-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/membership-serializer_test.js index f018605b303..bbbe41ac489 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/membership-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/membership-serializer_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/membership-serializer'); -const Membership = require('../../../../../lib/domain/models/Membership'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/membership-serializer.js'; +import { Membership } from '../../../../../lib/domain/models/Membership.js'; describe('Unit | Serializer | JSONAPI | membership-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/oidc-identity-providers-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/oidc-identity-providers-serializer_test.js index f9e5d598572..23be2247c90 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/oidc-identity-providers-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/oidc-identity-providers-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/oidc-identity-providers-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/oidc-identity-providers-serializer.js'; describe('Unit | Serializer | JSONAPI | oidc-identity-providers-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/oidc-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/oidc-serializer_test.js index 561bf6712c7..fe1e935ca71 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/oidc-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/oidc-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/oidc-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/oidc-serializer.js'; describe('Unit | Serializer | JSONAPI | oidc-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/organization-for-admin-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/organization-for-admin-serializer_test.js index f53861079bf..d83088f46f1 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/organization-for-admin-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/organization-for-admin-serializer_test.js @@ -1,9 +1,9 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/organization-for-admin-serializer'); -const Organization = require('../../../../../lib/domain/models/Organization'); -const OrganizationForAdmin = require('../../../../../lib/domain/models/organizations-administration/Organization'); -const Tag = require('../../../../../lib/domain/models/Tag'); -const { SamlIdentityProviders } = require('../../../../../lib/domain/constants/saml-identity-providers'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/organization-for-admin-serializer.js'; +import { Organization } from '../../../../../lib/domain/models/Organization.js'; +import { OrganizationForAdmin } from '../../../../../lib/domain/models/organizations-administration/Organization.js'; +import { Tag } from '../../../../../lib/domain/models/Tag.js'; +import { SamlIdentityProviders } from '../../../../../lib/domain/constants/saml-identity-providers.js'; describe('Unit | Serializer | organization-for-admin-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/organization-invitation-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/organization-invitation-serializer_test.js index a6760437ef9..7b94b595c99 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/organization-invitation-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/organization-invitation-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/organization-invitation-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/organization-invitation-serializer.js'; describe('Unit | Serializer | JSONAPI | organization-invitation-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/organization-learner-activity-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/organization-learner-activity-serializer_test.js index a225be3fc7f..699a1ec5cc0 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/organization-learner-activity-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/organization-learner-activity-serializer_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/organization-learner-activity-serializer'); -const OrganizationLearnerParticipation = require('../../../../../lib/domain/read-models/OrganizationLearnerParticipation'); -const OrganizationLearnerActivity = require('../../../../../lib/domain/read-models/OrganizationLearnerActivity'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/organization-learner-activity-serializer.js'; +import { OrganizationLearnerParticipation } from '../../../../../lib/domain/read-models/OrganizationLearnerParticipation.js'; +import { OrganizationLearnerActivity } from '../../../../../lib/domain/read-models/OrganizationLearnerActivity.js'; describe('Unit | Serializer | JSONAPI | organization-learner-participation-serialize', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/organization-learner-follow-up/organization-learner-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/organization-learner-follow-up/organization-learner-serializer_test.js index d9905c49928..f15819466ab 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/organization-learner-follow-up/organization-learner-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/organization-learner-follow-up/organization-learner-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../../test-helper'); -const serializer = require('../../../../../../lib/infrastructure/serializers/jsonapi/organization-learner-follow-up/organization-learner-serializer'); -const OrganizationLearner = require('../../../../../../lib/domain/read-models/organization-learner-follow-up/OrganizationLearner'); +import { expect } from '../../../../../test-helper.js'; +import * as serializer from '../../../../../../lib/infrastructure/serializers/jsonapi/organization-learner-follow-up/organization-learner-serializer.js'; +import { OrganizationLearner } from '../../../../../../lib/domain/read-models/organization-learner-follow-up/OrganizationLearner.js'; describe('Unit | Serializer | JSONAPI | organization-learner-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/organization-learner-identity-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/organization-learner-identity-serializer_test.js index 25733e8edda..78ed0716db9 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/organization-learner-identity-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/organization-learner-identity-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/organization-learner-identity-serializer'); -const OrganizationLearner = require('../../../../../lib/domain/models/OrganizationLearner'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/organization-learner-identity-serializer.js'; +import { OrganizationLearner } from '../../../../../lib/domain/models/OrganizationLearner.js'; describe('Unit | Serializer | JSONAPI | organization-learner-identity-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/organization-member-identity-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/organization-member-identity-serializer_test.js index 41e8b4f390c..ca530977938 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/organization-member-identity-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/organization-member-identity-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/organization-member-identity-serializer'); -const OrganizationMemberIdentity = require('../../../../../lib/domain/models/OrganizationMemberIdentity'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/organization-member-identity-serializer.js'; +import { OrganizationMemberIdentity } from '../../../../../lib/domain/models/OrganizationMemberIdentity.js'; describe('Unit | Serializer | organization-members-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/organization-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/organization-serializer_test.js index e87361b9a59..dc636b7b9ab 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/organization-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/organization-serializer_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/organization-serializer'); -const Organization = require('../../../../../lib/domain/models/Organization'); -const Tag = require('../../../../../lib/domain/models/Tag'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/organization-serializer.js'; +import { Organization } from '../../../../../lib/domain/models/Organization.js'; +import { Tag } from '../../../../../lib/domain/models/Tag.js'; describe('Unit | Serializer | organization-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-participants-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-participants-serializer_test.js index cc51b22d7c7..a408cabcb08 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-participants-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-participants-serializer_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../../../test-helper'); -const OrganizationParticipant = require('../../../../../../lib/domain/read-models/OrganizationParticipant'); -const serializer = require('../../../../../../lib/infrastructure/serializers/jsonapi/organization/organization-participants-serializer'); -const campaignParticipationsStatuses = require('../../../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect } from '../../../../../test-helper.js'; +import { OrganizationParticipant } from '../../../../../../lib/domain/read-models/OrganizationParticipant.js'; +import * as serializer from '../../../../../../lib/infrastructure/serializers/jsonapi/organization/organization-participants-serializer.js'; +import { CampaignParticipationStatuses as campaignParticipationsStatuses } from '../../../../../../lib/domain/models/CampaignParticipationStatuses.js'; describe('Unit | Serializer | JSONAPI | organization-participants-serializer', function () { describe('#serialize', function () { it('should convert an organization participant model object into JSON API data', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-places-capacity-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-places-capacity-serializer_test.js index 44591385c94..08e51cf9f7f 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-places-capacity-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-places-capacity-serializer_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../../../test-helper'); -const categories = require('../../../../../../lib/domain/constants/organization-places-categories'); -const serializer = require('../../../../../../lib/infrastructure/serializers/jsonapi/organization-places-capacity-serializer'); -const OrganizationPlacesCapacity = require('../../../../../../lib/domain/read-models/OrganizationPlacesCapacity'); +import { expect } from '../../../../../test-helper.js'; +import * as categories from '../../../../../../lib/domain/constants/organization-places-categories.js'; +import * as serializer from '../../../../../../lib/infrastructure/serializers/jsonapi/organization-places-capacity-serializer.js'; +import { OrganizationPlacesCapacity } from '../../../../../../lib/domain/read-models/OrganizationPlacesCapacity.js'; describe('Unit | Serializer | JSONAPI | organization-places-capacity-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-places-lot-managment-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-places-lot-managment-serializer_test.js index d8d6b9aadc6..e838fefae92 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-places-lot-managment-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-places-lot-managment-serializer_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder } = require('../../../../../test-helper'); -const organizationPlaceLotManagementSerializer = require('../../../../../../lib/infrastructure/serializers/jsonapi/organization/organization-places-lot-management-serializer'); -const OrganizationPlacesLotManagement = require('../../../../../../lib/domain/read-models/OrganizationPlacesLotManagement'); -const organizationPlacesLotCategories = require('../../../../../../lib/domain/constants/organization-places-categories'); +import { expect, domainBuilder } from '../../../../../test-helper.js'; +import * as organizationPlaceLotManagementSerializer from '../../../../../../lib/infrastructure/serializers/jsonapi/organization/organization-places-lot-management-serializer.js'; +import { OrganizationPlacesLotManagement } from '../../../../../../lib/domain/read-models/OrganizationPlacesLotManagement.js'; +import * as organizationPlacesLotCategories from '../../../../../../lib/domain/constants/organization-places-categories.js'; describe('Unit | Serializer | JSONAPI | organization-places-lot-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-places-lot-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-places-lot-serializer_test.js index 731b76bdcd9..59b0bd60d1e 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-places-lot-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/organization/organization-places-lot-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../../test-helper'); -const organizationPlacesLotSerializer = require('../../../../../../lib/infrastructure/serializers/jsonapi/organization/organization-places-lot-serializer'); -const { FREE_RATE } = require('../../../../../../lib/domain/constants/organization-places-categories'); +import { expect } from '../../../../../test-helper.js'; +import * as organizationPlacesLotSerializer from '../../../../../../lib/infrastructure/serializers/jsonapi/organization/organization-places-lot-serializer.js'; +import { FREE_RATE } from '../../../../../../lib/domain/constants/organization-places-categories.js'; describe('Unit | Serializer | JSONAPI | organization-places-lot-serializer', function () { describe('#deserialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/organization/sco-organization-participants-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/organization/sco-organization-participants-serializer_test.js index acfee13a8c8..3efd5b8da39 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/organization/sco-organization-participants-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/organization/sco-organization-participants-serializer_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../../../test-helper'); -const ScoOrganizationParticipant = require('../../../../../../lib/domain/read-models/ScoOrganizationParticipant'); -const serializer = require('../../../../../../lib/infrastructure/serializers/jsonapi/organization/sco-organization-participants-serializer'); -const campaignParticipationsStatuses = require('../../../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect } from '../../../../../test-helper.js'; +import { ScoOrganizationParticipant } from '../../../../../../lib/domain/read-models/ScoOrganizationParticipant.js'; +import * as serializer from '../../../../../../lib/infrastructure/serializers/jsonapi/organization/sco-organization-participants-serializer.js'; +import { CampaignParticipationStatuses as campaignParticipationsStatuses } from '../../../../../../lib/domain/models/CampaignParticipationStatuses.js'; describe('Unit | Serializer | JSONAPI | sco-organization-participants-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/organization/sup-organization-participants-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/organization/sup-organization-participants-serializer_test.js index d3909db30a4..ac8f0e1162f 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/organization/sup-organization-participants-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/organization/sup-organization-participants-serializer_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../../../test-helper'); -const SupOrganizationParticipant = require('../../../../../../lib/domain/read-models/SupOrganizationParticipant'); -const serializer = require('../../../../../../lib/infrastructure/serializers/jsonapi/organization/sup-organization-participants-serializer'); -const campaignParticipationsStatuses = require('../../../../../../lib/domain/models/CampaignParticipationStatuses'); +import { expect } from '../../../../../test-helper.js'; +import { SupOrganizationParticipant } from '../../../../../../lib/domain/read-models/SupOrganizationParticipant.js'; +import * as serializer from '../../../../../../lib/infrastructure/serializers/jsonapi/organization/sup-organization-participants-serializer.js'; +import { CampaignParticipationStatuses as campaignParticipationsStatuses } from '../../../../../../lib/domain/models/CampaignParticipationStatuses.js'; describe('Unit | Serializer | JSONAPI | sup-organization-participants-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/participant-result-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/participant-result-serializer_test.js index 14573b76418..59e2712f386 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/participant-result-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/participant-result-serializer_test.js @@ -1,8 +1,8 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/participant-result-serializer'); -const AssessmentResult = require('../../../../../lib/domain/read-models/participant-results/AssessmentResult'); -const KnowledgeElement = require('../../../../../lib/domain/models/KnowledgeElement'); -const StageCollection = require('../../../../../lib/domain/models/user-campaign-results/StageCollection'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/participant-result-serializer.js'; +import { AssessmentResult } from '../../../../../lib/domain/read-models/participant-results/AssessmentResult.js'; +import { KnowledgeElement } from '../../../../../lib/domain/models/KnowledgeElement.js'; +import { StageCollection } from '../../../../../lib/domain/models/user-campaign-results/StageCollection.js'; describe('Unit | Serializer | JSON API | participant-result-serializer', function () { context('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/participation-for-campaign-management-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/participation-for-campaign-management-serializer_test.js index d931f1d1e85..a1cbabff523 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/participation-for-campaign-management-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/participation-for-campaign-management-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/participation-for-campaign-management-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/participation-for-campaign-management-serializer.js'; describe('Unit | Serializer | JSONAPI | participation-for-campaign-management-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/participations-count-by-mastery-rate_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/participations-count-by-mastery-rate_test.js index 5f1b968050f..e6f8e6cb9dd 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/participations-count-by-mastery-rate_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/participations-count-by-mastery-rate_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/participations-count-by-mastery-rate'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/participations-count-by-mastery-rate.js'; describe('Unit | Serializer | JSONAPI | participations-count-by-mastery-rate', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/password-reset-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/password-reset-serializer_test.js index a72e58492fa..d624bc2a37e 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/password-reset-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/password-reset-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/password-reset-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/password-reset-serializer.js'; describe('Unit | Serializer | JSONAPI | password-reset-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/prescriber-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/prescriber-serializer_test.js index c31dfb49ec7..f00dd9d2376 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/prescriber-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/prescriber-serializer_test.js @@ -1,8 +1,8 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); +import { expect, domainBuilder } from '../../../../test-helper.js'; -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/prescriber-serializer'); -const Membership = require('../../../../../lib/domain/models/Membership'); -const { SamlIdentityProviders } = require('../../../../../lib/domain/constants/saml-identity-providers'); +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/prescriber-serializer.js'; +import { Membership } from '../../../../../lib/domain/models/Membership.js'; +import { SamlIdentityProviders } from '../../../../../lib/domain/constants/saml-identity-providers.js'; describe('Unit | Serializer | JSONAPI | prescriber-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/private-certificate-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/private-certificate-serializer_test.js index c6ac244810f..01cafcdabce 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/private-certificate-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/private-certificate-serializer_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/private-certificate-serializer'); -const ResultCompetenceTree = require('../../../../../lib/domain/models/ResultCompetenceTree'); -const ResultCompetence = require('../../../../../lib/domain/models/ResultCompetence'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/private-certificate-serializer.js'; +import { ResultCompetenceTree } from '../../../../../lib/domain/models/ResultCompetenceTree.js'; +import { ResultCompetence } from '../../../../../lib/domain/models/ResultCompetence.js'; describe('Unit | Serializer | JSONAPI | private-certificate-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/profile-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/profile-serializer_test.js index d45b953605e..d89c547281e 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/profile-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/profile-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/profile-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/profile-serializer.js'; describe('Unit | Serializer | JSONAPI | profile', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/progression-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/progression-serializer_test.js index 9c86c143265..d467122f423 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/progression-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/progression-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/progression-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/progression-serializer.js'; describe('Unit | Serializer | JSONAPI | progression-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/sco-organization-invitation-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/sco-organization-invitation-serializer_test.js index b9685be4bb2..d5f241ce40c 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/sco-organization-invitation-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/sco-organization-invitation-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/sco-organization-invitation-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/sco-organization-invitation-serializer.js'; describe('Unit | Serializer | JSONAPI | sco-organization-invitation-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/sco-organization-learner-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/sco-organization-learner-serializer_test.js index 663b06b3e79..764cbd202af 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/sco-organization-learner-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/sco-organization-learner-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/sco-organization-learner-serializer'); -const OrganizationLearner = require('../../../../../lib/domain/models/OrganizationLearner'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/sco-organization-learner-serializer.js'; +import { OrganizationLearner } from '../../../../../lib/domain/models/OrganizationLearner.js'; describe('Unit | Serializer | JSONAPI | sco-organization-learner-serializer', function () { describe('#serializeIdentity', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/scorecard-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/scorecard-serializer_test.js index 6dfd0851802..a2ca2a8e00b 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/scorecard-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/scorecard-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/scorecard-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/scorecard-serializer.js'; describe('Unit | Serializer | JSONAPI | scorecard-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/session-for-supervising-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/session-for-supervising-serializer_test.js index 10d3a4c46a6..f464a149725 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/session-for-supervising-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/session-for-supervising-serializer_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/session-for-supervising-serializer'); -const Assessment = require('../../../../../lib/domain/models/Assessment'); -const { CertificationCandidateForSupervising } = require('../../../../../lib/domain/models'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/session-for-supervising-serializer.js'; +import { Assessment } from '../../../../../lib/domain/models/Assessment.js'; +import { CertificationCandidateForSupervising } from '../../../../../lib/domain/models/index.js'; describe('Unit | Serializer | JSONAPI | session-for-supervising-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/session-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/session-serializer_test.js index 53796ec9693..14c380165b3 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/session-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/session-serializer_test.js @@ -1,8 +1,7 @@ -const { expect, EMPTY_BLANK_AND_NULL } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/session-serializer'); +import { expect, EMPTY_BLANK_AND_NULL } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/session-serializer.js'; -const Session = require('../../../../../lib/domain/models/Session'); -const { statuses } = require('../../../../../lib/domain/models/Session'); +import { Session, statuses } from '../../../../../lib/domain/models/Session.js'; describe('Unit | Serializer | JSONAPI | session-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/session-summary-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/session-summary-serializer_test.js index e1680a9e9f9..30c37bf67b2 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/session-summary-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/session-summary-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/session-summary-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/session-summary-serializer.js'; describe('Unit | Serializer | JSONAPI | session-summary-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/shareable-certificate-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/shareable-certificate-serializer_test.js index b8bfc854109..b9961f1f0bf 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/shareable-certificate-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/shareable-certificate-serializer_test.js @@ -1,7 +1,7 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/shareable-certificate-serializer'); -const ResultCompetenceTree = require('../../../../../lib/domain/models/ResultCompetenceTree'); -const ResultCompetence = require('../../../../../lib/domain/models/ResultCompetence'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/shareable-certificate-serializer.js'; +import { ResultCompetenceTree } from '../../../../../lib/domain/models/ResultCompetenceTree.js'; +import { ResultCompetence } from '../../../../../lib/domain/models/ResultCompetence.js'; describe('Unit | Serializer | JSONAPI | shareable-certificate-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/shared-profile-for-campaign-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/shared-profile-for-campaign-serializer_test.js index 481a9f6ffa7..3e115fba00c 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/shared-profile-for-campaign-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/shared-profile-for-campaign-serializer_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder, sinon } = require('../../../../test-helper'); -const SharedProfileForCampaign = require('../../../../../lib/domain/read-models/SharedProfileForCampaign'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/shared-profile-for-campaign-serializer'); +import { expect, domainBuilder, sinon } from '../../../../test-helper.js'; +import { SharedProfileForCampaign } from '../../../../../lib/domain/read-models/SharedProfileForCampaign.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/shared-profile-for-campaign-serializer.js'; describe('Unit | Serializer | JSONAPI | shared-profile-for-campaign-serializer', function () { let clock; diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/skill-set-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/skill-set-serializer_test.js index 1c22155165e..653de38a884 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/skill-set-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/skill-set-serializer_test.js @@ -1,6 +1,6 @@ -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/skill-set-serializer'); -const { expect } = require('../../../../test-helper'); -const SkillSet = require('../../../../../lib/domain/models/SkillSet'); +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/skill-set-serializer.js'; +import { expect } from '../../../../test-helper.js'; +import { SkillSet } from '../../../../../lib/domain/models/SkillSet.js'; describe('Unit | Serializer | JSONAPI | skill-set-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/student-certification-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/student-certification-serializer_test.js index 6c1320250aa..8865aac18b9 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/student-certification-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/student-certification-serializer_test.js @@ -1,6 +1,6 @@ -const { domainBuilder, expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/student-certification-serializer'); -const StudentForEnrolment = require('../../../../../lib/domain/read-models/StudentForEnrolment'); +import { domainBuilder, expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/student-certification-serializer.js'; +import { StudentForEnrolment } from '../../../../../lib/domain/read-models/StudentForEnrolment.js'; describe('Unit | Serializer | JSONAPI | student-certification-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer_test.js index 0e8ecd1157f..858625b447c 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer.js'); -const StudentInformationForAccountRecovery = require('../../../../../lib/domain/read-models/StudentInformationForAccountRecovery'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/student-information-for-account-recovery-serializer.js'; +import { StudentInformationForAccountRecovery } from '../../../../../lib/domain/read-models/StudentInformationForAccountRecovery.js'; describe('Unit | Serializer | JSONAPI | student-information-for-account-recovery-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/sup-organization-learner-warnings-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/sup-organization-learner-warnings-serializer_test.js index 6aa3c7ee347..050180d5ac7 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/sup-organization-learner-warnings-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/sup-organization-learner-warnings-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/sup-organization-learner-warnings-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/sup-organization-learner-warnings-serializer.js'; describe('Unit | Serializer | sup-organization-learner-warnings-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/tag-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/tag-serializer_test.js index 65d081acb8d..a8f1707f4f3 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/tag-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/tag-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/tag-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/tag-serializer.js'; describe('Unit | Serializer | JSONAPI | tag-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-attach-organization-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-attach-organization-serializer_test.js index c12e7568c1f..d60ce50d1f9 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-attach-organization-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-attach-organization-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/target-profile-attach-organization-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/target-profile-attach-organization-serializer.js'; describe('Unit | Serializer | JSONAPI | target-profile-attach-organization-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-for-admin-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-for-admin-serializer_test.js index bce7f36eae2..c10e9e4fad8 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-for-admin-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-for-admin-serializer_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/target-profile-for-admin-serializer'); -const TargetProfileForAdmin = require('../../../../../lib/domain/models/TargetProfileForAdmin'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/target-profile-for-admin-serializer.js'; +import { TargetProfileForAdmin } from '../../../../../lib/domain/models/TargetProfileForAdmin.js'; describe('Unit | Serializer | JSONAPI | target-profile-for-admin-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-serializer_test.js index 34ea8347b8a..0801bbd42b9 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/target-profile-serializer'); -const TargetProfile = require('../../../../../lib/domain/models/TargetProfile'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/target-profile-serializer.js'; +import { TargetProfile } from '../../../../../lib/domain/models/TargetProfile.js'; describe('Unit | Serializer | JSONAPI | target-profile-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer_test.js index 8cb9f1bd533..d2fc335e1ac 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/target-profile-summary-for-admin-serializer.js'; describe('Unit | Serializer | JSONAPI | target-profile-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/to-be-published-session-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/to-be-published-session-serializer_test.js index d3716f05224..18ceef43a5b 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/to-be-published-session-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/to-be-published-session-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/to-be-published-session-serializer'); -const FinalizedSession = require('../../../../../lib/domain/models/FinalizedSession'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/to-be-published-session-serializer.js'; +import { FinalizedSession } from '../../../../../lib/domain/models/FinalizedSession.js'; describe('Unit | Serializer | JSONAPI | to-be-published-session-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/training-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/training-serializer_test.js index a365fd5ed81..7bd99c96269 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/training-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/training-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/training-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/training-serializer.js'; describe('Unit | Serializer | JSONAPI | training-serializer', function () { describe('#serializeForAdmin', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/training-summary-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/training-summary-serializer_test.js index 58be2ee7c15..099f1243ee5 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/training-summary-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/training-summary-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/training-summary-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/training-summary-serializer.js'; describe('Unit | Serializer | JSONAPI | training-summary-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/training-trigger-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/training-trigger-serializer_test.js index a2816b758ef..bb24e30fb65 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/training-trigger-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/training-trigger-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/training-trigger-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/training-trigger-serializer.js'; describe('Unit | Serializer | JSONAPI | training-trigger-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/tutorial-evaluation-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/tutorial-evaluation-serializer_test.js index d74604b881d..211e57bd1d7 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/tutorial-evaluation-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/tutorial-evaluation-serializer_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/tutorial-evaluation-serializer'); -const TutorialEvaluation = require('../../../../../lib/domain/models/TutorialEvaluation'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/tutorial-evaluation-serializer.js'; +import { TutorialEvaluation } from '../../../../../lib/domain/models/TutorialEvaluation.js'; describe('Unit | Serializer | JSONAPI | tutorial-evaluation-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/tutorial-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/tutorial-serializer_test.js index 42d94397a50..93c8847001f 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/tutorial-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/tutorial-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/tutorial-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/tutorial-serializer.js'; describe('Unit | Serializer | JSONAPI | tutorial-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/update-email-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/update-email-serializer_test.js index 3a5c1528df7..9d8ed1b688d 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/update-email-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/update-email-serializer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/update-email-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/update-email-serializer.js'; describe('Unit | Serializer | JSONAPI | update-email-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/user-anonymized-details-for-admin-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/user-anonymized-details-for-admin-serializer_test.js index 770afbd33df..504c0c217f4 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/user-anonymized-details-for-admin-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/user-anonymized-details-for-admin-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/user-anonymized-details-for-admin-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/user-anonymized-details-for-admin-serializer.js'; describe('Unit | Serializer | JSONAPI | user-anonymized-details-for-admin-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/user-details-for-admin-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/user-details-for-admin-serializer_test.js index 617f4282a22..c580294b52b 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/user-details-for-admin-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/user-details-for-admin-serializer_test.js @@ -1,5 +1,5 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/user-details-for-admin-serializer'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/user-details-for-admin-serializer.js'; describe('Unit | Serializer | JSONAPI | user-details-for-admin-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/user-for-admin-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/user-for-admin-serializer_test.js index 09b1ff63c47..462da84fc2d 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/user-for-admin-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/user-for-admin-serializer_test.js @@ -1,7 +1,6 @@ -const { expect } = require('../../../../test-helper'); - -const User = require('../../../../../lib/domain/models/User'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/user-for-admin-serializer'); +import { expect } from '../../../../test-helper.js'; +import { User } from '../../../../../lib/domain/models/User.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/user-for-admin-serializer.js'; describe('Unit | Serializer | JSONAPI | user-for-adminserializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/user-login-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/user-login-serializer_test.js index 2622f65cb1f..e2f0b864855 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/user-login-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/user-login-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/user-login-serializer'); -const UserLogin = require('../../../../../lib/domain/models/UserLogin'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/user-login-serializer.js'; +import { UserLogin } from '../../../../../lib/domain/models/UserLogin.js'; describe('Unit | Serializer | JSONAPI | user-login-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/user-orga-settings-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/user-orga-settings-serializer_test.js index 48875a070b6..fea05aad50d 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/user-orga-settings-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/user-orga-settings-serializer_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/user-orga-settings-serializer'); -const UserOrgaSettings = require('../../../../../lib/domain/models/UserOrgaSettings'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/user-orga-settings-serializer.js'; +import { UserOrgaSettings } from '../../../../../lib/domain/models/UserOrgaSettings.js'; describe('Unit | Serializer | JSONAPI | user-orga-settings-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/user-organization-for-admin-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/user-organization-for-admin-serializer_test.js index 2f556320170..b1953ef12d7 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/user-organization-for-admin-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/user-organization-for-admin-serializer_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../../test-helper'); -const UserOrganizationForAdmin = require('../../../../../lib/domain/read-models/UserOrganizationForAdmin'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/user-organization-for-admin-serializer'); +import { expect } from '../../../../test-helper.js'; +import { UserOrganizationForAdmin } from '../../../../../lib/domain/read-models/UserOrganizationForAdmin.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/user-organization-for-admin-serializer.js'; describe('Unit | Serializer | JSONAPI | user-organization-for-admin-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/user-saved-tutorial-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/user-saved-tutorial-serializer_test.js index ab1b7782097..2371fcd9b35 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/user-saved-tutorial-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/user-saved-tutorial-serializer_test.js @@ -1,6 +1,6 @@ -const { expect, domainBuilder } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/user-saved-tutorial-serializer'); -const UserSavedTutorial = require('../../../../../lib/domain/models/UserSavedTutorial'); +import { expect, domainBuilder } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/user-saved-tutorial-serializer.js'; +import { UserSavedTutorial } from '../../../../../lib/domain/models/UserSavedTutorial.js'; describe('Unit | Serializer | JSONAPI | user-saved-tutorial-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/user-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/user-serializer_test.js index a9283109080..e43098bacc9 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/user-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/user-serializer_test.js @@ -1,8 +1,7 @@ -const { expect, catchErrSync } = require('../../../../test-helper'); - -const User = require('../../../../../lib/domain/models/User'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/user-serializer'); -const { LocaleFormatError, LocaleNotSupportedError } = require('../../../../../lib/domain/errors'); +import { expect, catchErrSync } from '../../../../test-helper.js'; +import { User } from '../../../../../lib/domain/models/User.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/user-serializer.js'; +import { LocaleFormatError, LocaleNotSupportedError } from '../../../../../lib/domain/errors.js'; describe('Unit | Serializer | JSONAPI | user-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/user-with-activity-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/user-with-activity-serializer_test.js index 7096b274de1..ffd393d21db 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/user-with-activity-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/user-with-activity-serializer_test.js @@ -1,8 +1,7 @@ -const { expect } = require('../../../../test-helper'); - -const UserWithActivity = require('../../../../../lib/domain/read-models/UserWithActivity'); -const User = require('../../../../../lib/domain/models/User'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/user-with-activity-serializer'); +import { expect } from '../../../../test-helper.js'; +import { UserWithActivity } from '../../../../../lib/domain/read-models/UserWithActivity.js'; +import { User } from '../../../../../lib/domain/models/User.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/user-with-activity-serializer.js'; describe('Unit | Serializer | JSONAPI | user-with-activity-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/validation-error-serializer_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/validation-error-serializer_test.js index dc67a9c9013..68bcb7e6bc1 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/validation-error-serializer_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/validation-error-serializer_test.js @@ -1,7 +1,7 @@ -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/validation-error-serializer'); +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/validation-error-serializer.js'; -const Bookshelf = require('../../../../../lib/infrastructure/bookshelf'); +import { Bookshelf } from '../../../../../lib/infrastructure/bookshelf.js'; describe('Unit | Serializer | JSONAPI | validation-error-serializer', function () { describe('#serialize', function () { diff --git a/api/tests/unit/infrastructure/serializers/jsonapi/with-required-action-session_test.js b/api/tests/unit/infrastructure/serializers/jsonapi/with-required-action-session_test.js index ffd3361dc55..5e8594e4ed6 100644 --- a/api/tests/unit/infrastructure/serializers/jsonapi/with-required-action-session_test.js +++ b/api/tests/unit/infrastructure/serializers/jsonapi/with-required-action-session_test.js @@ -1,6 +1,6 @@ -const FinalizedSession = require('../../../../../lib/domain/models/FinalizedSession'); -const { expect } = require('../../../../test-helper'); -const serializer = require('../../../../../lib/infrastructure/serializers/jsonapi/with-required-action-session-serializer'); +import { FinalizedSession } from '../../../../../lib/domain/models/FinalizedSession.js'; +import { expect } from '../../../../test-helper.js'; +import * as serializer from '../../../../../lib/infrastructure/serializers/jsonapi/with-required-action-session-serializer.js'; describe('Unit | Serializer | JSONAPI | with-required-action-session-serializer', function () { describe('#serialize()', function () { diff --git a/api/tests/unit/infrastructure/temporary-storage/InMemoryTemporaryStorage_test.js b/api/tests/unit/infrastructure/temporary-storage/InMemoryTemporaryStorage_test.js index 50a41a8a38f..390e6f91a1a 100644 --- a/api/tests/unit/infrastructure/temporary-storage/InMemoryTemporaryStorage_test.js +++ b/api/tests/unit/infrastructure/temporary-storage/InMemoryTemporaryStorage_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const InMemoryTemporaryStorage = require('../../../../lib/infrastructure/temporary-storage/InMemoryTemporaryStorage'); +import { expect, sinon } from '../../../test-helper.js'; +import { InMemoryTemporaryStorage } from '../../../../lib/infrastructure/temporary-storage/InMemoryTemporaryStorage.js'; describe('Unit | Infrastructure | temporary-storage | InMemoryTemporaryStorage', function () { let inMemoryTemporaryStorage; diff --git a/api/tests/unit/infrastructure/temporary-storage/RedisTemporaryStorage_test.js b/api/tests/unit/infrastructure/temporary-storage/RedisTemporaryStorage_test.js index 8d40b1beddc..ef7bcfb6925 100644 --- a/api/tests/unit/infrastructure/temporary-storage/RedisTemporaryStorage_test.js +++ b/api/tests/unit/infrastructure/temporary-storage/RedisTemporaryStorage_test.js @@ -1,5 +1,5 @@ -const { expect, sinon } = require('../../../test-helper'); -const RedisTemporaryStorage = require('../../../../lib/infrastructure/temporary-storage/RedisTemporaryStorage'); +import { expect, sinon } from '../../../test-helper.js'; +import { RedisTemporaryStorage } from '../../../../lib/infrastructure/temporary-storage/RedisTemporaryStorage.js'; describe('Unit | Infrastructure | temporary-storage | RedisTemporaryStorage', function () { const REDIS_URL = 'redis_url'; diff --git a/api/tests/unit/infrastructure/temporary-storage/TemporaryStorage_test.js b/api/tests/unit/infrastructure/temporary-storage/TemporaryStorage_test.js index c2d5c53aeee..859bde26d85 100644 --- a/api/tests/unit/infrastructure/temporary-storage/TemporaryStorage_test.js +++ b/api/tests/unit/infrastructure/temporary-storage/TemporaryStorage_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const TemporaryStorage = require('../../../../lib/infrastructure/temporary-storage/TemporaryStorage'); +import { expect } from '../../../test-helper.js'; +import { TemporaryStorage } from '../../../../lib/infrastructure/temporary-storage/TemporaryStorage.js'; describe('Unit | Infrastructure | temporary-storage | TemporaryStorage', function () { describe('#save', function () { diff --git a/api/tests/unit/infrastructure/utils/CampaignAssessmentCsvLine_test.js b/api/tests/unit/infrastructure/utils/CampaignAssessmentCsvLine_test.js index da01d63d10e..37ec94f9528 100644 --- a/api/tests/unit/infrastructure/utils/CampaignAssessmentCsvLine_test.js +++ b/api/tests/unit/infrastructure/utils/CampaignAssessmentCsvLine_test.js @@ -1,8 +1,8 @@ -const { expect, domainBuilder } = require('../../../test-helper'); -const CampaignAssessmentCsvLine = require('../../../../lib/infrastructure/utils/CampaignAssessmentCsvLine'); -const campaignParticipationService = require('../../../../lib/domain/services/campaign-participation-service'); -const KnowledgeElement = require('../../../../lib/domain/models/KnowledgeElement'); -const { getI18n } = require('../../../tooling/i18n/i18n'); +import { expect, domainBuilder } from '../../../test-helper.js'; +import { CampaignAssessmentCsvLine } from '../../../../lib/infrastructure/utils/CampaignAssessmentCsvLine.js'; +import * as campaignParticipationService from '../../../../lib/domain/services/campaign-participation-service.js'; +import { KnowledgeElement } from '../../../../lib/domain/models/KnowledgeElement.js'; +import { getI18n } from '../../../tooling/i18n/i18n.js'; function _computeExpectedColumnsIndex(campaign, organization, badges, stages) { const studentNumberPresenceModifier = organization.type === 'SUP' && organization.isManagingStudents ? 1 : 0; diff --git a/api/tests/unit/infrastructure/utils/code-utils_test.js b/api/tests/unit/infrastructure/utils/code-utils_test.js index 89cd6861460..bfd9da427ef 100644 --- a/api/tests/unit/infrastructure/utils/code-utils_test.js +++ b/api/tests/unit/infrastructure/utils/code-utils_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const { generateNumericalString } = require('../../../../lib/infrastructure/utils/code-utils'); +import { expect } from '../../../test-helper.js'; +import { generateNumericalString } from '../../../../lib/infrastructure/utils/code-utils.js'; describe('Unit | Utils | code-utils', function () { describe('#generateNumericalString', function () { diff --git a/api/tests/unit/infrastructure/utils/date-utils_test.js b/api/tests/unit/infrastructure/utils/date-utils_test.js index a982807698f..81985a4d057 100644 --- a/api/tests/unit/infrastructure/utils/date-utils_test.js +++ b/api/tests/unit/infrastructure/utils/date-utils_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const { isValidDate, convertDateValue } = require('../../../../lib/infrastructure/utils/date-utils'); +import { expect } from '../../../test-helper.js'; +import { isValidDate, convertDateValue } from '../../../../lib/infrastructure/utils/date-utils.js'; describe('Unit | Utils | date-utils', function () { describe('#isValidDate', function () { diff --git a/api/tests/unit/infrastructure/utils/dependency-injection_test.js b/api/tests/unit/infrastructure/utils/dependency-injection_test.js index 610eed7eb77..3412e94238f 100644 --- a/api/tests/unit/infrastructure/utils/dependency-injection_test.js +++ b/api/tests/unit/infrastructure/utils/dependency-injection_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const { injectDependencies } = require('../../../../lib/infrastructure/utils/dependency-injection'); +import { expect } from '../../../test-helper.js'; +import { injectDependencies } from '../../../../lib/infrastructure/utils/dependency-injection.js'; describe('Unit | Utils | #injectDependencies', function () { it('should inject dependencies by name', function () { diff --git a/api/tests/unit/infrastructure/utils/lodash-utils_test.js b/api/tests/unit/infrastructure/utils/lodash-utils_test.js index 0d722f066b1..9bddddac86c 100644 --- a/api/tests/unit/infrastructure/utils/lodash-utils_test.js +++ b/api/tests/unit/infrastructure/utils/lodash-utils_test.js @@ -1,6 +1,6 @@ -const { expect } = require('../../../test-helper'); -const original_lodash = require('lodash'); -const _ = require('../../../../lib/infrastructure/utils/lodash-utils'); +import { expect } from '../../../test-helper.js'; +import original_lodash from 'lodash'; +import { _ } from '../../../../lib/infrastructure/utils/lodash-utils.js'; describe('Unit | Utils | lodash-utils', function () { describe('#scope', function () { diff --git a/api/tests/unit/infrastructure/utils/paginate_test.js b/api/tests/unit/infrastructure/utils/paginate_test.js index 1a00e2efd2f..ede2d290514 100644 --- a/api/tests/unit/infrastructure/utils/paginate_test.js +++ b/api/tests/unit/infrastructure/utils/paginate_test.js @@ -1,5 +1,8 @@ -const { expect } = require('chai'); -const { paginate } = require('../../../../lib/infrastructure/utils/paginate'); +import chai from 'chai'; + +const { expect } = chai; + +import { paginate } from '../../../../lib/infrastructure/utils/paginate.js'; describe('Unit | Utils | paginate', function () { describe('#paginate', function () { diff --git a/api/tests/unit/infrastructure/utils/query-params-utils_test.js b/api/tests/unit/infrastructure/utils/query-params-utils_test.js index aaa45b44b21..74c14068e02 100644 --- a/api/tests/unit/infrastructure/utils/query-params-utils_test.js +++ b/api/tests/unit/infrastructure/utils/query-params-utils_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const { extractParameters } = require('../../../../lib/infrastructure/utils/query-params-utils'); +import { expect } from '../../../test-helper.js'; +import { extractParameters } from '../../../../lib/infrastructure/utils/query-params-utils.js'; describe('Unit | Utils | Query Params Utils', function () { describe('#extractParameters', function () { diff --git a/api/tests/unit/infrastructure/utils/random_test.js b/api/tests/unit/infrastructure/utils/random_test.js index d8fd4fba648..9ced722ffa4 100644 --- a/api/tests/unit/infrastructure/utils/random_test.js +++ b/api/tests/unit/infrastructure/utils/random_test.js @@ -1,6 +1,9 @@ -const { expect } = require('../../../test-helper'); -const { range, countBy } = require('lodash'); -const pseudoRandom = require('../../../../lib/infrastructure/utils/pseudo-random'); +import { expect } from '../../../test-helper.js'; +import lodash from 'lodash'; + +const { range, countBy } = lodash; + +import * as pseudoRandom from '../../../../lib/infrastructure/utils/pseudo-random.js'; describe('Unit | Infrastructure | Utils | Random', function () { describe('#binaryTreeRandom', function () { diff --git a/api/tests/unit/infrastructure/utils/request-response-utils_test.js b/api/tests/unit/infrastructure/utils/request-response-utils_test.js index de9b8d3cf3a..210c0537b9b 100644 --- a/api/tests/unit/infrastructure/utils/request-response-utils_test.js +++ b/api/tests/unit/infrastructure/utils/request-response-utils_test.js @@ -1,10 +1,12 @@ -const { expect, generateValidRequestAuthorizationHeader } = require('../../../test-helper'); -const { +import { expect, generateValidRequestAuthorizationHeader } from '../../../test-helper.js'; +import { escapeFileName, extractUserIdFromRequest, extractLocaleFromRequest, -} = require('../../../../lib/infrastructure/utils/request-response-utils'); -const { ENGLISH_SPOKEN, FRENCH_FRANCE, FRENCH_SPOKEN } = require('../../../../lib/domain/constants').LOCALE; +} from '../../../../lib/infrastructure/utils/request-response-utils.js'; +import { LOCALE } from '../../../../lib/domain/constants.js'; + +const { ENGLISH_SPOKEN, FRENCH_FRANCE, FRENCH_SPOKEN } = LOCALE; describe('Unit | Utils | Request Utils', function () { describe('#extractUserIdFromRequest', function () { diff --git a/api/tests/unit/infrastructure/utils/string-utils_test.js b/api/tests/unit/infrastructure/utils/string-utils_test.js index 59fc3261296..d67bd85dce2 100644 --- a/api/tests/unit/infrastructure/utils/string-utils_test.js +++ b/api/tests/unit/infrastructure/utils/string-utils_test.js @@ -1,5 +1,6 @@ -const { expect } = require('../../../test-helper'); -const { +import { expect } from '../../../test-helper.js'; + +import { isNumeric, cleanStringAndParseFloat, getArrayOfStrings, @@ -7,7 +8,7 @@ const { normalizeAndSortChars, normalize, toArrayOfFixedLengthStringsConservingWords, -} = require('../../../../lib/infrastructure/utils/string-utils'); +} from '../../../../lib/infrastructure/utils/string-utils.js'; describe('Unit | Utils | string-utils', function () { const zeroWidthSpaceChar = '​'; diff --git a/api/tests/unit/infrastructure/utils/url-builder_test.js b/api/tests/unit/infrastructure/utils/url-builder_test.js index 3034adb9a1b..8e933481798 100644 --- a/api/tests/unit/infrastructure/utils/url-builder_test.js +++ b/api/tests/unit/infrastructure/utils/url-builder_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const { getCampaignUrl } = require('../../../../lib/infrastructure/utils/url-builder'); +import { expect } from '../../../test-helper.js'; +import { getCampaignUrl } from '../../../../lib/infrastructure/utils/url-builder.js'; describe('Unit | Utils | url-builder', function () { describe('#getCampaignUrl', function () { diff --git a/api/tests/unit/scripts/add-tags-to-organizations_test.js b/api/tests/unit/scripts/add-tags-to-organizations_test.js index f6ce5db1b3f..33355e7e3d9 100644 --- a/api/tests/unit/scripts/add-tags-to-organizations_test.js +++ b/api/tests/unit/scripts/add-tags-to-organizations_test.js @@ -1,6 +1,6 @@ -const { expect, sinon } = require('../../test-helper'); -const { addTagsToOrganizations } = require('../../../scripts/add-tags-to-organizations'); -const Tag = require('../../../lib/domain/models/Tag'); +import { expect, sinon } from '../../test-helper.js'; +import { addTagsToOrganizations } from '../../../scripts/add-tags-to-organizations.js'; +import { Tag } from '../../../lib/domain/models/Tag.js'; describe('Unit | Scripts | add-tags-to-organizations.js', function () { context('When tag already exists for an organization', function () { diff --git a/api/tests/unit/scripts/compare-pix-with-latest-release_test.js b/api/tests/unit/scripts/compare-pix-with-latest-release_test.js deleted file mode 100644 index 2bdb7ba3215..00000000000 --- a/api/tests/unit/scripts/compare-pix-with-latest-release_test.js +++ /dev/null @@ -1,145 +0,0 @@ -const { expect, sinon } = require('../../test-helper'); -const { - getUserValidatedKnowledgeElements, - getTubeByIds, - getUserSkillsGroupedByTubeId, - getHardestSkillByTubeId, - compareUserScoreWithLatestRelease, -} = require('../../../scripts/compare-pix-with-latest-release'); -const knowledgeElementRepository = require('../../../lib/infrastructure/repositories/knowledge-element-repository'); -const tubeRepository = require('../../../lib/infrastructure/repositories/tube-repository'); -const skillRepository = require('../../../lib/infrastructure/repositories/skill-repository'); - -// mock datas -const KnowledgeElement = require('../../../lib/domain/models/KnowledgeElement'); -const Tube = require('../../../lib/domain/models/Tube'); -const Skill = require('../../../lib/domain/models/Skill'); - -const skill1 = new Skill({ - id: 'skill1', - name: '@info1', - tubeId: 'tube1', - tutorialIds: [], - pixValue: 10, - competenceId: 'comp1', - difficulty: 1, -}); -const skill2 = new Skill({ - id: 'skill2', - name: '@info2', - tubeId: 'tube1', - tutorialIds: [], - pixValue: 10, - competenceId: 'comp1', - difficulty: 2, -}); -const skill3 = new Skill({ - id: 'skill3', - name: '@hack3', - tubeId: 'tube2', - tutorialIds: [], - pixValue: 10, - competenceId: 'comp1', - difficulty: 3, -}); - -// additionnal 'active' skill which level is beyond user level -// should not be retained for calculating today score -const skill4 = new Skill({ - id: 'skill4', - name: '@info3', - tubeId: 'tube1', - tutorialIds: [], - pixValue: 10, - competenceId: 'comp1', - difficulty: 3, -}); - -const activeSkills = [skill1, skill2, skill3, skill4]; -const skills = [skill1, skill2, skill3]; - -const tube1 = new Tube({ id: 'tube1', skills: [skill1, skill2] }); -const tube2 = new Tube({ id: 'tube2', skills: [skill3] }); -const tubes = [tube1, tube2]; - -const knowledge1 = new KnowledgeElement({ id: 'ke1', status: 'validated', skillId: 'skill1', earnedPix: 5 }); -const knowledge2 = new KnowledgeElement({ id: 'ke2', status: 'validated', skillId: 'skill2', earnedPix: 5 }); -const knowledge3 = new KnowledgeElement({ id: 'ke3', status: 'validated', skillId: 'skill3', earnedPix: 5 }); - -const invalidatedKe = new KnowledgeElement({ id: 'ke3', status: 'invalidated', skillId: 'skill1' }); -const knowledgeElements = [knowledge1, knowledge2, invalidatedKe, knowledge3]; - -describe('Unit | Scripts | compare-pix-with-latest-release.js', function () { - beforeEach(async function () { - // stub repositories - knowledgeElementRepository.findUniqByUserId = sinon.stub().resolves(knowledgeElements); - tubeRepository.get = sinon.stub().callsFake((tubeId) => tubes.find((tube) => tube.id === tubeId)); - skillRepository.get = sinon.stub().callsFake((skillId) => skills.find((skill) => skill.id === skillId)); - skillRepository.findActiveByTubeId = sinon.stub().callsFake((tubeId) => { - const result = activeSkills.filter((skill) => skill.tubeId === tubeId); - return result; - }); - }); - - describe('#getUserValidatedKnowledgeElements', function () { - it('should return validated knowledgeElementsOnly', async function () { - // when - const validated = await getUserValidatedKnowledgeElements(1); - - // then - validated.forEach((current) => { - expect(current.status).to.equal('validated'); - }); - }); - }); - - describe('#getTubeByIds', function () { - it('should return the tube instances by their ids', async function () { - // when - const result = await getTubeByIds(['tube1', 'tube2']); - - // then - expect(tubes).to.deep.equal(result); - }); - }); - - describe('#getUserSkillsGroupedByTubeId', function () { - it('should return the skills associated to the knowledgeElements grouped by their tube ids', async function () { - // when - const validated = await getUserValidatedKnowledgeElements(1); - const result = await getUserSkillsGroupedByTubeId(validated); - - // then - expect(result).to.deep.equal({ - tube1: [skill1, skill2], - tube2: [skill3], - }); - }); - }); - - describe('#getHardestSkillByTubeId', function () { - it('should keep only the hardest skill for each tube', async function () { - // when - const validated = await getUserValidatedKnowledgeElements(1); - const grouped = await getUserSkillsGroupedByTubeId(validated); - const hardest = getHardestSkillByTubeId(grouped); - - // then - expect(hardest).to.deep.equal({ - tube1: skill2, - tube2: skill3, - }); - }); - }); - - describe('#compareUserScoreWithLatestRelease', function () { - it('should be able to calculate the user score according to his knowledge elements', async function () { - // when - const result = await compareUserScoreWithLatestRelease(1); - - // then - expect(result.userScore).to.equal(15); - expect(result.todayScore).to.equal(30); - }); - }); -}); diff --git a/api/tests/unit/scripts/create-certification-center-memberships-from-organization-admins_test.js b/api/tests/unit/scripts/create-certification-center-memberships-from-organization-admins_test.js index f4c4f25ad15..900f4529810 100644 --- a/api/tests/unit/scripts/create-certification-center-memberships-from-organization-admins_test.js +++ b/api/tests/unit/scripts/create-certification-center-memberships-from-organization-admins_test.js @@ -1,8 +1,5 @@ -const { expect } = require('../../test-helper'); - -const { - buildCertificationCenterMemberships, -} = require('../../../scripts/create-certification-center-memberships-from-organization-admins'); +import { expect } from '../../test-helper.js'; +import { buildCertificationCenterMemberships } from '../../../scripts/create-certification-center-memberships-from-organization-admins.js'; describe('Unit | Scripts | create-certification-center-memberships-from-organization-admins.js', function () { describe('#buildCertificationCenterMemberships', function () { diff --git a/api/tests/unit/scripts/create-sco-certification-centers_test.js b/api/tests/unit/scripts/create-sco-certification-centers_test.js index 37d4a0ad6a6..3e0d6b7d5d0 100644 --- a/api/tests/unit/scripts/create-sco-certification-centers_test.js +++ b/api/tests/unit/scripts/create-sco-certification-centers_test.js @@ -1,6 +1,5 @@ -const { expect } = require('../../test-helper'); - -const { prepareDataForInsert } = require('../../../scripts/create-sco-certification-centers'); +import { expect } from '../../test-helper.js'; +import { prepareDataForInsert } from '../../../scripts/create-sco-certification-centers.js'; describe('Unit | Scripts | create-sco-certification-centers.js', function () { describe('#prepareDataForInsert', function () { diff --git a/api/tests/unit/scripts/create-users-accounts-for-contest_test.js b/api/tests/unit/scripts/create-users-accounts-for-contest_test.js index ed40deff7d1..12c15aef1d1 100644 --- a/api/tests/unit/scripts/create-users-accounts-for-contest_test.js +++ b/api/tests/unit/scripts/create-users-accounts-for-contest_test.js @@ -1,6 +1,5 @@ -const { expect } = require('../../test-helper'); - -const { prepareDataForInsert } = require('../../../scripts/create-users-accounts-for-contest'); +import { expect } from '../../test-helper.js'; +import { prepareDataForInsert } from '../../../scripts/create-users-accounts-for-contest.js'; describe('Unit | Scripts | create-users-accounts-for-contest.js', function () { describe('#prepareDataForInsert', function () { diff --git a/api/tests/unit/scripts/delete-assessment_test.js b/api/tests/unit/scripts/delete-assessment_test.js index 53d51d970f8..3a786f40dae 100644 --- a/api/tests/unit/scripts/delete-assessment_test.js +++ b/api/tests/unit/scripts/delete-assessment_test.js @@ -1,6 +1,5 @@ -const { expect, sinon } = require('../../test-helper'); - -const { ScriptQueryBuilder, AssessmentEraser } = require('../../../scripts/delete-assessment'); +import { expect, sinon } from '../../test-helper.js'; +import { ScriptQueryBuilder, AssessmentEraser } from '../../../scripts/delete-assessment.js'; describe('Delete Assessment Script', function () { describe('ScriptQueryBuilder', function () { diff --git a/api/tests/unit/scripts/delete-user_test.js b/api/tests/unit/scripts/delete-user_test.js index 30c3c978f30..6f6e65a27a6 100644 --- a/api/tests/unit/scripts/delete-user_test.js +++ b/api/tests/unit/scripts/delete-user_test.js @@ -1,6 +1,5 @@ -const { expect, sinon } = require('../../test-helper'); - -const { ScriptQueryBuilder, ClientQueryAdapter, UserEraser } = require('../../../scripts/delete-user'); +import { expect, sinon } from '../../test-helper.js'; +import { ScriptQueryBuilder, ClientQueryAdapter, UserEraser } from '../../../scripts/delete-user.js'; describe('Delete User Script', function () { describe('ScriptQueryBuilder', function () { diff --git a/api/tests/unit/scripts/get-cpf-import-status-from-xml_test.js b/api/tests/unit/scripts/get-cpf-import-status-from-xml_test.js index 5fe67836f6d..13e2fbf8e11 100644 --- a/api/tests/unit/scripts/get-cpf-import-status-from-xml_test.js +++ b/api/tests/unit/scripts/get-cpf-import-status-from-xml_test.js @@ -1,5 +1,7 @@ -const { expect } = require('../../test-helper'); -const { getCpfImportResults } = require('../../../scripts/certification/get-cpf-import-status-from-xml'); +import { expect } from '../../test-helper.js'; +import { getCpfImportResults } from '../../../scripts/certification/get-cpf-import-status-from-xml.js'; +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('UNIT | Scripts | Certification | get-cpf-import-status-from-xml', function () { describe('#getCpfImportResults', function () { diff --git a/api/tests/unit/scripts/get-next-commit-subject_test.js b/api/tests/unit/scripts/get-next-commit-subject_test.js index 7d52f30eb75..d538522913c 100644 --- a/api/tests/unit/scripts/get-next-commit-subject_test.js +++ b/api/tests/unit/scripts/get-next-commit-subject_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../test-helper'); -const getNextCommitSubject = require('../../../scripts/get-next-commit-subject'); +import { expect } from '../../test-helper.js'; +import { getNextCommitSubject } from '../../../scripts/get-next-commit-subject.js'; describe('get-next-commit-subject', function () { const commitSubject = 'Add a user repository'; diff --git a/api/tests/unit/scripts/get-results-certifications-old_test.js b/api/tests/unit/scripts/get-results-certifications-old_test.js index 3d977d5ef7d..ff8d6fe565c 100644 --- a/api/tests/unit/scripts/get-results-certifications-old_test.js +++ b/api/tests/unit/scripts/get-results-certifications-old_test.js @@ -1,12 +1,14 @@ -const { expect } = require('chai'); +import chai from 'chai'; -const { +const { expect } = chai; + +import { parseArgs, toCSVRow, buildRequestObject, findCompetence, HEADERS, -} = require('../../../scripts/certification/get-results-certifications-old'); +} from '../../../scripts/certification/get-results-certifications-old.js'; describe('Get Result Certifications Script OLD', function () { describe('parseArgs', function () { diff --git a/api/tests/unit/scripts/get-results-certifications_test.js b/api/tests/unit/scripts/get-results-certifications_test.js index f4ef9de3c3c..1f161cec91d 100644 --- a/api/tests/unit/scripts/get-results-certifications_test.js +++ b/api/tests/unit/scripts/get-results-certifications_test.js @@ -1,5 +1,8 @@ -const { expect } = require('chai'); -const getResultsCertifications = require('../../../scripts/certification/get-results-certifications'); +import chai from 'chai'; + +const { expect } = chai; + +import * as getResultsCertifications from '../../../scripts/certification/get-results-certifications.js'; describe('Unit | Scripts | get-results-certifications.js', function () { const HEADERS = [ diff --git a/api/tests/unit/scripts/helpers/csvHelpers_test.js b/api/tests/unit/scripts/helpers/csvHelpers_test.js index eaf47d50c6c..2311ac3baf9 100644 --- a/api/tests/unit/scripts/helpers/csvHelpers_test.js +++ b/api/tests/unit/scripts/helpers/csvHelpers_test.js @@ -1,16 +1,19 @@ -const { expect, catchErr } = require('../../../test-helper'); -const { NotFoundError, FileValidationError } = require('../../../../lib/domain/errors'); -const { +import { expect, catchErr } from '../../../test-helper.js'; +import { NotFoundError, FileValidationError } from '../../../../lib/domain/errors.js'; + +import { parseCsv, readCsvFile, parseCsvWithHeader, checkCsvHeader, parseCsvWithHeaderAndRequiredFields, -} = require('../../../../scripts/helpers/csvHelpers'); -const { - batchOrganizationOptionsWithHeader, -} = require('../../../../scripts/create-organizations-with-tags-and-target-profiles'); -const { UnprocessableEntityError } = require('../../../../lib/application/http-errors'); +} from '../../../../scripts/helpers/csvHelpers.js'; + +import { batchOrganizationOptionsWithHeader } from '../../../../scripts/create-organizations-with-tags-and-target-profiles.js'; +import { UnprocessableEntityError } from '../../../../lib/application/http-errors.js'; + +import * as url from 'url'; +const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); describe('Unit | Scripts | Helpers | csvHelpers.js', function () { const notExistFilePath = 'notExist.csv'; diff --git a/api/tests/unit/scripts/helpers/organizations-by-external-id-helper_test.js b/api/tests/unit/scripts/helpers/organizations-by-external-id-helper_test.js index 13fd1b3c544..7be5b379ae3 100644 --- a/api/tests/unit/scripts/helpers/organizations-by-external-id-helper_test.js +++ b/api/tests/unit/scripts/helpers/organizations-by-external-id-helper_test.js @@ -1,10 +1,8 @@ -const { expect, sinon } = require('../../../test-helper'); - -const { +import { expect, sinon } from '../../../test-helper.js'; +import { findOrganizationsByExternalIds, organizeOrganizationsByExternalId, -} = require('../../../../scripts/helpers/organizations-by-external-id-helper'); -const organizationRepository = require('../../../../lib/infrastructure/repositories/organization-repository'); +} from '../../../../scripts/helpers/organizations-by-external-id-helper.js'; describe('Unit | Scripts | organizations-by-external-id-helper.js', function () { describe('#organizeOrganizationsByExternalId', function () { @@ -35,7 +33,9 @@ describe('Unit | Scripts | organizations-by-external-id-helper.js', function () }); describe('#findOrganizationsByExternalIds', function () { - let organizationRepositoryStub; + afterEach(function () { + sinon.restore(); + }); it('should find organizations with given externalIds', async function () { // given @@ -43,16 +43,14 @@ describe('Unit | Scripts | organizations-by-external-id-helper.js', function () { externalId: 'A100', targetProfileIdList: ['1', '2', '999'] }, { externalId: 'B200', targetProfileIdList: ['1', '3', '6'] }, ]; - organizationRepositoryStub = sinon - .stub(organizationRepository, 'findByExternalIdsFetchingIdsOnly') - .withArgs(['A100', 'B200']) - .resolves([]); + const findByExternalIdsFetchingIdsOnlyStub = sinon.stub().withArgs(['A100', 'B200']).resolves([]); + const organizationRepository = { findByExternalIdsFetchingIdsOnly: findByExternalIdsFetchingIdsOnlyStub }; // when - await findOrganizationsByExternalIds({ checkedData }); + await findOrganizationsByExternalIds({ checkedData }, organizationRepository); // then - expect(organizationRepositoryStub).to.have.been.calledOnce; + expect(findByExternalIdsFetchingIdsOnlyStub).to.have.been.calledOnce; }); }); }); diff --git a/api/tests/unit/scripts/import-certification-cpf-cities_test.js b/api/tests/unit/scripts/import-certification-cpf-cities_test.js index 92b25511071..8a6f785e36b 100644 --- a/api/tests/unit/scripts/import-certification-cpf-cities_test.js +++ b/api/tests/unit/scripts/import-certification-cpf-cities_test.js @@ -1,9 +1,8 @@ -const { expect, sinon } = require('../../test-helper'); -const { - buildCities, - getCitiesWithDistricts, -} = require('../../../scripts/certification/import-certification-cpf-cities'); -const { noop } = require('lodash/noop'); +import { expect, sinon } from '../../test-helper.js'; +import { buildCities, getCitiesWithDistricts } from '../../../scripts/certification/import-certification-cpf-cities.js'; +import lodash from 'lodash'; + +const { noop } = lodash; describe('Unit | Scripts | import-certification-cpf-cities.js', function () { beforeEach(function () { diff --git a/api/tests/unit/scripts/import-certification-cpf-countries_test.js b/api/tests/unit/scripts/import-certification-cpf-countries_test.js index 76ce4990f74..1034cf12a5c 100644 --- a/api/tests/unit/scripts/import-certification-cpf-countries_test.js +++ b/api/tests/unit/scripts/import-certification-cpf-countries_test.js @@ -1,9 +1,11 @@ -const { expect, catchErr, sinon } = require('../../test-helper'); -const { +import { expect, catchErr, sinon } from '../../test-helper.js'; +import { buildCountries, checkTransformUnicity, -} = require('../../../scripts/certification/import-certification-cpf-countries'); -const { noop } = require('lodash/noop'); +} from '../../../scripts/certification/import-certification-cpf-countries.js'; +import lodash from 'lodash'; + +const { noop } = lodash; describe('Unit | Scripts | import-certification-cpf-countries.js', function () { beforeEach(function () { diff --git a/api/tests/unit/scripts/update-sco-organizations-with-is-managing-students-to-true_test.js b/api/tests/unit/scripts/update-sco-organizations-with-is-managing-students-to-true_test.js index 3c1fd906ef2..417d672f549 100644 --- a/api/tests/unit/scripts/update-sco-organizations-with-is-managing-students-to-true_test.js +++ b/api/tests/unit/scripts/update-sco-organizations-with-is-managing-students-to-true_test.js @@ -1,9 +1,8 @@ -const { expect, nock } = require('../../test-helper'); - -const { +import { expect, nock } from '../../test-helper.js'; +import { checkData, updateOrganizations, -} = require('../../../scripts/update-sco-organizations-with-is-managing-students-to-true'); +} from '../../../scripts/update-sco-organizations-with-is-managing-students-to-true.js'; describe('Unit | Scripts | update-sco-organizations-with-is-managing-students-to-true.js', function () { describe('#updateOrganizations', function () { diff --git a/api/tests/unit/server/server_test.js b/api/tests/unit/server/server_test.js index 9309ea88cc8..7435f87bfd5 100644 --- a/api/tests/unit/server/server_test.js +++ b/api/tests/unit/server/server_test.js @@ -1,6 +1,5 @@ -const { expect } = require('../../test-helper'); - -const createServer = require('../../../server'); +import { expect } from '../../test-helper.js'; +import { createServer } from '../../../server.js'; describe('Unit | Server | server', function () { describe('#createServer', function () { diff --git a/api/tests/unit/tooling/chai-custom-helpers/deep-equal-array_test.js b/api/tests/unit/tooling/chai-custom-helpers/deep-equal-array_test.js index 564fe456818..9a0b720e8b5 100644 --- a/api/tests/unit/tooling/chai-custom-helpers/deep-equal-array_test.js +++ b/api/tests/unit/tooling/chai-custom-helpers/deep-equal-array_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | chai-custom-helpers | deepEqualArray', function () { it('should fail assertion when compared objects are not arrays', function () { diff --git a/api/tests/unit/tooling/chai-custom-helpers/deep-equal-instance-omitting_test.js b/api/tests/unit/tooling/chai-custom-helpers/deep-equal-instance-omitting_test.js index 7d5926929d4..97993d2f17f 100644 --- a/api/tests/unit/tooling/chai-custom-helpers/deep-equal-instance-omitting_test.js +++ b/api/tests/unit/tooling/chai-custom-helpers/deep-equal-instance-omitting_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | chai-custom-helpers | deepEqualInstanceOmitting', function () { it('should fail assertion when both objects are not of the same instance', function () { diff --git a/api/tests/unit/tooling/chai-custom-helpers/deep-equal-instance_test.js b/api/tests/unit/tooling/chai-custom-helpers/deep-equal-instance_test.js index cedf4786407..bf947cf7734 100644 --- a/api/tests/unit/tooling/chai-custom-helpers/deep-equal-instance_test.js +++ b/api/tests/unit/tooling/chai-custom-helpers/deep-equal-instance_test.js @@ -1,4 +1,4 @@ -const { expect, domainBuilder } = require('../../../test-helper'); +import { expect, domainBuilder } from '../../../test-helper.js'; describe('Unit | chai-custom-helpers | deepEqualInstance', function () { it('should fail assertion when both objects are not of the same instance', function () { diff --git a/api/tests/unit/tooling/database-builder/database-buffer_test.js b/api/tests/unit/tooling/database-builder/database-buffer_test.js index fb687998e80..67e841982e9 100644 --- a/api/tests/unit/tooling/database-builder/database-buffer_test.js +++ b/api/tests/unit/tooling/database-builder/database-buffer_test.js @@ -1,5 +1,5 @@ -const { expect } = require('../../../test-helper'); -const databaseBuffer = require('../../../../db/database-builder/database-buffer'); +import { expect } from '../../../test-helper.js'; +import { databaseBuffer } from '../../../../db/database-builder/database-buffer.js'; describe('Unit | Tooling | DatabaseBuilder | database-buffer', function () { afterEach(function () { diff --git a/api/tests/unit/tooling/database-builder/database-builder_test.js b/api/tests/unit/tooling/database-builder/database-builder_test.js index 47d7992a85f..22dbb9abaa6 100644 --- a/api/tests/unit/tooling/database-builder/database-builder_test.js +++ b/api/tests/unit/tooling/database-builder/database-builder_test.js @@ -1,5 +1,5 @@ -const { expect, sinon, catchErr } = require('../../../test-helper'); -const DatabaseBuilder = require('../../../../db/database-builder/database-builder'); +import { expect, sinon, catchErr } from '../../../test-helper.js'; +import { DatabaseBuilder } from '../../../../db/database-builder/database-builder.js'; describe('Unit | Tooling | DatabaseBuilder | database-builder', function () { describe('#clean', function () { diff --git a/api/tests/unit/tooling/http-test-server_test.js b/api/tests/unit/tooling/http-test-server_test.js index 2287c8e3522..bca781298ea 100644 --- a/api/tests/unit/tooling/http-test-server_test.js +++ b/api/tests/unit/tooling/http-test-server_test.js @@ -1,6 +1,5 @@ -const { expect } = require('../../test-helper'); - -const HttpTestServer = require('../../tooling/server/http-test-server'); +import { expect } from '../../test-helper.js'; +import { HttpTestServer } from '../../tooling/server/http-test-server.js'; describe('Unit | Tooling | Http-test-server', function () { describe('#constructor', function () { diff --git a/api/tests/unit/validate_test.js b/api/tests/unit/validate_test.js index af6da09365f..7dfae3fbae1 100644 --- a/api/tests/unit/validate_test.js +++ b/api/tests/unit/validate_test.js @@ -1,9 +1,10 @@ -const { pick } = require('lodash'); +import lodash from 'lodash'; -const { expect, hFake } = require('../test-helper'); -const { BadRequestError } = require('../../lib/application/http-errors'); +const { pick } = lodash; -const { handleFailAction } = require('../../lib/validate'); +import { expect, hFake } from '../test-helper.js'; +import { BadRequestError } from '../../lib/application/http-errors.js'; +import { handleFailAction } from '../../lib/validate.js'; describe('Unit | Validate', function () { let expectedResponse; diff --git a/api/translations/index.js b/api/translations/index.js index 50d2f79703b..e3b542aef46 100644 --- a/api/translations/index.js +++ b/api/translations/index.js @@ -1,4 +1,4 @@ -const fr = require('./fr'); -const en = require('./en'); +import fr from "./fr.json" assert {type:'json'}; +import en from "./en.json" assert {type:'json'}; -module.exports = { fr, en }; +export { fr, en }; diff --git a/api/worker.js b/api/worker.js index 0f38efb18f9..b1bb0be8b3c 100644 --- a/api/worker.js +++ b/api/worker.js @@ -1,16 +1,17 @@ -const dotenv = require('dotenv'); +import * as dotenv from 'dotenv'; dotenv.config(); -const PgBoss = require('pg-boss'); -const _ = require('lodash'); -const config = require('./lib/config'); -const logger = require('./lib/infrastructure/logger'); -const JobQueue = require('./lib/infrastructure/jobs/JobQueue'); -const ParticipationResultCalculationJob = require('./lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJob'); -const SendSharedParticipationResultsToPoleEmploiJob = require('./lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob'); -const ParticipationResultCalculationJobHandler = require('./lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJobHandler'); -const SendSharedParticipationResultsToPoleEmploiHandler = require('./lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiHandler'); -const scheduleCpfJobs = require('./lib/infrastructure/jobs/cpf-export/schedule-cpf-jobs'); -const MonitoredJobQueue = require('./lib/infrastructure/jobs/monitoring/MonitoredJobQueue'); +import PgBoss from 'pg-boss'; +import _ from 'lodash'; +import { config } from './lib/config.js'; +import { logger } from './lib/infrastructure/logger.js'; +import { JobQueue } from './lib/infrastructure/jobs/JobQueue.js'; +import { ParticipationResultCalculationJob } from './lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJob.js'; +import { SendSharedParticipationResultsToPoleEmploiJob } from './lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiJob.js'; +import { ParticipationResultCalculationJobHandler } from './lib/infrastructure/jobs/campaign-result/ParticipationResultCalculationJobHandler.js'; +import { SendSharedParticipationResultsToPoleEmploiHandler } from './lib/infrastructure/jobs/campaign-result/SendSharedParticipationResultsToPoleEmploiHandler.js'; +import { scheduleCpfJobs } from './lib/infrastructure/jobs/cpf-export/schedule-cpf-jobs.js'; +import { MonitoredJobQueue } from './lib/infrastructure/jobs/monitoring/MonitoredJobQueue.js'; +import * as url from 'url'; async function runJobs() { logger.info('Starting pg-boss'); @@ -37,7 +38,7 @@ async function runJobs() { const monitoredJobQueue = new MonitoredJobQueue(jobQueue); process.on('SIGINT', async () => { await monitoredJobQueue.stop(); - // eslint-disable-next-line node/no-process-exit + // eslint-disable-next-line node/no-process-exit,no-process-exit process.exit(0); }); @@ -50,13 +51,15 @@ async function runJobs() { await scheduleCpfJobs(pgBoss); } const startInWebProcess = process.env.START_JOB_IN_WEB_PROCESS; -const isEntryPointFromOtherFile = require.main.filename !== __filename; +const modulePath = url.fileURLToPath(import.meta.url); +const isEntryPointFromOtherFile = process.argv[1] !== modulePath; + if (!startInWebProcess || (startInWebProcess && isEntryPointFromOtherFile)) { runJobs(); } else { logger.error( 'Worker process is started in the web process. Please unset the START_JOB_IN_WEB_PROCESS environment variable to start a dedicated worker process.' ); - // eslint-disable-next-line node/no-process-exit + // eslint-disable-next-line node/no-process-exit,no-process-exit process.exit(1); } diff --git a/docs/adr/0046-modulariser-le-code-nodejs.md b/docs/adr/0046-modulariser-le-code-nodejs.md new file mode 100644 index 00000000000..6ad321aa597 --- /dev/null +++ b/docs/adr/0046-modulariser-le-code-nodejs.md @@ -0,0 +1,128 @@ +# 46. Modulariser le code NodeJS + +Date : 2023-05-05 + +## État + +Accepté + +## Contexte + +Sur ce projet, nous avons besoin de : + +- répartir le code dans des unités, appelées modules; +- faire collaborer ces modules; +- tester indépendamment et en collaboration ces modules; +- dans un environnement NodeJS. + +Cette décision relève de l'architecture applicative, mais se situe à un niveau plus bas que des patterns tels que +l'architecture en couche, ou l'architecture hexagonale. Elle s'applique aussi bien à l'API qu'aux front-ends. + +Nous examinons uniquement les deux solutions les plus maintenues: CommonJS et ECMA script. +Il existe d'autres solutions : AMD, CJS, CJS2, UMD. + +### Solution n°1 : Modules CommonJS + +**Description** + +Les modules CommonJs ont longtemps constitué [la seule solution native](https://nodejs.org/api/modules.html) depuis la +release originelle de NodeJS, en 2009. +> CommonJS modules are the original way to package JavaScript code for Node.js + +**Avantage(s):** + +- syntaxe connue des développeurs +- syntaxe permissive, permettant de nombreux cas d'usages + +**Inconvénient(s):** + +- cette solution n'étant plus la solution officielle, sa maintenance sera réduite +- le caractère permissif de la syntaxe peut mener à de la complexité inutile + - export + - de nombreuses opérations sont possibles lors de l'export : + - instanciation de singleton + - déstructuration et renommage d'import précédents + +Export CJS + +```js + +module.exports = { + EMPTY_BLANK_AND_NULL, + domainBuilder: require('./tooling/domain-builder/factory'), + testErr: new Error('Fake Error'), +``` + +Export ESM + +```js +export { + EMPTY_BLANK_AND_NULL, + domainBuilder, + testErr, +``` + +- import + - les imports ne sont pas limités en début de fichier, mais n'importe où dans le code, même dans une boucle + - de nombreuses opérations sont possibles lors de l'export : + - déstructuration + - instanciation + +Import CJS + +```js +``` + +Import ESM + +```js +``` + +### Solution n°2 : ECMA script modules + +**Description** + +Les modules ECMA script sont disponibles nativement et leur interface est stable depuis ( +2021)[https://nodejs.org/docs/latest-v14.x/api/esm.html#introduction] +> ECMAScript modules are the official standard format to package JavaScript code for reuse. + +**Avantage(s):** + +- solution utilisée nativement dans les navigateurs +- solution officielle de NodeJS, pour laquelle la majorité des efforts de développement est développée + - dans le coeur NodeJS + - dans les librairies de l'écosystème, par exemple les règles `eslint` +- syntaxe plus stricte + - limitée aux opérations d'export et d'import + - les modules exposés sont immutables, en lecture seule, ce qui impose l'injection de dépendance pour tester un + composant sans ses dépendances +- permet une meilleure complétion lors de l'import dans les IDE +- éviter les erreurs en activant (le mode strict par + défaut)[https://262.ecma-international.org/6.0/#sec-strict-mode-code] + +**Inconvénient(s):** + +- syntaxe moins connue des développeurs +- coût de migration, car elle n'est pas utilisée dans l'API + - migration des imports et exports + - injection de dépendances pour les modules qui sont testés en isolation de leurs dépendances + +## Décision + +Nous avons choisi la solution n°2, à savoir les modules ECMA script, car le support officiel et le caractère strict sont +des avantages déterminants, malgré les coûts de migration. + +## Conséquences + +Migrer le code de l'API des modules CommonJS vers les modules ECMA script. + +Pour cela : + +- utiliser une solution de modification de code (codemod), à savoir la librairie + éprouvée (`jscodeshift`)[https://github.com/facebook/jscodeshift]; +- effectuer des corrections manuelles lorsque la migration automatisée n'est pas judicieuse (volumétrie/complexité). + +Encadrer l'usage des modules ECMA script avec des règles de lint: + +- les imports doivent référencer un fichier existant +- les imports seront majoritairement nommés diff --git a/high-level-tests/e2e/.eslintrc.js b/high-level-tests/e2e/.eslintrc.js index 910c21758d5..95c54288848 100644 --- a/high-level-tests/e2e/.eslintrc.js +++ b/high-level-tests/e2e/.eslintrc.js @@ -3,10 +3,13 @@ module.exports = { root: true, parserOptions: { ecmaVersion: 2017, - sourceType: 'module' + sourceType: "module" }, plugins: [ - 'cypress', + "cypress" + ], + ignorePatterns: [ + "**/cypress/plugins/*.js" ], env: { browser: false, diff --git a/high-level-tests/e2e/cypress/plugins/index.js b/high-level-tests/e2e/cypress/plugins/index.js index 5d44137d23a..59d6c8c0d60 100644 --- a/high-level-tests/e2e/cypress/plugins/index.js +++ b/high-level-tests/e2e/cypress/plugins/index.js @@ -1,6 +1,5 @@ -const { knex } = require('../../../../api/db/knex-database-connection'); -const cucumber = require('cypress-cucumber-preprocessor').default; -const getCompareSnapshotsPlugin = require('cypress-visual-regression/dist/plugin'); +const cucumber = require("cypress-cucumber-preprocessor").default; +const getCompareSnapshotsPlugin = require("cypress-visual-regression/dist/plugin"); const SEQUENCE_RESTART_AT_NUMBER = 10000000; @@ -8,16 +7,17 @@ module.exports = (on, config) => { config.env.AUTH_SECRET = process.env.AUTH_SECRET; getCompareSnapshotsPlugin(on); - on('file:preprocessor', cucumber()); - on('task', { - async 'db:fixture' (data) { - const file = require('../fixtures/' + data + '.json'); + on("file:preprocessor", cucumber()); + on("task", { + async "db:fixture"(data) { + const file = require("../fixtures/" + data + ".json"); + const { knex } = await import("../../../../api/db/knex-database-connection.js"); for (const row of file) { await knex(data).insert(row); } - return knex.raw('SELECT sequence_name FROM information_schema.sequences;') + return knex.raw("SELECT sequence_name FROM information_schema.sequences;") .then((sequenceNameQueryResult) => { const sequenceNames = sequenceNameQueryResult.rows.map((row) => row.sequence_name); @@ -28,10 +28,10 @@ module.exports = (on, config) => { }); }, log(message) { - console.log(message) + console.log(message); - return null - }, + return null; + } }); return config; }; diff --git a/high-level-tests/test-algo/algo.js b/high-level-tests/test-algo/algo.js index 71ef8599b14..b475ea7d393 100644 --- a/high-level-tests/test-algo/algo.js +++ b/high-level-tests/test-algo/algo.js @@ -3,19 +3,10 @@ require('dotenv').config(); const hashInt = require('hash-int'); const fs = require('fs'); const { find, isEmpty } = require('lodash'); -const smartRandom = require('../../api/lib/domain/services/algorithm-methods/smart-random'); -const dataFetcher = require('../../api/lib/domain/services/algorithm-methods/data-fetcher'); -const challengeRepository = require('../../api/lib/infrastructure/repositories/challenge-repository'); -const skillRepository = require('../../api/lib/infrastructure/repositories/skill-repository'); -const campaignRepository = require('../../api/lib/infrastructure/repositories/campaign-repository'); -const improvementService = require('../../api/lib/domain/services/improvement-service'); -const pickChallengeService = require('../../api/lib/domain/services/pick-challenge-service'); -const Answer = require('../../api/lib/domain/models/Answer'); -const AnswerStatus = require('../../api/lib/domain/models/AnswerStatus'); -const KnowledgeElement = require('../../api/lib/domain/models/KnowledgeElement'); -const AlgoResult = require('./AlgoResult'); +const AlgoResult = require('./AlgoResult.js'); -const POSSIBLE_ANSWER_STATUSES = [AnswerStatus.OK, AnswerStatus.KO]; +let campaignRepository; +let Answer; function _readUsersKEFile(path) { if (path) { @@ -27,7 +18,25 @@ function _readUsersKEFile(path) { return [[]]; } -function answerTheChallenge({ challenge, allAnswers, allKnowledgeElements, targetSkills, userId, userResult, userKE }) { +async function answerTheChallenge({ + challenge, + allAnswers, + allKnowledgeElements, + targetSkills, + userId, + userResult, + userKE, +}) { + const AnswerStatus = ( + await import('../../api/lib/domain/models/AnswerStatus.js') + ).AnswerStatus; + const POSSIBLE_ANSWER_STATUSES = [AnswerStatus.OK, AnswerStatus.KO]; + + const KnowledgeElement = ( + await import('../../api/lib/domain/models/KnowledgeElement.js') + ).KnowledgeElement; + Answer = (await import('../../api/lib/domain/models/Answer.js')).Answer; + let result; const isFirstAnswer = !allAnswers.length; switch (userResult) { @@ -49,7 +58,10 @@ function answerTheChallenge({ challenge, allAnswers, allKnowledgeElements, targe case 'KE': { const ke = find(userKE, (ke) => challenge.skill.id === ke.skillId); const status = ke ? ke.status : KnowledgeElement.StatusType.INVALIDATED; - result = status === KnowledgeElement.StatusType.VALIDATED ? AnswerStatus.OK : AnswerStatus.KO; + result = + status === KnowledgeElement.StatusType.VALIDATED + ? AnswerStatus.OK + : AnswerStatus.KO; break; } default: @@ -57,34 +69,42 @@ function answerTheChallenge({ challenge, allAnswers, allKnowledgeElements, targe } const newAnswer = new Answer({ challengeId: challenge.id, result }); - const _getSkillsFilteredByStatus = (knowledgeElements, targetSkills, status) => { + const _getSkillsFilteredByStatus = ( + knowledgeElements, + targetSkills, + status, + ) => { return knowledgeElements .filter((knowledgeElement) => knowledgeElement.status === status) .map((knowledgeElement) => knowledgeElement.skillId) .map((skillId) => targetSkills.find((skill) => skill.id === skillId)); }; - const newKnowledgeElements = KnowledgeElement.createKnowledgeElementsForAnswer({ - answer: newAnswer, - challenge, - previouslyFailedSkills: _getSkillsFilteredByStatus( - allKnowledgeElements, - targetSkills, - KnowledgeElement.StatusType.INVALIDATED, - ), - previouslyValidatedSkills: _getSkillsFilteredByStatus( - allKnowledgeElements, + const newKnowledgeElements = + KnowledgeElement.createKnowledgeElementsForAnswer({ + answer: newAnswer, + challenge, + previouslyFailedSkills: _getSkillsFilteredByStatus( + allKnowledgeElements, + targetSkills, + KnowledgeElement.StatusType.INVALIDATED, + ), + previouslyValidatedSkills: _getSkillsFilteredByStatus( + allKnowledgeElements, + targetSkills, + KnowledgeElement.StatusType.VALIDATED, + ), targetSkills, - KnowledgeElement.StatusType.VALIDATED, - ), - targetSkills, - userId, - }); + userId, + }); return { answerStatus: result, updatedAnswers: [...allAnswers, newAnswer], - updatedKnowledgeElements: [...allKnowledgeElements, ...newKnowledgeElements], + updatedKnowledgeElements: [ + ...allKnowledgeElements, + ...newKnowledgeElements, + ], }; } @@ -97,7 +117,17 @@ async function _getReferentiel({ skillRepository, improvementService, campaignRepository, + dependencies, }) { + let dataFetcher; + if (!dependencies?.dataFetcher) { + dataFetcher = await import( + '../../api/lib/domain/services/algorithm-methods/data-fetcher.js' + ); + } else { + dataFetcher = dependencies.dataFetcher; + } + if (campaignId) { const skills = await campaignRepository.findSkills({ campaignId }); const campaignRepositoryStub = { @@ -118,25 +148,38 @@ async function _getReferentiel({ challengeRepository, knowledgeElementRepository, improvementService, - campaignParticipationRepository: campaignParticipationRepositoryStub, }); return { targetSkills, challenges }; } else { - const { targetSkills, challenges } = await dataFetcher.fetchForCompetenceEvaluations({ - assessment, - answerRepository, - challengeRepository, - knowledgeElementRepository, - skillRepository, - improvementService, - }); + const { targetSkills, challenges } = + await dataFetcher.fetchForCompetenceEvaluations({ + assessment, + answerRepository, + challengeRepository, + knowledgeElementRepository, + skillRepository, + improvementService, + }); return { targetSkills, challenges }; } } -async function _getChallenge({ challenges, targetSkills, assessment, locale, knowledgeElements, allAnswers }) { +async function _getChallenge({ + challenges, + targetSkills, + assessment, + locale, + knowledgeElements, + allAnswers, +}) { + const smartRandom = await import( + '../../api/lib/domain/services/algorithm-methods/smart-random.js' + ); + const pickChallengeService = await import( + '../../api/lib/domain/services/pick-challenge-service.js' + ); const result = smartRandom.getPossibleSkillsForNextChallenge({ knowledgeElements, challenges, @@ -184,25 +227,27 @@ async function proceedAlgo( const algoResult = new AlgoResult(); while (!isAssessmentOver) { - const { challenge, hasAssessmentEnded, estimatedLevel, challengeLevel } = await _getChallenge({ - challenges, - targetSkills, - assessment, - locale, - knowledgeElements, - allAnswers, - }); - algoResult.addEstimatedLevels(estimatedLevel); - if (challenge) { - const { answerStatus, updatedAnswers, updatedKnowledgeElements } = answerTheChallenge({ - challenge, - allAnswers, - userId: assessment.userId, - allKnowledgeElements: knowledgeElements, + const { challenge, hasAssessmentEnded, estimatedLevel, challengeLevel } = + await _getChallenge({ + challenges, targetSkills, - userResult: isEmpty(userKE) ? userResult : 'KE', - userKE, + assessment, + locale, + knowledgeElements, + allAnswers, }); + algoResult.addEstimatedLevels(estimatedLevel); + if (challenge) { + const { answerStatus, updatedAnswers, updatedKnowledgeElements } = + answerTheChallenge({ + challenge, + allAnswers, + userId: assessment.userId, + allKnowledgeElements: knowledgeElements, + targetSkills, + userResult: isEmpty(userKE) ? userResult : 'KE', + userKE, + }); allAnswers = updatedAnswers; knowledgeElements = updatedKnowledgeElements; algoResult.addChallenge(challenge); @@ -218,7 +263,14 @@ async function proceedAlgo( } async function launchTest(argv) { - const { competenceId, campaignId, locale, userResult, usersKEFile, enabledCsvOutput } = argv; + const { + competenceId, + campaignId, + locale, + userResult, + usersKEFile, + enabledCsvOutput, + } = argv; const allAnswers = []; const knowledgeElements = []; @@ -237,7 +289,15 @@ async function launchTest(argv) { }; const usersKE = _readUsersKEFile(usersKEFile); - + const skillRepository = await import( + '../../api/lib/infrastructure/repositories/skill-repository.js' + ); + const challengeRepository = await import( + '../../api/lib/infrastructure/repositories/challenge-repository.js' + ); + const improvementService = await import( + '../../api/lib/domain/services/improvement-service.js' + ); const { challenges, targetSkills } = await _getReferentiel({ assessment, campaignId, @@ -250,7 +310,16 @@ async function launchTest(argv) { }); const proceedUsers = usersKE.map((userKE) => { - return proceedAlgo(challenges, targetSkills, assessment, locale, knowledgeElements, allAnswers, userResult, userKE); + return proceedAlgo( + challenges, + targetSkills, + assessment, + locale, + knowledgeElements, + allAnswers, + userResult, + userKE, + ); }); const algoResults = await Promise.all(proceedUsers); diff --git a/high-level-tests/test-algo/tests/AlgoResult_test.js b/high-level-tests/test-algo/tests/AlgoResult_test.js index b6ad9267791..b6b0bb460fa 100644 --- a/high-level-tests/test-algo/tests/AlgoResult_test.js +++ b/high-level-tests/test-algo/tests/AlgoResult_test.js @@ -1,17 +1,31 @@ +const { beforeEach } = require('mocha'); const { expect, sinon } = require('./test-helpers'); const AlgoResult = require('../AlgoResult'); -const AnswerStatus = require('../../../api/lib/domain/models/AnswerStatus'); -const domainBuilder = require('../../../api/tests/tooling/domain-builder/domain-builder'); const CsvFile = require('../utils/CsvFile'); describe('AlgoResult', () => { + let AnswerStatus; + let domainBuilder; + + beforeEach(async function() { + AnswerStatus = (await import('../../../api/lib/domain/models/AnswerStatus.js')).AnswerStatus; + domainBuilder = (await import( + '../../../api/tests/tooling/domain-builder/domain-builder.js' + )).domainBuilder; + }); describe('#log', () => { it('should return total challenge asked', () => { // given const algoResult = new AlgoResult(); - const challenge1 = domainBuilder.buildChallenge({ id: 'rec1', skill: {} }); - const challenge2 = domainBuilder.buildChallenge({ id: 'rec2', skill: {} }); + const challenge1 = domainBuilder.buildChallenge({ + id: 'rec1', + skill: {}, + }); + const challenge2 = domainBuilder.buildChallenge({ + id: 'rec2', + skill: {}, + }); algoResult.addChallenge(challenge1); algoResult.addChallenge(challenge2); @@ -25,8 +39,14 @@ describe('AlgoResult', () => { it('should return challengeIds asked', () => { // given const algoResult = new AlgoResult(); - const challenge1 = domainBuilder.buildChallenge({ id: 'rec1', skill: {} }); - const challenge2 = domainBuilder.buildChallenge({ id: 'rec2', skill: {} }); + const challenge1 = domainBuilder.buildChallenge({ + id: 'rec1', + skill: {}, + }); + const challenge2 = domainBuilder.buildChallenge({ + id: 'rec2', + skill: {}, + }); algoResult.addChallenge(challenge1); algoResult.addChallenge(challenge2); @@ -57,9 +77,15 @@ describe('AlgoResult', () => { it('should return unique names of the skills', () => { // given const algoResult = new AlgoResult(); - const challenge1 = domainBuilder.buildChallenge({ skill: { name: 'skill1' } }); - const challenge2 = domainBuilder.buildChallenge({ skill: { name: 'skill1' } }); - const challenge3 = domainBuilder.buildChallenge({ skill: { name: 'skill2' } }); + const challenge1 = domainBuilder.buildChallenge({ + skill: { name: 'skill1' }, + }); + const challenge2 = domainBuilder.buildChallenge({ + skill: { name: 'skill1' }, + }); + const challenge3 = domainBuilder.buildChallenge({ + skill: { name: 'skill2' }, + }); algoResult.addChallenge(challenge1); algoResult.addChallenge(challenge2); algoResult.addChallenge(challenge3); @@ -95,7 +121,6 @@ describe('AlgoResult', () => { }); describe('display first answer status', () => { - it('should return N/A if there is no answer status', () => { // given const algoResult = new AlgoResult(); @@ -149,7 +174,6 @@ describe('AlgoResult', () => { expect(log).contains('----- biggest DESC gap: 4'); }); }); - }); describe('#getResults', () => { @@ -158,8 +182,14 @@ describe('AlgoResult', () => { beforeEach(() => { // given const algoResult = new AlgoResult(); - const challenge1 = domainBuilder.buildChallenge({ id: 'rec1', skill: { name: 'skill1' } }); - const challenge2 = domainBuilder.buildChallenge({ id: 'rec2', skill: { name: 'skill2' } }); + const challenge1 = domainBuilder.buildChallenge({ + id: 'rec1', + skill: { name: 'skill1' }, + }); + const challenge2 = domainBuilder.buildChallenge({ + id: 'rec2', + skill: { name: 'skill2' }, + }); algoResult.addChallenge(challenge1); algoResult.addChallenge(challenge2); algoResult.addChallengeLevel(2); @@ -230,8 +260,14 @@ describe('AlgoResult', () => { it('should get results and write it in file', () => { // given const algoResult = new AlgoResult(); - const challenge1 = domainBuilder.buildChallenge({ id: 'rec1', skill: { name: 'skill1' } }); - const challenge2 = domainBuilder.buildChallenge({ id: 'rec2', skill: { name: 'skill2' } }); + const challenge1 = domainBuilder.buildChallenge({ + id: 'rec1', + skill: { name: 'skill1' }, + }); + const challenge2 = domainBuilder.buildChallenge({ + id: 'rec2', + skill: { name: 'skill2' }, + }); algoResult.addChallenge(challenge1); algoResult.addChallenge(challenge2); algoResult.addChallengeLevel(2); @@ -240,7 +276,10 @@ describe('AlgoResult', () => { algoResult.addEstimatedLevels(4); algoResult.addAnswerStatus({ status: 'ko' }); algoResult.addAnswerStatus({ status: 'ok' }); - const csvFileCreateStub = sinon.stub(CsvFile.prototype, '_createAndAddHeadersIfNotExisting'); + const csvFileCreateStub = sinon.stub( + CsvFile.prototype, + '_createAndAddHeadersIfNotExisting', + ); const csvFileAppendStub = sinon.stub(CsvFile.prototype, 'append'); algoResult._id = 'fixed-id'; const testSet = 'test-set'; diff --git a/high-level-tests/test-algo/tests/algo_test.js b/high-level-tests/test-algo/tests/algo_test.js index e8d2be23601..34fba32dffb 100644 --- a/high-level-tests/test-algo/tests/algo_test.js +++ b/high-level-tests/test-algo/tests/algo_test.js @@ -1,20 +1,24 @@ const { expect, sinon } = require('./test-helpers'); -const { answerTheChallenge, _getReferentiel } = require('../algo'); -const DataFetcher = require('../../../api/lib/domain/services/algorithm-methods/data-fetcher'); -const KnowledgeElement = require('../../../api/lib/domain/models/KnowledgeElement'); +const { answerTheChallenge, _getReferentiel } = require('../algo.js'); describe('#answerTheChallenge', () => { let previousAnswers; let previousKE; let newKe; let challenge; + let KnowledgeElement; - beforeEach(() => { + beforeEach(async () => { previousAnswers = [{ id: 1, result: 'ko' }]; previousKE = [{ id: 1 }]; challenge = { id: 'recId' }; newKe = { id: 'KE-id' }; - sinon.stub(KnowledgeElement, 'createKnowledgeElementsForAnswer').returns([newKe]); + KnowledgeElement = ( + await import('../../../api/lib/domain/models/KnowledgeElement.js') + ).KnowledgeElement; + sinon + .stub(KnowledgeElement, 'createKnowledgeElementsForAnswer') + .returns([newKe]); sinon.stub(console, 'log'); }); @@ -22,9 +26,9 @@ describe('#answerTheChallenge', () => { sinon.restore(); }); - it('should return the list of answers with previous answer with the new one', () => { + it('should return the list of answers with previous answer with the new one', async () => { // when - const result = answerTheChallenge({ + const result = await answerTheChallenge({ challenge, allAnswers: previousAnswers, allKnowledgeElements: previousKE, @@ -38,9 +42,9 @@ describe('#answerTheChallenge', () => { expect(result.updatedAnswers[1].challengeId).to.be.equal(challenge.id); }); - it('should return the list of previous KE with the new one', () => { + it('should return the list of previous KE with the new one', async () => { // when - const result = answerTheChallenge({ + const result = await answerTheChallenge({ challenge, allAnswers: previousAnswers, allKnowledgeElements: previousKE, @@ -57,9 +61,9 @@ describe('#answerTheChallenge', () => { describe('when userResult is "ok"', () => { const userResult = 'ok'; - it('should return the list of answers with the new one validated', () => { + it('should return the list of answers with the new one validated', async () => { // when - const result = answerTheChallenge({ + const result = await answerTheChallenge({ challenge, allAnswers: previousAnswers, allKnowledgeElements: previousKE, @@ -81,9 +85,9 @@ describe('#answerTheChallenge', () => { describe('when userResult is "ko"', () => { const userResult = 'ko'; - it('should return the list of answers with the new one invalidated', () => { + it('should return the list of answers with the new one invalidated', async () => { // when - const result = answerTheChallenge({ + const result = await answerTheChallenge({ challenge, allAnswers: previousAnswers, allKnowledgeElements: previousKE, @@ -105,12 +109,12 @@ describe('#answerTheChallenge', () => { describe('when userResult is "random"', () => { const userResult = 'random'; - it('should return the list of answers with some validated and some invalidated', () => { + it('should return the list of answers with some validated and some invalidated', async () => { // when previousAnswers = []; const allResults = []; for (let i = 0; i < 50; i++) { - const result = answerTheChallenge({ + const result = await answerTheChallenge({ challenge, allAnswers: previousAnswers, allKnowledgeElements: previousKE, @@ -130,12 +134,12 @@ describe('#answerTheChallenge', () => { describe('when userResult is first OK then all KO', () => { const userResult = 'firstOKthenKO'; - it('should return the list of answers with the first one validated and the rest invalidated', () => { + it('should return the list of answers with the first one validated and the rest invalidated', async () => { // when const allResults = []; previousAnswers = []; for (let i = 0; i < 10; i++) { - const result = answerTheChallenge({ + const result = await answerTheChallenge({ challenge, allAnswers: previousAnswers, allKnowledgeElements: previousKE, @@ -157,12 +161,12 @@ describe('#answerTheChallenge', () => { describe('when userResult is first K0 then all OK', () => { const userResult = 'firstKOthenOK'; - it('should return the list of answers with the first one invalidated and the rest validated', () => { + it('should return the list of answers with the first one invalidated and the rest validated', async () => { // when const allResults = []; let previousAnswers = []; for (let i = 0; i < 10; i++) { - const result = answerTheChallenge({ + const result = await answerTheChallenge({ challenge, allAnswers: previousAnswers, allKnowledgeElements: previousKE, @@ -201,14 +205,16 @@ describe('#answerTheChallenge', () => { }, { userKE: null, answerStatus: 'ko' }, ].forEach((testCase) => { - it(`should return the list of answers with ${testCase.answerStatus} answers for ${ + it(`should return the list of answers with ${ + testCase.answerStatus + } answers for ${ testCase.userKE ? testCase.userKE.status : 'empty' - } KE`, () => { + } KE`, async () => { // given challenge.skill = { id: 'recPgkHUdzk0HPGt1' }; // when - const result = answerTheChallenge({ + const result = await answerTheChallenge({ challenge, allAnswers: previousAnswers, allKnowledgeElements: [], @@ -244,13 +250,22 @@ describe('#_getReferentiel', () => { findSkills: () => {}, }; - const expectedSkills = [{ id: 'recSkill1' }, { id: 'recSkill2' }, { id: 'recSkill3' }]; - const expectedChallenges = [{ id: 'recChallenge1' }, { id: 'recChallenge2' }, { id: 'recChallenge3' }]; - - sinon.stub(DataFetcher, 'fetchForCampaigns').returns({ - targetSkills: expectedSkills, - challenges: expectedChallenges, - }); + const expectedSkills = [ + { id: 'recSkill1' }, + { id: 'recSkill2' }, + { id: 'recSkill3' }, + ]; + const expectedChallenges = [ + { id: 'recChallenge1' }, + { id: 'recChallenge2' }, + { id: 'recChallenge3' }, + ]; + const DataFetcher = { + fetchForCampaigns: sinon.stub().returns({ + targetSkills: expectedSkills, + challenges: expectedChallenges, + }), + }; // when const result = await _getReferentiel({ @@ -262,6 +277,7 @@ describe('#_getReferentiel', () => { skillRepository, improvementService, campaignRepository, + dependencies: { dataFetcher: DataFetcher }, }); // then @@ -280,13 +296,23 @@ describe('#_getReferentiel', () => { const improvementService = {}; const targetProfileRepository = {}; - const expectedSkills = [{ id: 'recSkill1' }, { id: 'recSkill2' }, { id: 'recSkill3' }]; - const expectedChallenges = [{ id: 'recChallenge1' }, { id: 'recChallenge2' }, { id: 'recChallenge3' }]; - - sinon.stub(DataFetcher, 'fetchForCompetenceEvaluations').returns({ - targetSkills: expectedSkills, - challenges: expectedChallenges, - }); + const expectedSkills = [ + { id: 'recSkill1' }, + { id: 'recSkill2' }, + { id: 'recSkill3' }, + ]; + const expectedChallenges = [ + { id: 'recChallenge1' }, + { id: 'recChallenge2' }, + { id: 'recChallenge3' }, + ]; + + const DataFetcher = { + fetchForCompetenceEvaluations: sinon.stub().returns({ + targetSkills: expectedSkills, + challenges: expectedChallenges, + }), + }; // when const result = await _getReferentiel({ @@ -298,6 +324,7 @@ describe('#_getReferentiel', () => { skillRepository, improvementService, targetProfileRepository, + dependencies: { dataFetcher: DataFetcher }, }); // then diff --git a/ts b/ts new file mode 100644 index 00000000000..406f9fc6124 --- /dev/null +++ b/ts @@ -0,0 +1,38 @@ +usage: git tag [-a | -s | -u ] [-f] [-m | -F ] + [] + or: git tag -d ... + or: git tag -l [-n[]] [--contains ] [--no-contains ] [--points-at ] + [--format=] [--merged ] [--no-merged ] [...] + or: git tag -v [--format=] ... + + -l, --list list tag names + -n[] print lines of each tag message + -d, --delete delete tags + -v, --verify verify tags + +Tag creation options + -a, --annotate annotated tag, needs a message + -m, --message + tag message + -F, --file read message from file + -e, --edit force edit of tag message + -s, --sign annotated and GPG-signed tag + --cleanup how to strip spaces and #comments from message + -u, --local-user + use another key to sign the tag + -f, --force replace the tag if exists + --create-reflog create a reflog + +Tag listing options + --column[=