Skip to content

Commit

Permalink
RVR-1914 Consistent data types in events
Browse files Browse the repository at this point in the history
Also removes undefined and null properties in audience events
  • Loading branch information
AlessandroDG committed Oct 24, 2018
1 parent 89438ac commit 6a0084f
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 7 deletions.
24 changes: 18 additions & 6 deletions modules/rivrAnalyticsAdapter.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ let rivrAnalytics = Object.assign(adapter({analyticsType}), {
}
});

function sendAuction() {
export function sendAuction() {
console.log('Function called: ============= sendAuction');
removeEmptyProperties(rivrAnalytics.context.auctionObject)
let auctionObject = rivrAnalytics.context.auctionObject;
let req = Object.assign({}, {Auction: auctionObject});
rivrAnalytics.context.auctionObject = fulfillAuctionObject();
Expand All @@ -68,6 +70,7 @@ function sendAuction() {
};

function sendImpressions() {
console.log('Function called: ============= sendImpressions');
let impressions = rivrAnalytics.context.queue.popAll();
if (impressions.length !== 0) {
let impressionsReq = Object.assign({}, {impressions});
Expand Down Expand Up @@ -111,7 +114,7 @@ function trackBidWon(args) {

function trackAuctionEnd(args) {
rivrAnalytics.context.auctionTimeEnd = Date.now();
createEmptyBidResponses();
fillBidResponsesOfUnrespondedBidRequests();
};

function trackBidTimeout(args) {
Expand Down Expand Up @@ -189,7 +192,7 @@ function createBidResponse(bidResponseEvent) {
function createSingleEmptyBidResponse(bidResponse) {
return {
timestamp: bidResponse.start,
total_duration: 'noResponseDuration',
total_duration: null,
bidderId: null,
bidder_name: bidResponse.bidder,
cur: null,
Expand Down Expand Up @@ -443,10 +446,12 @@ export function ExpiringQueue(sendImpressions, sendAuction, ttl, log) {
this.init = reset;

function reset() {
console.log('Function called: ============= reset');
if (timeoutId) {
clearTimeout(timeoutId);
}
timeoutId = setTimeout(() => {
console.log('Function called: ============= reset -> timeout expired');
sendAuction();
if (queue.length) {
sendImpressions();
Expand All @@ -467,15 +472,15 @@ function assignBidWonStatusToResponse(wonBid) {
});
};

function createEmptyBidResponses() {
let unRespondedBidRequests = findAllUnrespondedBidRequests();
function fillBidResponsesOfUnrespondedBidRequests() {
let unRespondedBidRequests = getAllUnrespondedBidRequests();
unRespondedBidRequests.forEach((bid) => {
let emptyBidResponse = createSingleEmptyBidResponse(bid);
rivrAnalytics.context.auctionObject.bidResponses.push(emptyBidResponse);
});
};

function findAllUnrespondedBidRequests() {
function getAllUnrespondedBidRequests() {
let respondedBidIds = getAllRespondedBidIds();
let bidRequests = rivrAnalytics.context.auctionObject.bidRequests;
let allNotRespondedBidRequests = bidRequests.reduce((cache, requestBidder) => {
Expand All @@ -490,6 +495,13 @@ function getAllRespondedBidIds() {
return rivrAnalytics.context.auctionObject.bidResponses.map((response) => response.seatbid[0].bid[0].adid);
};

function removeEmptyProperties(obj) {
Object.keys(obj).forEach(function(key) {
if (obj[key] && typeof obj[key] === 'object') removeEmptyProperties(obj[key])
else if (obj[key] == null) delete obj[key]
});
};

// save the base class function
rivrAnalytics.originEnableAnalytics = rivrAnalytics.enableAnalytics;

Expand Down
21 changes: 20 additions & 1 deletion test/spec/modules/rivrAnalyticsAdapter_spec.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import analyticsAdapter, {ExpiringQueue} from 'modules/rivrAnalyticsAdapter';
import analyticsAdapter, {ExpiringQueue, sendAuction} from 'modules/rivrAnalyticsAdapter';
import {expect} from 'chai';
import adaptermanager from 'src/adaptermanager';
import * as ajax from 'src/ajax';
Expand Down Expand Up @@ -264,6 +264,7 @@ describe('', () => {
events.emit(CONSTANTS.EVENTS.AUCTION_END, RESPONSE);
const responses = analyticsAdapter.context.auctionObject.bidResponses;
expect(responses.length).to.be.eql(3);
expect(responses[2].total_duration).to.be.eql(null);
})

it('should handle winning bid', () => {
Expand Down Expand Up @@ -335,5 +336,23 @@ describe('', () => {
expect(responsesAfterSend.length).to.be.eql(0);
expect(requestsAfterSend.length).to.be.eql(0);
});

describe('sendAuction', () => {
it('clears empty payload properties', () => {
analyticsAdapter.context.auctionObject.nullProperty = null;
analyticsAdapter.context.auctionObject.notNullProperty = 'aValue';

sendAuction();

// sendAuction is called automatically. This is the reason why we are testing the second call here.
// Understand how to avoid it and isolate the test.
expect(ajaxStub.getCall(1).args[0]).to.match(/http:\/\/tracker.rivr.simplaex.com\/(\w+)\/auctions/);

const payload = JSON.parse(ajaxStub.getCall(1).args[2]);

expect(payload.Auction.notNullProperty).to.be.equal('aValue');
expect(payload.nullProperty).to.be.equal(undefined);
});
});
});
});

0 comments on commit 6a0084f

Please sign in to comment.