UNPKG

ipizza

Version:

Node.js implementation for Estonian(and some other) banklink payments.

157 lines (140 loc) 5.08 kB
var assert = require('assert'), Stream = require('stream') describe('options', function(){ afterEach(function() { delete require.cache[require.resolve('../ipizza')] }) it('have default values', function() { var ipizza = require('../ipizza') assert.strictEqual(typeof ipizza.get('appHandler'), 'function') function nonEmptyString(key) { var val = ipizza.get(key) assert.strictEqual(typeof val, 'string', key + ' isn\'t a string') assert(val.length > 0, key + ' is empty') } nonEmptyString('returnRoute'); nonEmptyString('logLevel'); nonEmptyString('env'); }) it('store values with key and value', function() { var ipizza = require('../ipizza') ipizza.set('returnRoute', '/banklink') assert.strictEqual(ipizza.get('returnRoute'), '/banklink/:provider') ipizza.set('returnRoute', '/ecom/response') assert.strictEqual(ipizza.get('returnRoute'), '/ecom/response/:provider') }) it('store values with object hash', function() { var ipizza = require('../ipizza') ipizza.set({ returnRoute: '/api/payment', logLevel: 'silly' }) assert.strictEqual(ipizza.get('returnRoute'), '/api/payment/:provider') assert.strictEqual(ipizza.get('logLevel'), 'silly') }) it('support both camelcase and spaced keys', function() { var ipizza = require('../ipizza') ipizza.set('log level', 'warn') assert.strictEqual(ipizza.get('logLevel'), 'warn') ipizza.set('logLevel', 'info') assert.strictEqual(ipizza.get('log level'), 'info') }) it('allows storing unknown keys', function() { var ipizza = require('../ipizza') ipizza.set('myKey', 'abc') assert.strictEqual(ipizza.get('myKey'), 'abc') }) it('returns undefined on getting unknown key', function() { var ipizza = require('../ipizza') ipizza.set('logStream', require('fs').createWriteStream('/dev/null')) assert.strictEqual(ipizza.get('myKey'), undefined) }) it('throws for invalid values for appHandler', function() { var ipizza = require('../ipizza') assert.doesNotThrow(function() { ipizza.set('appHandler', undefined) ipizza.set('appHandler', require('express')()) //var router = require('director').http.Router //ipizza.set('appHandler', new router({})) }) assert.throws(function() { ipizza.set('appHandler', function() {}) }) assert.throws(function() { ipizza.set('appHandler', null) }) assert.throws(function() { ipizza.set('appHandler', {}) }) assert.throws(function() { ipizza.set('appHandler', myapp) }) }) it('throws for invalid values for returnRoute', function() { var ipizza = require('../ipizza') assert.throws(function() { ipizza.set('returnRoute', {}); }) assert.throws(function() { ipizza.set('returnRoute', null); }) assert.doesNotThrow(function() { ipizza.set('returnRoute', '/payment/{provider}') }) }) it('throws for invalid values for env', function() { var ipizza = require('../ipizza') assert.throws(function() { ipizza.set('env', 222) }) assert.throws(function() { ipizza.set('env', null) }) assert.doesNotThrow(function() { ipizza.set('env', 'development') }) assert.doesNotThrow(function() { ipizza.set('env', 'production') }) }) it('sets up default routes', function() { var ipizza = require('../ipizza') var f = ipizza.get('appHandler'); assert.equal(typeof f, 'function', 'default appHandler is a function') assert.throws(function() { f() }) var matched = f({url: '/api/payment/response/swedbank'}, {}, function() {}) assert.ok(matched, 'default routes should match ' + '/api/payment/response/swedbank') matched = f({url: '/not/matched'}, {}, function() {}) assert.ok(!matched, 'default routes should no match /not/matched') }) it('changes the routes when appHandler or returnURL is changed', function() { var ipizza = require('../ipizza') var f = ipizza.get('appHandler') ipizza.set('returnRoute', '/banklink') var matched = f({url: '/api/payment/response/swedbank'}, {}, function() {}) assert.ok(!matched) matched = f({url: '/banklink'}, {}, function() {}) assert.ok(!matched) matched = f({url: '/banklink/swedbank'}, {}, function() {}) assert.ok(matched) // reset appHandler ipizza.set('appHandler') var f2 = ipizza.get('appHandler') matched = f({url: '/banklink/swedbank'}, {}, function() {}) assert.ok(!matched) matched = f2({url: '/banklink/swedbank'}, {}, function() {}) assert.ok(matched) }) it('routes support optional provider position', function() { var ipizza = require('../ipizza') var f = ipizza.get('appHandler'); ipizza.set('returnRoute', '/banklink/:provider/confirmed') var matched = f({url: '/banklink/seb/confirmed'}, {}, function() {}) assert.ok(matched) matched = f({url: '/banklink/confirmed'}, {}, function() {}) assert.ok(!matched) }) })