[MediaWiki-commits] [Gerrit] mediawiki...mobileapps[master]: Feed endpoints: Various bug fixes

2016-09-07 Thread Mobrovac (Code Review)
Mobrovac has submitted this change and it was merged.

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(-)

Approvals:
  Mobrovac: Verified; Looks good to me, approved
  jenkins-bot: Verified



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.;
 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, re

[MediaWiki-commits] [Gerrit] mediawiki...mobileapps[master]: Feed endpoints: Various bug fixes

2016-09-07 Thread Mobrovac (Code Review)
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.;
 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).