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

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

lmCall = nock 'http://licensemanager.vtex.com.br'
  .get '/api/license-manager/site/pvt/newtopbar?an=loja'

describe 'licenseManagerCall middleware', ->

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

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

    licenseManagerCall req, {}, ->
      done()

  it 'should skip to next middleware if url is /admin/logout', (done) ->
    req =
      url: '/admin/logout'

    licenseManagerCall req, {}, ->
      done()

  it 'should call License Manager API and redirect user to logout page if response has an error', (done) ->
    lmCall.reply 500, '{"error": {}}'

    req =
      url: '/admin/jonny-quest'
      env: 'stable'
      vtex:
        store: 'loja'
      cookies:
        VtexIdclientAutCookie: '1234'
      headers: {}

    res =
      statusCode: 0
      headers: {}
      setHeader: (header, value) ->
        @headers[header] = value
      end: ->
        @statusCode.should.be.equal 302
        @headers.should.have.key 'Location'
        @headers.Location.should.be.equal '/admin/logout?previousUrl=/admin/jonny-quest'

    licenseManagerCall req, res, ->
      done()

  it 'should create a licenseManagerResponse object in the request if response was 200', (done) ->
    lmCall.reply 200, "stuff": {}

    req =
      url: '/admin/jonny-quest'
      env: 'stable'
      vtex:
        store: 'loja'
      cookies:
        VtexIdclientAutCookie: '1234'
      headers: {}

    licenseManagerCall req, {}, ->
      req.licenseManagerResponse.should.exist
      done()

  it 'should get License Manager from cache if it is cached', (done) ->
    licenseManagerCall = concierge.licenseManagerCall()

    lmCall.reply 200, config: selectedAccount: sites: 'loja'

    req1 =
      url: '/admin/jonny-quest'
      env: 'stable'
      vtex:
        store: 'loja'
      cookies:
        VtexIdclientAutCookie: '1234'
      headers: {}

    req2 =
      url: '/admin/jonny-quest'
      env: 'stable'
      vtex:
        store: 'loja'
      cookies:
        VtexIdclientAutCookie: '1234'
      headers: {}

    licenseManagerCall req1, {}, ->
      licenseManagerCall req2, {}, ->
        req2.licenseManagerResponse.should.exist
        done()
