diff --git a/package.json b/package.json
index 70e176df49541f57ff67edf16646adeb0e8c473c..683a63b2323d0fbbd436cb6f1e83cb17bb5a7be2 100644
--- a/package.json
+++ b/package.json
@@ -44,6 +44,7 @@
     "@babel/preset-typescript": "^7.7.4",
     "@types/classnames": "^2.2.10",
     "@types/d3": "^5.7.2",
+    "@types/enzyme": "^3.10.8",
     "@types/lodash": "^4.14.149",
     "@types/luxon": "^1.21.0",
     "@types/node-fetch": "^2.5.7",
diff --git a/src/components/Version/Version.spec.tsx b/src/components/Version/Version.spec.tsx
new file mode 100644
index 0000000000000000000000000000000000000000..be325f3b0248bab39c8b6d0b5b1fd8052ab1a03d
--- /dev/null
+++ b/src/components/Version/Version.spec.tsx
@@ -0,0 +1,25 @@
+'use strict'
+/* eslint-env jest */
+import React from 'react'
+import { shallow } from 'enzyme'
+// import { RecoilRoot } from 'recoil'
+import Version from 'components/Version/Version'
+
+jest.mock('cozy-client', () => {
+  return {
+    useClient: jest.fn(() => {
+      return {
+        appMetadata: {
+          version: '0.0.0',
+        },
+      }
+    }),
+  }
+})
+
+describe('Version component', () => {
+  it('should be rendered correctly', () => {
+    const component = shallow(<Version />).getElement()
+    expect(component).toMatchSnapshot()
+  })
+})
diff --git a/src/components/Version/Version.tsx b/src/components/Version/Version.tsx
index 3f4e58db3c3b462c9956f146231bc5d99abb8ada..36a3b85fef38f4da00c377333c2049591b0669c3 100644
--- a/src/components/Version/Version.tsx
+++ b/src/components/Version/Version.tsx
@@ -1,8 +1,8 @@
 import React from 'react'
-import { useClient } from 'cozy-client'
+import { Client, useClient } from 'cozy-client'
 
 const Version: React.FC = () => {
-  const client = useClient()
+  const client: Client = useClient()
   return (
     <div className="version-root text-14-normal">
       {`v ${client.appMetadata.version}`}
diff --git a/src/components/Version/__snapshots__/Version.spec.tsx.snap b/src/components/Version/__snapshots__/Version.spec.tsx.snap
new file mode 100644
index 0000000000000000000000000000000000000000..c087d2c916dac1d088be590dfba0dbe339ae114a
--- /dev/null
+++ b/src/components/Version/__snapshots__/Version.spec.tsx.snap
@@ -0,0 +1,17 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Navbar component should be rendered correctly 1`] = `
+<div
+  className="version-root text-14-normal"
+>
+  v 0.0.°
+</div>
+`;
+
+exports[`Version component should be rendered correctly 1`] = `
+<div
+  className="version-root text-14-normal"
+>
+  v 0.0.0
+</div>
+`;
diff --git a/src/cozy-client.d.ts b/src/cozy-client.d.ts
index f0fe6c423f6b265c44bba13751483d3a9714a26c..7f090e3d2df79daf6ecbbf498c4b50d605063f73 100644
--- a/src/cozy-client.d.ts
+++ b/src/cozy-client.d.ts
@@ -82,7 +82,7 @@ declare module 'cozy-client' {
   }
 
   export class Client {
-    appMetadata: unknown
+    appMetadata: { version: string }
     options: ClientLogin
     idCounter: number
     isLogged: boolean
diff --git a/src/doctypes/com-grandlyon-egl-day.ts b/src/doctypes/com-grandlyon-egl-day.ts
index 8e7ce7b4a72fe0154787a4a44bd6e8e8281dc1a8..579fbd1ea3f8d67270afb4e9859e9750c782c751 100644
--- a/src/doctypes/com-grandlyon-egl-day.ts
+++ b/src/doctypes/com-grandlyon-egl-day.ts
@@ -1,21 +1 @@
-import { QueryDefinitionBuilder } from 'cozy-client'
-
 export const EGL_DAY_DOCTYPE = 'com.grandlyon.egl.day'
-
-export type EglDay = {
-  time: string
-  load: string
-  type: string
-}
-
-export function isEglDay(day: any): day is EglDay {
-  return day && 'time' in day && 'load' in day
-}
-
-export function isEglData(data: any[]): data is EglDay[] {
-  return data.every(isEglDay)
-}
-
-// queries for CozyClient
-export const eglQueryClient: QueryDefinitionBuilder = client =>
-  client.find(EGL_DAY_DOCTYPE)
diff --git a/src/doctypes/com-grandlyon-enedis-day.ts b/src/doctypes/com-grandlyon-enedis-day.ts
index 5d603130888ce2723d945d40392e59161e64a008..d052e250f78583665b91a5f663e3d4b3e2a911b8 100644
--- a/src/doctypes/com-grandlyon-enedis-day.ts
+++ b/src/doctypes/com-grandlyon-enedis-day.ts
@@ -1,20 +1 @@
-import { QueryDefinitionBuilder } from 'cozy-client'
-
 export const ENEDIS_DAY_DOCTYPE = 'com.grandlyon.enedis.day'
-
-export type EnedisDay = {
-  time: string
-  load: string
-}
-
-export function isEnedisDay(day: any): day is EnedisDay {
-  return day && 'time' in day && 'load' in day
-}
-
-export function isEnedisData(data: any[]): data is EnedisDay[] {
-  return data.every(isEnedisDay)
-}
-
-// queries for CozyClient
-export const enedisQueryClient: QueryDefinitionBuilder = client =>
-  client.find(ENEDIS_DAY_DOCTYPE)
diff --git a/src/doctypes/com-grandlyon-grdf-day.ts b/src/doctypes/com-grandlyon-grdf-day.ts
index 3949f1fcc33a16e0c753b2abbeecd270df7aed5f..fdc19a903efedd93e13e4500d28b1c8c8685c0e9 100644
--- a/src/doctypes/com-grandlyon-grdf-day.ts
+++ b/src/doctypes/com-grandlyon-grdf-day.ts
@@ -1,20 +1 @@
-import { QueryDefinitionBuilder } from 'cozy-client'
-
 export const GRDF_DAY_DOCTYPE = 'com.grandlyon.grdf.day'
-
-export type GrdfDay = {
-  time: string
-  load: string
-}
-
-export function isGrdfDay(day: any): day is GrdfDay {
-  return day && 'time' in day && 'load' in day
-}
-
-export function isGrdfData(data: any[]): data is GrdfDay[] {
-  return data.every(isGrdfDay)
-}
-
-// queries for CozyClient
-export const grdfQueryClient: QueryDefinitionBuilder = client =>
-  client.find(GRDF_DAY_DOCTYPE)
diff --git a/src/models/ecogesture.model.ts b/src/models/ecogesture.model.ts
index 4eb05ed763f96513b9499e752a3885845441ecda..843c748b85a86d5e727c7e449db3ee69f4e01a2f 100644
--- a/src/models/ecogesture.model.ts
+++ b/src/models/ecogesture.model.ts
@@ -11,4 +11,7 @@ export interface Ecogesture {
   nwh: number
   pack: number
   unlocked?: boolean
+  _id: string
+  _rev?: string
+  _type?: string
 }
diff --git a/src/models/userProfile.model.ts b/src/models/userProfile.model.ts
index a009f04f0672ec93ea953f9f0cb7fe68109ae5db..237cc7541c3c5263d40e74f01ffc79b6b5ed4b7a 100644
--- a/src/models/userProfile.model.ts
+++ b/src/models/userProfile.model.ts
@@ -8,7 +8,7 @@ export interface UserProfile {
   ecogestureHash: string
   haveSeenFavoriteModal: boolean
   isFirstConnection: boolean
-  haveSeenOldFluidModal: DateTime | false
+  haveSeenOldFluidModal: DateTime | boolean
   notificationEcogesture: string[]
   report: ReportAttributes
 }
diff --git a/src/services/__mocks__/userProfile.json b/src/services/__mocks__/userProfile.json
new file mode 100644
index 0000000000000000000000000000000000000000..930134512b606f08e3d6557ad3f076b0af657728
--- /dev/null
+++ b/src/services/__mocks__/userProfile.json
@@ -0,0 +1,17 @@
+{
+  "_id": "4d9403218ef13e65b2e3a8ad1700bc41",
+  "_rev": "16-57473da4fc26315247c217083175dfa0",
+  "challengeTypeHash": "1136feb6185c7643e071d14180c0e95782aa4ba3",
+  "ecogestureHash": "9798a0aaccb47cff906fc4931a2eff5f9371dd8b",
+  "haveSeenFavoriteModal": false,
+  "haveSeenOldFluidModal": false,
+  "id": "4d9403218ef13e65b2e3a8ad1700bc41",
+  "isFirstConnection": true,
+  "level": 1,
+  "notificationEcogesture": ["0085", "0092"],
+  "report": {
+    "haveSeenLastReport": true,
+    "monthlyReportDate": "2020-11-03T00:00:00.000+01:00",
+    "sendReportNotification": false
+  }
+}
diff --git a/src/services/initialization.service.spec.ts b/src/services/initialization.service.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..bde3373d30f4cc6fee67635480b9d4e97f2b221f
--- /dev/null
+++ b/src/services/initialization.service.spec.ts
@@ -0,0 +1,154 @@
+import { QueryResult } from 'cozy-client'
+import { DateTime } from 'luxon'
+import { UserProfile } from 'models'
+import InitializationService from './initialization.service'
+import mockClient from './__mocks__/client'
+import userProfileEntityData from './__mocks__/userProfile.json'
+
+const mockCreateIndexKonnector = jest.fn()
+jest.mock('./konnector.service', () => {
+  return jest.fn(() => {
+    return {
+      createIndexKonnector: mockCreateIndexKonnector,
+    }
+  })
+})
+
+const mockCreateIndexAccount = jest.fn()
+jest.mock('./account.service', () => {
+  return jest.fn(() => {
+    return {
+      createIndexAccount: mockCreateIndexAccount,
+    }
+  })
+})
+
+const mockGetUserProfile = jest.fn()
+jest.mock('./userProfile.service', () => {
+  return jest.fn(() => {
+    return {
+      getUserProfile: mockGetUserProfile,
+    }
+  })
+})
+
+const userProfileData = {
+  ...userProfileEntityData,
+  report: {
+    ...userProfileEntityData.report,
+    monthlyReportDate: DateTime.fromISO(
+      userProfileEntityData.report.monthlyReportDate
+    ),
+  },
+}
+
+describe('Initialization service', () => {
+  const initializationService = new InitializationService(mockClient)
+
+  describe('initIndex method', () => {
+    it('shoud return true when all indexes created', async () => {
+      const mockQueryResult: QueryResult<boolean> = {
+        data: true,
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockClient.query.mockResolvedValue(mockQueryResult)
+      mockCreateIndexKonnector.mockResolvedValue(mockQueryResult)
+      mockCreateIndexAccount.mockResolvedValue(mockQueryResult)
+      const result: boolean = await initializationService.initIndex()
+      expect(result).toBe(true)
+    })
+
+    it('shoud throw error when an index is not created', async () => {
+      let error
+      const mockQueryResult: QueryResult<boolean> = {
+        data: true,
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockClient.query.mockResolvedValue(mockQueryResult)
+      mockCreateIndexKonnector.mockRejectedValue(new Error())
+      mockCreateIndexAccount.mockResolvedValue(mockQueryResult)
+      try {
+        await initializationService.initIndex()
+      } catch (err) {
+        error = err
+      }
+      expect(error).toEqual(new Error())
+    })
+  })
+
+  describe('initUserProfile method', () => {
+    it('shoud return the userProfil when existing', async () => {
+      mockGetUserProfile.mockResolvedValue(userProfileData)
+      const result: UserProfile | null = await initializationService.initUserProfile()
+      expect(result).toEqual(userProfileData)
+    })
+
+    it('shoud create and return the userProfil when no existing', async () => {
+      const mockQueryResult: QueryResult<boolean> = {
+        data: true,
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockGetUserProfile
+        .mockResolvedValueOnce(null)
+        .mockResolvedValueOnce(userProfileData)
+      mockClient.create.mockResolvedValue(mockQueryResult)
+      const result: UserProfile | null = await initializationService.initUserProfile()
+      expect(result).toEqual(userProfileData)
+    })
+
+    it('shoud throw error when the userProfile is not created', async () => {
+      const mockQueryResult: QueryResult<boolean> = {
+        data: true,
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockGetUserProfile.mockResolvedValueOnce(null).mockResolvedValueOnce(null)
+      mockClient.create.mockResolvedValue(mockQueryResult)
+      let error
+      try {
+        await initializationService.initUserProfile()
+      } catch (err) {
+        error = err
+      }
+      expect(error).toEqual(
+        new Error('initUserProfile: UserProfile not created')
+      )
+    })
+
+    it('shoud throw error when the userProfile could not be fetched', async () => {
+      mockGetUserProfile.mockRejectedValueOnce(new Error())
+      let error
+      try {
+        await initializationService.initUserProfile()
+      } catch (err) {
+        error = err
+      }
+      expect(error).toEqual(new Error())
+    })
+
+    it('shoud throw error when the userProfile failed to be created', async () => {
+      const mockQueryResult: QueryResult<UserProfile> = {
+        data: userProfileData,
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockGetUserProfile.mockResolvedValueOnce(null)
+      mockClient.create.mockRejectedValueOnce(new Error())
+      let error
+      try {
+        await initializationService.initUserProfile()
+      } catch (err) {
+        error = err
+      }
+      expect(error).toEqual(new Error())
+    })
+  })
+})
diff --git a/src/services/initialization.service.ts b/src/services/initialization.service.ts
index 1c89702a242de5c9724fcce65e8f59b31d50a0b8..645323f610d14d0540004d40113ba245dec574f9 100644
--- a/src/services/initialization.service.ts
+++ b/src/services/initialization.service.ts
@@ -1,4 +1,4 @@
-import { Client } from 'cozy-client'
+import { Client, Q, QueryDefinition } from 'cozy-client'
 import {
   CHALLENGETYPE_DOCTYPE,
   ECOGESTURE_DOCTYPE,
@@ -50,23 +50,21 @@ export default class InitializationService {
   /*
    * Call a query with where clause to create the index if not exist
    */
-  public async createIndex(doctype: string): Promise<object> {
-    return await this._client.query(
-      this._client
-        .find(doctype)
-        .where({
-          year: {
-            $lte: 9999,
-          },
-          month: {
-            $lte: 12,
-          },
-          day: {
-            $lte: 31,
-          },
-        })
-        .limitBy(1)
-    )
+  private async createIndex(doctype: string): Promise<object> {
+    const query: QueryDefinition = Q(doctype)
+      .where({
+        year: {
+          $lte: 9999,
+        },
+        month: {
+          $lte: 12,
+        },
+        day: {
+          $lte: 31,
+        },
+      })
+      .limitBy(1)
+    return await this._client.query(query)
   }
 
   /*
diff --git a/src/services/konnector.service.spec.ts b/src/services/konnector.service.spec.ts
index 1022eda47ed7d0dc7559a43b5a42f1815199d514..9ef12d71d9aeb094da54439a5e583dc8f3e805df 100644
--- a/src/services/konnector.service.spec.ts
+++ b/src/services/konnector.service.spec.ts
@@ -21,8 +21,8 @@ jest.mock('./triggers.service', () => {
 describe('KonnectorService service', () => {
   const konnectorService = new KonnectorService(mockClient)
 
-  describe('getFluidConfig method', () => {
-    it('shoud return an array with the fluid config', async () => {
+  describe('getKonnector method', () => {
+    it('shoud return konnector', async () => {
       const mockQueryResult: QueryResult<Konnector[]> = {
         data: [konnectorsData[0]],
         bookmark: '',
@@ -33,6 +33,18 @@ describe('KonnectorService service', () => {
       const result = await konnectorService.getKonnector('enedisgrandlyon')
       expect(result).toEqual(konnectorsData[0])
     })
+
+    it('shoud return null when konnector is not found', async () => {
+      const mockQueryResult: QueryResult<Konnector[]> = {
+        data: [],
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockClient.query.mockResolvedValueOnce(mockQueryResult)
+      const result = await konnectorService.getKonnector('enedisgrandlyon')
+      expect(result).toBeNull()
+    })
   })
 
   describe('getKonnectorLastState method', () => {
diff --git a/src/services/konnector.service.ts b/src/services/konnector.service.ts
index 3784df1309b3e64f15a06657656df005ae590fa2..37f1ad53180bbfa7f6656de89e9c4f7690a9aad4 100644
--- a/src/services/konnector.service.ts
+++ b/src/services/konnector.service.ts
@@ -26,7 +26,6 @@ export default class KonnectorService {
   ): Promise<TriggerState | null> {
     const triggerService = new TriggerService(this._client)
     const trigger = await triggerService.getTrigger(account, konnector)
-    console.log(trigger)
     if (trigger) {
       const triggerState = await triggerService.fetchTriggerState(trigger)
       return triggerState
diff --git a/src/services/mail.service.spec.ts b/src/services/mail.service.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5c238a24ac27bbfc1e18fe99282c5f974949a338
--- /dev/null
+++ b/src/services/mail.service.spec.ts
@@ -0,0 +1,129 @@
+import MailService from './mail.service'
+import mockClient from './__mocks__/client'
+
+describe('Mail service', () => {
+  const mailService = new MailService()
+
+  describe('SendMail service', () => {
+    it('should return void when mail is sent', async () => {
+      const mockMailData = {
+        mode: 'noreply',
+        subject: '[Ecolyo] - Bienvenu',
+        parts: [
+          {
+            type: 'text/html',
+            body: '<html>Body</html>',
+          },
+        ],
+      }
+      const result: void = await mailService.SendMail(mockClient, mockMailData)
+      expect(result).toEqual(undefined)
+    })
+
+    it('should throw error when failed to send mail', async () => {
+      let error
+      const mockMailData = {
+        mode: 'noreply',
+        subject: '[Ecolyo] - Bienvenu',
+        parts: [
+          {
+            type: 'text/html',
+            body: '<html>Body</html>',
+          },
+        ],
+      }
+      mockClient.collection('').create.mockRejectedValue(new Error())
+      try {
+        await mailService.SendMail(mockClient, mockMailData)
+      } catch (err) {
+        error = err
+      }
+      expect(error).toEqual(new Error('Failed to send mail'))
+    })
+  })
+
+  describe('CreateBodyWelcome service', () => {
+    it('should return body mail with the right values when url is consumption', () => {
+      const result: string = mailService.CreateBodyWelcome(
+        'user',
+        'https://user-ecolyo.test.com/#/consumption'
+      )
+      expect(result).toEqual(expect.stringContaining('Bonjour user'))
+      expect(result).toEqual(
+        expect.stringContaining(
+          '<a class="link" href="https://user-ecolyo.test.com/#/consumption">https://user-ecolyo.test.com/#/consumption</a>'
+        )
+      )
+      expect(result).toEqual(
+        expect.stringContaining(
+          '<a class="btnEcolyo" href="https://user-ecolyo.test.com/#/consumption">J\'ai compris</a>'
+        )
+      )
+      expect(result).toEqual(
+        expect.stringContaining(
+          '<a href="https://user-ecolyo.test.com/#/options" style="color: #ffffff">Unsubscribe</a>'
+        )
+      )
+    })
+    it('should return body mail with the right values when url is options', () => {
+      const result: string = mailService.CreateBodyWelcome(
+        'user',
+        'https://user-ecolyo.test.com/#/options'
+      )
+      expect(result).toEqual(expect.stringContaining('Bonjour user'))
+      expect(result).toEqual(
+        expect.stringContaining(
+          '<a class="link" href="https://user-ecolyo.test.com/#/options">https://user-ecolyo.test.com/#/options</a>'
+        )
+      )
+      expect(result).toEqual(
+        expect.stringContaining(
+          '<a class="btnEcolyo" href="https://user-ecolyo.test.com/#/options">J\'ai compris</a>'
+        )
+      )
+      expect(result).toEqual(
+        expect.stringContaining(
+          '<a href="https://user-ecolyo.test.com/#/options" style="color: #ffffff">Unsubscribe</a>'
+        )
+      )
+    })
+  })
+
+  describe('CreateBodyMonthlyReport service', () => {
+    it('should return body mail with the right values when url is different from bilan', () => {
+      const result: string = mailService.CreateBodyMonthlyReport(
+        'user',
+        'https://user-ecolyo.test.com'
+      )
+      expect(result).toEqual(expect.stringContaining('Bonjour user'))
+      expect(result).toEqual(
+        expect.stringContaining(
+          '<a class="btnEcolyo" href="https://user-ecolyo.test.com/#/bilan">'
+        )
+      )
+      expect(result).toEqual(
+        expect.stringContaining(
+          '<a href="https://user-ecolyo.test.com/#/options" style="color: #ffffff">Unsubscribe</a>'
+        )
+      )
+    })
+
+    it('should return body mail with the right values when url is equals to bilan', () => {
+      const result: string = mailService.CreateBodyMonthlyReport(
+        'user',
+        'https://user-ecolyo.test.com/#/bilan'
+      )
+      expect(result).toEqual(expect.stringContaining('Bonjour user'))
+      expect(result).toEqual(
+        expect.stringContaining(
+          '<a class="btnEcolyo" href="https://user-ecolyo.test.com/#/bilan">'
+        )
+      )
+      expect(result).toEqual(
+        expect.stringContaining(
+          '<a href="https://user-ecolyo.test.com/#/options" style="color: #ffffff">Unsubscribe</a>'
+        )
+      )
+    })
+  })
+})
diff --git a/src/services/mail.service.ts b/src/services/mail.service.ts
index 52d54215d68b2606554b9d87c63ac749bfdf3099..ae9f90bbf7386faaf74e6f12c095309073bb352b 100644
--- a/src/services/mail.service.ts
+++ b/src/services/mail.service.ts
@@ -7,11 +7,11 @@ export default class MailService {
   ): Promise<void> {
     try {
       const jobCollection = client.collection('io.cozy.jobs')
-      jobCollection.create('sendmail', mailInfo)
-    } catch (e) {
+      await jobCollection.create('sendmail', mailInfo)
+    } catch (error) {
       // eslint-disable-next-line no-console
-      console.error(e)
-      throw e
+      console.log(error)
+      throw new Error('Failed to send mail')
     }
   }
   public CreateBodyWelcome(username: string, clientUrl: string) {
@@ -415,6 +415,8 @@ export default class MailService {
     if (!clientUrl.includes('bilan')) {
       unsubscibeUrl = clientUrl + '/#/options'
       clientUrl = clientUrl + '/#/bilan'
+    } else {
+      unsubscibeUrl = clientUrl.replace('bilan', 'options')
     }
     return `
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional //EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
diff --git a/src/services/queryRunner.service.spec.ts b/src/services/queryRunner.service.spec.ts
index e829f7e30a1c0782460eadc7e07c2c995d8c8b45..6228f83f6a950f40e5b6e34e556747ee5ad0e86f 100644
--- a/src/services/queryRunner.service.spec.ts
+++ b/src/services/queryRunner.service.spec.ts
@@ -498,6 +498,36 @@ describe('queryRunner service', () => {
     })
 
     it('should return the data of the elec fluid and month time step with start year <> end year', async () => {
+      const mockTimePeriod = {
+        startDate: DateTime.fromISO('2019-12-01T00:00:00.000'),
+        endDate: DateTime.fromISO('2020-10-30T23:59:59.999'),
+      }
+      const expectedResult: Dataload[] = [
+        {
+          date: DateTime.fromISO('2020-09-01T00:00:00.000'),
+          value: 125.25,
+        },
+        {
+          date: DateTime.fromISO('2020-10-01T00:00:00.000'),
+          value: 220.5,
+        },
+      ]
+      const mockQueryResult: QueryResult<DataloadEntity[]> = {
+        data: [loadMonthData[0], loadMonthData[1]],
+        bookmark: '',
+        next: false,
+        skip: 0,
+      }
+      mockClient.query.mockResolvedValue(mockQueryResult)
+      const result: Dataload[] | null = await queryRunner.fetchFluidData(
+        mockTimePeriod,
+        TimeStep.MONTH,
+        FluidType.ELECTRICITY
+      )
+      expect(result).toEqual(expectedResult)
+    })
+
+    it('should return the data of the elec fluid and month time step with period >=12 months', async () => {
       const mockTimePeriod = {
         startDate: DateTime.fromISO('2019-12-01T00:00:00.000'),
         endDate: DateTime.fromISO('2020-11-30T23:59:59.999'),
@@ -534,7 +564,7 @@ describe('queryRunner service', () => {
     it('should return the data of the elec fluid and day time step with start month <> end month', async () => {
       const mockTimePeriod = {
         startDate: DateTime.fromISO('2020-10-15T00:00:00.000'),
-        endDate: DateTime.fromISO('2020-11-5T23:59:59.999'),
+        endDate: DateTime.fromISO('2020-11-05T23:59:59.999'),
       }
       const expectedResult: Dataload[] = [
         {
diff --git a/src/utils/hash.ts b/src/utils/hash.ts
index 89b4eadadd5cdf4f58e44b9c1225bd3e1bd30908..5ce23aa0cfeac129e942bd629e3470a8529d3a79 100644
--- a/src/utils/hash.ts
+++ b/src/utils/hash.ts
@@ -1,8 +1,9 @@
+import { ChallengeType, Ecogesture } from 'models'
 import hash from 'object-hash'
 
 /***
  * sha1 hex encoding (default)
  */
-export function hashFile(file: File) {
+export function hashFile(file: any) {
   return hash(file)
 }
diff --git a/yarn.lock b/yarn.lock
index c1e43b85c1ae4f73d349cd137acc88163d848965..1552e305724324d5340069b55918d3dfba56f196 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1362,6 +1362,13 @@
   dependencies:
     "@babel/types" "^7.3.0"
 
+"@types/cheerio@*":
+  version "0.22.22"
+  resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.22.tgz#ae71cf4ca59b8bbaf34c99af7a5d6c8894988f5f"
+  integrity sha512-05DYX4zU96IBfZFY+t3Mh88nlwSMtmmzSYaQkKN48T495VV1dkHSah6qYyDTN5ngaS0i0VonH37m+RuzSM0YiA==
+  dependencies:
+    "@types/node" "*"
+
 "@types/classnames@^2.2.10":
   version "2.2.10"
   resolved "https://registry.yarnpkg.com/@types/classnames/-/classnames-2.2.10.tgz#cc658ca319b6355399efc1f5b9e818f1a24bf999"
@@ -1564,6 +1571,14 @@
   resolved "https://registry.yarnpkg.com/@types/debug/-/debug-4.1.5.tgz#b14efa8852b7768d898906613c23f688713e02cd"
   integrity sha512-Q1y515GcOdTHgagaVFhHnIFQ38ygs/kmxdNpvpou+raI9UO3YZcHDngBSYKQklcKlvA7iuQlmIKbzvmxcOE9CQ==
 
+"@types/enzyme@^3.10.8":
+  version "3.10.8"
+  resolved "https://registry.yarnpkg.com/@types/enzyme/-/enzyme-3.10.8.tgz#ad7ac9d3af3de6fd0673773123fafbc63db50d42"
+  integrity sha512-vlOuzqsTHxog6PV79+tvOHFb6hq4QZKMq1lLD9MaWD1oec2lHTKndn76XOpSwCA0oFTaIbKVPrgM3k78Jjd16g==
+  dependencies:
+    "@types/cheerio" "*"
+    "@types/react" "*"
+
 "@types/eslint-visitor-keys@^1.0.0":
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#1ee30d79544ca84d68d4b3cdb0af4f205663dd2d"