From 88d7a0041d324d0fd8398369a54a56c632d90d34 Mon Sep 17 00:00:00 2001 From: Yoan VALLET <ext.sopra.yvallet@grandlyon.com> Date: Thu, 12 Nov 2020 21:11:48 +0100 Subject: [PATCH] feat: review ecogesture service --- src/models/ecogesture.model.ts | 1 - src/services/__mocks__/ecogesturesData.json | 44 +++++++++ src/services/ecogesture.service.spec.ts | 103 ++++++++------------ src/services/ecogesture.service.ts | 11 ++- 4 files changed, 90 insertions(+), 69 deletions(-) create mode 100644 src/services/__mocks__/ecogesturesData.json diff --git a/src/models/ecogesture.model.ts b/src/models/ecogesture.model.ts index aedd1dded..4eb05ed76 100644 --- a/src/models/ecogesture.model.ts +++ b/src/models/ecogesture.model.ts @@ -10,6 +10,5 @@ export interface Ecogesture { fluidTypes: FluidType[] nwh: number pack: number - iconName: string unlocked?: boolean } diff --git a/src/services/__mocks__/ecogesturesData.json b/src/services/__mocks__/ecogesturesData.json new file mode 100644 index 000000000..7cd185f6b --- /dev/null +++ b/src/services/__mocks__/ecogesturesData.json @@ -0,0 +1,44 @@ +[ + { + "fluidTypes": [0], + "id": "0032", + "longDescription": "Bien souvent les chauffe-eau sont réglés pour une température de 70 °C dans le ballon, ce qui n’est pas économique et peut même être dangereux ! Au-dessus de 60 °C vous augmentez aussi l’entartrage. L’eau ne doit pas être trop froide non plus pour éviter le risque de prolifération de micro-organismes comme les légionelles. A noter : parfois l’accès au réglage n’est pas directement visible… il faut alors retirer le capot en plastique situé sous le chauffe-eau pour y accéder.", + "longName": "Je règle la température de mon eau chaude entre 55 et 60 °C.", + "nwh": 6, + "pack": 8, + "shortDescription": "", + "shortName": "Contrôle du nuage", + "usage": "Eau chaude sanitaire", + "_id": "0032", + "_rev": "1-67f1ea36efdd892c96bf64a8943154cd", + "_type": "com.grandlyon.ecolyo.ecogesture" + }, + { + "fluidTypes": [1], + "id": "0034", + "longDescription": "Si on n'a pas transpiré la journée et qu'on ne sent pas mauvais, aucune obligation de se laver tous les jours. Il est même conseillé pour la flore de l'épiderme (la fameuse barrière contre certains pathogènes) de ne pas se laver tous les jours. Vous économiserez ainsi une quantité d'eau non négligeable.", + "longName": "Je décide de supprimer une douche par semaine.", + "nwh": 5, + "pack": 6, + "shortDescription": "", + "shortName": "Vague de sécheresse", + "usage": "Eau chaude sanitaire", + "_id": "0034", + "_rev": "1-ef7ddd778254e3b7d331a88fd17f606d", + "_type": "com.grandlyon.ecolyo.ecogesture" + }, + { + "fluidTypes": [1], + "id": "0037", + "longDescription": "Le terme 'mousseur' désigne la pièce qui est située au bout de votre robinet qui permet de canaliser le jet d’eau. La plupart des robinets sont équipés de mousseurs, mais ceux-ci ne réduisent pas le débit. Il existe différents types 'd’éco-mousseurs' qui limitent le débit à des niveaux variables. Choisissez votre matériel en fonction des besoins à chaque robinet : 5 L/min sera adapté pour un robinet servant uniquement à se laver les mains mais sera assez pénible si vous devez remplir un seau !", + "longName": "J'équipe mes robinets d’éco-mousseurs.", + "nwh": 4, + "pack": 0, + "shortDescription": "", + "shortName": "Super plombier", + "usage": "Eau chaude sanitaire", + "_id": "0037", + "_rev": "1-0b2761dd4aef79556c7aef144060fde6", + "_type": "com.grandlyon.ecolyo.ecogesture" + } +] diff --git a/src/services/ecogesture.service.spec.ts b/src/services/ecogesture.service.spec.ts index a06515e45..216c73084 100644 --- a/src/services/ecogesture.service.spec.ts +++ b/src/services/ecogesture.service.spec.ts @@ -1,74 +1,37 @@ +import { Client, QueryResult } from 'cozy-client' +import { Ecogesture } from 'models' import EcogestureService from './ecogesture.service' -import { Client } from 'cozy-client' +import ecogesturesData from './__mocks__/ecogesturesData.json' const mockClient = ({ - find: jest.fn(), query: jest.fn(), create: jest.fn(), destroy: jest.fn(), } as unknown) as jest.Mocked<Client> -const mockData = [ - { - fluidTypes: [0], - id: '0032', - longDescription: - 'Bien souvent les chauffe-eau sont réglés pour une température de 70 °C dans le ballon, ce qui n’est pas économique et peut même être dangereux ! Au-dessus de 60 °C vous augmentez aussi l’entartrage. L’eau ne doit pas être trop froide non plus pour éviter le risque de prolifération de micro-organismes comme les légionelles. A noter : parfois l’accès au réglage n’est pas directement visible… il faut alors retirer le capot en plastique situé sous le chauffe-eau pour y accéder.', - longName: 'Je règle la température de mon eau chaude entre 55 et 60 °C.', - nwh: 6, - pack: 8, - shortDescription: '', - shortName: 'Contrôle du nuage', - usage: 'Eau chaude sanitaire', - _id: '0032', - _rev: '1-67f1ea36efdd892c96bf64a8943154cd', - _type: 'com.grandlyon.ecolyo.ecogesture', - }, - { - fluidTypes: [1], - id: '0034', - longDescription: - "Si on n'a pas transpiré la journée et qu'on ne sent pas mauvais, aucune obligation de se laver tous les jours. Il est même conseillé pour la flore de l'épiderme (la fameuse barrière contre certains pathogènes) de ne pas se laver tous les jours. Vous économiserez ainsi une quantité d'eau non négligeable.", - longName: 'Je décide de supprimer une douche par semaine.', - nwh: 5, - pack: 6, - shortDescription: '', - shortName: 'Vague de sécheresse', - usage: 'Eau chaude sanitaire', - _id: '0034', - _rev: '1-ef7ddd778254e3b7d331a88fd17f606d', - _type: 'com.grandlyon.ecolyo.ecogesture', - }, - { - fluidTypes: [1], - id: '0037', - longDescription: - "Le terme 'mousseur' désigne la pièce qui est située au bout de votre robinet qui permet de canaliser le jet d’eau. La plupart des robinets sont équipés de mousseurs, mais ceux-ci ne réduisent pas le débit. Il existe différents types 'd’éco-mousseurs' qui limitent le débit à des niveaux variables. Choisissez votre matériel en fonction des besoins à chaque robinet : 5 L/min sera adapté pour un robinet servant uniquement à se laver les mains mais sera assez pénible si vous devez remplir un seau !", - longName: "J'équipe mes robinets d’éco-mousseurs.", - nwh: 4, - pack: 0, - shortDescription: '', - shortName: 'Super plombier', - usage: 'Eau chaude sanitaire', - _id: '0037', - _rev: '1-0b2761dd4aef79556c7aef144060fde6', - _type: 'com.grandlyon.ecolyo.ecogesture', - }, -] - describe('Ecogesture service', () => { const ecogestureService = new EcogestureService(mockClient) describe('getAllEcogestures', () => { it('shoud return all ecogestures', async () => { - mockClient.query.mockImplementation(() => - Promise.resolve({ data: mockData }) - ) + const mockQueryResult: QueryResult<Ecogesture[]> = { + data: ecogesturesData, + bookmark: '', + next: false, + skip: 0, + } + mockClient.query.mockResolvedValueOnce(mockQueryResult) const result = await ecogestureService.getAllEcogestures() - expect(result).toEqual(mockData) + expect(result).toEqual(ecogesturesData) }) it('shoud return empty array when no ecogestures stored', async () => { - mockClient.query.mockResolvedValueOnce({ data: [] }) + const mockQueryResult: QueryResult<Ecogesture[]> = { + data: [], + bookmark: '', + next: false, + skip: 0, + } + mockClient.query.mockResolvedValueOnce(mockQueryResult) const result = await ecogestureService.getAllEcogestures() expect(result).toEqual([]) }) @@ -76,23 +39,37 @@ describe('Ecogesture service', () => { describe('deleteAllEcogestures', () => { it('shoud return true when 3 ecogestures stored', async () => { - mockClient.query.mockImplementation(() => - Promise.resolve({ data: mockData }) - ) + const mockQueryResult: QueryResult<Ecogesture[]> = { + data: ecogesturesData, + bookmark: '', + next: false, + skip: 0, + } + mockClient.query.mockResolvedValueOnce(mockQueryResult) const result = await ecogestureService.deleteAllEcogestures() expect(mockClient.destroy).toBeCalledTimes(3) expect(result).toBe(true) }) it('shoud return true when no ecogestures stored', async () => { - mockClient.query.mockImplementation(() => Promise.resolve({ data: [] })) + const mockQueryResult: QueryResult<Ecogesture[]> = { + data: [], + bookmark: '', + next: false, + skip: 0, + } + mockClient.query.mockResolvedValueOnce(mockQueryResult) const result = await ecogestureService.deleteAllEcogestures() expect(result).toBe(true) }) it('shoud return false when error happened on deletion', async () => { - mockClient.destroy.mockImplementation(() => Promise.reject(new Error())) - mockClient.query.mockImplementation(() => - Promise.resolve({ data: mockData }) - ) + const mockQueryResult: QueryResult<Ecogesture[]> = { + data: ecogesturesData, + bookmark: '', + next: false, + skip: 0, + } + mockClient.destroy.mockRejectedValue(new Error()) + mockClient.query.mockResolvedValueOnce(mockQueryResult) const result = await ecogestureService.deleteAllEcogestures() expect(result).toBe(false) }) diff --git a/src/services/ecogesture.service.ts b/src/services/ecogesture.service.ts index abd214456..6715f4c11 100644 --- a/src/services/ecogesture.service.ts +++ b/src/services/ecogesture.service.ts @@ -1,4 +1,4 @@ -import { Client } from 'cozy-client' +import { Client, QueryDefinition, QueryResult, Q } from 'cozy-client' import { ECOGESTURE_DOCTYPE } from 'doctypes' import { Ecogesture } from 'models' @@ -10,10 +10,11 @@ export default class EcogestureService { } public async getAllEcogestures(): Promise<Ecogesture[]> { - const ecogestures = await this._client.query( - this._client.find(ECOGESTURE_DOCTYPE) - ) - return ecogestures.data + const query: QueryDefinition = Q(ECOGESTURE_DOCTYPE) + const { + data: ecogestures, + }: QueryResult<Ecogesture[]> = await this._client.query(query) + return ecogestures } public async deleteAllEcogestures(): Promise<boolean> { -- GitLab