2014-10-12 19:45:45 -04:00
|
|
|
should = require('chai').should()
|
|
|
|
SandboxedModule = require('sandboxed-module')
|
|
|
|
assert = require('assert')
|
|
|
|
path = require('path')
|
|
|
|
sinon = require('sinon')
|
|
|
|
modulePath = path.join __dirname, "../../../../app/js/infrastructure/GeoIpLookup"
|
|
|
|
expect = require("chai").expect
|
|
|
|
|
|
|
|
describe "GeoIpLookup", ->
|
|
|
|
|
|
|
|
beforeEach ->
|
|
|
|
|
|
|
|
@settings =
|
|
|
|
apis:
|
|
|
|
geoIpLookup:
|
|
|
|
url:"http://lookup.com"
|
|
|
|
@request =
|
|
|
|
get: sinon.stub()
|
|
|
|
@GeoIpLookup = SandboxedModule.require modulePath, requires:
|
|
|
|
"request": @request
|
|
|
|
"settings-sharelatex":@settings
|
2014-10-13 09:10:15 -04:00
|
|
|
"logger-sharelatex":
|
|
|
|
log:->
|
|
|
|
err:->
|
2014-10-12 19:45:45 -04:00
|
|
|
@ipAddress = "123.456.789.123"
|
|
|
|
|
|
|
|
@stubbedResponse =
|
|
|
|
"ip":@ipAddress
|
|
|
|
"country_code":"GB"
|
|
|
|
"country_name":"United Kingdom"
|
|
|
|
"region_code":"H9"
|
|
|
|
"region_name":"London, City of"
|
|
|
|
"city":"London"
|
|
|
|
"zipcode":"SE16"
|
|
|
|
"latitude":51.0
|
|
|
|
"longitude":-0.0493
|
|
|
|
"metro_code":""
|
|
|
|
"area_code":""
|
|
|
|
|
|
|
|
describe "getDetails", ->
|
|
|
|
beforeEach ->
|
2014-10-13 09:10:15 -04:00
|
|
|
@request.get.callsArgWith(1, null, null, @stubbedResponse)
|
2014-10-12 19:45:45 -04:00
|
|
|
|
|
|
|
it "should request the details using the ip", (done)->
|
|
|
|
@GeoIpLookup.getDetails @ipAddress, (err)=>
|
2014-11-25 08:10:00 -05:00
|
|
|
@request.get.calledWith({url:@settings.apis.geoIpLookup.url+"/"+@ipAddress, timeout:1000, json:true}).should.equal true
|
2014-10-12 19:45:45 -04:00
|
|
|
done()
|
|
|
|
|
|
|
|
it "should return the ip details", (done)->
|
|
|
|
@GeoIpLookup.getDetails @ipAddress, (err, returnedDetails)=>
|
|
|
|
assert.deepEqual returnedDetails, @stubbedResponse
|
|
|
|
done()
|
|
|
|
|
2014-10-13 08:04:20 -04:00
|
|
|
it "should take the first ip in the string", (done)->
|
|
|
|
@GeoIpLookup.getDetails " #{@ipAddress} 456.312.452.102 432.433.888.234", (err)=>
|
2014-11-25 08:10:00 -05:00
|
|
|
@request.get.calledWith({url:@settings.apis.geoIpLookup.url+"/"+@ipAddress, timeout:1000, json:true}).should.equal true
|
2014-10-13 08:04:20 -04:00
|
|
|
done()
|
|
|
|
|
2014-10-12 19:45:45 -04:00
|
|
|
describe "getCurrencyCode", ->
|
|
|
|
|
|
|
|
it "should return GBP for GB country", (done)->
|
|
|
|
@GeoIpLookup.getDetails = sinon.stub().callsArgWith(1, null, @stubbedResponse)
|
|
|
|
@GeoIpLookup.getCurrencyCode @ipAddress, (err, currencyCode)->
|
|
|
|
currencyCode.should.equal "GBP"
|
|
|
|
done()
|
|
|
|
|
|
|
|
it "should return GBP for gb country", (done)->
|
|
|
|
@stubbedResponse.country_code = "gb"
|
|
|
|
@GeoIpLookup.getDetails = sinon.stub().callsArgWith(1, null, @stubbedResponse)
|
|
|
|
@GeoIpLookup.getCurrencyCode @ipAddress, (err, currencyCode)->
|
|
|
|
currencyCode.should.equal "GBP"
|
|
|
|
done()
|
|
|
|
|
|
|
|
it "should return USD for US", (done)->
|
|
|
|
@stubbedResponse.country_code = "US"
|
|
|
|
@GeoIpLookup.getDetails = sinon.stub().callsArgWith(1, null, @stubbedResponse)
|
|
|
|
@GeoIpLookup.getCurrencyCode @ipAddress, (err, currencyCode)->
|
|
|
|
currencyCode.should.equal "USD"
|
|
|
|
done()
|
|
|
|
|
|
|
|
it "should return EUR for DE", (done)->
|
|
|
|
@stubbedResponse.country_code = "DE"
|
|
|
|
@GeoIpLookup.getDetails = sinon.stub().callsArgWith(1, null, @stubbedResponse)
|
|
|
|
@GeoIpLookup.getCurrencyCode @ipAddress, (err, currencyCode)->
|
|
|
|
currencyCode.should.equal "EUR"
|
|
|
|
done()
|
2014-10-13 08:08:11 -04:00
|
|
|
|
|
|
|
it "should default to USD if there is an error", (done)->
|
|
|
|
@GeoIpLookup.getDetails = sinon.stub().callsArgWith(1, "problem")
|
|
|
|
@GeoIpLookup.getCurrencyCode @ipAddress, (err, currencyCode)->
|
|
|
|
currencyCode.should.equal "USD"
|
|
|
|
done()
|
|
|
|
|
|
|
|
it "should default to USD if there are no details", (done)->
|
|
|
|
@GeoIpLookup.getDetails = sinon.stub().callsArgWith(1)
|
|
|
|
@GeoIpLookup.getCurrencyCode @ipAddress, (err, currencyCode)->
|
|
|
|
currencyCode.should.equal "USD"
|
|
|
|
done()
|
2014-10-14 07:14:03 -04:00
|
|
|
|
|
|
|
it "should default to USD if there is no match for their country", (done)->
|
|
|
|
@stubbedResponse.country_code = "Non existant"
|
|
|
|
@GeoIpLookup.getDetails = sinon.stub().callsArgWith(1, null, @stubbedResponse)
|
|
|
|
@GeoIpLookup.getCurrencyCode @ipAddress, (err, currencyCode)->
|
|
|
|
currencyCode.should.equal "USD"
|
|
|
|
done()
|