From bf6cec9737d03b9abdd2d30188bc27da1e8f9674 Mon Sep 17 00:00:00 2001
From: Himanshu Kandpal <110757485+himanshukandpal-28@users.noreply.github.com>
Date: Tue, 18 Oct 2022 03:10:49 +0530
Subject: [PATCH] Create GitHub Action to check test for backend (#20)

* Add ESLint to Frontend Package
* Add Eslint to Backend
* Add run test github action

Co-authored-by: himanshukandpal-28 <himanshukandpal28@gmail.com>

Fixes #12
---
 .github/workflows/backend.yml |  6 +++
 backend/package.json          |  2 +-
 backend/test/events.spec.ts   | 84 ++++++++++++++++++-----------------
 3 files changed, 51 insertions(+), 41 deletions(-)

diff --git a/.github/workflows/backend.yml b/.github/workflows/backend.yml
index 22fa385..60488b5 100644
--- a/.github/workflows/backend.yml
+++ b/.github/workflows/backend.yml
@@ -20,6 +20,9 @@ jobs:
               with:
                   node-version: ${{ matrix.node }}
 
+            - name: Start MongoDB
+              uses: supercharge/mongodb-github-action@1.8.0
+
             - name: Cache node_modules
               uses: actions/cache@v2
               with:
@@ -32,3 +35,6 @@ jobs:
 
             - name: Run Build
               run: npm run build
+
+            - name: Run Test
+              run: npm run test
diff --git a/backend/package.json b/backend/package.json
index e9674fc..ffcd2cf 100644
--- a/backend/package.json
+++ b/backend/package.json
@@ -8,7 +8,7 @@
     "start": "node dist/index.js",
     "dev": "concurrently \"npx tsc --watch\" \"nodemon -q dist/index.js\"",
     "test": "cross-env NODE_ENV=test mocha --exit dist/test/**.js",
-    "lint": "eslint 'src/**/*.{js,ts,tsx}' --fix",
+    "lint": "eslint 'src/**/*.{js,ts,tsx}' 'test/**/*.{js,ts,tsx}' --fix",
     "lint:test": "eslint \"{src,apps,libs,test}/**/*.ts\""
   },
   "author": "",
diff --git a/backend/test/events.spec.ts b/backend/test/events.spec.ts
index dd713b2..384dfcc 100644
--- a/backend/test/events.spec.ts
+++ b/backend/test/events.spec.ts
@@ -3,58 +3,62 @@ import dotenv from 'dotenv';
 import { after, before, describe, it } from 'mocha';
 import * as request from 'request';
 import { APIServer } from '../src/APIServer';
-import { EventModel } from "../src/model/events";
+import { EventModel } from '../src/model/events';
 
 const expect = chai.expect;
 dotenv.config();
 
 const port = process.env.PORT || 8000;
-const eventRequest: request.RequestAPI<request.Request, request.CoreOptions, request.RequiredUriUrl>
-    = request.defaults({ baseUrl: `http://localhost:${port}` });
+const eventRequest: request.RequestAPI<request.Request, request.CoreOptions, request.RequiredUriUrl> = request.defaults(
+  { baseUrl: `http://localhost:${port}` },
+);
 
 describe('Event controller Tests', () => {
+  before(() => {
+    return APIServer.start();
+  });
 
-    before(() => {
-        return APIServer.start();
-    });
+  after(() => {
+    return APIServer.stop();
+  });
 
-    after(() => {
-        return APIServer.stop();
-    });
+  const testEvent: EventModel = {
+    name: 'test event' + Math.random(),
+    link: 'https://example.com',
+    date: new Date(),
+    organizer: 'test orga',
+  };
 
-    let testEvent: EventModel = {
-        name: "test event" + Math.random(),
-        link: "https://example.com",
-        date: new Date(),
-        organizer: "test orga",
-    }
-
-    describe('The event api', () => {
-        it('should should create an event', (done) => {
-            eventRequest.post({
-                body: testEvent,
-                json: true,
-                url: '/api/events'
-            }, (error: any, response, body) => {
-                expect(response.statusCode).to.eq(200);
-                expectIdenticalEvents(JSON.parse(JSON.stringify(testEvent)), response.body);
-                done();
-            });
-        });
-
-        it('should list all events', (done) => {
-            eventRequest.get("/api/events", { json: true }, (error, response, body) => {
-                expectIdenticalEvents(JSON.parse(JSON.stringify(testEvent)), response.body.find((event: any) => event.name == testEvent.name));
-                done();
-            });
-        });
+  describe('The event api', () => {
+    it('should should create an event', done => {
+      eventRequest.post(
+        {
+          body: testEvent,
+          json: true,
+          url: '/api/events',
+        },
+        (error: any, response, body) => {
+          expect(response.statusCode).to.eq(200);
+          expectIdenticalEvents(JSON.parse(JSON.stringify(testEvent)), response.body);
+          done();
+        },
+      );
     });
 
+    it('should list all events', done => {
+      eventRequest.get('/api/events', { json: true }, (error, response, body) => {
+        expectIdenticalEvents(
+          JSON.parse(JSON.stringify(testEvent)),
+          response.body.find((event: any) => event.name == testEvent.name),
+        );
+        done();
+      });
+    });
+  });
 });
 
-
 const expectIdenticalEvents = (expected: EventModel, actual: any) => {
-    for (const [key, value] of Object.entries(expected)) {
-        expect(actual[key].toString()).to.eq(value);
-    }
-}
\ No newline at end of file
+  for (const [key, value] of Object.entries(expected)) {
+    expect(actual[key].toString()).to.eq(value);
+  }
+};