diff --git a/src/services/fluid.service.spec.ts b/src/services/fluid.service.spec.ts index 49ab473464b6d06f4ad9e5a788796987310c0286..e8e848c6007b3848530bf85bf8a021045acb0fb6 100644 --- a/src/services/fluid.service.spec.ts +++ b/src/services/fluid.service.spec.ts @@ -1,25 +1,176 @@ import FluidService from './fluid.service' -import { Client } from 'cozy-client' +import mockClient from './__mocks__/client' +import accountsData from './__mocks__/accountsData.json' +import konnectorsData from './__mocks__/konnectorsData.json' +import triggersData from './__mocks__/triggersData.json' +import triggerStateData from './__mocks__/triggerStateData.json' +import { DateTime } from 'luxon' +import { FluidType } from 'enum/fluid.enum' +import { FluidStatus } from 'models' -const mockClient = ({ - find: jest.fn(), - query: jest.fn(), - create: jest.fn(), - destroy: jest.fn(), -} as unknown) as jest.Mocked<Client> +const mockGetAccountByType = jest.fn() +jest.mock('./account.service', () => { + return jest.fn(() => { + return { + getAccountByType: mockGetAccountByType, + } + }) +}) + +const mockGetKonnector = jest.fn() +jest.mock('./konnector.service', () => { + return jest.fn(() => { + return { + getKonnector: mockGetKonnector, + } + }) +}) + +const mockGetTrigger = jest.fn() +const mockFetchTriggerState = jest.fn() +jest.mock('./triggers.service', () => { + return jest.fn(() => { + return { + getTrigger: mockGetTrigger, + fetchTriggerState: mockFetchTriggerState, + } + }) +}) -const mockData = {} +const mockFetchAllLastDateData = jest.fn() +jest.mock('./consumption.service', () => { + return jest.fn(() => { + return { + fetchAllLastDateData: mockFetchAllLastDateData, + } + }) +}) describe('FLuid service', () => { const fluidService = new FluidService(mockClient) - describe('getFluidStatus', () => { - it('shoud return fluid status', async () => { - // mockClient.query.mockImplementation(() => - // Promise.resolve({ data: mockData }) - // ) - const result = await fluidService.getFluidStatus() - expect(result).toEqual(mockData) + describe('getFluidStatus method', () => { + it('shoud return fluid status for all fluids', async () => { + const mockLastDataDates: (DateTime | null)[] = [ + DateTime.local(), + DateTime.local(), + DateTime.local(), + ] + const mockResult: FluidStatus[] = [ + { + fluidType: FluidType.ELECTRICITY, + status: triggerStateData.status, + lastDataDate: mockLastDataDates[FluidType.ELECTRICITY], + }, + { + fluidType: FluidType.WATER, + status: triggerStateData.status, + lastDataDate: mockLastDataDates[FluidType.WATER], + }, + { + fluidType: FluidType.GAS, + status: triggerStateData.status, + lastDataDate: mockLastDataDates[FluidType.GAS], + }, + ] + mockGetAccountByType + .mockResolvedValueOnce(accountsData[0]) + .mockResolvedValueOnce(accountsData[1]) + .mockResolvedValueOnce(accountsData[2]) + mockGetKonnector + .mockResolvedValueOnce(konnectorsData[0]) + .mockResolvedValueOnce(konnectorsData[1]) + .mockResolvedValueOnce(konnectorsData[2]) + mockGetTrigger + .mockResolvedValueOnce(triggersData[0]) + .mockResolvedValueOnce(triggersData[1]) + .mockResolvedValueOnce(triggersData[2]) + mockFetchTriggerState.mockResolvedValue(triggerStateData) + mockFetchAllLastDateData.mockResolvedValue(mockLastDataDates) + const result: FluidStatus[] = await fluidService.getFluidStatus() + expect(result).toEqual(mockResult) + }) + + it('shoud return fluid status with null status', async () => { + const mockLastDataDates: (DateTime | null)[] = [ + DateTime.local(), + DateTime.local(), + DateTime.local(), + ] + const mockResult: FluidStatus[] = [ + { + fluidType: FluidType.ELECTRICITY, + status: null, + lastDataDate: mockLastDataDates[FluidType.ELECTRICITY], + }, + { + fluidType: FluidType.WATER, + status: null, + lastDataDate: mockLastDataDates[FluidType.WATER], + }, + { + fluidType: FluidType.GAS, + status: null, + lastDataDate: mockLastDataDates[FluidType.GAS], + }, + ] + mockGetAccountByType + .mockResolvedValueOnce(accountsData[0]) + .mockResolvedValueOnce(accountsData[1]) + .mockResolvedValueOnce(accountsData[2]) + mockGetKonnector + .mockResolvedValueOnce(konnectorsData[0]) + .mockResolvedValueOnce(konnectorsData[1]) + .mockResolvedValueOnce(konnectorsData[2]) + mockGetTrigger + .mockResolvedValueOnce(null) + .mockResolvedValueOnce(null) + .mockResolvedValueOnce(null) + mockFetchTriggerState.mockResolvedValue(triggerStateData) + mockFetchAllLastDateData.mockResolvedValue(mockLastDataDates) + const result: FluidStatus[] = await fluidService.getFluidStatus() + expect(result).toEqual(mockResult) + }) + + it('shoud return fluid status with null laste date for water and gaz', async () => { + const mockLastDataDates: (DateTime | null)[] = [ + DateTime.local(), + null, + null, + ] + const mockResult: FluidStatus[] = [ + { + fluidType: FluidType.ELECTRICITY, + status: triggerStateData.status, + lastDataDate: mockLastDataDates[FluidType.ELECTRICITY], + }, + { + fluidType: FluidType.WATER, + status: triggerStateData.status, + lastDataDate: null, + }, + { + fluidType: FluidType.GAS, + status: triggerStateData.status, + lastDataDate: null, + }, + ] + mockGetAccountByType + .mockResolvedValueOnce(accountsData[0]) + .mockResolvedValueOnce(accountsData[1]) + .mockResolvedValueOnce(accountsData[2]) + mockGetKonnector + .mockResolvedValueOnce(konnectorsData[0]) + .mockResolvedValueOnce(konnectorsData[1]) + .mockResolvedValueOnce(konnectorsData[2]) + mockGetTrigger + .mockResolvedValueOnce(triggersData[0]) + .mockResolvedValueOnce(triggersData[1]) + .mockResolvedValueOnce(triggersData[2]) + mockFetchTriggerState.mockResolvedValue(triggerStateData) + mockFetchAllLastDateData.mockResolvedValue(mockLastDataDates) + const result: FluidStatus[] = await fluidService.getFluidStatus() + expect(result).toEqual(mockResult) }) }) }) diff --git a/src/services/fluid.service.ts b/src/services/fluid.service.ts index 2cd355c935354a09a426fa96f0554023114f4af6..8c3602994bfcab1efd826918b16c3821d18c0e8f 100644 --- a/src/services/fluid.service.ts +++ b/src/services/fluid.service.ts @@ -7,7 +7,6 @@ import KonnectorService from 'services/konnector.service' import ConsumptionService from 'services/consumption.service' import AccountService from 'services/account.service' import TriggerService from 'services/triggers.service' -import { DateTime } from 'luxon' export default class FluidService { private _client: Client