diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json index d4c28a1..8201265 100644 --- a/npm-shrinkwrap.json +++ b/npm-shrinkwrap.json @@ -13,7 +13,7 @@ "axios": "^1.13.2", "bcryptjs": "^3.0.3", "cors": "^2.8.5", - "express": "^5.1.0", + "express": "^5.2.1", "express-basic-auth": "^1.2.1", "express-rate-limit": "^8.2.1", "express-session": "^1.18.2", @@ -22,13 +22,13 @@ "graphql-http": "^1.22.4", "graphql-tag": "^2.12.6", "helmet": "^8.1.0", - "jsonwebtoken": "^9.0.2", + "jsonwebtoken": "^9.0.3", "moment": "^2.30.1", "mongodb": "^7.0.0", "mongoose": "^9.0.0", "passport": "^0.7.0", "pino": "^10.1.0", - "pino-pretty": "^13.1.2", + "pino-pretty": "^13.1.3", "swagger-ui-express": "^5.0.1", "switcher-client": "^4.5.0", "validator": "^13.15.23" @@ -668,9 +668,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -680,7 +680,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, @@ -2324,9 +2324,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.31", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.31.tgz", - "integrity": "sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==", + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.2.tgz", + "integrity": "sha512-PxSsosKQjI38iXkmb3d0Y32efqyA0uW4s41u4IVBsLlWLhCiYNpH/AfNOVWRqCQBlD8TFJTz6OUWNd4DFJCnmw==", "dev": true, "license": "Apache-2.0", "bin": { @@ -2368,23 +2368,27 @@ } }, "node_modules/body-parser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.0.tgz", - "integrity": "sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-2.2.1.tgz", + "integrity": "sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==", "license": "MIT", "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", - "debug": "^4.4.0", + "debug": "^4.4.3", "http-errors": "^2.0.0", - "iconv-lite": "^0.6.3", + "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.0", - "raw-body": "^3.0.0", - "type-is": "^2.0.0" + "raw-body": "^3.0.1", + "type-is": "^2.0.1" }, "engines": { "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/brace-expansion": { @@ -2412,9 +2416,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", - "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -2432,11 +2436,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.25", - "caniuse-lite": "^1.0.30001754", - "electron-to-chromium": "^1.5.249", + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", - "update-browserslist-db": "^1.1.4" + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -2536,9 +2540,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001756", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001756.tgz", - "integrity": "sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==", + "version": "1.0.30001759", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001759.tgz", + "integrity": "sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==", "dev": true, "funding": [ { @@ -3031,9 +3035,9 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.259", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.259.tgz", - "integrity": "sha512-I+oLXgpEJzD6Cwuwt1gYjxsDmu/S/Kd41mmLA3O+/uH2pFRO/DvOjUyGozL8j3KeLV6WyZ7ssPwELMsXCcsJAQ==", + "version": "1.5.265", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.265.tgz", + "integrity": "sha512-B7IkLR1/AE+9jR2LtVF/1/6PFhY5TlnEHnlrKmGk7PvkJibg5jr+mLXLLzq3QYl6PA1T/vLDthQPqIPAlS/PPA==", "dev": true, "license": "ISC" }, @@ -3414,18 +3418,19 @@ } }, "node_modules/express": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/express/-/express-5.1.0.tgz", - "integrity": "sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/express/-/express-5.2.1.tgz", + "integrity": "sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==", "license": "MIT", "dependencies": { "accepts": "^2.0.0", - "body-parser": "^2.2.0", + "body-parser": "^2.2.1", "content-disposition": "^1.0.0", "content-type": "^1.0.5", "cookie": "^0.7.1", "cookie-signature": "^1.2.1", "debug": "^4.4.0", + "depd": "^2.0.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", @@ -3556,9 +3561,9 @@ } }, "node_modules/fast-copy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", - "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-4.0.0.tgz", + "integrity": "sha512-/oA0gx1xyXE9R2YlV4FXwZJXngFdm9Du0zN8FhY38jnLkhp1u35h6bCyKgRhlsA6C9I+1vfXE4KISdt7xc6M9w==", "license": "MIT" }, "node_modules/fast-deep-equal": { @@ -3625,9 +3630,9 @@ } }, "node_modules/finalhandler": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.0.tgz", - "integrity": "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz", + "integrity": "sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==", "license": "MIT", "dependencies": { "debug": "^4.4.0", @@ -3638,7 +3643,11 @@ "statuses": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">= 18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/find-up": { @@ -4140,15 +4149,19 @@ } }, "node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/ignore": { @@ -5182,12 +5195,12 @@ } }, "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", + "integrity": "sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g==", "license": "MIT", "dependencies": { - "jws": "^3.2.2", + "jws": "^4.0.1", "lodash.includes": "^4.3.0", "lodash.isboolean": "^3.0.3", "lodash.isinteger": "^4.0.4", @@ -5216,9 +5229,9 @@ } }, "node_modules/jwa": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.2.tgz", - "integrity": "sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.1.tgz", + "integrity": "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg==", "license": "MIT", "dependencies": { "buffer-equal-constant-time": "^1.0.1", @@ -5227,12 +5240,12 @@ } }, "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.1.tgz", + "integrity": "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==", "license": "MIT", "dependencies": { - "jwa": "^1.4.1", + "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, @@ -6159,20 +6172,20 @@ } }, "node_modules/pino-pretty": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.2.tgz", - "integrity": "sha512-3cN0tCakkT4f3zo9RXDIhy6GTvtYD6bK4CRBLN9j3E/ePqN1tugAXD5rGVfoChW6s0hiek+eyYlLNqc/BG7vBQ==", + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-13.1.3.tgz", + "integrity": "sha512-ttXRkkOz6WWC95KeY9+xxWL6AtImwbyMHrL1mSwqwW9u+vLp/WIElvHvCSDg0xO/Dzrggz1zv3rN5ovTRVowKg==", "license": "MIT", "dependencies": { "colorette": "^2.0.7", "dateformat": "^4.6.3", - "fast-copy": "^3.0.2", + "fast-copy": "^4.0.0", "fast-safe-stringify": "^2.1.1", "help-me": "^5.0.0", "joycon": "^3.1.1", "minimist": "^1.2.6", "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^2.0.0", + "pino-abstract-transport": "^3.0.0", "pump": "^3.0.0", "secure-json-parse": "^4.0.0", "sonic-boom": "^4.0.1", @@ -6182,6 +6195,15 @@ "pino-pretty": "bin.js" } }, + "node_modules/pino-pretty/node_modules/pino-abstract-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz", + "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==", + "license": "MIT", + "dependencies": { + "split2": "^4.0.0" + } + }, "node_modules/pino-pretty/node_modules/strip-json-comments": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-5.0.3.tgz", @@ -6449,22 +6471,6 @@ "node": ">= 0.10" } }, - "node_modules/raw-body/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, "node_modules/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -7134,9 +7140,9 @@ } }, "node_modules/swagger-ui-dist": { - "version": "5.30.2", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.30.2.tgz", - "integrity": "sha512-HWCg1DTNE/Nmapt+0m2EPXFwNKNeKK4PwMjkwveN/zn1cV2Kxi9SURd+m0SpdcSgWEK/O64sf8bzXdtUhigtHA==", + "version": "5.30.3", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.30.3.tgz", + "integrity": "sha512-giQl7/ToPxCqnUAx2wpnSnDNGZtGzw1LyUw6ZitIpTmdrvpxKFY/94v1hihm0zYNpgp1/VY0jTDk//R0BBgnRQ==", "license": "Apache-2.0", "dependencies": { "@scarf/scarf": "=1.4.0" @@ -7405,9 +7411,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.2.tgz", + "integrity": "sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==", "dev": true, "funding": [ { diff --git a/package.json b/package.json index f6fb3f5..06a7243 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "axios": "^1.13.2", "bcryptjs": "^3.0.3", "cors": "^2.8.5", - "express": "^5.1.0", + "express": "^5.2.1", "express-basic-auth": "^1.2.1", "express-rate-limit": "^8.2.1", "express-session": "^1.18.2", @@ -49,14 +49,14 @@ "graphql-http": "^1.22.4", "graphql-tag": "^2.12.6", "helmet": "^8.1.0", - "jsonwebtoken": "^9.0.2", + "jsonwebtoken": "^9.0.3", "moment": "^2.30.1", "mongodb": "^7.0.0", "mongoose": "^9.0.0", "passport": "^0.7.0", "@node-saml/passport-saml": "^5.1.0", "pino": "^10.1.0", - "pino-pretty": "^13.1.2", + "pino-pretty": "^13.1.3", "swagger-ui-express": "^5.0.1", "switcher-client": "^4.5.0", "validator": "^13.15.23" diff --git a/src/helpers/permission.js b/src/helpers/permission.js index 0dbbf45..b147ce1 100644 --- a/src/helpers/permission.js +++ b/src/helpers/permission.js @@ -1,3 +1,4 @@ +import { EnvType } from '../models/environment.js'; import { ActionTypes, RouterTypes } from '../models/permission.js'; import { getPermission, getPermissions } from '../services/permission.js'; @@ -80,9 +81,9 @@ function verifyIdentifiers(permission, element) { return undefined; } -function verifyEnvironment(permission, environment) { +function verifyEnvironment(permission, environment = EnvType.DEFAULT) { if (permission.environments?.length) { - return environment && permission.environments.includes(environment); + return permission.environments.includes(environment); } return true; diff --git a/tests/config-strategy.test.js b/tests/config-strategy.test.js index c96cc6a..cfc3279 100644 --- a/tests/config-strategy.test.js +++ b/tests/config-strategy.test.js @@ -169,7 +169,7 @@ describe('Testing strategy creation #2', () => { // VALUE let requirements = strategyRequirements(StrategiesType.VALUE); - let { max, min } = requirements.operationRequirements.filter(element => element.operation === OperationsType.EQUAL)[0]; + let { max, min } = requirements.operationRequirements.find(element => element.operation === OperationsType.EQUAL); let response = await request(app) .post('/configstrategy/create') @@ -186,7 +186,7 @@ describe('Testing strategy creation #2', () => { expect(response.body.error) .toBe(`Unable to complete the operation. The number of values for the operation '${OperationsType.EQUAL}', are min: ${min} and max: ${max} values`); - ({ max, min } = requirements.operationRequirements.filter(element => element.operation === OperationsType.EXIST)[0]); + ({ max, min } = requirements.operationRequirements.find(element => element.operation === OperationsType.EXIST)); response = await request(app) .post('/configstrategy/create') .set('Authorization', `Bearer ${adminMasterAccountToken}`) @@ -204,7 +204,7 @@ describe('Testing strategy creation #2', () => { // NETWORK requirements = strategyRequirements(StrategiesType.NETWORK); - ({ max, min } = requirements.operationRequirements.filter(element => element.operation === OperationsType.EXIST)[0]); + ({ max, min } = requirements.operationRequirements.find(element => element.operation === OperationsType.EXIST)); response = await request(app) .post('/configstrategy/create') @@ -223,7 +223,7 @@ describe('Testing strategy creation #2', () => { // TIME requirements = strategyRequirements(StrategiesType.TIME); - ({ max, min } = requirements.operationRequirements.filter(element => element.operation === OperationsType.GREATER)[0]); + ({ max, min } = requirements.operationRequirements.find(element => element.operation === OperationsType.GREATER)); response = await request(app) .post('/configstrategy/create') @@ -240,7 +240,7 @@ describe('Testing strategy creation #2', () => { expect(response.body.error) .toBe(`Unable to complete the operation. The number of values for the operation '${OperationsType.GREATER}', are min: ${min} and max: ${max} values`); - ({ max, min } = requirements.operationRequirements.filter(element => element.operation === OperationsType.LOWER)[0]); + ({ max, min } = requirements.operationRequirements.find(element => element.operation === OperationsType.LOWER)); response = await request(app) .post('/configstrategy/create') @@ -257,7 +257,7 @@ describe('Testing strategy creation #2', () => { expect(response.body.error) .toBe(`Unable to complete the operation. The number of values for the operation '${OperationsType.LOWER}', are min: ${min} and max: ${max} values`); - ({ max, min } = requirements.operationRequirements.filter(element => element.operation === OperationsType.BETWEEN)[0]); + ({ max, min } = requirements.operationRequirements.find(element => element.operation === OperationsType.BETWEEN)); response = await request(app) .post('/configstrategy/create') @@ -276,7 +276,7 @@ describe('Testing strategy creation #2', () => { // DATE requirements = strategyRequirements(StrategiesType.DATE); - ({ max, min } = requirements.operationRequirements.filter(element => element.operation === OperationsType.GREATER)[0]); + ({ max, min } = requirements.operationRequirements.find(element => element.operation === OperationsType.GREATER)); response = await request(app) .post('/configstrategy/create') @@ -293,7 +293,7 @@ describe('Testing strategy creation #2', () => { expect(response.body.error) .toBe(`Unable to complete the operation. The number of values for the operation '${OperationsType.GREATER}', are min: ${min} and max: ${max} values`); - ({ max, min } = requirements.operationRequirements.filter(element => element.operation === OperationsType.LOWER)[0]); + ({ max, min } = requirements.operationRequirements.find(element => element.operation === OperationsType.LOWER)); response = await request(app) .post('/configstrategy/create') @@ -310,7 +310,7 @@ describe('Testing strategy creation #2', () => { expect(response.body.error) .toBe(`Unable to complete the operation. The number of values for the operation '${OperationsType.LOWER}', are min: ${min} and max: ${max} values`); - ({ max, min } = requirements.operationRequirements.filter(element => element.operation === OperationsType.BETWEEN)[0]); + ({ max, min } = requirements.operationRequirements.find(element => element.operation === OperationsType.BETWEEN)); response = await request(app) .post('/configstrategy/create') diff --git a/tests/environment.test.js b/tests/environment.test.js index a4c4148..8cf418a 100644 --- a/tests/environment.test.js +++ b/tests/environment.test.js @@ -82,8 +82,8 @@ describe('Reading tests', () => { .set('Authorization', `Bearer ${adminMasterAccountToken}`) .send().expect(200); - const defaultEnv = response.body.filter(env => env.name === EnvType.DEFAULT); - expect(defaultEnv[0].name).toBe(EnvType.DEFAULT); + const defaultEnv = response.body.find(env => env.name === EnvType.DEFAULT); + expect(defaultEnv.name).toBe(EnvType.DEFAULT); }); test('ENV_SUITE - Should read one single Environment', async () => { diff --git a/tests/fixtures/db_team_permission.js b/tests/fixtures/db_team_permission.js index 97645ac..38aa5df 100644 --- a/tests/fixtures/db_team_permission.js +++ b/tests/fixtures/db_team_permission.js @@ -75,6 +75,15 @@ export const permission11 = { environments: ['dev'] }; +export const permission12Id = new mongoose.Types.ObjectId(); +export const permission12 = { + _id: permission12Id, + action: ActionTypes.READ, + active: true, + router: RouterTypes.CONFIG, + environments: [EnvType.DEFAULT] +}; + export const permission2Id = new mongoose.Types.ObjectId(); export const permission2 = { _id: permission2Id, @@ -127,7 +136,7 @@ export const team1 = { domain: domainId, name: 'Team 1', active: true, - permissions: [permission1Id, permission11Id, permission2Id, permission3Id] + permissions: [permission1Id, permission11Id, permission12Id, permission2Id, permission3Id] }; export const team2Id = new mongoose.Types.ObjectId(); @@ -198,6 +207,7 @@ export const setupDatabase = async () => { await new Config(configDocument).save(); await new Permission(permission1).save(); await new Permission(permission11).save(); + await new Permission(permission12).save(); await new Permission(permission2).save(); await new Permission(permission21).save(); await new Permission(permission22).save(); diff --git a/tests/gitops-account.test.js b/tests/gitops-account.test.js index a8b624d..b9cb2eb 100644 --- a/tests/gitops-account.test.js +++ b/tests/gitops-account.test.js @@ -133,7 +133,7 @@ describe('GitOps Account - Subscribe', () => { Client.assume('GITOPS_SUBSCRIPTION').true(); // given - const expectedResponse = JSON.parse(JSON.stringify(VALID_SUBSCRIPTION_REQUEST)); + const expectedResponse = structuredClone(VALID_SUBSCRIPTION_REQUEST); expectedResponse.token = '...123'; const postStub = sinon.stub(axios, 'post').resolves({ @@ -160,10 +160,10 @@ describe('GitOps Account - Subscribe', () => { test('GITOPS_ACCOUNT_SUITE - Should subscribe account - with blank path', async () => { // given - const requestPayload = JSON.parse(JSON.stringify(VALID_SUBSCRIPTION_REQUEST)); + const requestPayload = structuredClone(VALID_SUBSCRIPTION_REQUEST); requestPayload.path = ''; - const expectedResponse = JSON.parse(JSON.stringify(requestPayload)); + const expectedResponse = structuredClone(requestPayload); expectedResponse.token = '...123'; const postStub = sinon.stub(axios, 'post').resolves({ @@ -227,7 +227,7 @@ describe('GitOps Account - Subscribe', () => { }); test('GITOPS_ACCOUNT_SUITE - Should return error - missing domain.id', async () => { - const payload = JSON.parse(JSON.stringify(VALID_SUBSCRIPTION_REQUEST)); + const payload = structuredClone(VALID_SUBSCRIPTION_REQUEST); delete payload.domain.id; const req = await request(app) @@ -240,7 +240,7 @@ describe('GitOps Account - Subscribe', () => { }); test('GITOPS_ACCOUNT_SUITE - Should return error - respository is not a valid URL', async () => { - const payload = JSON.parse(JSON.stringify(VALID_SUBSCRIPTION_REQUEST)); + const payload = structuredClone(VALID_SUBSCRIPTION_REQUEST); payload.repository = "invalid-url"; const req = await request(app) @@ -253,7 +253,7 @@ describe('GitOps Account - Subscribe', () => { }); test('GITOPS_ACCOUNT_SUITE - Should return error - window cannot be lower than 30s', async () => { - const payload = JSON.parse(JSON.stringify(VALID_SUBSCRIPTION_REQUEST)); + const payload = structuredClone(VALID_SUBSCRIPTION_REQUEST); payload.settings.window = "1s"; const req = await request(app) @@ -266,7 +266,7 @@ describe('GitOps Account - Subscribe', () => { }); test('GITOPS_ACCOUNT_SUITE - Should return error - window cannot be lower than 1(m/h)', async () => { - const payload = JSON.parse(JSON.stringify(VALID_SUBSCRIPTION_REQUEST)); + const payload = structuredClone(VALID_SUBSCRIPTION_REQUEST); payload.settings.window = "0m"; const req = await request(app) @@ -279,7 +279,7 @@ describe('GitOps Account - Subscribe', () => { }); test('GITOPS_ACCOUNT_SUITE - Should return error - window cannot use different units than [s,m,h]', async () => { - const payload = JSON.parse(JSON.stringify(VALID_SUBSCRIPTION_REQUEST)); + const payload = structuredClone(VALID_SUBSCRIPTION_REQUEST); payload.settings.window = '1d'; const req = await request(app) @@ -313,7 +313,7 @@ describe('GitOps Account - Update', () => { test('GITOPS_ACCOUNT_SUITE - Should update account', async () => { // given - const expectedResponse = JSON.parse(JSON.stringify(VALID_UPDATE_REQUEST)); + const expectedResponse = structuredClone(VALID_UPDATE_REQUEST); expectedResponse.token = '...123'; const postStub = sinon.stub(axios, 'put').resolves({ @@ -376,7 +376,7 @@ describe('GitOps Account - Update', () => { }); test('GITOPS_ACCOUNT_SUITE - Should return error - missing domain.id', async () => { - const payload = JSON.parse(JSON.stringify(VALID_UPDATE_REQUEST)); + const payload = structuredClone(VALID_UPDATE_REQUEST); delete payload.domain.id; const req = await request(app) @@ -419,7 +419,7 @@ describe('GitOps Account - Update', () => { }); test('GITOPS_ACCOUNT_SUITE - Should return error - path contains invalid characters', async () => { - const payload = JSON.parse(JSON.stringify(VALID_UPDATE_REQUEST)); + const payload = structuredClone(VALID_UPDATE_REQUEST); payload.path = 'path/to/file#'; const req = await request(app) @@ -511,7 +511,7 @@ describe('GitOps Account - Update All Token', () => { }); test('GITOPS_ACCOUNT_SUITE - Should return error - missing domain.id', async () => { - const payload = JSON.parse(JSON.stringify(VALID_TOKEN_UPDATE_REQUEST)); + const payload = structuredClone(VALID_TOKEN_UPDATE_REQUEST); delete payload.domain.id; const req = await request(app) @@ -536,7 +536,7 @@ describe('GitOps Account - Force sync', () => { test('GITOPS_ACCOUNT_SUITE - Should force sync account', async () => { // given - const expectedResponse = JSON.parse(JSON.stringify(VALID_FORCE_SYNC_REQUEST)); + const expectedResponse = structuredClone(VALID_FORCE_SYNC_REQUEST); expectedResponse.token = '...123'; const postStub = sinon.stub(axios, 'put').resolves({ @@ -599,7 +599,7 @@ describe('GitOps Account - Force sync', () => { }); test('GITOPS_ACCOUNT_SUITE - Should return error - missing domain.id', async () => { - const payload = JSON.parse(JSON.stringify(VALID_FORCE_SYNC_REQUEST)); + const payload = structuredClone(VALID_FORCE_SYNC_REQUEST); delete payload.domain.id; const req = await request(app) @@ -682,7 +682,7 @@ describe('GitOps Account - Unsubscribe', () => { }); test('GITOPS_ACCOUNT_SUITE - Should return error - missing domain.id', async () => { - const payload = JSON.parse(JSON.stringify(VALID_DELETE_REQUEST)); + const payload = structuredClone(VALID_DELETE_REQUEST); delete payload.domain.id; const req = await request(app) diff --git a/tests/permission.test.js b/tests/permission.test.js index 4349da7..8ed1cec 100644 --- a/tests/permission.test.js +++ b/tests/permission.test.js @@ -124,8 +124,8 @@ describe('Reading tests', () => { .set('Authorization', `Bearer ${adminMasterAccountToken}`) .send().expect(200); - const foundPermission = response.body.filter(permission => permission.action === ActionTypes.DELETE); - expect(foundPermission[0].action).toBe(ActionTypes.DELETE); + const foundPermission = response.body.find(permission => permission.action === ActionTypes.DELETE); + expect(foundPermission.action).toBe(ActionTypes.DELETE); }); test('PERMISSION_SUITE - Should NOT read all Permissions from a Domain - Invalid team Id', async () => { diff --git a/tests/unit-test/verify-ownership.test.js b/tests/unit-test/verify-ownership.test.js index 9a68290..eea39c2 100644 --- a/tests/unit-test/verify-ownership.test.js +++ b/tests/unit-test/verify-ownership.test.js @@ -17,6 +17,7 @@ import { team1Id, permission1Id, permission11Id, + permission12Id, permission2Id, permission21Id, permission22Id, @@ -28,6 +29,7 @@ import { PermissionError } from '../../src/exceptions'; const disableAllPermissions = async () => { await changePermissionStatus(permission1Id, false); await changePermissionStatus(permission11Id, false); + await changePermissionStatus(permission12Id, false); await changePermissionStatus(permission2Id, false); await changePermissionStatus(permission21Id, false); await changePermissionStatus(permission22Id, false); @@ -119,6 +121,28 @@ describe('Success tests', () => { } }); + test('UNIT_TEAM_PERMISSION_SUITE - Should allow access - Member has permission to environment (default)', async () => { + //given + //enabled Read - Switcher (read only in default environment) + await changePermissionStatus(permission12Id, true); + + //test + try { + const element = await verifyOwnership( + adminAccount, + configDocument, + domainDocument, + ActionTypes.READ, + RouterTypes.CONFIG, + false); + // default environment omitted + + expect(element).toMatchObject(configDocument); + } catch (e) { + expect(e).toBeNull(); + } + }); + test('UNIT_TEAM_PERMISSION_SUITE - Should allow access - Member has permission to environment - Cascade', async () => { //given //enabled Update - Switcher (update only in dev environment)