From 87d98d744120f58757162912cc8ef5656a0edd88 Mon Sep 17 00:00:00 2001
From: Yoan VALLET <ext.sopra.yvallet@grandlyon.com>
Date: Fri, 13 Nov 2020 14:50:07 +0100
Subject: [PATCH] feat: test for connection service

---
 src/services/connection.service.spec.ts | 98 +++++++++++++++++++++++++
 src/services/connection.service.ts      |  2 +-
 2 files changed, 99 insertions(+), 1 deletion(-)
 create mode 100644 src/services/connection.service.spec.ts

diff --git a/src/services/connection.service.spec.ts b/src/services/connection.service.spec.ts
new file mode 100644
index 000000000..80abf8afd
--- /dev/null
+++ b/src/services/connection.service.spec.ts
@@ -0,0 +1,98 @@
+import ConnectionService from './connection.service'
+import mockClient from './__mocks__/client'
+import konnectorsData from './__mocks__/konnectorsData.json'
+import accountsData from './__mocks__/accountsData.json'
+import triggerData from './__mocks__/triggersData.json'
+
+const mockGetKonnector = jest.fn()
+jest.mock('./konnector.service', () => {
+  return jest.fn(() => {
+    return {
+      getKonnector: mockGetKonnector,
+    }
+  })
+})
+
+const mockCreateAccount = jest.fn()
+jest.mock('./account.service', () => {
+  return jest.fn(() => {
+    return {
+      createAccount: mockCreateAccount,
+    }
+  })
+})
+
+const mockCreateTrigger = jest.fn()
+jest.mock('./triggers.service', () => {
+  return jest.fn(() => {
+    return {
+      createTrigger: mockCreateTrigger,
+    }
+  })
+})
+
+describe('Connection service', () => {
+  const connectionService = new ConnectionService(mockClient)
+
+  describe('connectNewUser method', () => {
+    it('shoud return created Trigger', async () => {
+      mockGetKonnector.mockResolvedValueOnce(konnectorsData[0])
+      mockCreateAccount.mockResolvedValueOnce(accountsData[0])
+      mockCreateTrigger.mockResolvedValueOnce(triggerData[0])
+      const mockResult = { account: accountsData[0], trigger: triggerData[0] }
+      const result = await connectionService.connectNewUser(
+        konnectorsData[0]._id,
+        'login',
+        'password'
+      )
+      expect(result).toEqual(mockResult)
+    })
+
+    it('shoud throw error when konnector is not found', async () => {
+      let error
+      try {
+        await connectionService.connectNewUser(
+          konnectorsData[0]._id,
+          'login',
+          'password'
+        )
+      } catch (err) {
+        error = err
+      }
+      expect(error).toEqual(
+        new Error(`Could not find konnector for ${konnectorsData[0]._id}`)
+      )
+    })
+
+    it('shoud throw error when account is not created', async () => {
+      mockGetKonnector.mockResolvedValueOnce(konnectorsData[0])
+      let error
+      try {
+        await connectionService.connectNewUser(
+          konnectorsData[0]._id,
+          'login',
+          'password'
+        )
+      } catch (err) {
+        error = err
+      }
+      expect(error).toEqual(new Error(`Error during account creation`))
+    })
+
+    it('shoud throw error when trigger is not created', async () => {
+      mockGetKonnector.mockResolvedValueOnce(konnectorsData[0])
+      mockCreateAccount.mockResolvedValueOnce(accountsData[0])
+      let error
+      try {
+        await connectionService.connectNewUser(
+          konnectorsData[0]._id,
+          'login',
+          'password'
+        )
+      } catch (err) {
+        error = err
+      }
+      expect(error).toEqual(new Error(`Error during trigger creation`))
+    })
+  })
+})
diff --git a/src/services/connection.service.ts b/src/services/connection.service.ts
index 3c22206fc..280a2e06b 100644
--- a/src/services/connection.service.ts
+++ b/src/services/connection.service.ts
@@ -15,7 +15,7 @@ export default class ConnectionService {
     konnectorId: string,
     login: string,
     password: string
-  ) {
+  ): Promise<{ account: Account; trigger: Trigger }> {
     // Retrieve konnector
     const konnectorService = new KonnectorService(this._client)
     const konnector: Konnector = await konnectorService.getKonnector(
-- 
GitLab