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'
         '204':
           description: Empty response (for feed content aggregation requests 
from RESTBase)
           schema:
@@ -128,7 +128,7 @@
             headers:
               content-type: application/json
             body:
-              title: /.+/
+              $merge: [ /.+/ ]
         - title: retrieve featured article info for unsupported site (with 
aggregated=true)
           request:
             params:
@@ -277,7 +277,7 @@
               articles:
                 - views: /.+/
                   rank: /.+/
-                  title: /.+/
+                  $merge: [ /.+/ ]
         - title: retrieve the most-read articles for January 1, 2016 (with 
aggregated=true)
           request:
             params:
@@ -295,7 +295,7 @@
               articles:
                 - views: /.+/
                   rank: /.+/
-                  title: /.+/
+                  $merge: [ /.+/ ]
         - title: retrieve most-read articles for date with no data (with 
aggregated=true)
           request:
             params:
@@ -373,7 +373,7 @@
             body:
               - story: /.+/
                 links:
-                  - title: /.+/
+                  - $merge: [ /.+/ ]
         - title: get 'In the News' content for unsupported language (with 
aggregated=true)
           request:
             params:
@@ -571,6 +571,15 @@
     required:
       - title
 
+  article_summary_merge_link:
+    type: object
+    properties:
+      $merge:
+        type: array
+        description: One-element array containing the link to the RESTBase 
summary for the article
+    required:
+      - $merge
+
   thumbnail:
     type: object
     properties:
@@ -593,9 +602,9 @@
   mostread_article:
     type: object
     properties:
-      title:
-        type: string
-        description: Article title in a form of DB key
+      $merge:
+        type: array
+        description: One-element array containing the link to the RESTBase 
summary for the article
       views:
         type: integer
         description: Number of views on the requested day
@@ -603,7 +612,7 @@
         type: integer
         description: Position in the list of most viewed articles
     required:
-      - title
+      - $merge
       - views
       - rank
 
@@ -632,7 +641,7 @@
         type: array
         description: A collection of articles related to the news item
         items:
-          $ref: '#/definitions/article_title'
+          $ref: '#/definitions/article_summary_merge_link'
     required:
       - story
       - links
diff --git a/test/features/app/spec.js b/test/features/app/spec.js
index a530fb7..52b4167 100644
--- a/test/features/app/spec.js
+++ b/test/features/app/spec.js
@@ -314,7 +314,7 @@
 
         it('featured article response should conform to schema', function() {
             var uri = server.config.uri + 'en.wikipedia.org/v1/page/featured/' 
+ dateString;
-            return assertValidSchema(uri, '#/definitions/article_title');
+            return assertValidSchema(uri, 
'#/definitions/article_summary_merge_link');
         });
 
         it('featured image response should conform to schema', function() {
diff --git a/test/features/featured/pagecontent.js 
b/test/features/featured/pagecontent.js
index 7823e1c..f897f53 100644
--- a/test/features/featured/pagecontent.js
+++ b/test/features/featured/pagecontent.js
@@ -29,7 +29,7 @@
             .then(function(res) {
                 assert.status(res, 200);
                 assert.ok(res.headers.etag.indexOf('50089449') == 0);
-                assert.equal(res.body.title, 
'Cosmic_Stories_and_Stirring_Science_Stories');
+                assert.equal(res.body.$merge, 
'https://en.wikipedia.org/api/rest_v1/page/summary/Cosmic_Stories_and_Stirring_Science_Stories');
             });
     });
 
@@ -38,7 +38,7 @@
             .then(function(res) {
                 assert.status(res, 200);
                 assert.ok(res.headers.etag.indexOf('50282338') == 0);
-                assert.equal(res.body.title, 'Lightning_(Final_Fantasy)');
+                assert.equal(res.body.$merge, 
'https://en.wikipedia.org/api/rest_v1/page/summary/Lightning_(Final_Fantasy)');
             });
     });
 
diff --git a/test/features/news/news.js b/test/features/news/news.js
index 6101b73..366b6bc 100644
--- a/test/features/news/news.js
+++ b/test/features/news/news.js
@@ -55,7 +55,7 @@
                         assert.ok(elem.story, 'story should be present');
                         assert.ok(elem.links, 'links should be present');
                         elem.links.forEach(function (link) {
-                            assert.ok(link.title, 'title should be present');
+                            assert.ok(link.$merge, '$merge should be present');
                             assert.ok(link.missing === undefined, 'no missing 
links should be present');
                         });
                     });
@@ -80,16 +80,16 @@
     });
 
     it('Duplicate titles handled correctly', function() {
-        news.pushTitleIfNew(testTitles, {}, 'Kendra_Harrison');
+        news.pushTitleIfNew('en.wikipedia.org', testTitles, {}, 
'Kendra_Harrison');
         assert.deepEqual(testTitles, [ 'Kendra_Harrison', '100_metres_hurdles' 
]);
-        news.pushTitleIfNew(testTitles, {}, 
news.removeFragment('100_metres_hurdles#Top_25_fastest_athletes'));
+        news.pushTitleIfNew('en.wikipedia.org', testTitles, {}, 
news.removeFragment('100_metres_hurdles#Top_25_fastest_athletes'));
         assert.deepEqual(testTitles, [ 'Kendra_Harrison', '100_metres_hurdles' 
]);
     });
 
     it('Links titles list constructed correctly', function() {
         var linkTitles = [];
         for (var i = 0, n = hrefs.length; i < n; i++) {
-            news.createLinksList(hrefs[i], linkTitles, { links: [] });
+            news.createLinksList('en.wikipedia.org', hrefs[i], linkTitles, { 
links: [] });
         }
         assert.deepEqual(linkTitles, testTitles2);
     });

-- 
To view, visit https://gerrit.wikimedia.org/r/320306
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia42aeb9c95c64f246aea85b05435103a728da19d
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/mobileapps
Gerrit-Branch: master
Gerrit-Owner: Mholloway <mhollo...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to