Skip to content
Snippets Groups Projects
triggers.service.spec.ts 5.04 KiB
Newer Older
  • Learn to ignore specific revisions
  • Yoan VALLET's avatar
    Yoan VALLET committed
    import { QueryResult } from 'cozy-client'
    import { Trigger, TriggerState } from 'models'
    
    import { accountsData } from 'tests/__mocks__/accountsData.mock'
    
    import mockClient from 'tests/__mocks__/client.mock'
    
    import { konnectorsData } from 'tests/__mocks__/konnectorsData.mock'
    
    import { getError } from 'tests/__mocks__/testUtils'
    
    import { triggerStateData } from 'tests/__mocks__/triggerStateData.mock'
    import { triggersData } from 'tests/__mocks__/triggersData.mock'
    
    Bastien DUMONT's avatar
    Bastien DUMONT committed
    import TriggerService from './triggers.service'
    
    Yoan VALLET's avatar
    Yoan VALLET committed
    
    const mockCreateTrigger = jest.fn()
    jest.mock('cozy-harvest-lib/dist/connections/triggers', () => {
    
      return jest.fn(() => ({
        createTrigger: mockCreateTrigger,
      }))
    
    Yoan VALLET's avatar
    Yoan VALLET committed
    })
    
    describe('TriggerService service', () => {
      const triggerService = new TriggerService(mockClient)
    
      describe('createTrigger method', () => {
    
        it('should return created Trigger', async () => {
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          mockCreateTrigger.mockResolvedValueOnce(triggersData[0])
          const result: Trigger = await triggerService.createTrigger(
            accountsData[0],
            konnectorsData[0]
          )
          expect(result).toEqual(triggersData[0])
        })
      })
    
      describe('getTrigger method', () => {
    
        it('should return Trigger', async () => {
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          const mockQueryResult: QueryResult<Trigger[]> = {
            data: [triggersData[0]],
            bookmark: '',
            next: false,
            skip: 0,
          }
          mockClient.query.mockResolvedValueOnce(mockQueryResult)
          const result: Trigger | null = await triggerService.getTrigger(
            accountsData[0],
            konnectorsData[0]
          )
          expect(result).toEqual(triggersData[0])
        })
    
    
        it('should return null when no trigger found', async () => {
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          const mockQueryResult: QueryResult<Trigger[]> = {
            data: [],
            bookmark: '',
            next: false,
            skip: 0,
          }
          mockClient.query.mockResolvedValueOnce(mockQueryResult)
          const result: Trigger | null = await triggerService.getTrigger(
            accountsData[0],
            konnectorsData[0]
          )
          expect(result).toBe(null)
        })
      })
    
    
      describe('getTriggerForAccount method', () => {
        it('should return Trigger', async () => {
          const mockQueryResult: QueryResult<Trigger[]> = {
            data: [triggersData[0]],
            bookmark: '',
            next: false,
            skip: 0,
          }
          mockClient.query.mockResolvedValueOnce(mockQueryResult)
          const result: Trigger | null = await triggerService.getTriggerForAccount(
            accountsData[0]
          )
          expect(result).toEqual(triggersData[0])
        })
    
        it('should return null when no trigger found', async () => {
          const mockQueryResult: QueryResult<Trigger[]> = {
            data: [],
            bookmark: '',
            next: false,
            skip: 0,
          }
          mockClient.query.mockResolvedValueOnce(mockQueryResult)
          const result: Trigger | null = await triggerService.getTriggerForAccount(
            accountsData[0]
          )
          expect(result).toBe(null)
        })
      })
    
    
    Yoan VALLET's avatar
    Yoan VALLET committed
      describe('fetchTriggerState method', () => {
    
        it('should return Trigger state', async () => {
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          const mockResult = {
            data: {
              attributes: {
    
                // eslint-disable-next-line camelcase
    
    Yoan VALLET's avatar
    Yoan VALLET committed
                current_state: triggerStateData,
              },
            },
          }
          mockClient.getStackClient().fetchJSON.mockResolvedValueOnce(mockResult)
    
          const result: TriggerState | null =
            await triggerService.fetchTriggerState(triggersData[0])
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          expect(result).toEqual(triggerStateData)
        })
    
    
        it('should return null when current_state is empty', async () => {
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          const mockResult = {
    
            // eslint-disable-next-line camelcase
    
    Yoan VALLET's avatar
    Yoan VALLET committed
            data: { attributes: { current_state: null } },
          }
          mockClient.getStackClient().fetchJSON.mockResolvedValueOnce(mockResult)
    
          const result: TriggerState | null =
            await triggerService.fetchTriggerState(triggersData[0])
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          expect(result).toBe(null)
        })
    
    
        it('should throw an error', async () => {
    
    Yoan VALLET's avatar
    Yoan VALLET committed
          mockClient.getStackClient().fetchJSON.mockRejectedValueOnce(new Error())
    
          const error = await getError(async () =>
            triggerService.fetchTriggerState(triggersData[0])
          )
          expect(error).toEqual(new Error('Fetch trigger state failed'))
    
    Yoan VALLET's avatar
    Yoan VALLET committed
        })
      })
    
    
      describe('deleteTrigger method', () => {
        it('should return true when destroy successfully', async () => {
    
          const mockDestroyResult: QueryResult<Trigger[]> = {
    
          mockClient.destroy.mockResolvedValueOnce(mockDestroyResult)
    
          const result = await triggerService.deleteTrigger(triggersData[0])
          expect(result).toBe(true)
        })
    
        it('should throw error when destroy unsuccessfully', async () => {
          mockClient.destroy.mockRejectedValueOnce(new Error())
    
          const error = await getError(async () =>
            triggerService.deleteTrigger(triggersData[0])
          )
          expect(error).toEqual(new Error('Delete trigger failed'))
    
    Yoan VALLET's avatar
    Yoan VALLET committed
    })