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