From fbcf8e7552f617d680fc4f1802db57bd16f59d7a Mon Sep 17 00:00:00 2001 From: rsaladocid Date: Wed, 16 Oct 2019 19:09:51 +0200 Subject: [PATCH 01/14] Reorganize apps folder --- src/apps/mooc/infrastructure/routes/index.ts | 7 ------- src/apps/{mooc => mooc_backend}/app.ts | 2 +- src/apps/{mooc => mooc_backend}/config/config.ts | 0 src/apps/{mooc => mooc_backend}/config/default.json | 0 .../config/dependency-injection/application.yaml | 5 ++--- .../config/dependency-injection/application_dev.yaml | 0 .../dependency-injection/application_production.yaml | 0 .../config/dependency-injection/application_staging.yaml | 0 .../config/dependency-injection/application_test.yaml | 0 .../config/dependency-injection/index.ts | 0 src/apps/{mooc => mooc_backend}/config/staging.json | 0 src/apps/{mooc => mooc_backend}/config/test.json | 0 .../controllers/CreateCourseController.ts | 2 +- .../routes/create-course.route.ts | 3 +-- src/apps/{mooc => mooc_backend}/server.ts | 0 .../{mooc => mooc_backend}/features/create-course.test.ts | 2 +- 16 files changed, 6 insertions(+), 15 deletions(-) delete mode 100644 src/apps/mooc/infrastructure/routes/index.ts rename src/apps/{mooc => mooc_backend}/app.ts (89%) rename src/apps/{mooc => mooc_backend}/config/config.ts (100%) rename src/apps/{mooc => mooc_backend}/config/default.json (100%) rename src/apps/{mooc => mooc_backend}/config/dependency-injection/application.yaml (59%) rename src/apps/{mooc => mooc_backend}/config/dependency-injection/application_dev.yaml (100%) rename src/apps/{mooc => mooc_backend}/config/dependency-injection/application_production.yaml (100%) rename src/apps/{mooc => mooc_backend}/config/dependency-injection/application_staging.yaml (100%) rename src/apps/{mooc => mooc_backend}/config/dependency-injection/application_test.yaml (100%) rename src/apps/{mooc => mooc_backend}/config/dependency-injection/index.ts (100%) rename src/apps/{mooc => mooc_backend}/config/staging.json (100%) rename src/apps/{mooc => mooc_backend}/config/test.json (100%) rename src/apps/{mooc/infrastructure => mooc_backend}/controllers/CreateCourseController.ts (82%) rename src/apps/{mooc/infrastructure => mooc_backend}/routes/create-course.route.ts (85%) rename src/apps/{mooc => mooc_backend}/server.ts (100%) rename tests/apps/{mooc => mooc_backend}/features/create-course.test.ts (80%) diff --git a/src/apps/mooc/infrastructure/routes/index.ts b/src/apps/mooc/infrastructure/routes/index.ts deleted file mode 100644 index dbfeca4..0000000 --- a/src/apps/mooc/infrastructure/routes/index.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {Express} from 'express'; -import { createUserRoute } from './create-course.route'; - -export function registerRoutes(app: Express) { - - createUserRoute(app); -} diff --git a/src/apps/mooc/app.ts b/src/apps/mooc_backend/app.ts similarity index 89% rename from src/apps/mooc/app.ts rename to src/apps/mooc_backend/app.ts index 90ce8b2..d575de2 100644 --- a/src/apps/mooc/app.ts +++ b/src/apps/mooc_backend/app.ts @@ -2,7 +2,7 @@ import bodyParser from 'body-parser'; import express from 'express'; import helmet from 'helmet'; import compress from 'compression'; -import { registerRoutes } from './infrastructure/routes'; +import { registerRoutes } from './routes'; const app: express.Express = express(); diff --git a/src/apps/mooc/config/config.ts b/src/apps/mooc_backend/config/config.ts similarity index 100% rename from src/apps/mooc/config/config.ts rename to src/apps/mooc_backend/config/config.ts diff --git a/src/apps/mooc/config/default.json b/src/apps/mooc_backend/config/default.json similarity index 100% rename from src/apps/mooc/config/default.json rename to src/apps/mooc_backend/config/default.json diff --git a/src/apps/mooc/config/dependency-injection/application.yaml b/src/apps/mooc_backend/config/dependency-injection/application.yaml similarity index 59% rename from src/apps/mooc/config/dependency-injection/application.yaml rename to src/apps/mooc_backend/config/dependency-injection/application.yaml index ac0cb73..791451c 100644 --- a/src/apps/mooc/config/dependency-injection/application.yaml +++ b/src/apps/mooc_backend/config/dependency-injection/application.yaml @@ -1,9 +1,8 @@ services: - Mooc.courses.CreateCourse: class: ../../../../Mooc/Courses/application/CreateCourse arguments: [] Apps.mooc.controllers.CreateCourseController: - class: ../../infrastructure/controllers/CreateCourseController - arguments: ['@Mooc.courses.CreateCourse'] + class: ../../controllers/CreateCourseController + arguments: ["@Mooc.courses.CreateCourse"] diff --git a/src/apps/mooc/config/dependency-injection/application_dev.yaml b/src/apps/mooc_backend/config/dependency-injection/application_dev.yaml similarity index 100% rename from src/apps/mooc/config/dependency-injection/application_dev.yaml rename to src/apps/mooc_backend/config/dependency-injection/application_dev.yaml diff --git a/src/apps/mooc/config/dependency-injection/application_production.yaml b/src/apps/mooc_backend/config/dependency-injection/application_production.yaml similarity index 100% rename from src/apps/mooc/config/dependency-injection/application_production.yaml rename to src/apps/mooc_backend/config/dependency-injection/application_production.yaml diff --git a/src/apps/mooc/config/dependency-injection/application_staging.yaml b/src/apps/mooc_backend/config/dependency-injection/application_staging.yaml similarity index 100% rename from src/apps/mooc/config/dependency-injection/application_staging.yaml rename to src/apps/mooc_backend/config/dependency-injection/application_staging.yaml diff --git a/src/apps/mooc/config/dependency-injection/application_test.yaml b/src/apps/mooc_backend/config/dependency-injection/application_test.yaml similarity index 100% rename from src/apps/mooc/config/dependency-injection/application_test.yaml rename to src/apps/mooc_backend/config/dependency-injection/application_test.yaml diff --git a/src/apps/mooc/config/dependency-injection/index.ts b/src/apps/mooc_backend/config/dependency-injection/index.ts similarity index 100% rename from src/apps/mooc/config/dependency-injection/index.ts rename to src/apps/mooc_backend/config/dependency-injection/index.ts diff --git a/src/apps/mooc/config/staging.json b/src/apps/mooc_backend/config/staging.json similarity index 100% rename from src/apps/mooc/config/staging.json rename to src/apps/mooc_backend/config/staging.json diff --git a/src/apps/mooc/config/test.json b/src/apps/mooc_backend/config/test.json similarity index 100% rename from src/apps/mooc/config/test.json rename to src/apps/mooc_backend/config/test.json diff --git a/src/apps/mooc/infrastructure/controllers/CreateCourseController.ts b/src/apps/mooc_backend/controllers/CreateCourseController.ts similarity index 82% rename from src/apps/mooc/infrastructure/controllers/CreateCourseController.ts rename to src/apps/mooc_backend/controllers/CreateCourseController.ts index cba013d..0657a44 100644 --- a/src/apps/mooc/infrastructure/controllers/CreateCourseController.ts +++ b/src/apps/mooc_backend/controllers/CreateCourseController.ts @@ -1,5 +1,5 @@ import { Request, Response } from 'express'; -import CreateCourse from '../../../../Mooc/Courses/application/CreateCourse'; +import CreateCourse from '../../../Mooc/Courses/application/CreateCourse'; import httpStatus from 'http-status'; export default class CreateCourseController { diff --git a/src/apps/mooc/infrastructure/routes/create-course.route.ts b/src/apps/mooc_backend/routes/create-course.route.ts similarity index 85% rename from src/apps/mooc/infrastructure/routes/create-course.route.ts rename to src/apps/mooc_backend/routes/create-course.route.ts index 733ccf3..d64c6ac 100644 --- a/src/apps/mooc/infrastructure/routes/create-course.route.ts +++ b/src/apps/mooc_backend/routes/create-course.route.ts @@ -1,9 +1,8 @@ import { Express } from 'express'; -import container from '../../config/dependency-injection'; +import container from '../config/dependency-injection'; import CreateCourseController from '../controllers/CreateCourseController'; export const createUserRoute = (app: Express) => { - const controller: CreateCourseController = container.get('Apps.mooc.controllers.CreateCourseController'); app.post('/courses', (req, res) => controller.create(req, res)); }; diff --git a/src/apps/mooc/server.ts b/src/apps/mooc_backend/server.ts similarity index 100% rename from src/apps/mooc/server.ts rename to src/apps/mooc_backend/server.ts diff --git a/tests/apps/mooc/features/create-course.test.ts b/tests/apps/mooc_backend/features/create-course.test.ts similarity index 80% rename from tests/apps/mooc/features/create-course.test.ts rename to tests/apps/mooc_backend/features/create-course.test.ts index 3ddd973..ae070f9 100644 --- a/tests/apps/mooc/features/create-course.test.ts +++ b/tests/apps/mooc_backend/features/create-course.test.ts @@ -1,5 +1,5 @@ import request from 'supertest'; -import app from '../../../../src/apps/mooc/app'; +import app from '../../../../src/apps/mooc_backend/app'; describe('Create Course Feature', () => { it('should respond with a 201 Created code', async () => { From 6a0a9fc9c80834e333a2be674a7368bf85e51ec5 Mon Sep 17 00:00:00 2001 From: rsaladocid Date: Wed, 16 Oct 2019 19:19:16 +0200 Subject: [PATCH 02/14] Install Cucumber --- cucumber.js | 9 + package-lock.json | 491 +++++++++++++++++++++++++++++++++++++++++++--- package.json | 3 + 3 files changed, 473 insertions(+), 30 deletions(-) create mode 100644 cucumber.js diff --git a/cucumber.js b/cucumber.js new file mode 100644 index 0000000..8971aa4 --- /dev/null +++ b/cucumber.js @@ -0,0 +1,9 @@ +let common = [ + 'tests/**/features/*.feature', // Specify our feature files + '--require-module ts-node/register', // Load TypeScript module + '--require tests/**/features/*.steps.ts' // Load step definitions +].join(' '); + +module.exports = { + default: common +}; diff --git a/package-lock.json b/package-lock.json index e489159..8e0f337 100644 --- a/package-lock.json +++ b/package-lock.json @@ -153,6 +153,16 @@ "regenerator-runtime": "^0.13.2" } }, + "@babel/runtime-corejs2": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.6.3.tgz", + "integrity": "sha512-nuA2o+rgX2+PrNTZ063ehncVcg7sn+tU71BB81SaWRVUbGwCOlb0+yQA1e0QqmzOfRSYOxfvf8cosYqFbJEiwQ==", + "dev": true, + "requires": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.2" + } + }, "@babel/template": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", @@ -506,6 +516,12 @@ "integrity": "sha512-aRnpPa7ysx3aNW60hTiCtLHlQaIFsXFCgQlpakNgDNVFzbtusSY8PwjAQgRWfSk0ekNoBjO51eQRB6upA9uuyw==", "dev": true }, + "@types/cucumber": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@types/cucumber/-/cucumber-4.0.7.tgz", + "integrity": "sha512-uYvDSl+JV1fT1U9EIFXlnb7DjZdRNYZHQFppQf9aYAe71joppErWenznupwZUj9zuo+SAFYNoongarQpNOb+pQ==", + "dev": true + }, "@types/errorhandler": { "version": "0.0.32", "resolved": "https://registry.npmjs.org/@types/errorhandler/-/errorhandler-0.0.32.tgz", @@ -755,6 +771,12 @@ "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", "dev": true }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha1-q8av7tzqUugJzcA3au0845Y10X8=", + "dev": true + }, "anymatch": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", @@ -848,6 +870,17 @@ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", "dev": true }, + "assertion-error-formatter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/assertion-error-formatter/-/assertion-error-formatter-3.0.0.tgz", + "integrity": "sha512-6YyAVLrEze0kQ7CmJfUgrLHb+Y7XghmL2Ie7ijVa2Y9ynP3LV+VDiwFk62Dn0qtqbmY0BT0ss6p1xxpiF2PYbQ==", + "dev": true, + "requires": { + "diff": "^4.0.1", + "pad-right": "^0.2.2", + "repeat-string": "^1.6.1" + } + }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -1027,6 +1060,12 @@ "tweetnacl": "^0.14.3" } }, + "becke-ch--regex--s0-0-v1--base--pl--lib": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/becke-ch--regex--s0-0-v1--base--pl--lib/-/becke-ch--regex--s0-0-v1--base--pl--lib-1.4.0.tgz", + "integrity": "sha1-Qpzuu/pffpNueNc/vcfacWKyDiA=", + "dev": true + }, "bluebird": { "version": "3.5.5", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.5.tgz", @@ -1280,6 +1319,50 @@ "restore-cursor": "^2.0.0" } }, + "cli-table3": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.5.1.tgz", + "integrity": "sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw==", + "dev": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "cli-truncate": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz", @@ -1335,6 +1418,12 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "colors": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==", + "dev": true + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1492,6 +1581,12 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", "dev": true }, + "core-js": { + "version": "2.6.10", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.10.tgz", + "integrity": "sha512-I39t74+4t+zau64EN1fE5v2W31Adtc/REhzWN+gWRRXg6WH5qAsZm62DHpQ1+Yhe4047T55jvzz7MUqF/dBBlA==", + "dev": true + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", @@ -1537,6 +1632,116 @@ "cssom": "0.3.x" } }, + "cucumber": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/cucumber/-/cucumber-6.0.2.tgz", + "integrity": "sha512-yEwPYGvgS2KG6ODdUXQwWcxjyr/l31dmpGJsZSkJIXNLNNmieKVefTpf8zLj6+0V2TCPwkmUZt4+OIXv97duEw==", + "dev": true, + "requires": { + "assertion-error-formatter": "^3.0.0", + "bluebird": "^3.4.1", + "cli-table3": "^0.5.1", + "colors": "^1.1.2", + "commander": "^3.0.1", + "cucumber-expressions": "^8.0.1", + "cucumber-tag-expressions": "^2.0.2", + "duration": "^0.2.1", + "escape-string-regexp": "^2.0.0", + "figures": "^3.0.0", + "gherkin": "5.0.0", + "glob": "^7.1.3", + "indent-string": "^4.0.0", + "is-generator": "^1.0.2", + "is-stream": "^2.0.0", + "knuth-shuffle-seeded": "^1.0.6", + "lodash": "^4.17.14", + "mz": "^2.4.0", + "progress": "^2.0.0", + "resolve": "^1.3.3", + "serialize-error": "^4.1.0", + "stack-chain": "^2.0.0", + "stacktrace-js": "^2.0.0", + "string-argv": "^0.3.0", + "title-case": "^2.1.1", + "util-arity": "^1.0.2", + "verror": "^1.9.0" + }, + "dependencies": { + "commander": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", + "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", + "dev": true + }, + "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 + }, + "figures": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz", + "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + } + } + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + } + } + }, + "cucumber-expressions": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cucumber-expressions/-/cucumber-expressions-8.0.1.tgz", + "integrity": "sha512-g+A+tUEafNofe6ErwvOkqaMvDj9NuOr0GouGotpw4r5yK2d4144o9/6sQpXBr2YXbRy5ItmER/2bzAyDAzhPyQ==", + "dev": true, + "requires": { + "becke-ch--regex--s0-0-v1--base--pl--lib": "^1.4.0", + "xregexp": "^4.2.4" + } + }, + "cucumber-tag-expressions": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/cucumber-tag-expressions/-/cucumber-tag-expressions-2.0.2.tgz", + "integrity": "sha512-DohmT4X641KX/sb96bdb7J2kXNcQBPrYmf3Oc5kiHCLfzFMWx/o2kB4JvjvQPZnYuA9lRt6pqtArM5gvUn4uzw==", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, "dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -1729,6 +1934,16 @@ "resolved": "https://registry.npmjs.org/dont-sniff-mimetype/-/dont-sniff-mimetype-1.1.0.tgz", "integrity": "sha512-ZjI4zqTaxveH2/tTlzS1wFp+7ncxNZaIEWYg3lzZRHkKf5zPT/MnEG6WL0BhHMJUabkh8GeU5NL5j+rEUCb7Ug==" }, + "duration": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/duration/-/duration-0.2.2.tgz", + "integrity": "sha512-06kgtea+bGreF5eKYgI/36A6pLXggY7oR4p1pq4SmdFBn1ReOL5D8RhG64VrqfTTKNucqqtBAwEj8aB88mcqrg==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.46" + } + }, "easy-table": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/easy-table/-/easy-table-1.1.0.tgz", @@ -1787,6 +2002,15 @@ "is-arrayish": "^0.2.1" } }, + "error-stack-parser": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.4.tgz", + "integrity": "sha512-fZ0KkoxSjLFmhW5lHbUT3tLwy3nX1qEzMYo8koY1vrsAco53CMT1djnBSeC/wUjTEZRhZl9iRw7PaMaxfJ4wzQ==", + "dev": true, + "requires": { + "stackframe": "^1.1.0" + } + }, "errorhandler": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/errorhandler/-/errorhandler-1.5.1.tgz", @@ -1825,6 +2049,38 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.51", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.51.tgz", + "integrity": "sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "^1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.2.tgz", + "integrity": "sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==", + "dev": true, + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.51" + } + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -2330,8 +2586,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -2352,14 +2607,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2374,20 +2627,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -2504,8 +2754,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -2517,7 +2766,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2532,7 +2780,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2540,14 +2787,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -2566,7 +2811,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -2647,8 +2891,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -2660,7 +2903,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -2746,8 +2988,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -2783,7 +3024,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2803,7 +3043,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2847,14 +3086,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, @@ -2917,6 +3154,12 @@ "assert-plus": "^1.0.0" } }, + "gherkin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/gherkin/-/gherkin-5.0.0.tgz", + "integrity": "sha1-lt70EZjsOQgli1Ea909lWidk0qE=", + "dev": true + }, "glob": { "version": "7.1.4", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", @@ -3437,6 +3680,12 @@ "number-is-nan": "^1.0.0" } }, + "is-generator": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-generator/-/is-generator-1.0.3.tgz", + "integrity": "sha1-wUwhBX7TbjKNuANHlmxpP4hjifM=", + "dev": true + }, "is-generator-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", @@ -4445,6 +4694,15 @@ "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, + "knuth-shuffle-seeded": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/knuth-shuffle-seeded/-/knuth-shuffle-seeded-1.0.6.tgz", + "integrity": "sha1-AfG2VzOqdUDuCNiwF0Fk0iCB5OE=", + "dev": true, + "requires": { + "seed-random": "~2.2.0" + } + }, "lazy-cache": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-2.0.2.tgz", @@ -4719,6 +4977,12 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, "make-dir": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", @@ -4987,6 +5251,17 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", @@ -5108,12 +5383,27 @@ "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==", "dev": true }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", "dev": true }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, "nocache": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/nocache/-/nocache-2.1.0.tgz", @@ -5426,6 +5716,15 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "pad-right": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/pad-right/-/pad-right-0.2.2.tgz", + "integrity": "sha1-b7ySQEXSRPKiokRQMGDTv8YAl3Q=", + "dev": true, + "requires": { + "repeat-string": "^1.5.2" + } + }, "parse-json": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", @@ -5599,6 +5898,12 @@ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, "prompts": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.2.1.tgz", @@ -6025,6 +6330,12 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, + "seed-random": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/seed-random/-/seed-random-2.2.0.tgz", + "integrity": "sha1-KpsZ4lCoFwmSMaW5mk2vgLf77VQ=", + "dev": true + }, "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", @@ -6079,6 +6390,15 @@ } } }, + "serialize-error": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-4.1.0.tgz", + "integrity": "sha512-5j9GgyGsP9vV9Uj1S0lDCvlsd+gc2LEPVK7HHHte7IyPwOD4lVQFeaX143gx3U5AnoCi+wbcb3mvaxVysjpxEw==", + "dev": true, + "requires": { + "type-fest": "^0.3.0" + } + }, "serve-static": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", @@ -6425,12 +6745,62 @@ "tweetnacl": "~0.14.0" } }, + "stack-chain": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-2.0.0.tgz", + "integrity": "sha512-GGrHXePi305aW7XQweYZZwiRwR7Js3MWoK/EHzzB9ROdc75nCnjSJVi21rdAGxFl+yCx2L2qdfl5y7NO4lTyqg==", + "dev": true + }, + "stack-generator": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/stack-generator/-/stack-generator-2.0.4.tgz", + "integrity": "sha512-ha1gosTNcgxwzo9uKTQ8zZ49aUp5FIUW58YHFxCqaAHtE0XqBg0chGFYA1MfmW//x1KWq3F4G7Ug7bJh4RiRtg==", + "dev": true, + "requires": { + "stackframe": "^1.1.0" + } + }, "stack-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.2.tgz", "integrity": "sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA==", "dev": true }, + "stackframe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.1.0.tgz", + "integrity": "sha512-Vx6W1Yvy+AM1R/ckVwcHQHV147pTPBKWCRLrXMuPrFVfvBUc3os7PR1QLIWCMhPpRg5eX9ojzbQIMLGBwyLjqg==", + "dev": true + }, + "stacktrace-gps": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/stacktrace-gps/-/stacktrace-gps-3.0.3.tgz", + "integrity": "sha512-51Rr7dXkyFUKNmhY/vqZWK+EvdsfFSRiQVtgHTFlAdNIYaDD7bVh21yBHXaNWAvTD+w+QSjxHg7/v6Tz4veExA==", + "dev": true, + "requires": { + "source-map": "0.5.6", + "stackframe": "^1.1.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", + "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "dev": true + } + } + }, + "stacktrace-js": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stacktrace-js/-/stacktrace-js-2.0.1.tgz", + "integrity": "sha512-13oDNgBSeWtdGa4/2BycNyKqe+VktCoJ8VLx4pDoJkwGGJVtiHdfMOAj3aW9xTi8oR2v34z9IcvfCvT6XNdNAw==", + "dev": true, + "requires": { + "error-stack-parser": "^2.0.4", + "stack-generator": "^2.0.4", + "stacktrace-gps": "^3.0.3" + } + }, "staged-git-files": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz", @@ -6647,6 +7017,24 @@ "require-main-filename": "^2.0.0" } }, + "thenify": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", + "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "dev": true, + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", + "dev": true, + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "throat": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/throat/-/throat-4.1.0.tgz", @@ -6662,6 +7050,16 @@ "xtend": "~4.0.1" } }, + "title-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/title-case/-/title-case-2.1.1.tgz", + "integrity": "sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.0.3" + } + }, "tmpl": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", @@ -7003,6 +7401,12 @@ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", "dev": true }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", @@ -7012,6 +7416,12 @@ "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.3.1.tgz", + "integrity": "sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==", + "dev": true + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -7110,6 +7520,12 @@ } } }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", @@ -7131,6 +7547,12 @@ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", "dev": true }, + "util-arity": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/util-arity/-/util-arity-1.1.0.tgz", + "integrity": "sha1-WdAa8f2z/t4KxOYysKtfbOl8kzA=", + "dev": true + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -7355,6 +7777,15 @@ "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", "dev": true }, + "xregexp": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.2.4.tgz", + "integrity": "sha512-sO0bYdYeJAJBcJA8g7MJJX7UrOZIfJPd8U2SC7B2Dd/J24U0aQNoGp33shCaBSWeb0rD5rh6VBUIXOkGal1TZA==", + "dev": true, + "requires": { + "@babel/runtime-corejs2": "^7.2.0" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index f823774..0cea9d6 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "scripts": { "test": "NODE_ENV=test jest", "test:unit": "NODE_ENV=test jest --watch", + "test:features": "./node_modules/.bin/cucumber-js -p default", "start": "NODE_ENV=production node dist/src/apps/mooc/server", "build": "npm run build:clean && npm run build:tsc && npm run build:di", "build:tsc": "tsc -p tsconfig.prod.json", @@ -39,9 +40,11 @@ }, "devDependencies": { "@types/aws-lambda": "^8.10.31", + "@types/cucumber": "^4.0.7", "@types/faker": "^4.1.5", "@types/jest": "^24.0.18", "@types/supertest": "^2.0.8", + "cucumber": "^6.0.2", "faker": "^4.1.0", "husky": "^1.3.1", "jest": "^24.9.0", From b98cc0e0b39bdc2a68d777735012a6e46bd5e4d5 Mon Sep 17 00:00:00 2001 From: rsaladocid Date: Wed, 16 Oct 2019 19:19:38 +0200 Subject: [PATCH 03/14] Create status controller --- .../config/dependency-injection/application.yaml | 4 ++++ .../mooc_backend/controllers/StatusController.ts | 8 ++++++++ src/apps/mooc_backend/routes/index.ts | 8 ++++++++ src/apps/mooc_backend/routes/status.route.ts | 8 ++++++++ tests/apps/mooc_backend/features/status.feature | 8 ++++++++ tests/apps/mooc_backend/features/status.steps.ts | 15 +++++++++++++++ 6 files changed, 51 insertions(+) create mode 100644 src/apps/mooc_backend/controllers/StatusController.ts create mode 100644 src/apps/mooc_backend/routes/index.ts create mode 100644 src/apps/mooc_backend/routes/status.route.ts create mode 100644 tests/apps/mooc_backend/features/status.feature create mode 100644 tests/apps/mooc_backend/features/status.steps.ts diff --git a/src/apps/mooc_backend/config/dependency-injection/application.yaml b/src/apps/mooc_backend/config/dependency-injection/application.yaml index 791451c..1e335b5 100644 --- a/src/apps/mooc_backend/config/dependency-injection/application.yaml +++ b/src/apps/mooc_backend/config/dependency-injection/application.yaml @@ -6,3 +6,7 @@ services: Apps.mooc.controllers.CreateCourseController: class: ../../controllers/CreateCourseController arguments: ["@Mooc.courses.CreateCourse"] + + Apps.mooc.controllers.StatusController: + class: ../../controllers/StatusController + arguments: [] diff --git a/src/apps/mooc_backend/controllers/StatusController.ts b/src/apps/mooc_backend/controllers/StatusController.ts new file mode 100644 index 0000000..44c7c44 --- /dev/null +++ b/src/apps/mooc_backend/controllers/StatusController.ts @@ -0,0 +1,8 @@ +import { Request, Response } from 'express'; +import httpStatus from 'http-status'; + +export default class StatusController { + async create(req: Request, res: Response) { + res.status(httpStatus.OK).send(); + } +} diff --git a/src/apps/mooc_backend/routes/index.ts b/src/apps/mooc_backend/routes/index.ts new file mode 100644 index 0000000..897e360 --- /dev/null +++ b/src/apps/mooc_backend/routes/index.ts @@ -0,0 +1,8 @@ +import { Express } from 'express'; +import { createUserRoute } from './create-course.route'; +import { statusRoute } from './status.route'; + +export function registerRoutes(app: Express) { + createUserRoute(app); + statusRoute(app); +} diff --git a/src/apps/mooc_backend/routes/status.route.ts b/src/apps/mooc_backend/routes/status.route.ts new file mode 100644 index 0000000..28eeecb --- /dev/null +++ b/src/apps/mooc_backend/routes/status.route.ts @@ -0,0 +1,8 @@ +import { Express } from 'express'; +import container from '../config/dependency-injection'; +import StatusController from '../controllers/StatusController'; + +export const statusRoute = (app: Express) => { + const controller: StatusController = container.get('Apps.mooc.controllers.StatusController'); + app.get('/status', (req, res) => controller.create(req, res)); +}; diff --git a/tests/apps/mooc_backend/features/status.feature b/tests/apps/mooc_backend/features/status.feature new file mode 100644 index 0000000..9d2612e --- /dev/null +++ b/tests/apps/mooc_backend/features/status.feature @@ -0,0 +1,8 @@ +Feature: Api status + In order to know the server is up and running + As a health check + I want to check the api status + + Scenario: Check the api status + Given I send a GET request to "/status" + Then the response code should be 200 diff --git a/tests/apps/mooc_backend/features/status.steps.ts b/tests/apps/mooc_backend/features/status.steps.ts new file mode 100644 index 0000000..3430c5d --- /dev/null +++ b/tests/apps/mooc_backend/features/status.steps.ts @@ -0,0 +1,15 @@ +import { Given, Then } from 'cucumber'; +import request from 'supertest'; +import app from '../../../../src/apps/mooc_backend/app'; + +let statusRoute: string; + +Given('I send a GET request to {string}', (route: string) => { + statusRoute = route; +}); + +Then('the response code should be {int}', async (code: number) => { + await request(app) + .get(statusRoute) + .expect(code); +}); From 359e893c3feaf44385b5e0701ce7312294c74e92 Mon Sep 17 00:00:00 2001 From: rsaladocid Date: Thu, 17 Oct 2019 18:57:23 +0200 Subject: [PATCH 04/14] Reuse step definitions --- cucumber.js | 2 +- .../features/create-course.feature | 15 +++++++++++ .../features/create-course.test.ts | 11 -------- .../apps/mooc_backend/features/status.feature | 2 +- .../mooc_backend/features/status.steps.ts | 15 ----------- .../step_definitions/controller.steps.ts | 25 +++++++++++++++++++ 6 files changed, 42 insertions(+), 28 deletions(-) create mode 100644 tests/apps/mooc_backend/features/create-course.feature delete mode 100644 tests/apps/mooc_backend/features/create-course.test.ts delete mode 100644 tests/apps/mooc_backend/features/status.steps.ts create mode 100644 tests/apps/mooc_backend/features/step_definitions/controller.steps.ts diff --git a/cucumber.js b/cucumber.js index 8971aa4..3877193 100644 --- a/cucumber.js +++ b/cucumber.js @@ -1,7 +1,7 @@ let common = [ 'tests/**/features/*.feature', // Specify our feature files '--require-module ts-node/register', // Load TypeScript module - '--require tests/**/features/*.steps.ts' // Load step definitions + '--require tests/**/features/step_definitions/*.steps.ts' // Load step definitions ].join(' '); module.exports = { diff --git a/tests/apps/mooc_backend/features/create-course.feature b/tests/apps/mooc_backend/features/create-course.feature new file mode 100644 index 0000000..1d5ca8d --- /dev/null +++ b/tests/apps/mooc_backend/features/create-course.feature @@ -0,0 +1,15 @@ +Feature: Create a new course + In order to have courses in the platform + As a user with admin permissions + I want to create a new course + + Scenario: A valid unexisting course + Given I send a PUT request to "/courses/ef8ac118-8d7f-49cc-abec-78e0d05af80a" with body: + """ + { + "name": "The best course", + "duration": "5 hours" + } + """ + Then the response status code should be 201 + And the response should be empty diff --git a/tests/apps/mooc_backend/features/create-course.test.ts b/tests/apps/mooc_backend/features/create-course.test.ts deleted file mode 100644 index ae070f9..0000000 --- a/tests/apps/mooc_backend/features/create-course.test.ts +++ /dev/null @@ -1,11 +0,0 @@ -import request from 'supertest'; -import app from '../../../../src/apps/mooc_backend/app'; - -describe('Create Course Feature', () => { - it('should respond with a 201 Created code', async () => { - await request(app) - .post('/courses') - .send({}) - .expect(201); - }); -}); diff --git a/tests/apps/mooc_backend/features/status.feature b/tests/apps/mooc_backend/features/status.feature index 9d2612e..61e614c 100644 --- a/tests/apps/mooc_backend/features/status.feature +++ b/tests/apps/mooc_backend/features/status.feature @@ -5,4 +5,4 @@ Feature: Api status Scenario: Check the api status Given I send a GET request to "/status" - Then the response code should be 200 + Then the response status code should be 200 diff --git a/tests/apps/mooc_backend/features/status.steps.ts b/tests/apps/mooc_backend/features/status.steps.ts deleted file mode 100644 index 3430c5d..0000000 --- a/tests/apps/mooc_backend/features/status.steps.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Given, Then } from 'cucumber'; -import request from 'supertest'; -import app from '../../../../src/apps/mooc_backend/app'; - -let statusRoute: string; - -Given('I send a GET request to {string}', (route: string) => { - statusRoute = route; -}); - -Then('the response code should be {int}', async (code: number) => { - await request(app) - .get(statusRoute) - .expect(code); -}); diff --git a/tests/apps/mooc_backend/features/step_definitions/controller.steps.ts b/tests/apps/mooc_backend/features/step_definitions/controller.steps.ts new file mode 100644 index 0000000..fdeaff0 --- /dev/null +++ b/tests/apps/mooc_backend/features/step_definitions/controller.steps.ts @@ -0,0 +1,25 @@ +import { Given, Then } from 'cucumber'; +import request from 'supertest'; +import app from '../../../../../src/apps/mooc_backend/app'; +import assert from 'assert'; + +let _request: request.Test; +let _response: request.Response; + +Given('I send a GET request to {string}', (route: string) => { + _request = request(app).get(route); +}); + +Given('I send a PUT request to {string} with body:', (route: string, body: string) => { + _request = request(app) + .put(route) + .send(body); +}); + +Then('the response status code should be {int}', async (status: number) => { + _response = await _request.expect(status); +}); + +Then('the response should be empty', () => { + assert.deepEqual(_response.body, {}); +}); From b6fdf9650ea8d8eccd3e5bde9138a86963dd467b Mon Sep 17 00:00:00 2001 From: rsaladocid Date: Thu, 17 Oct 2019 18:57:56 +0200 Subject: [PATCH 05/14] Extract params from request --- .../mooc_backend/controllers/CreateCourseController.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/apps/mooc_backend/controllers/CreateCourseController.ts b/src/apps/mooc_backend/controllers/CreateCourseController.ts index 0657a44..436c1f0 100644 --- a/src/apps/mooc_backend/controllers/CreateCourseController.ts +++ b/src/apps/mooc_backend/controllers/CreateCourseController.ts @@ -3,11 +3,15 @@ import CreateCourse from '../../../Mooc/Courses/application/CreateCourse'; import httpStatus from 'http-status'; export default class CreateCourseController { - constructor(private createUser: CreateCourse) {} + constructor(private createCourse: CreateCourse) {} async create(req: Request, res: Response) { + const id: string = req.params.id; + const name: string = req.body.name; + const duration: string = req.body.duration; + try { - await this.createUser.run(); + await this.createCourse.run(id, name, duration); } catch (e) { res.status(500).json(e); } From 55d24b7d8858eeb71929f9feba9ab507ba6f149f Mon Sep 17 00:00:00 2001 From: rsaladocid Date: Thu, 17 Oct 2019 18:58:31 +0200 Subject: [PATCH 06/14] Fix route --- src/apps/mooc_backend/routes/create-course.route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/mooc_backend/routes/create-course.route.ts b/src/apps/mooc_backend/routes/create-course.route.ts index d64c6ac..cafd913 100644 --- a/src/apps/mooc_backend/routes/create-course.route.ts +++ b/src/apps/mooc_backend/routes/create-course.route.ts @@ -4,5 +4,5 @@ import CreateCourseController from '../controllers/CreateCourseController'; export const createUserRoute = (app: Express) => { const controller: CreateCourseController = container.get('Apps.mooc.controllers.CreateCourseController'); - app.post('/courses', (req, res) => controller.create(req, res)); + app.put('/courses/:id', (req, res) => controller.create(req, res)); }; From 3cca2fb9031e4f070171fd7e936527a77db0aed0 Mon Sep 17 00:00:00 2001 From: rsaladocid Date: Thu, 17 Oct 2019 18:59:18 +0200 Subject: [PATCH 07/14] Create application --- src/Mooc/Courses/application/CreateCourse.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/Mooc/Courses/application/CreateCourse.ts b/src/Mooc/Courses/application/CreateCourse.ts index 35ee45b..6c15d02 100644 --- a/src/Mooc/Courses/application/CreateCourse.ts +++ b/src/Mooc/Courses/application/CreateCourse.ts @@ -1,5 +1,16 @@ +import CourseRepository from '../domain/CourseRepository'; +import Course from '../domain/Course'; + export default class CreateCourse { - async run(): Promise { - return null; + private repository: CourseRepository; + + constructor(repository: CourseRepository) { + this.repository = repository; + } + + async run(id: string, name: string, duration: string): Promise { + const course = new Course(id, name, duration); + + this.repository.save(course); } } From 288e6fc10afdd39801855b831a4302e44bbed176 Mon Sep 17 00:00:00 2001 From: rsaladocid Date: Thu, 17 Oct 2019 18:59:35 +0200 Subject: [PATCH 08/14] Create domain --- src/Mooc/Courses/domain/Course.ts | 23 +++++++++++++++++++++ src/Mooc/Courses/domain/CourseRepository.ts | 7 +++++++ 2 files changed, 30 insertions(+) create mode 100644 src/Mooc/Courses/domain/Course.ts create mode 100644 src/Mooc/Courses/domain/CourseRepository.ts diff --git a/src/Mooc/Courses/domain/Course.ts b/src/Mooc/Courses/domain/Course.ts new file mode 100644 index 0000000..a7a8432 --- /dev/null +++ b/src/Mooc/Courses/domain/Course.ts @@ -0,0 +1,23 @@ +export default class Course { + private _id: string; + private _name: string; + private _duration: string; + + constructor(id: string, name: string, duration: string) { + this._id = id; + this._name = name; + this._duration = duration; + } + + get id(): string { + return this._id; + } + + get name(): string { + return this._name; + } + + get duration(): string { + return this._duration; + } +} diff --git a/src/Mooc/Courses/domain/CourseRepository.ts b/src/Mooc/Courses/domain/CourseRepository.ts new file mode 100644 index 0000000..2dbe575 --- /dev/null +++ b/src/Mooc/Courses/domain/CourseRepository.ts @@ -0,0 +1,7 @@ +import Course from './Course'; + +export default interface CourseRepository { + save(course: Course): Promise | void; + + search(id: string): Promise | Course; +} From c0ed341ae708692e9bd2c352dbd713f00a31b51a Mon Sep 17 00:00:00 2001 From: rsaladocid Date: Thu, 17 Oct 2019 19:00:52 +0200 Subject: [PATCH 09/14] Implement file repository --- package-lock.json | 41 +++++++++++++++++++ package.json | 4 +- .../infrastructure/FileCourseRepository.ts | 20 +++++++++ .../FileCourseRepository.test.ts | 11 +++++ 4 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 src/Mooc/Courses/infrastructure/FileCourseRepository.ts create mode 100644 tests/Mooc/Courses/infrastructure/FileCourseRepository.test.ts diff --git a/package-lock.json b/package-lock.json index 8e0f337..69b9a4d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -489,6 +489,14 @@ "@types/node": "*" } }, + "@types/bson": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.0.tgz", + "integrity": "sha512-pq/rqJwJWkbS10crsG5bgnrisL8pML79KlMKQMoQwLUjlPAkrUHMvHJ3oGwE7WHR61Lv/nadMwXVAD2b+fpD8Q==", + "requires": { + "@types/node": "*" + } + }, "@types/compression": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/compression/-/compression-1.0.1.tgz", @@ -1051,6 +1059,11 @@ } } }, + "base64-js": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.1.tgz", + "integrity": "sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g==" + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -1184,6 +1197,24 @@ "node-int64": "^0.4.0" } }, + "bson": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.0.2.tgz", + "integrity": "sha512-rBdCxMBCg2aR420e1oKUejjcuPZLTibA7zEhWAlliFWEwzuBCC9Dkp5r7VFFIQB2t1WVsvTbohry575mc7Xw5A==", + "requires": { + "buffer": "^5.1.0", + "long": "^4.0.0" + } + }, + "buffer": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", + "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", @@ -3498,6 +3529,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" + }, "ienoopen": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.1.0.tgz", @@ -4968,6 +5004,11 @@ "wrap-ansi": "^3.0.1" } }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "loose-envify": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", diff --git a/package.json b/package.json index 0cea9d6..576f7ee 100644 --- a/package.json +++ b/package.json @@ -10,13 +10,14 @@ "test": "NODE_ENV=test jest", "test:unit": "NODE_ENV=test jest --watch", "test:features": "./node_modules/.bin/cucumber-js -p default", - "start": "NODE_ENV=production node dist/src/apps/mooc/server", + "start": "NODE_ENV=production node dist/src/apps/mooc_backend/server", "build": "npm run build:clean && npm run build:tsc && npm run build:di", "build:tsc": "tsc -p tsconfig.prod.json", "build:di": "copy 'src/**/*.yaml' dist/src", "build:clean": "rm -r dist; exit 0" }, "dependencies": { + "@types/bson": "^4.0.0", "@types/compression": "^1.0.1", "@types/convict": "^4.2.1", "@types/errorhandler": "0.0.32", @@ -25,6 +26,7 @@ "@types/node": "~11.13.0", "@types/uuid": "^3.4.5", "body-parser": "^1.19.0", + "bson": "^4.0.2", "compression": "^1.7.4", "convict": "^5.1.0", "copy": "^0.3.2", diff --git a/src/Mooc/Courses/infrastructure/FileCourseRepository.ts b/src/Mooc/Courses/infrastructure/FileCourseRepository.ts new file mode 100644 index 0000000..75834cb --- /dev/null +++ b/src/Mooc/Courses/infrastructure/FileCourseRepository.ts @@ -0,0 +1,20 @@ +import CourseRepository from '../domain/CourseRepository'; +import Course from '../domain/Course'; +import * as fs from 'fs'; +import BSON from 'bson'; + +export default class FileCourseRepository implements CourseRepository { + private FILE_PATH = `${__dirname}/courses`; + + save(course: Course): void | Promise { + fs.writeFileSync(this.filePath(course.id), BSON.serialize(course)); + } + + search(id: string): Course { + return fs.existsSync(this.filePath(id)) ? BSON.deserialize(fs.readFileSync(this.filePath(id))) : null; + } + + private filePath(id: string): string { + return `${this.FILE_PATH}.${id}.repo`; + } +} diff --git a/tests/Mooc/Courses/infrastructure/FileCourseRepository.test.ts b/tests/Mooc/Courses/infrastructure/FileCourseRepository.test.ts new file mode 100644 index 0000000..b68da3e --- /dev/null +++ b/tests/Mooc/Courses/infrastructure/FileCourseRepository.test.ts @@ -0,0 +1,11 @@ +import Course from '../../../../src/Mooc/Courses/domain/Course'; +import FileCourseRepository from '../../../../src/Mooc/Courses/infrastructure/FileCourseRepository'; + +describe('Save Course', () => { + it('should have a course', () => { + const repository = new FileCourseRepository(); + const course = new Course('id', 'name', 'duration'); + + repository.save(course); + }); +}); From 74327dc36eb4b2050b875386d0018754e2e2c5b1 Mon Sep 17 00:00:00 2001 From: rsaladocid Date: Thu, 17 Oct 2019 19:01:05 +0200 Subject: [PATCH 10/14] Add unit test --- .../Courses/application/CreateCourse.test.ts | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 tests/Mooc/Courses/application/CreateCourse.test.ts diff --git a/tests/Mooc/Courses/application/CreateCourse.test.ts b/tests/Mooc/Courses/application/CreateCourse.test.ts new file mode 100644 index 0000000..e7cc8dd --- /dev/null +++ b/tests/Mooc/Courses/application/CreateCourse.test.ts @@ -0,0 +1,25 @@ +import Course from '../../../../src/Mooc/Courses/domain/Course'; +import CreateCourse from '../../../../src/Mooc/Courses/application/CreateCourse'; +import CourseRepository from '../../../../src/Mooc/Courses/domain/CourseRepository'; + +describe('Create Course', () => { + it('should create a valid course', async () => { + const save = jest.fn(); + const repository: CourseRepository = { + save, + search: jest.fn() + }; + + const createCourse = new CreateCourse(repository); + + const id = 'some-id'; + const name = 'some-name'; + const duration = 'some-duration'; + + const course = new Course(id, name, duration); + + await createCourse.run(id, name, duration); + + expect(save).toHaveBeenCalledWith(course); + }); +}); From ea3628c75da33ee555a6c2fd5f1306c55c5acdd5 Mon Sep 17 00:00:00 2001 From: rsaladocid Date: Thu, 17 Oct 2019 19:01:44 +0200 Subject: [PATCH 11/14] Register repository in dependency injector --- .../config/dependency-injection/application.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/apps/mooc_backend/config/dependency-injection/application.yaml b/src/apps/mooc_backend/config/dependency-injection/application.yaml index 1e335b5..c2904c6 100644 --- a/src/apps/mooc_backend/config/dependency-injection/application.yaml +++ b/src/apps/mooc_backend/config/dependency-injection/application.yaml @@ -1,7 +1,11 @@ services: + Mooc.courses.CourseRepository: + class: ../../../../Mooc/Courses/infrastructure/FileCourseRepository + arguments: [] + Mooc.courses.CreateCourse: class: ../../../../Mooc/Courses/application/CreateCourse - arguments: [] + arguments: ["@Mooc.courses.CourseRepository"] Apps.mooc.controllers.CreateCourseController: class: ../../controllers/CreateCourseController From 7c74f5a49b57557c0a103bfdf06585f55fa2abfc Mon Sep 17 00:00:00 2001 From: rsaladocid Date: Thu, 17 Oct 2019 19:01:57 +0200 Subject: [PATCH 12/14] Refactor order --- src/apps/mooc_backend/routes/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps/mooc_backend/routes/index.ts b/src/apps/mooc_backend/routes/index.ts index 897e360..77959b7 100644 --- a/src/apps/mooc_backend/routes/index.ts +++ b/src/apps/mooc_backend/routes/index.ts @@ -1,8 +1,8 @@ import { Express } from 'express'; -import { createUserRoute } from './create-course.route'; import { statusRoute } from './status.route'; +import { createUserRoute } from './create-course.route'; export function registerRoutes(app: Express) { - createUserRoute(app); statusRoute(app); + createUserRoute(app); } From 50229001b05f4fd1decfa13da8264f175d10af04 Mon Sep 17 00:00:00 2001 From: rsaladocid Date: Thu, 17 Oct 2019 19:06:57 +0200 Subject: [PATCH 13/14] Fix path --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f823774..45a1659 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "scripts": { "test": "NODE_ENV=test jest", "test:unit": "NODE_ENV=test jest --watch", - "start": "NODE_ENV=production node dist/src/apps/mooc/server", + "start": "NODE_ENV=production node dist/src/apps/mooc_backend/server", "build": "npm run build:clean && npm run build:tsc && npm run build:di", "build:tsc": "tsc -p tsconfig.prod.json", "build:di": "copy 'src/**/*.yaml' dist/src", From 9471ff200b330d3b8fbabe3db677beba0ab58097 Mon Sep 17 00:00:00 2001 From: Fernando Vilas Maciel Date: Fri, 18 Oct 2019 11:19:36 +0200 Subject: [PATCH 14/14] Launch all test suites using the npm test script --- package-lock.json | 41 ++++++++++++++++++++++++++++++----------- package.json | 6 +++--- 2 files changed, 33 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 69b9a4d..9b4198d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2617,7 +2617,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.2.0", @@ -2638,12 +2639,14 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2658,17 +2661,20 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", @@ -2785,7 +2791,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.5", @@ -2797,6 +2804,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2811,6 +2819,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2818,12 +2827,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -2842,6 +2853,7 @@ "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -2922,7 +2934,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "object-assign": { "version": "4.1.1", @@ -2934,6 +2947,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -3019,7 +3033,8 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "safer-buffer": { "version": "2.1.2", @@ -3055,6 +3070,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -3074,6 +3090,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3117,12 +3134,14 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, diff --git a/package.json b/package.json index 576f7ee..8e0981d 100644 --- a/package.json +++ b/package.json @@ -7,9 +7,9 @@ "npm": ">=6.7.0" }, "scripts": { - "test": "NODE_ENV=test jest", - "test:unit": "NODE_ENV=test jest --watch", - "test:features": "./node_modules/.bin/cucumber-js -p default", + "test": "npm run test:unit && npm run test:features", + "test:unit": "NODE_ENV=test jest", + "test:features": "NODE_ENV=test cucumber-js -p default", "start": "NODE_ENV=production node dist/src/apps/mooc_backend/server", "build": "npm run build:clean && npm run build:tsc && npm run build:di", "build:tsc": "tsc -p tsconfig.prod.json",