ProxyManagerTests.coffee 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. sinon = require('sinon')
  2. assertCalledWith = sinon.assert.calledWith
  3. chai = require('chai')
  4. should = chai.should()
  5. expect = chai.expect
  6. modulePath = '../../../../app/js/infrastructure/ProxyManager'
  7. SandboxedModule = require('sandboxed-module')
  8. MockRequest = require "../helpers/MockRequest"
  9. MockResponse = require "../helpers/MockResponse"
  10. describe "ProxyManager", ->
  11. before ->
  12. @settings = proxyUrls: {}
  13. @request = sinon.stub().returns(
  14. on: ()->
  15. pipe: ()->
  16. )
  17. @proxyManager = SandboxedModule.require modulePath, requires:
  18. 'settings-sharelatex': @settings
  19. 'logger-sharelatex': log: ->
  20. 'request': @request
  21. @proxyPath = '/foo/bar'
  22. @req = new MockRequest()
  23. @res = new MockResponse()
  24. @next = sinon.stub()
  25. describe 'proxyUrls', ->
  26. beforeEach ->
  27. @req.url = @proxyPath
  28. @req.query = {}
  29. @settings.proxyUrls = {}
  30. afterEach ->
  31. @next.reset()
  32. @request.reset()
  33. it 'calls next when no match', ->
  34. @proxyManager.call(@req, @res, @next)
  35. sinon.assert.called(@next)
  36. sinon.assert.notCalled(@request)
  37. it 'does not calls next when match', ->
  38. @settings.proxyUrls[@proxyPath] = '/'
  39. @proxyManager.call(@req, @res, @next)
  40. sinon.assert.notCalled(@next)
  41. sinon.assert.called(@request)
  42. it 'proxy full URL', ->
  43. targetUrl = 'https://user:pass@foo.bar:123/pa/th.ext?query#hash'
  44. @settings.proxyUrls[@proxyPath] = targetUrl
  45. @proxyManager.call(@req)
  46. assertCalledWith(@request, targetUrl)
  47. it 'overwrite query', ->
  48. targetUrl = 'foo.bar/baz?query'
  49. @req.query = { requestQuery: 'important' }
  50. @settings.proxyUrls[@proxyPath] = targetUrl
  51. @proxyManager.call(@req)
  52. newTargetUrl = 'foo.bar/baz?requestQuery=important'
  53. assertCalledWith(@request, newTargetUrl)
  54. it 'handles target objects', ->
  55. targetUrl = { baseUrl: 'api.v1', path: '/pa/th'}
  56. @settings.proxyUrls[@proxyPath] = targetUrl
  57. @proxyManager.call(@req, @res, @next)
  58. assertCalledWith(@request, 'api.v1/pa/th')