recurring
Version:
a recurly v2 api client for node.js
78 lines (62 loc) • 3.07 kB
JavaScript
const qs = require('qs')
const SignedQuery = require('../lib/signer').SignedQuery
// For all tests the expected values are borrowed from recurly's own Ruby gem test suite.
// Thus we can test that we're generating exactly the values recurly expects for its
// form signatures.
var testAPIKey = '0123456789abcdef0123456789abcdef'
var testNonce = 'unique'
var testTimestamp = 1329942896
// Fixture for a query used in several tests.
function transactionTestFixture() {
var query = new SignedQuery(testAPIKey)
query.set('account', { account_code: '123' })
query.set('nonce', testNonce)
query.set('timestamp', testTimestamp)
query.set('transaction', {
amount_in_cents: 5000,
currency: 'USD'
})
return query
}
describe('recurly secure parameters signer', function() {
var recurlyUnencoded = 'account[account_code]=123&nonce=unique×tamp=1329942896&transaction[amount_in_cents]=5000&transaction[currency]=USD'
var recurlyEncoded = 'account%5Baccount_code%5D=123&nonce=unique×tamp=1329942896&transaction%5Bamount_in_cents%5D=5000&transaction%5Bcurrency%5D=USD'
it('generates a query string exactly like the Recurly example', function() {
var recurlyTest = transactionTestFixture()
var str = recurlyTest.serialize()
str.must.equal(recurlyUnencoded)
encodeURI(str).must.equal(recurlyEncoded)
})
it('generates an HMAC identical to the one generated by Recurly', function() {
var recurlyTest = transactionTestFixture()
var str = qs.stringify(recurlyTest.params)
var hmac = recurlyTest.HMAC(str)
hmac.must.equal('95c000d2aa045cb20596b8a751b08c8dfaee8cf2')
})
it('generates a final signed parameter string in the expected format', function() {
var recurlyTest = transactionTestFixture()
var result = recurlyTest.toString()
var transactionTestExpected = '95c000d2aa045cb20596b8a751b08c8dfaee8cf2|account%5Baccount_code%5D=123&nonce=unique×tamp=1329942896&transaction%5Bamount_in_cents%5D=5000&transaction%5Bcurrency%5D=USD'
result.must.equal(transactionTestExpected)
})
it('can sign subscription form parameters', function() {
var query = new SignedQuery(testAPIKey)
query.set('account', { account_code: '123' })
query.set('nonce', testNonce)
query.set('subscription', { plan_code: 'gold' })
query.set('timestamp', testTimestamp)
var subscriptionTestExpected = '295bd0626ab03fd01053fb0784bd5187b563cbeb|account%5Baccount_code%5D=123&nonce=unique&subscription%5Bplan_code%5D=gold×tamp=1329942896'
var result = query.toString()
result.must.equal(subscriptionTestExpected)
})
it('can sign update billing info form parameters', function() {
var query = new SignedQuery(testAPIKey)
query.set('account', { account_code: '123' })
query.set('nonce', testNonce)
query.set('timestamp', testTimestamp)
var expected = '86509e315e8396423e420839a9c4cbafd5f230f3|account%5Baccount_code%5D=123&nonce=unique×tamp=1329942896'
var result = query.toString()
result.must.equal(expected)
})
})