UNPKG

openrtb-macrosub

Version:

A NodeJS implementation of the OpenRTB 2.3 macro substritution.

116 lines (100 loc) 4.87 kB
'use strict'; var sub = require('../lib/macro-substitutor'); describe('OpenRTB Macro Substitutor', function() { describe('in basic substitution', function() { it('should process ${AUCTION_ID}', function() { sub('${AUCTION_ID}', {id: 'abc'}).should.equal('abc'); sub('${AUCTION_ID}abc', {id: 'abc'}).should.equal('abcabc'); sub('${AUCTION_ID}${AUCTION_ID:B64}', {id: 'abc'}).should.equal('abcabc'); sub('\n\n\n${AUCTION_ID}', {id: '$$'}).should.equal('\n\n\n$$'); }); it('should process ${AUCTION_BID_ID}', function() { sub('${AUCTION_BID_ID}', {bidid: 'abc'}).should.equal('abc'); sub('${AUCTION_BID_ID}abc', {bidid: 'abc'}).should.equal('abcabc'); sub('${AUCTION_BID_ID}${AUCTION_BID_ID:B64}', {bidid: 'abc'}).should.equal('abcabc'); sub('\n\n\n${AUCTION_BID_ID}', {bidid: '$$'}).should.equal('\n\n\n$$'); }); it('should process ${AUCTION_IMP_ID}', function() { sub('${AUCTION_IMP_ID}', {impid: 'abc'}).should.equal('abc'); sub('${AUCTION_IMP_ID}abc', {impid: 'abc'}).should.equal('abcabc'); sub('${AUCTION_IMP_ID}${AUCTION_IMP_ID:B64}', {impid: 'abc'}).should.equal('abcabc'); sub('\n\n\n${AUCTION_IMP_ID}', {impid: '$$'}).should.equal('\n\n\n$$'); }); it('should process ${AUCTION_SEAT_ID}', function() { sub('${AUCTION_SEAT_ID}', {seat: 'abc'}).should.equal('abc'); sub('${AUCTION_SEAT_ID}abc', {seat: 'abc'}).should.equal('abcabc'); sub('${AUCTION_SEAT_ID}${AUCTION_SEAT_ID:B64}', {seat: 'abc'}).should.equal('abcabc'); sub('\n\n\n${AUCTION_SEAT_ID}', {seat: '$$'}).should.equal('\n\n\n$$'); }); it('should process ${AUCTION_AD_ID}', function() { sub('${AUCTION_AD_ID}', {adid: 'abc'}).should.equal('abc'); sub('${AUCTION_AD_ID}abc', {adid: 'abc'}).should.equal('abcabc'); sub('${AUCTION_AD_ID}${AUCTION_AD_ID:B64}', {adid: 'abc'}).should.equal('abcabc'); sub('\n\n\n${AUCTION_AD_ID}', {adid: '$$'}).should.equal('\n\n\n$$'); }); it('should process ${AUCTION_PRICE}', function() { sub('${AUCTION_PRICE}', {price: 780}).should.equal('780'); sub('${AUCTION_PRICE}abc', {price: 780}).should.equal('780abc'); sub('${AUCTION_PRICE}${AUCTION_PRICE:B64}', {price: 780}).should.equal('780780'); sub('\n\n\n${AUCTION_PRICE}', {price: 780}).should.equal('\n\n\n780'); }); it('should process ${AUCTION_CURRENCY}', function() { sub('${AUCTION_CURRENCY}', {cur: 'usd'}).should.equal('usd'); sub('${AUCTION_CURRENCY}abc', {cur: 'usd'}).should.equal('usdabc'); sub('${AUCTION_CURRENCY}${AUCTION_CURRENCY:B64}', {cur: 'usd'}).should.equal('usdusd'); sub('\n\n\n${AUCTION_CURRENCY}', {cur: '$$'}).should.equal('\n\n\n$$'); }); it('should ignore encoding for now', function() { var valueMap = {price: 10}; sub('${AUCTION_PRICE:B128}', valueMap) .should.equal(sub('${AUCTION_PRICE:B64}', valueMap)); }); it('should not process mismatched cases', function() { sub('${auction_id}', {id: '123'}).should.equal('${auction_id}'); sub('${auction_id}${AUCTION_ID}', {id: '123'}).should.equal('${auction_id}123'); }); it('should encode substitution values', function() { sub('${AUCTION_ID}', {id: '12&3'}, true).should.equal('12%263'); sub('${AUCTION_PRICE}', {price: 3.33}, true).should.equal('3.33'); sub('${AUCTION_AD_ID}', {adid: 'a@b|c:d'}, true) .should.equal('a%40b%7Cc%3Ad'); }); it('should not modified the original substitution avlue map', function() { var valueMap = { id: '$h0uldn\'t modify.' }; sub('${AUCTION_ID}', valueMap, true) .should.equal('%24h0uldn\'t%20modify.'); valueMap.id.should.equal('$h0uldn\'t modify.'); }); }); describe('in complicated substitution', function() { it('should process inner-most macros', function() { sub('${AUCTION_${AUCTION_ID}}', { id: 'BID_ID', bid: 'abc' }).should.equal('${AUCTION_BID_ID}'); }); it('should not process a macro that spans multiple lines', function() { sub('${AUCTION_\nID}', {id: 'abc'}).should.equal('${AUCTION_\nID}'); }); it('should not not process recursive macros', function() { sub('${AUCTION_ID}', { id: '${AUCTION_BID_ID}', bid: 'abc' }).should.equal('${AUCTION_BID_ID}'); }); it('should process all macros', function() { sub('${AUCTION_ID} ${AUCTION_BID_ID}, ${AUCTION_IMP_ID} ${AUCTION_AD_ID} ${AUCTION_SEAT_ID}${AUCTION_PRICE} ${AUCTION_CURRENCY}.', { id: 'Hello', bidid: 'world', impid: 'OpenRTB', adid: 'will help you', seat: 'win $', price: 10000, cur: 'USD' }).should.equal('Hello world, OpenRTB will help you win $10000 USD.'); }); }); });