'use strict'

const t = require('tap')
const test = t.test
const FindMyWay = require('../')

test('If onBadUrl is defined, then a bad url should be handled differently (find)', t => {
  t.plan(1)
  const findMyWay = FindMyWay({
    defaultRoute: (req, res) => {
      t.fail('Should not be defaultRoute')
    },
    onBadUrl: (path, req, res) => {
      t.strictEqual(path, '/%world')
    }
  })

  findMyWay.on('GET', '/hello/:id', (req, res) => {
    t.fail('Should not be here')
  })

  const handle = findMyWay.find('GET', '/hello/%world')
  t.notStrictEqual(handle, null)
})

test('If onBadUrl is defined, then a bad url should be handled differently (lookup)', t => {
  t.plan(1)
  const findMyWay = FindMyWay({
    defaultRoute: (req, res) => {
      t.fail('Should not be defaultRoute')
    },
    onBadUrl: (path, req, res) => {
      t.strictEqual(path, '%world')
    }
  })

  findMyWay.on('GET', '/hello/:id', (req, res) => {
    t.fail('Should not be here')
  })

  findMyWay.lookup({ method: 'GET', url: '/hello/%world', headers: {} }, null)
})

test('If onBadUrl is not defined, then we should call the defaultRoute (find)', t => {
  t.plan(1)
  const findMyWay = FindMyWay({
    defaultRoute: (req, res) => {
      t.fail('Should not be defaultRoute')
    }
  })

  findMyWay.on('GET', '/hello/:id', (req, res) => {
    t.fail('Should not be here')
  })

  const handle = findMyWay.find('GET', '/hello/%world')
  t.strictEqual(handle, null)
})

test('If onBadUrl is not defined, then we should call the defaultRoute (lookup)', t => {
  t.plan(1)
  const findMyWay = FindMyWay({
    defaultRoute: (req, res) => {
      t.pass('Everything fine')
    }
  })

  findMyWay.on('GET', '/hello/:id', (req, res) => {
    t.fail('Should not be here')
  })

  findMyWay.lookup({ method: 'GET', url: '/hello/%world', headers: {} }, null)
})
