From a1bfedd8c96b7a145e9a7625d53c304ecd99fff8 Mon Sep 17 00:00:00 2001
From: Roland Bernard <rolbernard@unibz.it>
Date: Sat, 22 May 2021 23:19:24 +0200
Subject: [PATCH] Refactored code to allow running endpoint tests

---
 server/src/api.ts        | 30 ++++++++++++++++++++++++++++++
 server/src/config.ts     |  2 +-
 server/src/index.ts      | 28 +++-------------------------
 server/src/knexconfig.ts | 23 ++++++++++++-----------
 4 files changed, 46 insertions(+), 37 deletions(-)
 create mode 100644 server/src/api.ts

diff --git a/server/src/api.ts b/server/src/api.ts
new file mode 100644
index 0000000..91f1224
--- /dev/null
+++ b/server/src/api.ts
@@ -0,0 +1,30 @@
+
+import express, { Request, Response, NextFunction } from 'express';
+import { json as bodyJson } from 'body-parser';
+import fileupload from 'express-fileupload';
+
+import { addDefaultHeaders } from './headers';
+import v1 from './v1';
+
+export const api = express();
+
+api.use(addDefaultHeaders);
+api.use(bodyJson());
+api.use(fileupload());
+
+api.use('/v1', v1);
+
+api.use((_req, res) => {
+    res.status(404).json({
+        status: 'error',
+        message: 'unknown resource',
+    });
+});
+
+api.use((err: Error, _req: Request, res: Response, _next: NextFunction) => {
+    return res.status(400).json({
+        status: 'error',
+        message: err.message,
+    });
+});
+
diff --git a/server/src/config.ts b/server/src/config.ts
index 0e758a1..54cb20a 100644
--- a/server/src/config.ts
+++ b/server/src/config.ts
@@ -11,7 +11,7 @@ export const keys = {
 
 export const allowedOrigins = [ "*" ];
 
-export const environment = (env.NODE_ENV ?? 'development') as ('development' | 'staging' | 'production');
+export const environment = (env.NODE_ENV ?? 'development') as ('development' | 'testing' | 'staging' | 'production');
 
 export const web_serve = '../client/build/';
 
diff --git a/server/src/index.ts b/server/src/index.ts
index eade34b..8d53d6c 100644
--- a/server/src/index.ts
+++ b/server/src/index.ts
@@ -1,37 +1,15 @@
 
-import express, { Request, Response, NextFunction } from 'express';
-import { json as bodyJson } from 'body-parser';
-import fileupload from 'express-fileupload';
-
+import express from 'express';
+import { api } from './api';
 import { port, web_serve } from './config';
-import { addDefaultHeaders } from './headers';
-import v1 from './v1';
 
 const app = express();
 
-app.use(addDefaultHeaders);
-app.use(bodyJson());
-app.use(fileupload());
-
-app.use('/v1', v1);
-
 if (web_serve) {
     app.use('/', express.static(web_serve));
 }
 
-app.use((_req, res) => {
-    res.status(404).json({
-        status: 'error',
-        message: 'unknown resource',
-    });
-});
-
-app.use((err: Error, _req: Request, res: Response, _next: NextFunction) => {
-    return res.status(400).json({
-        status: 'error',
-        message: err.message,
-    });
-});
+app.use(api);
 
 app.listen(port);
 
diff --git a/server/src/knexconfig.ts b/server/src/knexconfig.ts
index 66f1238..846b796 100644
--- a/server/src/knexconfig.ts
+++ b/server/src/knexconfig.ts
@@ -4,6 +4,10 @@ import { join } from 'path';
 import { parse } from 'pg-connection-string';
 
 const pgconfig: any = parse(env.DATABASE_URL ?? 'postgresql://postgres@localhost/ryoko');
+const migrations = {
+    tableName: "knex_migrations",
+    directory: join(__dirname, 'migrations'),
+};
 
 export default {
     development: {
@@ -11,9 +15,12 @@ export default {
         connection: {
             filename: "./dev.sqlite3",
         },
-        migrations: {
-            tableName: "knex_migrations",
-            directory: join(__dirname, 'migrations'),
+        migrations: migrations,
+    },
+    testing: {
+        client: "sqlite3",
+        connection: {
+            filename: ":memory:",
         },
     },
     staging: {
@@ -23,10 +30,7 @@ export default {
             min: 2,
             max: 10,
         },
-        migrations: {
-            tableName: "knex_migrations",
-            directory: join(__dirname, 'migrations'),
-        },
+        migrations: migrations,
     },
     production: {
         client: "postgresql",
@@ -40,10 +44,7 @@ export default {
             min: 2,
             max: 10,
         },
-        migrations: {
-            tableName: "knex_migrations",
-            directory: join(__dirname, 'migrations'),
-        },
+        migrations: migrations,
     }
 };
 
-- 
GitLab