/*
  Import.
  - Start with different option packages.
  - Call all Routes
  - Check if _metrics has a good start
*/
import { Metrics } from './index'

describe('metrics', () => {
  beforeEach(() => {
    jest.resetModules()
  })
  describe('constructor / options', () => {
    it('should enable all 3 checks and default metrics by default', () => {
      const metrics = new Metrics({})
      expect(metrics._disableDurationCounter).toBeFalsy()
      expect(metrics._disableErrorCounter).toBeFalsy()
      expect(metrics._disableRouteCounter).toBeFalsy()
      expect(metrics._disableDefaultMetrics).toBeFalsy()
    })
    it('should disable Route Counter if option is given', () => {
      const metrics = new Metrics({
        disableRouteCounter: true
      })
      expect(metrics._disableDurationCounter).toBeFalsy()
      expect(metrics._disableErrorCounter).toBeFalsy()
      expect(metrics._disableRouteCounter).toBeTruthy()
      expect(metrics._disableDefaultMetrics).toBeFalsy()
    })
    it('should disable Error Counter if option is given', () => {
      const metrics = new Metrics({
        disableErrorCounter: true
      })
      expect(metrics._disableDurationCounter).toBeFalsy()
      expect(metrics._disableErrorCounter).toBeTruthy()
      expect(metrics._disableRouteCounter).toBeFalsy()
      expect(metrics._disableDefaultMetrics).toBeFalsy()
    })
    it('should disable Duration Counter if option is given', () => {
      const metrics = new Metrics({
        disableDurationCounter: true
      })
      expect(metrics._disableDurationCounter).toBeTruthy()
      expect(metrics._disableErrorCounter).toBeFalsy()
      expect(metrics._disableRouteCounter).toBeFalsy()
      expect(metrics._disableDefaultMetrics).toBeFalsy()
    })

    it('should disable Default Metrics if option is given', () => {
      const metrics = new Metrics({
        disableDefaultMetrics: true
      })
      expect(metrics._disableDurationCounter).toBeFalsy()
      expect(metrics._disableErrorCounter).toBeFalsy()
      expect(metrics._disableRouteCounter).toBeFalsy()
      expect(metrics._disableDefaultMetrics).toBeTruthy()
    })

    it('should ignore /_metrics and /favicon.ico by default', () => {
      const metrics = new Metrics()
      expect(metrics._ignore.length).toBe(2)
      expect(metrics._ignore).toContain('/_metrics')
      expect(metrics._ignore).toContain('/favicon.ico')
    })
    it('should ignore given Routes, /_metrics and /favicon.ico by option', () => {
      const metrics = new Metrics({
        ignore: ['/foo', '/bar']
      })
      expect(metrics._ignore.length).toBe(4)
      expect(metrics._ignore).toContain('/foo')
      expect(metrics._ignore).toContain('/bar')
      expect(metrics._ignore).toContain('/_metrics')
      expect(metrics._ignore).toContain('/favicon.ico')
    })
  })
  describe('collect()', () => {
    it.todo('should measure all 3 checks by default')

    it.todo('should disable Route Counter if option is given')
    it.todo('should disable Error Counter if option is given')
    it.todo('should disable Duration Counter if option is given')
  })
  describe('endpoint()', () => {
    it.todo('should display all 3 basic metrics and default metrics by default')
    it.todo('should not scrape default metrics if disabled')
  })
})