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

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

lmCall = nock 'http://licensemanager.vtex.com.br'
  .get '/api/license-manager/pvt/accounts/hosts/www.loja.com.br'

describe 'redirectToKnownHost', ->

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

  describe 'should skip to next middleware when', ->

    it 'path is /meta/whoami', (done) ->
      req =
        url: '/meta/whoami'

      redirectToKnownHost req, {}, ->
        done()

    it 'user is not logged in', (done) ->
      req =
        url: '/admin/jonny-quest'
        cookies: {}

      redirectToKnownHost req, {}, ->
        done()

    it 'host is already known', (done) ->
      req =
        url: '/admin/jonny-quest'
        cookies:
          VtexIdclientAutCookie: '1234'
        vtex:
          hostParts: ['basedevmkp.vtexcommercebeta', 'basedevmkp', 'commercebeta']

      redirectToKnownHost req, {}, ->
        done()

  it 'should return status code 500 if response from License Manager was not a JSON', (done) ->
    lmCall.reply 500, 'be dis xml? me no like!'

    req =
      url: '/admin/jonny-quest'
      host: 'www.loja.com.br'
      headers:
        host: 'www.loja.com.br'
      cookies:
        VtexIdclientAutCookie: '1234'
      vtex:
        hostParts: []

    res =
      end: (message) ->
        message.should.be.equal 'An error has occurred'
        done()

    redirectToKnownHost req, res


  it 'should return status code 500 if response from License Manager has an error', (done) ->
    lmCall.reply 500, "error": {}

    req =
      url: '/admin/jonny-quest'
      host: 'www.loja.com.br'
      headers:
        host: 'www.loja.com.br'
      cookies:
        VtexIdclientAutCookie: '1234'
      vtex:
        hostParts: []

    res =
      end: (message) ->
        message.should.be.equal 'An error has occurred'
        done()

    redirectToKnownHost req, res

  it 'should redirect to *.vtexcommercestable.com.br if we know the account name', (done) ->
    lmCall.reply 200, "AccountName": "loja"

    req =
      url: '/admin/jonny-quest'
      host: 'www.loja.com.br'
      headers:
        host: 'www.loja.com.br'
      cookies:
        VtexIdclientAutCookie: '1234'
      vtex:
        hostParts: []

    res =
      headers: {}
      setHeader: (header, value) ->
        @headers[header] = value
      end: ->
        @headers.Location.should.be.equal 'http://loja.vtexcommercestable.com.br/admin/jonny-quest'
        @statusCode.should.be.equal 302
        done()

    redirectToKnownHost req, res
