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

concierge = new Concierge
resolveTags = concierge.resolveTags.bind(concierge)()

describe 'resolveTags middleware', ->

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

  it 'should skip to next middleware if path is not /admin/<admin>', (done) ->
    req =
      url: '/admin/Scripts/script.js'

    resolveTags req, {}, ->
      done()

  it 'should skip to next middleware if req already has a tags object', (done) ->
    req =
      url: '/admin/admin'
      tags: {}

    resolveTags req, {}, ->
      done()

  it 'should throw an error if neither options.grunt nor req.tags are present', (done) ->
    req =
      url: '/admin/admin'

    resolveTags req, {}, (e) ->
      e.should.be.an.Error
      done()

  it 'should throw an error if grunt has no config("tags")', (done) ->

    _grunt =
      config: ->
        null

    concierge = new Concierge grunt: _grunt
    _resolveTags = concierge.resolveTags.bind(concierge)()
    
    req =
      grunt: _grunt
      url: '/admin/admin'

    _resolveTags req, {}, (e) ->
      e.should.be.an.Error
      done()

  it 'should create an object tags in the request', (done) ->
    req =
      tags:
        tag1: '1'
        tag2: '2'
      url: '/admin/admin'

    resolveTags req, {}, ->
      req.tags.should.exist
      req.tags.should.have.keys ['tag1', 'tag2']
      req.tags.tag1.should.be.equal '1'
      req.tags.tag2.should.be.equal '2'
      done()
