import { useConsoleLogger } from '../../devTools'
import Transport from '../log-service-transport'
import { createLogger } from '../index'
import { makeContext, makeSettings } from '../../../__tests__/helpers'

jest.mock('../../devTools')
jest.mock('../log-service-transport')

const consoleSpy = jest.spyOn(global.console, 'log')

describe('logger', () => {
  beforeEach(() => {
    ;(Transport as jest.Mock).mockClear()
    consoleSpy.mockClear()
  })

  test('should use console logger when dev flag is enabled', () => {
    ;(useConsoleLogger as jest.Mock).mockReturnValue(true)

    const logger = createLogger(makeContext(), makeSettings())
    logger.log('foo')

    expect(consoleSpy).toHaveBeenCalledTimes(1)
    expect((Transport as jest.Mock).mock.instances[0].log).toHaveBeenCalledTimes(0)
  })

  test('should use console logger when dev flag is disabled', () => {
    ;(useConsoleLogger as jest.Mock).mockReturnValue(false)

    const logger = createLogger(makeContext(), makeSettings())
    logger.log('foo')

    expect(consoleSpy).toHaveBeenCalledTimes(0)
    expect((Transport as jest.Mock).mock.instances[0].log).toHaveBeenCalledTimes(1)
  })
})
