###
Module dependencies.
###
redirect = require '../libs/redirect'

describe 'Lib', ->

  describe '#redirect()', (done) ->

    res =
      headers: {}
      setHeader: (header, url) ->
        this.headers[header] = url
      end: ->

    it 'should exist as a public function', (done) ->
      redirect.should.be.a.Function
      done()

    it 'should throw an error if no res parameter was passed', (done) ->

      redirect.bind(null).should.throw '"res" parameter is required'
      done()

    it 'should throw an error if no redirectUrl parameter was passed', (done) ->

      redirect.bind(null, {}).should.throw '"redirectUrl" parameter is required'
      done()

    it 'should set status code to 302', (done) ->

      redirectUrl = '/admin/checkout'

      redirect res, redirectUrl
      res.statusCode.should.be.equal 302
      done()

    it 'should set Location header to redirect url', (done) ->

      redirectUrl = '/admin/checkout'

      redirect res, redirectUrl
      res.headers['Location'].should.be.equal '/admin/checkout'

      done()

    it 'should call res.end()', (done) ->

      res.end = ->
        done()

      redirectUrl = '/admin/checkout'

      redirect res, redirectUrl

    it 'should pass a querystring "previousUrl" if one was passed as parameter', (done) ->

      redirectUrl = '/admin/logout'
      previousUrl = '/admin/checkout'

      res.end = ->
        res.headers['Location'].should.be.equal '/admin/logout?previousUrl=/admin/checkout'
        done()

      redirect res, redirectUrl, previousUrl

