From 7c866961fae167027157b73a14f1e7467ca0c337 Mon Sep 17 00:00:00 2001
From: shreyvishal <shreya.vishal@eminds.ai>
Date: Thu, 11 Jan 2024 13:57:06 +0530
Subject: [PATCH] Added:Some Setup for unit-tesitng

---
 jest.config.ts                             | 15 ++++++
 package.json                               |  7 ++-
 src/gcl/gcl.controller.ts                  |  4 +-
 src/index.ts                               | 13 ++---
 src/inversify/inversify.config.ts          |  2 +-
 src/test/industry-4.0/industry-4.0.spec.ts | 59 ++++++++++++++++++++++
 tsconfig.json                              |  4 +-
 7 files changed, 91 insertions(+), 13 deletions(-)
 create mode 100644 jest.config.ts
 create mode 100644 src/test/industry-4.0/industry-4.0.spec.ts

diff --git a/jest.config.ts b/jest.config.ts
new file mode 100644
index 0000000..7f06a54
--- /dev/null
+++ b/jest.config.ts
@@ -0,0 +1,15 @@
+module.exports = {
+  roots: ["<rootDir>/src"],
+  testMatch: [
+    "**/__tests__/**/*.+(ts|tsx|js)",
+    "**/?(*.)+(spec|test).+(ts|tsx|js)"
+  ],
+  transform: {
+    "^.+\\.(ts|tsx)$": "ts-jest"
+  },
+  testEnvironment: "node",
+  preset: "ts-jest",
+  moduleNameMapper: {
+    "^@/(.*)$": "<rootDir>/src/$1"
+  }
+};
diff --git a/package.json b/package.json
index b372469..6d18954 100644
--- a/package.json
+++ b/package.json
@@ -4,9 +4,9 @@
   "description": "",
   "main": "index.js",
   "scripts": {
-    "test": "jest --testTimeout=20000 --watch",
+    "test": "jest",
     "test:watch": "NODE_ENV=dev jest --watch",
-    "test:coverage": "NODE_ENV=dev jest --testTimeout=20000 --coverage",
+    "test:coverage": "jest --testTimeout=20000 --coverage",
     "dev": "nodemon src/index.ts",
     "start": "node dist/index.js",
     "build": "rimraf dist && npx tsc"
@@ -23,6 +23,7 @@
     "express": "^4.18.2",
     "ini": "^4.1.1",
     "inversify": "^6.0.2",
+    "inversify-binding-decorators": "^4.0.0",
     "inversify-express-utils": "^6.4.6",
     "jsonata": "^2.0.3",
     "moment": "^2.29.4",
@@ -36,9 +37,11 @@
     "@types/cors": "^2.8.17",
     "@types/express": "^4.17.21",
     "@types/ini": "^1.3.33",
+    "@types/jest": "^29.5.11",
     "@types/uuid": "^9.0.7",
     "jest": "^29.7.0",
     "nodemon": "^3.0.1",
+    "ts-jest": "^29.1.1",
     "ts-node": "^10.9.1",
     "typescript": "^5.2.2"
   }
diff --git a/src/gcl/gcl.controller.ts b/src/gcl/gcl.controller.ts
index b0d3f2e..52e4430 100644
--- a/src/gcl/gcl.controller.ts
+++ b/src/gcl/gcl.controller.ts
@@ -1,4 +1,4 @@
-import { inject } from "inversify";
+import { inject, injectable } from "inversify";
 import { controller, httpPost, requestBody } from "inversify-express-utils";
 import { GCLService } from "./gcl.service";
 import { XInputService } from "../x-input/x-input.service";
@@ -8,7 +8,7 @@ export class GCLController {
   constructor(
     @inject(GCLService) private service: GCLService,
     @inject(XInputService) private xinputService: XInputService
-  ) { }
+  ) {}
 
   @httpPost("search")
   public async search(@requestBody() body: any): Promise<any> {
diff --git a/src/index.ts b/src/index.ts
index eca0f53..27bdb33 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -1,3 +1,4 @@
+import "reflect-metadata";
 import express, { Application, NextFunction } from "express";
 import { container, server } from "./inversify/inversify.config";
 import "./gcl/gcl.controller";
@@ -40,12 +41,12 @@ class App {
   }
 
   private setupMiddlewares() {
-    const errorHandlerMiddleware = container.get<ErrorHandlerMiddleware>(
-      ErrorHandlerMiddleware
-    );
-    this.app.use(
-      errorHandlerMiddleware.handleError.bind(errorHandlerMiddleware)
-    );
+    // const errorHandlerMiddleware = container.get<ErrorHandlerMiddleware>(
+    //   ErrorHandlerMiddleware
+    // );
+    // this.app.use(
+    //   errorHandlerMiddleware.handleError.bind(errorHandlerMiddleware)
+    // );
   }
 }
 
diff --git a/src/inversify/inversify.config.ts b/src/inversify/inversify.config.ts
index 2c85ae1..42a421d 100644
--- a/src/inversify/inversify.config.ts
+++ b/src/inversify/inversify.config.ts
@@ -20,6 +20,6 @@ container.bind<PSClientService>(PSClientService).to(PSClientService);
 container.bind<AppLogger>(AppLogger).to(AppLogger);
 container.bind<HttpClient>(HttpClient).to(HttpClient);
 container.bind<XInputService>(XInputService).to(XInputService);
-container.bind<ErrorHandlerMiddleware>(ErrorHandlerMiddleware).toSelf();
+// container.bind<ErrorHandlerMiddleware>(ErrorHandlerMiddleware).toSelf();
 
 export { server, container };
diff --git a/src/test/industry-4.0/industry-4.0.spec.ts b/src/test/industry-4.0/industry-4.0.spec.ts
new file mode 100644
index 0000000..96ca452
--- /dev/null
+++ b/src/test/industry-4.0/industry-4.0.spec.ts
@@ -0,0 +1,59 @@
+import "reflect-metadata";
+import { describe, it, expect, beforeEach } from "@jest/globals";
+import { Container } from "inversify";
+import { GCLController } from "../../gcl/gcl.controller";
+import { GCLService } from "../../gcl/gcl.service";
+import { XInputService } from "../../x-input/x-input.service";
+import { TLService } from "../../tl/tl.service";
+import { AppLogger } from "../../app/app.logger";
+import { PSClientService } from "../../psclient/psclient.service";
+import { ConfigService } from "../../config/config.service";
+import HttpClient from "../../httpclient/http.service";
+import { ErrorHandlerMiddleware } from "../../middleware/errorhandler.middleware";
+
+const container = new Container();
+// container.bind();
+
+describe("GCL Controller Testing", () => {
+  // let appLogger = new AppLogger();
+  // let configService = new ConfigService();
+  // let httpClient = new HttpClient(appLogger);
+  // let xinputService = new XInputService(appLogger, httpClient);
+  // let psClientService = new PSClientService(configService, httpClient);
+  // let tlService = new TLService(appLogger);
+  // let gclService = new GCLService(tlService, psClientService);
+  // let gclController = new GCLController(gclService, xinputService);
+  // let errorHandlerMiddleware = new ErrorHandlerMiddleware(appLogger, tlService);
+
+  let container: Container;
+
+  beforeEach(async () => {
+    container = new Container();
+    container.bind<GCLController>(GCLController).toSelf();
+    container.bind<GCLService>(GCLService).toSelf();
+
+    // appLogger = new AppLogger();
+    // configService = new ConfigService();
+    // httpClient = new HttpClient(appLogger);
+    // xinputService = new XInputService(appLogger, httpClient);
+    // psClientService = new PSClientService(configService, httpClient);
+    // tlService = new TLService(appLogger);
+    // gclService = new GCLService(tlService, psClientService);
+    // gclController = new GCLController(gclService, xinputService);
+    // errorHandlerMiddleware = new ErrorHandlerMiddleware(appLogger, tlService);
+  });
+
+  it("should be defined", () => {
+    // let controller = container.resolve(GCLController);
+    let service = container.resolve(GCLService);
+
+    // const errorHandlerMiddleware = container.get<ErrorHandlerMiddleware>(
+    //     ErrorHandlerMiddleware
+    //   );
+    //   this.app.use(
+    //     errorHandlerMiddleware.handleError.bind(errorHandlerMiddleware)
+    //   );
+    console.log("======>", service);
+    expect(service).toBeDefined();
+  });
+});
diff --git a/tsconfig.json b/tsconfig.json
index 7c78d7f..34e70f7 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -16,7 +16,7 @@
     // "lib": [],                                        /* Specify a set of bundled library declaration files that describe the target runtime environment. */
     // "jsx": "preserve",                                /* Specify what JSX code is generated. */
     // "experimentalDecorators": true,                   /* Enable experimental support for TC39 stage 2 draft decorators. */
-    // "emitDecoratorMetadata": true,                    /* Emit design-type metadata for decorated declarations in source files. */
+    "emitDecoratorMetadata": true /* Emit design-type metadata for decorated declarations in source files. */,
     // "jsxFactory": "",                                 /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
     // "jsxFragmentFactory": "",                         /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
     // "jsxImportSource": "",                            /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
@@ -100,7 +100,7 @@
 
     /* Completeness */
     // "skipDefaultLibCheck": true,                      /* Skip type checking .d.ts files that are included with TypeScript. */
-    "skipLibCheck": true, /* Skip type checking all .d.ts files. */
+    "skipLibCheck": true /* Skip type checking all .d.ts files. */,
     "experimentalDecorators": true
   }
 }
-- 
GitLab