diff --git a/src/services/konnector.service.spec.ts b/src/services/konnector.service.spec.ts index 552eef72454dac963bf8e92ad790bc59eaf109f4..9f607f3aca6ac12fbfb397e77fbad4cdadf769c6 100644 --- a/src/services/konnector.service.spec.ts +++ b/src/services/konnector.service.spec.ts @@ -1,90 +1,73 @@ import KonnectorService from './konnector.service' -import { Client, QueryDefinition } from 'cozy-client' -import TriggerService from 'services/triggers.service' -import { Trigger, TriggerState, Account } from 'models' -import mockAccount from './__mocks__/accountsData.json' +import { Konnector, Trigger, TriggerState } from 'models' +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 { QueryResult } from 'cozy-client' -const mockTriggers = ({ - getTrigger: jest.fn(), - fetchTriggerState: jest.fn(), -} as unknown) as jest.Mocked<TriggerService> - -const mockClient = ({ - find: jest.fn(), - query: jest.fn(), - create: jest.fn(), - destroy: jest.fn(), - save: jest.fn(), - getStackClient: jest.fn(), -} as unknown) as jest.Mocked<Client> - -const mockKonnectorData = [ - { - _id: 'test', - name: 'test', - slug: 'test', - state: 'test', - }, -] -const mockTriggerData: Trigger = { - _id: 'test', - type: 'test', - arguments: 'test', - worker: 'test', - message: { - account: 'test', - konnector: 'test', - }, -} -const mockTriggerState: TriggerState = { - // eslint-disable-next-line @typescript-eslint/camelcase - trigger_id: 'test', - status: 'test', - // eslint-disable-next-line @typescript-eslint/camelcase - last_executed_job_id: 'test', - // eslint-disable-next-line @typescript-eslint/camelcase - last_execution: 'test', - // eslint-disable-next-line @typescript-eslint/camelcase - last_manual_execution: 'test', - // eslint-disable-next-line @typescript-eslint/camelcase - last_manual_job_id: 'test', -} +const mockGetTrigger = jest.fn() +const mockFetchTriggerState = jest.fn() +jest.mock('./triggers.service', () => { + return jest.fn(() => { + return { + getTrigger: mockGetTrigger, + fetchTriggerState: mockFetchTriggerState, + } + }) +}) describe('KonnectorService service', () => { const konnectorService = new KonnectorService(mockClient) - mockClient.query.mockImplementation(() => - Promise.resolve({ data: mockKonnectorData }) - ) - describe('getFluidConfig', () => { - it('shoud return an array with the fluid config', async () => { - const konnectorId = '0' - const result = await konnectorService.getKonnector(konnectorId) - expect(result).toEqual(mockKonnectorData[0]) + describe('getFluidConfig method', () => { + it('shoud return an array with the fluid config', async () => { + const mockQueryResult: QueryResult<Konnector[]> = { + data: [konnectorsData[0]], + bookmark: '', + next: false, + skip: 0, + } + mockClient.query.mockResolvedValueOnce(mockQueryResult) + const result = await konnectorService.getKonnector('enedisgrandlyon') + expect(result).toEqual(konnectorsData[0]) }) }) - describe('getKonnectorLastState', () => { - it('shoud return the triggerState or null', async () => { - mockTriggers.getTrigger.mockImplementation(() => - Promise.resolve(mockTriggerData) - ) - mockTriggers.fetchTriggerState.mockImplementation(() => - Promise.resolve(mockTriggerState) + + describe('getKonnectorLastState method', () => { + it('shoud return the triggerState', async () => { + mockGetTrigger.mockResolvedValueOnce(triggersData[0]) + mockFetchTriggerState.mockResolvedValueOnce(triggerStateData) + const result = await konnectorService.getKonnectorLastState( + konnectorsData[0], + accountsData[0] ) - // mockClient.getStackClient.mockImplementation(() => - // Promise.resolve(mockTriggerState) - // ) + expect(result).toEqual(triggerStateData) + }) + + it('shoud return null when trigger is not found', async () => { + mockGetTrigger.mockResolvedValueOnce(null) + mockFetchTriggerState.mockResolvedValueOnce(triggerStateData) const result = await konnectorService.getKonnectorLastState( - mockKonnectorData[0], - mockAccount + konnectorsData[0], + accountsData[0] ) - expect(result).toEqual({}) + expect(result).toEqual(null) }) }) - describe('createIndexKonnector', () => { + + describe('createIndexKonnector method', () => { it('shoud return the query Result', async () => { + const mockQueryResult: QueryResult<Konnector[]> = { + data: [], + bookmark: '', + next: false, + skip: 0, + } + mockClient.query.mockResolvedValueOnce(mockQueryResult) const result = await konnectorService.createIndexKonnector() - expect(result).toEqual({ data: mockKonnectorData }) + expect(result).toEqual([]) }) }) }) diff --git a/src/services/konnector.service.ts b/src/services/konnector.service.ts index 248fff94205dd476cec289614ff9c0b9c58c0980..c2462c0effdf4e6048f7ecb88042c74c7f5d1deb 100644 --- a/src/services/konnector.service.ts +++ b/src/services/konnector.service.ts @@ -1,4 +1,4 @@ -import { Client, Q } from 'cozy-client' +import { Client, Q, QueryDefinition, QueryResult } from 'cozy-client' import { KONNECTORS_DOCTYPE } from 'doctypes' import { Account, Konnector, TriggerState } from 'models' import TriggerService from 'services/triggers.service' @@ -10,13 +10,11 @@ export default class KonnectorService { this._client = _client } - public async getKonnector(id: string) { - const query = Q(KONNECTORS_DOCTYPE) - // eslint-disable-next-line @typescript-eslint/camelcase - .where({ - _id: KONNECTORS_DOCTYPE + '/' + id, - }) - const { data } = await this._client.query(query) + public async getKonnector(id: string): Promise<Konnector | null> { + const query: QueryDefinition = Q(KONNECTORS_DOCTYPE).where({ + _id: KONNECTORS_DOCTYPE + '/' + id, + }) + const { data }: QueryResult<Konnector[]> = await this._client.query(query) const konnector: Konnector = data && data[0] return konnector } @@ -35,10 +33,10 @@ export default class KonnectorService { } public async createIndexKonnector() { - const query = Q(KONNECTORS_DOCTYPE) - // eslint-disable-next-line @typescript-eslint/camelcase + const query: QueryDefinition = Q(KONNECTORS_DOCTYPE) .where({ _id: 'index' }) .limitBy(1) - return await this._client.query(query) + const { data: result }: QueryResult<[]> = await this._client.query(query) + return result } }