###
Module dependencies.
###

fs = require 'fs'
should = require 'should'
Utils = require '../utils'
utils = new Utils

_isAdmin = utils.isAdmin
_parseCookies = utils.parseCookies
_minifyString = utils.minifyString

describe 'utils', ->

  describe '#isAdmin()', ->

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

    it 'should return true if url is /admin/<admin>/', (done) ->
      req =
        url: '/admin/logistics/'

      result = _isAdmin req

      result.should.be.true
      done()

    it 'should return true if admin has hyphen', (done) ->
      req =
        url: '/admin/message-center'

      result = _isAdmin req

      result.should.be.true
      done()

  describe '#parseCookies()', ->

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

    it 'sould return an empty object if req has no cookies', (done) ->
      req =
        headers: {}

      cookies = _parseCookies req

      cookies.should.be.empty
      done()

    it 'should return a cookies object if req has cookies', (done) ->
      req =
        headers:
          cookie: 'user=JonnyQuest; email=jonny@quest.com'

      cookies = _parseCookies req

      cookies.should.have.keys ['user', 'email']
      cookies.user.should.be.equal 'JonnyQuest'
      cookies.email.should.be.equal 'jonny@quest.com'
      done()

  describe '#minifyString()', ->

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

    it 'should remove double or more spaces in a string', (done) ->
      string = 'this  is  a  string'

      result = _minifyString string

      result.should.be.equal 'this is a string'
      done()

    it 'should remove line feeds from a string', (done) ->

      string = 'this \n is \n a \n string'

      result = _minifyString string

      result.should.be.equal 'this is a string'
      done()

    it 'should remove carriage return line breaks from a string', (done) ->

      string = 'this \r is \r a \r string'

      result = _minifyString string

      result.should.be.equal 'this is a string'
      done()

    it 'should remove end of line breaks from a string', (done) ->

      string = 'this \r\n is \r\n a \r\n string'

      result = _minifyString string

      result.should.be.equal 'this is a string'
      done()
