Mobrovac has uploaded a new change for review. https://gerrit.wikimedia.org/r/309004
Change subject: Feed endpoints: Various bug fixes ...................................................................... Feed endpoints: Various bug fixes - When an individual endpoint is called with aggregated=true, ensure that (a) the ETag is not set; and (b) the response contains at least an empty object, so as not to break client connections - In lib/feed/most-read.js, module.exports.promise should not have the aggregated param, but should be deduced from the request query - Add a test for the tfa endpoint with aggregated=true Bug: T143912 Change-Id: I99d28e8c21548143c6d3a3d886d5028635ba6bab --- M lib/feed/featured-image.js M lib/feed/featured.js M lib/feed/most-read.js M lib/feed/news.js M lib/mobile-util.js M routes/featured-image.js M routes/featured.js M routes/most-read.js M routes/news.js M test/features/featured/pagecontent.js 10 files changed, 33 insertions(+), 17 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/mobileapps refs/changes/04/309004/1 diff --git a/lib/feed/featured-image.js b/lib/feed/featured-image.js index 93e9514..cfd0c1b 100644 --- a/lib/feed/featured-image.js +++ b/lib/feed/featured-image.js @@ -4,6 +4,7 @@ 'use strict'; +var BBPromise = require('bluebird'); var preq = require('preq'); var api = require('../api-util'); var dateUtil = require('../dateUtil'); @@ -118,7 +119,7 @@ }).catch(function(err) { if (err.status === 504) { if (aggregated) { - return { payload: undefined, meta: undefined }; + return BBPromise.resolve({ payload: undefined, meta: undefined }); } throw new HTTPError({ status: 404, diff --git a/lib/feed/featured.js b/lib/feed/featured.js index 46e3772..3ea0538 100644 --- a/lib/feed/featured.js +++ b/lib/feed/featured.js @@ -76,7 +76,7 @@ var aggregated = !!req.query.aggregated; if (req.params.domain.indexOf('en') !== 0) { if (aggregated) { - return {}; + return BBPromise.resolve({}); } else { throw new HTTPError({ status: 501, diff --git a/lib/feed/most-read.js b/lib/feed/most-read.js index a996ba8..8e95f14 100644 --- a/lib/feed/most-read.js +++ b/lib/feed/most-read.js @@ -4,6 +4,7 @@ 'use strict'; +var BBPromise = require('bluebird'); var mUtil = require('../mobile-util'); var dateUtil = require('../dateUtil'); var api = require('../api-util'); @@ -22,8 +23,7 @@ return result; } -function getTopPageviews(app, req) { - var aggregated = !!req.query.aggregated; +function getTopPageviews(app, req, aggregated) { var yesterday = new Date(dateUtil.getRequestedDate(req) - dateUtil.ONE_DAY); var year = aggregated ? yesterday.getUTCFullYear() : req.params.yyyy; var month = aggregated ? dateUtil.pad(yesterday.getUTCMonth() + 1) : req.params.mm; @@ -46,7 +46,8 @@ }); } -function promise(app, req, aggregated) { +function promise(app, req) { + var aggregated = !!req.query.aggregated; var goodTitles, resultsDate; dateUtil.validate(dateUtil.hyphenDelimitedDateString(req)); return getTopPageviews(app, req, aggregated).then(function (response) { @@ -109,7 +110,7 @@ // Catch and handle the error if this is an aggregated request and the // pageview data are not yet loaded. if (aggregated && err.status === 404) { - return {}; + return BBPromise.resolve({}); } throw err; }); diff --git a/lib/feed/news.js b/lib/feed/news.js index 081c268..27449a6 100644 --- a/lib/feed/news.js +++ b/lib/feed/news.js @@ -1,5 +1,6 @@ 'use strict'; +var BBPromise = require('bluebird'); var domino = require('domino'); var api = require('../api-util'); var mUtil = require('../mobile-util'); @@ -40,7 +41,7 @@ var aggregated = !!req.query.aggregated; if (!newsTemplates[lang]) { if (aggregated) { - return { payload: undefined, meta: undefined }; + return BBPromise.resolve({ payload: undefined, meta: undefined }); } throw new HTTPError({ status: 501, diff --git a/lib/mobile-util.js b/lib/mobile-util.js index 74b1cbe..d32108e 100644 --- a/lib/mobile-util.js +++ b/lib/mobile-util.js @@ -69,7 +69,9 @@ * @param {Object} value to set the ETag to */ mUtil.setETagToValue = function(response, value) { - response.set('etag', '' + value); + if (value) { + response.set('etag', '' + value); + } }; /** diff --git a/routes/featured-image.js b/routes/featured-image.js index 60b1263..934402c 100644 --- a/routes/featured-image.js +++ b/routes/featured-image.js @@ -27,8 +27,8 @@ return featured.promise(app, req) .then(function (response) { res.status(200); - mUtil.setETagToValue(res, response.meta.etag); - res.json(response.payload).end(); + mUtil.setETagToValue(res, response.meta && response.meta.etag); + res.json(response.payload || {}).end(); }); }); diff --git a/routes/featured.js b/routes/featured.js index 752410b..d2fc2c9 100644 --- a/routes/featured.js +++ b/routes/featured.js @@ -27,9 +27,9 @@ return featured.promise(app, req) .then(function (response) { res.status(200); - mUtil.setETagToValue(res, response.meta.etag); + mUtil.setETagToValue(res, response.meta && response.meta.etag); mUtil.setContentType(res, mUtil.CONTENT_TYPES.unpublished); - res.json(response.payload).end(); + res.json(response.payload || {}).end(); }); }); diff --git a/routes/most-read.js b/routes/most-read.js index 24f59b7..2f54193 100644 --- a/routes/most-read.js +++ b/routes/most-read.js @@ -25,9 +25,9 @@ return mostRead.promise(app, req) .then(function (response) { res.status(200); - mUtil.setETagToValue(res, response.meta.etag); + mUtil.setETagToValue(res, response.meta && response.meta.etag); mUtil.setContentType(res, mUtil.CONTENT_TYPES.unpublished); - res.json(response.payload).end(); + res.json(response.payload || {}).end(); }); }); diff --git a/routes/news.js b/routes/news.js index 72dd15a..1b22967 100644 --- a/routes/news.js +++ b/routes/news.js @@ -24,8 +24,8 @@ return news.promise(app, req) .then(function (response) { res.status(200); - mUtil.setETagToValue(res, response.meta.etag); - res.json(response.payload).end(); + mUtil.setETagToValue(res, response.meta && response.meta.etag); + res.json(response.payload || {}).end(); }); }); @@ -36,4 +36,4 @@ api_version: 1, router: router }; -}; \ No newline at end of file +}; diff --git a/test/features/featured/pagecontent.js b/test/features/featured/pagecontent.js index 8634766..5400a40 100644 --- a/test/features/featured/pagecontent.js +++ b/test/features/featured/pagecontent.js @@ -68,6 +68,17 @@ }); }); + it('unsupported language with aggregated=true should return 200', function() { + return preq.get({ + uri: server.config.uri + 'zh.wikipedia.org/v1/page/featured/2016/04/15', + query: { aggregated: true } + }) + .then(function(res) { + assert.status(res, 200); + assert.deepEqual(res.body, {}, 'Expected the body to be empty'); + }); + }); + it('featured article of an old date should return 404', function() { return preq.get({ uri: server.config.uri + 'en.wikipedia.org/v1/page/featured/1970/12/31' }) .then(function(res) { -- To view, visit https://gerrit.wikimedia.org/r/309004 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I99d28e8c21548143c6d3a3d886d5028635ba6bab Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/services/mobileapps Gerrit-Branch: master Gerrit-Owner: Mobrovac <mobro...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits