UNPKG

openhim-core

Version:

The OpenHIM core application that provides logging and routing of http requests

194 lines (174 loc) 6.9 kB
should = require 'should' sinon = require 'sinon' rewriteUrls = require '../../lib/middleware/rewriteUrls' utils = require '../../lib/utils' xpath = require 'xpath' dom = require('xmldom').DOMParser describe 'Rewrite URLs middleware', -> describe '.invertPathTransform', -> it 'should invert various path transforms', -> rewriteUrls.invertPathTransform('s/one/two/').should.be.exactly 's/two/one/' rewriteUrls.invertPathTransform('s/one/two').should.be.exactly 's/two/one/' rewriteUrls.invertPathTransform('s/one/two/g').should.be.exactly 's/two/one/g' rewriteUrls.invertPathTransform('s/one/two/gi').should.be.exactly 's/two/one/gi' describe '.fetchRewriteConfig', -> currentChannel = rewriteUrls: true rewriteUrlsConfig: [ 'fromHost': 'from.org' 'toHost': 'to.org' 'fromPort': 80 'toPort': 5001 'pathTransform': 's/some/transform/' ] routes: [ primary: true host: 'route0.org' port: 5555 pathTransform: 's/from/to/g' ] channel1 = routes: [ primary: true host: 'route1.org' port: 5556 pathTransform: 's/from1/to1/g' , host: 'route2.org' port: 5557 ] channel2 = routes: [ host: 'route3.org' port: 5558 pathTransform: 's/from3/to3/g' , primary: true host: 'route4.org' port: 5559 ] it 'should fetch the rewrite config for the current channel and INCLUDE virtual defaults', (done) -> currentChannel.addAutoRewriteRules = true stub = sinon.stub utils, 'getAllChannelsInPriorityOrder' stub.callsArgWith 0, null, [currentChannel, channel1, channel2] rewriteUrls.fetchRewriteConfig currentChannel, 'tls', (err, rewriteConfig) -> rewriteConfig.should.have.length 4 rewriteConfig[0].fromHost.should.be.exactly 'from.org' rewriteConfig[0].toHost.should.be.exactly 'to.org' rewriteConfig[0].pathTransform.should.be.exactly 's/some/transform/' rewriteConfig[1].fromHost.should.be.exactly 'route0.org' rewriteConfig[1].toHost.should.be.exactly 'localhost' rewriteConfig[1].pathTransform.should.be.exactly 's/to/from/g' rewriteConfig[2].fromHost.should.be.exactly 'route1.org' rewriteConfig[2].toHost.should.be.exactly 'localhost' rewriteConfig[2].pathTransform.should.be.exactly 's/to1/from1/g' rewriteConfig[3].fromHost.should.be.exactly 'route4.org' rewriteConfig[3].toHost.should.be.exactly 'localhost' should.not.exist(rewriteConfig[3].pathTransform) stub.restore() done() it 'should fetch the rewrite config for the current channel and EXCLUDE virtual defaults', (done) -> currentChannel.addAutoRewriteRules = false stub = sinon.stub utils, 'getAllChannelsInPriorityOrder' stub.callsArgWith 0, null, [currentChannel, channel1, channel2] rewriteUrls.fetchRewriteConfig currentChannel, 'tls', (err, rewriteConfig) -> rewriteConfig.should.have.length 1 rewriteConfig[0].fromHost.should.be.exactly 'from.org' rewriteConfig[0].toHost.should.be.exactly 'to.org' rewriteConfig[0].pathTransform.should.be.exactly 's/some/transform/' stub.restore() done() describe '.rewriteUrls', -> channel = rewriteUrls: true rewriteUrlsConfig: 'fromHost': 'from.org' 'toHost': 'to.org' 'fromPort': 80 'toPort': 5001 'pathTransform': 's/some/transform/' routes: [ primary: true host: 'route0.org' port: 5555 ] jsonResponse = prop1: 'prop1' prop2: 'prop2' href: 'http://from.org/test1' obj: prop3: 'prop3' href: 'http://fromWithTransform.org:8080/this' obj2: href: '/test1/from/xyz' obj3: fullUrl: 'http://fromWithTransform.org:8080/this' it 'should rewrite absolute hrefs in JSON', (done) -> stub = sinon.stub rewriteUrls, 'fetchRewriteConfig' stub.callsArgWith 2, null, [ fromHost: 'from.org' toHost: 'to.org' 'fromPort': 80 'toPort': 5001 , fromHost: 'fromWithTransform.org' toHost: 'toWithTransform.org' pathTransform: 's/this/that/' 'fromPort': 8080 'toPort': 5000 ] rewriteUrls.rewriteUrls (JSON.stringify jsonResponse), channel, 'tls', (err, newResponse) -> newResponse = JSON.parse newResponse newResponse.href.should.be.exactly 'http://to.org:5001/test1' newResponse.obj.href.should.be.exactly 'https://toWithTransform.org:5000/that' newResponse.obj3.fullUrl.should.be.exactly 'https://toWithTransform.org:5000/that' stub.restore() done() it 'should rewrite relative hrefs in JSON', (done) -> stub = sinon.stub rewriteUrls, 'fetchRewriteConfig' stub.callsArgWith 2, null, [ fromHost: 'route0.org' toHost: 'route0To.org' pathTransform: 's/from/to' 'fromPort': 5555 'toPort': 5001 ] rewriteUrls.rewriteUrls (JSON.stringify jsonResponse), channel, 'tls', (err, newResponse) -> newResponse = JSON.parse newResponse newResponse.obj2.href.should.be.exactly '/test1/to/xyz' stub.restore() done() xmlResponse = """ <?xml version="1" encoding="utf-8"?> <someTags> <tag1 href="http://from.org/test1"/> <tag2> <child href="http://fromWithTransform.org:8080/this"></child> </tag2> <img src="http://from.org/image"> </someTags> """ it 'should rewrite hrefs in XML', (done) -> stub = sinon.stub rewriteUrls, 'fetchRewriteConfig' stub.callsArgWith 2, null, [ fromHost: 'from.org' toHost: 'to.org' 'fromPort': 80 'toPort': 5001 , fromHost: 'fromWithTransform.org' toHost: 'toWithTransform.org' pathTransform: 's/this/that/' 'fromPort': 8080 'toPort': 5000 ] rewriteUrls.rewriteUrls xmlResponse, channel, 'tls', (err, newResponse) -> doc = new dom().parseFromString newResponse href1 = xpath.select 'string(//someTags/tag1/@href)', doc href2 = xpath.select 'string(//someTags/tag2/child/@href)', doc src = xpath.select 'string(//someTags/img/@src)', doc href1.should.be.exactly 'http://to.org:5001/test1' href2.should.be.exactly 'https://toWithTransform.org:5000/that' src.should.be.exactly 'http://to.org:5001/image' stub.restore() done()