From 970be730523ed6c56417bef63ec457329d66181c Mon Sep 17 00:00:00 2001 From: Esther Lozano Date: Mon, 24 Feb 2020 12:30:46 +0100 Subject: [PATCH] Allow extra headers in the requests of test client --- test/support/test-client.js | 195 +++++++++++++++--------------------- 1 file changed, 83 insertions(+), 112 deletions(-) diff --git a/test/support/test-client.js b/test/support/test-client.js index 6f465295..4d482786 100644 --- a/test/support/test-client.js +++ b/test/support/test-client.js @@ -23,10 +23,11 @@ const MAPNIK_SUPPORTED_FORMATS = { mvt: true }; -function TestClient (config, apiKey) { +function TestClient (config, apiKey, extraHeaders) { this.mapConfig = isMapConfig(config) ? config : null; this.template = isTemplate(config) ? config : null; this.apiKey = apiKey; + this.extraHeaders = extraHeaders || {}; this.keysToDelete = {}; this.server = new CartodbWindshaft(serverOptions); } @@ -146,6 +147,8 @@ TestClient.prototype.getWidget = function (widgetName, params, callback) { url += '?' + qs.stringify({ filters: JSON.stringify(params.filters) }); } + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, self.extraHeaders); + step( function createLayergroup () { var next = this; @@ -153,10 +156,7 @@ TestClient.prototype.getWidget = function (widgetName, params, callback) { { url: url, method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(self.mapConfig) }, { @@ -208,14 +208,13 @@ TestClient.prototype.getWidget = function (widgetName, params, callback) { }); url = '/api/v1/map/' + layergroupId + '/0/widget/' + widgetName + '?' + qs.stringify(urlParams); + const headers = Object.assign({ host: 'localhost' }, self.extraHeaders); assert.response(self.server, { url: url, method: 'GET', - headers: { - host: 'localhost' - } + headers }, { status: 200, @@ -258,14 +257,13 @@ TestClient.prototype.widgetSearch = function (widgetName, userQuery, params, cal step( function createLayergroup () { var next = this; + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, self.extraHeaders); + assert.response(self.server, { url: url, method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(self.mapConfig) }, { @@ -315,14 +313,13 @@ TestClient.prototype.widgetSearch = function (widgetName, userQuery, params, cal urlParams.bbox = params.bbox; } url = '/api/v1/map/' + layergroupId + '/0/widget/' + widgetName + '/search?' + qs.stringify(urlParams); + const headers = Object.assign({ host: 'localhost' }, self.extraHeaders); assert.response(self.server, { url: url, method: 'GET', - headers: { - host: 'localhost' - } + headers }, { status: 200, @@ -367,11 +364,12 @@ TestClient.prototype.getDataview = function (dataviewName, params, callback) { var url = '/api/v1/map'; var urlNamed = url + '/named'; - if (Object.keys(extraParams).length > 0) { url += '?' + qs.stringify(extraParams); } + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, self.extraHeaders); + var expectedResponse = params.response || { status: 200, headers: { @@ -397,10 +395,7 @@ TestClient.prototype.getDataview = function (dataviewName, params, callback) { { url: urlNamed + '?' + qs.stringify({ api_key: self.apiKey }), method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(self.template) }, { @@ -437,15 +432,13 @@ TestClient.prototype.getDataview = function (dataviewName, params, callback) { var path = templateId ? urlNamed + '/' + templateId + '?' + qs.stringify(queryParams) : url; + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, self.extraHeaders); assert.response(self.server, { url: path, method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(data) }, { @@ -495,14 +488,13 @@ TestClient.prototype.getDataview = function (dataviewName, params, callback) { urlParams.api_key = self.apiKey; } url = '/api/v1/map/' + layergroupId + '/dataview/' + dataviewName + '?' + qs.stringify(urlParams); + const headers = Object.assign({ host: 'localhost' }, self.extraHeaders); assert.response(self.server, { url: url, method: 'GET', - headers: { - host: 'localhost' - } + headers }, expectedResponse, function (res, err) { @@ -543,6 +535,8 @@ TestClient.prototype.getFeatureAttributes = function (featureId, layerId, params url += '?' + qs.stringify(extraParams); } + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, self.extraHeaders); + var expectedResponse = params.response || { status: 200, headers: { @@ -557,10 +551,7 @@ TestClient.prototype.getFeatureAttributes = function (featureId, layerId, params { url: url, method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(self.mapConfig) }, { @@ -591,14 +582,13 @@ TestClient.prototype.getFeatureAttributes = function (featureId, layerId, params var next = this; url = '/api/v1/map/' + layergroupId + '/' + layerId + '/attributes/' + featureId; + const headers = Object.assign({ host: 'localhost' }, self.extraHeaders); assert.response(self.server, { url: url, method: 'GET', - headers: { - host: 'localhost' - } + headers }, expectedResponse, function (res, err) { @@ -643,6 +633,8 @@ TestClient.prototype.getClusterFeatures = function (zoom, clusterId, layerId, pa url += '?' + qs.stringify(extraParams); } + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, self.extraHeaders); + var expectedResponse = params.response || { status: 200, headers: { @@ -657,10 +649,7 @@ TestClient.prototype.getClusterFeatures = function (zoom, clusterId, layerId, pa { url: url, method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(self.mapConfig) }, { @@ -696,14 +685,13 @@ TestClient.prototype.getClusterFeatures = function (zoom, clusterId, layerId, pa } url = `/api/v1/map/${layergroupId}/${layerId}/${zoom}/cluster/${clusterId}?${queryParams}`; + const headers = Object.assign({ host: 'localhost' }, self.extraHeaders); assert.response(self.server, { url: url, method: 'GET', - headers: { - host: 'localhost' - } + headers }, expectedResponse, function (res, err) { @@ -735,6 +723,7 @@ TestClient.prototype.getTile = function (z, x, y, params, callback) { var url = '/api/v1/map'; var urlNamed = url + '/named'; + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, self.extraHeaders); if (this.apiKey) { url += '?' + qs.stringify({ api_key: this.apiKey }); @@ -764,10 +753,7 @@ TestClient.prototype.getTile = function (z, x, y, params, callback) { { url: urlNamed + '?' + qs.stringify({ api_key: self.apiKey }), method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(self.template) }, { @@ -811,14 +797,13 @@ TestClient.prototype.getTile = function (z, x, y, params, callback) { ? urlNamed + '/' + templateId + '?' + qs.stringify(queryParams) : url; + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, self.extraHeaders); + assert.response(self.server, { url: path, method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(data) }, { @@ -843,14 +828,12 @@ TestClient.prototype.getTile = function (z, x, y, params, callback) { self.keysToDelete['user:localhost:mapviews:global'] = 5; url = `/api/v1/map/${layergroupidTemplate(layergroupId, params)}/`; - var layers = params.layers; if (layers !== undefined) { layers = Array.isArray(layers) ? layers : [layers]; url += layers.join(',') + '/'; } - var format = params.format || 'png'; if (layers === undefined && !MAPNIK_SUPPORTED_FORMATS[format]) { @@ -860,6 +843,8 @@ TestClient.prototype.getTile = function (z, x, y, params, callback) { url += [z, x, y].join('/'); url += '.' + format; + const headers = Object.assign({ host: 'localhost' }, self.extraHeaders); + const queryParams = {}; if (self.apiKey) { @@ -873,9 +858,7 @@ TestClient.prototype.getTile = function (z, x, y, params, callback) { var request = { url: url, method: 'GET', - headers: { - host: 'localhost' - } + headers }; var expectedResponse = Object.assign({}, { @@ -970,6 +953,7 @@ TestClient.prototype.getLayergroup = function (params, callback) { } var url = '/api/v1/map'; + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, self.extraHeaders); const queryParams = {}; @@ -989,10 +973,7 @@ TestClient.prototype.getLayergroup = function (params, callback) { { url: url, method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(self.mapConfig) }, params.response, @@ -1022,11 +1003,12 @@ TestClient.prototype.getStaticCenter = function (params, callback) { const { layergroupid, zoom, lat, lng, width, height, format } = params; var url = '/api/v1/map/'; - if (this.apiKey) { url += '?' + qs.stringify({ api_key: this.apiKey }); } + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, self.extraHeaders); + step( function createLayergroup () { var next = this; @@ -1042,10 +1024,7 @@ TestClient.prototype.getStaticCenter = function (params, callback) { { url: path, method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(data) }, { @@ -1076,13 +1055,13 @@ TestClient.prototype.getStaticCenter = function (params, callback) { url += '?' + qs.stringify({ api_key: self.apiKey }); } + const headers = Object.assign({ host: 'localhost' }, self.extraHeaders); + var request = { url: url, encoding: 'binary', method: 'GET', - headers: { - host: 'localhost' - } + headers }; var expectedResponse = Object.assign({}, { @@ -1126,6 +1105,8 @@ TestClient.prototype.getNodeStatus = function (nodeName, callback) { url += '?' + qs.stringify({ api_key: this.apiKey }); } + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, this.extraHeaders); + var nodes = {}; step( function createLayergroup () { @@ -1134,10 +1115,7 @@ TestClient.prototype.getNodeStatus = function (nodeName, callback) { { url: url, method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(self.mapConfig) }, { @@ -1176,12 +1154,12 @@ TestClient.prototype.getNodeStatus = function (nodeName, callback) { url += '?' + qs.stringify({ api_key: self.apiKey }); } + const headers = Object.assign({ host: 'localhost' }, self.extraHeaders); + var request = { url: url, method: 'GET', - headers: { - host: 'localhost' - } + headers }; var expectedResponse = { @@ -1219,6 +1197,8 @@ TestClient.prototype.getAttributes = function (params, callback) { url += '?' + qs.stringify({ api_key: this.apiKey }); } + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, this.extraHeaders); + var layergroupid; if (params.layergroupid) { @@ -1237,10 +1217,7 @@ TestClient.prototype.getAttributes = function (params, callback) { { url: url, method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(self.mapConfig) }, { @@ -1271,12 +1248,12 @@ TestClient.prototype.getAttributes = function (params, callback) { url += '?' + qs.stringify({ api_key: self.apiKey }); } + const headers = Object.assign({ host: 'localhost' }, self.extraHeaders); + var request = { url: url, method: 'GET', - headers: { - host: 'localhost' - } + headers }; var expectedResponse = params.response || { @@ -1318,12 +1295,12 @@ module.exports.getStaticMap = function getStaticMap (templateName, params, callb url += '?' + qs.stringify(params); } + const headers = Object.assign({ host: 'localhost' }, self.extraHeaders); + var requestOptions = { url: url, method: 'GET', - headers: { - host: 'localhost' - }, + headers, encoding: 'binary' }; @@ -1417,14 +1394,13 @@ TestClient.prototype.getAnalysesCatalog = function (params, callback) { url += '&' + qs.stringify({ callback: params.jsonp }); } + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, this.extraHeaders); + assert.response(this.server, { url: url, method: 'GET', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - } + headers }, { status: params.status || 200, @@ -1447,13 +1423,12 @@ TestClient.prototype.getAnalysesCatalog = function (params, callback) { }; TestClient.prototype.getNamedMapList = function (params, callback) { + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, this.extraHeaders); + const request = { url: `/api/v1/map/named?${qs.stringify({ api_key: this.apiKey })}`, method: 'GET', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - } + headers }; let expectedResponse = { @@ -1483,13 +1458,12 @@ TestClient.prototype.getNamedTile = function (name, z, x, y, format, options, ca return callback(new Error('apiKey param is mandatory to create a new template')); } + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, this.extraHeaders); + const createTemplateRequest = { url: `/api/v1/map/named?${qs.stringify({ api_key: this.apiKey })}`, method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(this.template) }; @@ -1508,12 +1482,11 @@ TestClient.prototype.getNamedTile = function (name, z, x, y, format, options, ca const templateId = JSON.parse(res.body).template_id; const queryParams = params ? `?${qs.stringify(params)}` : ''; const url = `/api/v1/map/named/${templateId}/all/${[z, x, y].join('/')}.${format}${queryParams}`; + const headers = Object.assign({ host: 'localhost' }, this.extraHeaders); const namedTileRequest = { url, method: 'GET', - headers: { - host: 'localhost' - }, + headers, encoding: 'binary' }; @@ -1565,13 +1538,12 @@ TestClient.prototype.createTemplate = function (params, callback) { return callback(new Error('apiKey param is mandatory to create a new template')); } + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json' }, this.extraHeaders); + const createTemplateRequest = { url: `/api/v1/map/named?${qs.stringify({ api_key: this.apiKey })}`, method: 'POST', - headers: { - host: 'localhost', - 'Content-Type': 'application/json' - }, + headers, data: JSON.stringify(this.template) }; @@ -1606,12 +1578,12 @@ TestClient.prototype.deleteTemplate = function (params, callback) { return callback(new Error('apiKey param is mandatory to create a new template')); } + const headers = Object.assign({ host: 'localhost' }, this.extraHeaders); + const deleteTemplateRequest = { url: `/api/v1/map/named/${params.templateId}?${qs.stringify({ api_key: this.apiKey })}`, method: 'DELETE', - headers: { - host: 'localhost' - } + headers }; let deleteTemplateResponse = { @@ -1643,13 +1615,12 @@ TestClient.prototype.updateTemplate = function (params, callback) { return callback(new Error('apiKey param is mandatory to create a new template')); } + const headers = Object.assign({ host: 'localhost', 'Content-Type': 'application/json; charset=utf-8' }, this.extraHeaders); + const updateTemplateRequest = { url: `/api/v1/map/named/${params.templateId}?${qs.stringify({ api_key: this.apiKey })}`, method: 'PUT', - headers: { - host: 'localhost', - 'Content-Type': 'application/json; charset=utf-8' - }, + headers, data: JSON.stringify(params.templateData) }; @@ -1684,12 +1655,12 @@ TestClient.prototype.getTemplate = function (params, callback) { return callback(new Error('apiKey param is mandatory to create a new template')); } + const headers = Object.assign({ host: 'localhost' }, this.extraHeaders); + const getTemplateRequest = { url: `/api/v1/map/named/${params.templateId}?${qs.stringify({ api_key: this.apiKey })}`, method: 'GET', - headers: { - host: 'localhost' - } + headers }; let getTemplateResponse = {