###
Module dependencies.
###
Concierge = require '../../src/connect-concierge'
pkg = require '../../package.json'

dustContext = pkg

concierge = new Concierge(dustContext: dustContext)
renderTemplate = concierge.renderTemplate()

describe 'renderTemplate middleware', ->

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

  it 'should throw an error if req.template is not present', (done) ->
    req =
      url: '/admin/logistics'
      tags: {}

    res =
      end: ->
      setHeader: ->

    renderTemplate req, res, (err) ->
      err.should.be.an.Error
      done()

  it 'should render template', (done) ->
    req =
      url: '/admin/logistics'
      tags: {}
      template: '{foo}'

    res =
      end: (data) ->
        data.should.equal ''
        done()
      setHeader: ->

    renderTemplate req, res, ->

  it 'should render template with params', (done) ->
    dustContext.foo = 'qux'

    req =
      url: '/admin/logistics'
      tags: {}
      template: '{foo}'

    res =
      end: (data) ->
        data.should.equal 'qux'
        done()
      setHeader: ->

    renderTemplate req, res, ->

  it 'should create empty dustContext if none is passed', (done) ->
    _concierge = new Concierge()
    _renderTemplate = _concierge.renderTemplate()

    req =
      url: '/admin/logistics'
      tags: {}
      template: 'Param: {foo}'

    res =
      end: (data) ->
        data.should.equal 'Param: '
        done()
      setHeader: ->

    _renderTemplate req, res, ->

  it 'should create dustContext if only req.tags is passed', (done) ->
    _concierge = new Concierge()
    _renderTemplate = _concierge.renderTemplate()

    req =
      url: '/admin/logistics'
      tags: {foo: 'qux'}
      template: 'Param: {tags.foo}'

    res =
      end: (data) ->
        data.should.equal 'Param: qux'
        done()
      setHeader: ->

    _renderTemplate req, res, ->

  it 'should create dustContext if only options.dustContext is passed', (done) ->
    _concierge = new Concierge(dustContext: foo: 'qux')
    _renderTemplate = _concierge.renderTemplate()

    req =
      url: '/admin/logistics'
      template: 'Param: {foo}'

    res =
      end: (data) ->
        data.should.equal 'Param: qux'
        done()
      setHeader: ->

    _renderTemplate req, res, ->

  it 'should create dustContext if only req.dustContext is passed', (done) ->
    _concierge = new Concierge()
    _renderTemplate = _concierge.renderTemplate()

    req =
      url: '/admin/logistics'
      template: 'Param: {foo}'
      dustContext:
        foo: 'qux'

    res =
      end: (data) ->
        data.should.equal 'Param: qux'
        done()
      setHeader: ->

    _renderTemplate req, res, ->

  it 'should create dustContext if req.tags and req.dustContext and options.dustContext are passed', (done) ->
    _concierge = new Concierge(dustContext: qux: 'quz')
    _renderTemplate = _concierge.renderTemplate()

    req =
      url: '/admin/logistics'
      template: 'Params: {tags.foo}, {bar}, {qux}'
      tags:
        foo: 'fooz'
      dustContext:
        bar: 'baz'

    res =
      end: (data) ->
        data.should.equal 'Params: fooz, baz, quz'
        done()
      setHeader: ->

    _renderTemplate req, res, ->
