UNPKG

mk9-prebid

Version:

Header Bidding Management Library

76 lines (57 loc) 2.45 kB
/* eslint no-console: 0 */ const deepEqual = require('deep-equal'); const generateFixtures = require('./fixtures'); const path = require('path'); // path to the fixture directory const fixturesPath = path.join(__dirname, 'fixtures'); // An object storing 'Request-Response' pairs. let REQ_RES_MAP = generateFixtures(fixturesPath); /** * Matches 'req.body' with the responseBody pair * @param {object} requestBody - `req.body` of incoming request hitting middleware 'fakeResponder'. * @returns {objct} responseBody */ const matchResponse = function (requestBody) { let actualUuids = []; const requestResponsePairs = Object.keys(REQ_RES_MAP).map(testName => REQ_RES_MAP[testName]); // delete 'uuid' property requestBody.tags.forEach(body => { // store the 'uuid' before deleting it. actualUuids.push(body.uuid); // delete the 'uuid' delete body.uuid; }); ['sdk', 'referrer_detection', 'gdpr_consent'].forEach(prop => { if (requestBody && requestBody[prop]) { delete requestBody[prop]; } }); // delete 'uuid' from `expected request body` requestResponsePairs .forEach(reqRes => { reqRes.request.httpRequest && reqRes.request.httpRequest.body.tags.forEach(body => body.uuid && delete body.uuid) }); // match the 'actual' requestBody with the 'expected' requestBody and find the 'responseBody' const responseBody = requestResponsePairs.filter(reqRes => reqRes.request.httpRequest && deepEqual(reqRes.request.httpRequest.body.tags, requestBody.tags))[0].response.httpResponse.body; // ENABLE THE FOLLOWING CODE FOR TROUBLE-SHOOTING FAKED REQUESTS; COMMENT AGAIN WHEN DONE // console.log('value found for responseBody:', responseBody); // responseBody.tags.forEach((tag, index) => { // console.log('value found for responseBody.tag[', index, ']:ads', tag.ads); // }); // copy the actual uuids to the responseBody // TODO:: what if responseBody is 'undefined' responseBody.tags.forEach(body => { body.uuid = actualUuids.shift(); }); return responseBody; } /** * An ExpressJs middleware function that checks the incoming Request Body * and returns the corresponding Fake Response Body pertaining to that Request. */ const fakeResponder = function (req, res, next) { const request = JSON.parse(req.body); const response = matchResponse(request); res.type('json'); res.write(JSON.stringify(response)); next(); } module.exports = fakeResponder;