[MediaWiki-commits] [Gerrit] mediawiki...mobileapps[master]: Use $merge to specify content for hydration in RESTBase

2016-11-09 Thread jenkins-bot (Code Review)
jenkins-bot has submitted this change and it was merged.

Change subject: Use $merge to specify content for hydration in RESTBase
..


Use $merge to specify content for hydration in RESTBase

Replaces sending of titles with $merge properties containing the public
RESTBase summary URL as the value.

Updates tests accordingly.  Replacement of two skipped news tests to
follow.

Change-Id: Ia42aeb9c95c64f246aea85b05435103a728da19d
---
M lib/feed/featured.js
M lib/feed/most-read.js
M lib/feed/news.js
M lib/mobile-util.js
M spec.yaml
M test/features/app/spec.js
M test/features/featured/pagecontent.js
M test/features/most-read/most-read.js
M test/features/news/news.js
9 files changed, 60 insertions(+), 46 deletions(-)

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



diff --git a/lib/feed/featured.js b/lib/feed/featured.js
index 5a366c7..3f60059 100644
--- a/lib/feed/featured.js
+++ b/lib/feed/featured.js
@@ -5,6 +5,7 @@
 'use strict';
 
 var preq = require('preq');
+var mUtil = require('../mobile-util');
 var api = require('../api-util');
 var mwapi = require('../mwapi');
 var dateUtil = require('../dateUtil');
@@ -72,6 +73,9 @@
 }
 
 function promise(app, req) {
+var tfaPageObj;
+var pageTitle;
+var domain = req.params.domain;
 var aggregated = !!req.query.aggregated;
 
 if (!dateUtil.validate(dateUtil.hyphenDelimitedDateString(req))) {
@@ -81,7 +85,7 @@
 dateUtil.throwDateError();
 }
 
-if (req.params.domain.indexOf('en') !== 0 || 
req.params.domain.indexOf('beta.wmflabs.org') > 0) {
+if (domain.indexOf('en') !== 0 || domain.indexOf('beta.wmflabs.org') > 0) {
 if (aggregated) {
 return BBPromise.resolve({});
 } else {
@@ -94,9 +98,7 @@
 }
 }
 
-var tfaPageObj, pageTitle;
-
-return requestFeaturedArticleTitle(app, req.params.domain, 
dateUtil.getRequestedDate(req))
+return requestFeaturedArticleTitle(app, domain, 
dateUtil.getRequestedDate(req))
 .then(function (response) {
 mwapi.checkForQueryPagesInResponse(req, response);
 tfaPageObj = getPageObject(response);
@@ -106,7 +108,7 @@
 });
 }).then(function (res) {
 return {
-payload: { title: res.dbTitle },
+payload: { $merge: [ mUtil.getRbPageSummaryUrl(app, domain, 
res.dbTitle) ] },
 meta: { etag: tfaPageObj.pageid }
 };
 }).catch(function (err) {
diff --git a/lib/feed/most-read.js b/lib/feed/most-read.js
index 4805a2d..2e451b1 100644
--- a/lib/feed/most-read.js
+++ b/lib/feed/most-read.js
@@ -145,11 +145,12 @@
 
 var results = goodTitles.map(function(entry) {
 return Object.assign(entry, {
-title: entry.article,
+$merge: [ mUtil.getRbPageSummaryUrl(app, req.params.domain, 
entry.article) ],
 article: undefined,
 fromencoded: undefined,
 ns: undefined,
 terms: undefined,
+title: undefined,
 revisions: undefined
 });
 });
diff --git a/lib/feed/news.js b/lib/feed/news.js
index d183479..6faff8e 100644
--- a/lib/feed/news.js
+++ b/lib/feed/news.js
@@ -16,17 +16,6 @@
 return href;
 }
 
-function pushTitleIfNew(linkTitles, story, href) {
-if (linkTitles.indexOf(href) === -1) {
-story.links.push({ title: href });
-linkTitles.push(href);
-}
-}
-
-function createLinksList(href, linkTitles, story) {
-pushTitleIfNew(linkTitles, story, removeFragment(href.slice(1)));
-}
-
 function promise(app, req) {
 var lang = req.params.domain.split('.')[0];
 var aggregated = !!req.query.aggregated;
@@ -63,7 +52,15 @@
 };
 
 for (var i = 0, n = anchors.length; i < n; i++) {
-createLinksList(anchors[i].href, linkTitles, story);
+var href = anchors[i].href;
+var title = removeFragment(href.slice(1));
+
+if (linkTitles.indexOf(title) === -1) {
+story.links.push({
+$merge: [ mUtil.getRbPageSummaryUrl(app, 
req.params.domain, title) ]
+});
+linkTitles.push(title);
+}
 }
 
 story.story = stories[j].innerHTML;
@@ -77,7 +74,5 @@
 promise: promise,
 
 // visible for testing
-removeFragment: removeFragment,
-pushTitleIfNew: pushTitleIfNew,
-createLinksList: createLinksList
+removeFragment: removeFragment
 };
diff --git a/lib/mobile-util.js b/lib/mobile-util.js
index 6e66ab4..15a2393 100644
--- a/lib/mobile-util.js
+++ b/lib/mobile-util.js
@@ -188,6 +188,17 @@
 return dateString + '/' + uuid.now().toString();
 };
 
+mUtil.getRbPageSummaryUrl = function(app, domain, title) {
+var request = app.restbase_tpl.expand({
+request: {
+params: {
+domain:

[MediaWiki-commits] [Gerrit] mediawiki...mobileapps[master]: Use $merge to specify content for hydration in RESTBase

2016-11-07 Thread Mholloway (Code Review)
Mholloway has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/320306

Change subject: Use $merge to specify content for hydration in RESTBase
..

Use $merge to specify content for hydration in RESTBase

Replaces sending of titles with $merge properties containing the public
RESTBase summary URL as the value.

Updates tests accordingly.

Change-Id: Ia42aeb9c95c64f246aea85b05435103a728da19d
---
M lib/feed/featured.js
M lib/feed/most-read.js
M lib/feed/news.js
M lib/mobile-util.js
M spec.yaml
M test/features/app/spec.js
M test/features/featured/pagecontent.js
M test/features/news/news.js
8 files changed, 47 insertions(+), 30 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/mobileapps 
refs/changes/06/320306/1

diff --git a/lib/feed/featured.js b/lib/feed/featured.js
index 5a366c7..a51e95f 100644
--- a/lib/feed/featured.js
+++ b/lib/feed/featured.js
@@ -5,6 +5,7 @@
 'use strict';
 
 var preq = require('preq');
+var mUtil = require('../mobile-util');
 var api = require('../api-util');
 var mwapi = require('../mwapi');
 var dateUtil = require('../dateUtil');
@@ -72,6 +73,9 @@
 }
 
 function promise(app, req) {
+var tfaPageObj;
+var pageTitle;
+var domain = req.params.domain;
 var aggregated = !!req.query.aggregated;
 
 if (!dateUtil.validate(dateUtil.hyphenDelimitedDateString(req))) {
@@ -81,7 +85,7 @@
 dateUtil.throwDateError();
 }
 
-if (req.params.domain.indexOf('en') !== 0 || 
req.params.domain.indexOf('beta.wmflabs.org') > 0) {
+if (domain.indexOf('en') !== 0 || domain.indexOf('beta.wmflabs.org') > 0) {
 if (aggregated) {
 return BBPromise.resolve({});
 } else {
@@ -94,9 +98,7 @@
 }
 }
 
-var tfaPageObj, pageTitle;
-
-return requestFeaturedArticleTitle(app, req.params.domain, 
dateUtil.getRequestedDate(req))
+return requestFeaturedArticleTitle(app, domain, 
dateUtil.getRequestedDate(req))
 .then(function (response) {
 mwapi.checkForQueryPagesInResponse(req, response);
 tfaPageObj = getPageObject(response);
@@ -106,7 +108,7 @@
 });
 }).then(function (res) {
 return {
-payload: { title: res.dbTitle },
+payload: { $merge: [ mUtil.getRbPageSummaryUrl(domain, 
res.dbTitle) ] },
 meta: { etag: tfaPageObj.pageid }
 };
 }).catch(function (err) {
diff --git a/lib/feed/most-read.js b/lib/feed/most-read.js
index 4805a2d..6f2eb80 100644
--- a/lib/feed/most-read.js
+++ b/lib/feed/most-read.js
@@ -145,7 +145,7 @@
 
 var results = goodTitles.map(function(entry) {
 return Object.assign(entry, {
-title: entry.article,
+$merge: [ mUtil.getRbPageSummaryUrl(req.params.domain, 
entry.article) ],
 article: undefined,
 fromencoded: undefined,
 ns: undefined,
diff --git a/lib/feed/news.js b/lib/feed/news.js
index d183479..df70be3 100644
--- a/lib/feed/news.js
+++ b/lib/feed/news.js
@@ -16,15 +16,17 @@
 return href;
 }
 
-function pushTitleIfNew(linkTitles, story, href) {
-if (linkTitles.indexOf(href) === -1) {
-story.links.push({ title: href });
-linkTitles.push(href);
+function pushTitleIfNew(domain, linkTitles, story, title) {
+if (linkTitles.indexOf(title) === -1) {
+story.links.push({
+$merge: [ mUtil.getRbPageSummaryUrl(domain, title) ]
+});
+linkTitles.push(title);
 }
 }
 
-function createLinksList(href, linkTitles, story) {
-pushTitleIfNew(linkTitles, story, removeFragment(href.slice(1)));
+function createLinksList(domain, href, linkTitles, story) {
+pushTitleIfNew(domain, linkTitles, story, removeFragment(href.slice(1)));
 }
 
 function promise(app, req) {
@@ -63,7 +65,7 @@
 };
 
 for (var i = 0, n = anchors.length; i < n; i++) {
-createLinksList(anchors[i].href, linkTitles, story);
+createLinksList(req.params.domain, anchors[i].href, 
linkTitles, story);
 }
 
 story.story = stories[j].innerHTML;
diff --git a/lib/mobile-util.js b/lib/mobile-util.js
index 6e66ab4..44f26f3 100644
--- a/lib/mobile-util.js
+++ b/lib/mobile-util.js
@@ -188,6 +188,10 @@
 return dateString + '/' + uuid.now().toString();
 };
 
+mUtil.getRbPageSummaryUrl = function(domain, title) {
+return 'https://' + domain + '/api/rest_v1/page/summary/' + 
encodeURIComponent(title);
+};
+
 mUtil.throw404 = function(message) {
 throw new HTTPError({
 status: 404,
diff --git a/spec.yaml b/spec.yaml
index a3aa248..f232f1e 100644
--- a/spec.yaml
+++ b/spec.yaml
@@ -95,7 +95,7 @@
 '200':
   description: The title of a Wikipedia's Featured Article of the Day
   schema:
-$ref: '#/definitions/article_title'
+$ref: '#/definitions/article_summary_merge_link'