Mholloway has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/386398 )
Change subject: Hygiene: Update summary construction for unit testability and
update tests
......................................................................
Hygiene: Update summary construction for unit testability and update tests
Change-Id: I4c05656c02a9addab424cc8c45ee85add11a749b
---
M lib/mobile-util.js
M routes/mobile-sections.js
M test/features/summary/pagecontent.js
M test/fixtures/formatted-lead-Β-lactam_antibiotic.json
4 files changed, 76 insertions(+), 79 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/mobileapps
refs/changes/98/386398/1
diff --git a/lib/mobile-util.js b/lib/mobile-util.js
index 706fbd1..e66b96b 100644
--- a/lib/mobile-util.js
+++ b/lib/mobile-util.js
@@ -3,6 +3,7 @@
const underscore = require('underscore');
const uuid = require('cassandra-uuid').TimeUuid;
const HTTPError = require('./util').HTTPError;
+const transforms = require('../lib/transforms');
const mUtil = {};
const NS_MAIN = 0;
@@ -222,6 +223,46 @@
};
};
+/*
+ * Build a summary for the page given in req
+ * @param {!Object} title a mediawiki-title object for the page title
+ * @param {!Object} lead a page lead object for the page
+ * @return {!Object} a summary 2.0 spec-compliant page summary object
+ */
+mUtil.buildSummary = function(title, lead) {
+ let summary = {};
+ const type = 'standard';
+ let code = 200;
+
+ if (!lead) {
+ return false;
+ } else if (lead.contentmodel ||
!mUtil.SUMMARY_NS_WHITELIST.includes(lead.ns)) {
+ code = 204;
+ } else if (lead.intro) {
+ summary = transforms.summarize(lead.intro);
+ } else {
+ // If the lead introduction is empty we should consider it
+ // a placeholder e.g. redirect page. To avoid sending an empty
+ // summary 204. (T176517)
+ code = 204;
+ }
+ return Object.assign({
+ code,
+ type,
+ title: lead.normalizedtitle,
+ displaytitle: lead.displaytitle,
+ titles: mUtil.buildTitleDictionary(title, lead),
+ pageid: lead.id,
+ thumbnail: lead.thumbnail,
+ originalimage: lead.originalimage,
+ lang: lead.lang,
+ dir: lead.dir,
+ revision: lead.revision,
+ timestamp: lead.lastmodified,
+ description: lead.description
+ }, summary);
+};
+
mUtil.throw404 = function(message) {
throw new HTTPError({
status: 404,
diff --git a/routes/mobile-sections.js b/routes/mobile-sections.js
index 49bc129..05d5921 100644
--- a/routes/mobile-sections.js
+++ b/routes/mobile-sections.js
@@ -376,54 +376,6 @@
});
}
-/*
- * Build a summary for the page given in req
- * @param {!Request} req
- * not apply legacy transformations that we are in the process
- * of deprecating.
- * @return {!BBPromise}
- */
-function buildSummary(req) {
- return BBPromise.props({
- title: mwapi.getTitleObj(app, req),
- lead: buildLeadObject(req, false)
- }).then((response) => {
- let summary = {};
- const title = response.title;
- const lead = response.lead;
- const type = 'standard';
- let code = 200;
-
- if (!lead) {
- return false;
- } else if (lead.contentmodel ||
!mUtil.SUMMARY_NS_WHITELIST.includes(lead.ns)) {
- code = 204;
- } else if (lead.intro) {
- summary = transforms.summarize(lead.intro);
- } else {
- // If the lead introduction is empty we should consider it
- // a placeholder e.g. redirect page. To avoid sending an empty
- // summary 204. (T176517)
- code = 204;
- }
- return Object.assign({
- code,
- type,
- title: lead.normalizedtitle,
- displaytitle: lead.displaytitle,
- titles: mUtil.buildTitleDictionary(title, lead),
- pageid: lead.id,
- thumbnail: lead.thumbnail,
- originalimage: lead.originalimage,
- lang: lead.lang,
- dir: lead.dir,
- revision: lead.revision,
- timestamp: lead.lastmodified,
- description: lead.description
- }, summary);
- });
-}
-
/**
* GET {domain}/v1/page/mobile-sections/{title}
* Gets the mobile app version of a given wiki page.
@@ -475,7 +427,11 @@
* Extracts a summary of a given wiki page limited to one paragraph of text
*/
router.get('/summary/:title/:revision?/:tid?', (req, res) => {
- return buildSummary(req).then((summary) => {
+ return BBPromise.props({
+ title: mwapi.getTitleObj(app, req),
+ lead: buildLeadObject(req, false)
+ }).then((response) => {
+ const summary = mUtil.buildSummary(response.title, response.lead);
if (summary) {
res.status(summary.code);
if (summary.code === 200) {
diff --git a/test/features/summary/pagecontent.js
b/test/features/summary/pagecontent.js
index c24870f..a4a8fab 100644
--- a/test/features/summary/pagecontent.js
+++ b/test/features/summary/pagecontent.js
@@ -1,10 +1,7 @@
'use strict';
-const preq = require('preq');
const Title = require('mediawiki-title').Title;
const assert = require('../../utils/assert.js');
-const headers = require('../../utils/headers.js');
-const server = require('../../utils/server.js');
const mUtil = require('../../../lib/mobile-util');
const blaLead =
require('../../fixtures/formatted-lead-Β-lactam_antibiotic.json');
@@ -14,33 +11,23 @@
this.timeout(20000); // eslint-disable-line no-invalid-this
- before(() => { return server.start(); });
-
- const localUri = (title, domain = 'en.wikipedia.org') => {
- return `${server.config.uri}${domain}/v1/page/summary/${title}`;
- };
-
- it('should respond to GET request with expected headers, incl. CORS and
CSP headers', () => {
- const uri = localUri('Foobar');
- return headers.checkHeaders(uri);
- });
-
- it('should respond with expected properties in payload', () => {
-
- const uri = localUri('Foobar/798652007');
- return preq.get({ uri })
- .then((res) => {
- assert.deepEqual(res.status, 200);
- assert.deepEqual(res.body.type, 'standard');
- assert.deepEqual(res.body.revision, 798652007);
- assert.deepEqual(res.body.titles.normalized, "Foobar");
- assert.deepEqual(res.body.titles.denormalized, "Foobar");
- assert.deepEqual(res.body.titles.display, "Foobar");
- assert.deepEqual(res.body.titles.namespace_id, 0);
- assert.deepEqual(res.body.titles.namespace_name, "");
- assert.ok(res.body.extract.indexOf('foobar') > -1);
- assert.ok(res.body.extract_html.indexOf('<b>foobar</b>') > -1);
- });
+ it('page summaries should contain all expected properties', () => {
+ const title = Title.newFromText('Β-lactam_antibiotic', siteinfo);
+ const summary = mUtil.buildSummary(title, blaLead);
+ assert.deepEqual(summary.pageid, 52784);
+ assert.deepEqual(summary.type, 'standard');
+ assert.deepEqual(summary.revision, 801345149);
+ assert.deepEqual(summary.title, 'Β-lactam antibiotic');
+ assert.deepEqual(summary.displaytitle, 'β-lactam antibiotic');
+ assert.deepEqual(summary.lang, 'en');
+ assert.deepEqual(summary.dir, 'ltr');
+ assert.deepEqual(summary.timestamp, '2017-09-19T03:33:47Z');
+ assert.ok(summary.titles);
+ assert.ok(summary.thumbnail);
+ assert.ok(summary.originalimage);
+ assert.ok(summary.extract.includes('β-lactam antibiotics'));
+ assert.ok(summary.extract_html.includes('<b>β-lactam
antibiotics</b>'));
+ assert.ok(summary.description.includes('β-lactam'));
});
it('titles dictionary contains all required fields', () => {
diff --git "a/test/fixtures/formatted-lead-\316\222-lactam_antibiotic.json"
"b/test/fixtures/formatted-lead-\316\222-lactam_antibiotic.json"
index 02cd620..43184f4 100644
--- "a/test/fixtures/formatted-lead-\316\222-lactam_antibiotic.json"
+++ "b/test/fixtures/formatted-lead-\316\222-lactam_antibiotic.json"
@@ -14,6 +14,8 @@
"description": "class of broad-spectrum antibiotics, consisting of all
antibiotic agents that contain a β-lactam ring in their molecular structures.
This includes penicillin derivatives (penams), cephalosporins (cephems),
monobactams, and carbapenems",
"protection": {},
"editable": true,
+ "dir": "ltr",
+ "lang": "en",
"languagecount": 35,
"image": {
"file": "Beta-lactam_antibiotics_example_1.svg",
@@ -24,6 +26,17 @@
"1024":
"//upload.wikimedia.org/wikipedia/commons/thumb/d/d8/Beta-lactam_antibiotics_example_1.svg/678px-Beta-lactam_antibiotics_example_1.svg.png"
}
},
+ "thumbnail": {
+ "source":
"https://upload.wikimedia.org/wikipedia/commons/thumb/d/d8/Beta-lactam_antibiotics_example_1.svg/320px-Beta-lactam_antibiotics_example_1.svg.png",
+ "width": 320,
+ "height": 483,
+ "original":
"https://upload.wikimedia.org/wikipedia/commons/d/d8/Beta-lactam_antibiotics_example_1.svg"
+ },
+ "originalimage": {
+ "source":
"https://upload.wikimedia.org/wikipedia/commons/d/d8/Beta-lactam_antibiotics_example_1.svg",
+ "width": 510,
+ "height": 770
+ },
"hatnotes": [],
"infobox": "<table class=\"infobox\"><tbody><tr><th colspan=\"2\"
style=\"text-align:center;font-size:125%;font-weight:bold;background-color:
\n#ddbbee\">β-lactam antibiotic<br>Beta-lactam antibiotic</th></tr><tr><td
colspan=\"2\" style=\"text-align:center\">\n<i><a href=\"./Drug_class\"
title=\"Drug class\">Drug class</a></i></td></tr><tr><td colspan=\"2\"
style=\"text-align:center\">\n<p><span class=\"mw-default-size\"><a
href=\"./File:Beta-lactam_antibiotics_example_1.svg\"><img
src=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d8/Beta-lactam_antibiotics_example_1.svg/280px-Beta-lactam_antibiotics_example_1.svg.png\"
data-file-type=\"drawing\" height=\"423\" width=\"280\"
srcset=\"//upload.wikimedia.org/wikipedia/commons/thumb/d/d8/Beta-lactam_antibiotics_example_1.svg/560px-Beta-lactam_antibiotics_example_1.svg.png
2x,
//upload.wikimedia.org/wikipedia/commons/thumb/d/d8/Beta-lactam_antibiotics_example_1.svg/420px-Beta-lactam_antibiotics_example_1.svg.png
1.5x\"></a></span></p><div>Core structure of <a href=\"./Penicillin\"
title=\"Penicillin\">penicillins</a> (top) and <a href=\"./Cephalosporin\"
title=\"Cephalosporin\">cephalosporins</a> (bottom). <a href=\"./Β-lactam\"
title=\"Β-lactam\" class=\"mw-redirect\">β-lactam</a> ring in
red.</div></td></tr><tr><th colspan=\"2\" style=\"text-align:center;background:
#e8e8e8;\">Class identifiers</th></tr><tr><th
scope=\"row\">Use</th><td>\nBacterial infection</td></tr><tr><th
scope=\"row\"><a
href=\"./Anatomical_Therapeutic_Chemical_Classification_System\"
title=\"Anatomical Therapeutic Chemical Classification System\">ATC
code</a></th><td>\n<a href=\"./ATC_code_J01C\" title=\"ATC code J01C\"
class=\"mw-redirect\">J01C</a></td></tr><tr><th scope=\"row\"><a
href=\"./Biological_target\" title=\"Biological target\">Biological
target</a></th><td>\n<a href=\"./Penicillin_binding_protein\"
title=\"Penicillin binding protein\" class=\"mw-redirect\">Penicillin binding
protein</a></td></tr><tr><th colspan=\"2\"
style=\"text-align:center;background: #e8e8e8;\">External
links</th></tr><tr><th scope=\"row\"><a href=\"./Medical_Subject_Headings\"
title=\"Medical Subject Headings\">MeSH</a></th><td>\n<span class=\"reflink
plainlinks nourlexpansion\"><a rel=\"mw:ExtLink\"
href=\"https://www.nlm.nih.gov/cgi/mesh/2011/MB_cgi?field=uid&term=D047090\">D047090</a></span></td></tr><tr><td
colspan=\"2\" style=\"text-align:center;background: #e8e8e8; text-align:
center\">\n<a rel=\"mw:ExtLink\"
href=\"https://www.wikidata.org/wiki/Q306264%20\" title=\"d:Q306264 \">In
Wikidata</a></td></tr></tbody></table>",
"intro": "<p><b>β-lactam antibiotics</b> (<b>beta-lactam antibiotics</b>)
are a class of <a href=\"./Broad-spectrum_antibiotic\" title=\"Broad-spectrum
antibiotic\">broad-spectrum antibiotics</a>, consisting of all <a
href=\"./Antibiotic\" title=\"Antibiotic\" class=\"mw-redirect\">antibiotic</a>
agents that contain a <a href=\"./Beta-lactam\"
title=\"Beta-lactam\">beta-lactam</a> ring in their molecular structures. This
includes <a href=\"./Penicillin\" title=\"Penicillin\">penicillin</a>
derivatives (<a href=\"./Penam\" title=\"Penam\">penams</a>), <a
href=\"./Cephalosporin\" title=\"Cephalosporin\">cephalosporins</a> (<a
href=\"./Cephem\" title=\"Cephem\">cephems</a>), <a href=\"./Monobactam\"
title=\"Monobactam\">monobactams</a>, and <a href=\"./Carbapenem\"
title=\"Carbapenem\">carbapenems</a>.<span class=\"mw-ref\"
id=\"cite_ref-pmid10950216_1-0\"><a
href=\"./Β-lactam_antibiotic#cite_note-pmid10950216-1\" style=\"counter-reset:
mw-Ref 1;\"><span class=\"mw-reflink-text\">[1]</span></a></span> Most β-lactam
antibiotics work by inhibiting <a href=\"./Cell_wall\" title=\"Cell wall\">cell
wall</a> biosynthesis in the bacterial organism and are the most widely used
group of antibiotics. Until 2003, when measured by sales, more than half of all
commercially available antibiotics in use were β-lactam compounds.<span
class=\"mw-ref\" id=\"cite_ref-2\"><a
href=\"./Β-lactam_antibiotic#cite_note-2\" style=\"counter-reset: mw-Ref
2;\"><span class=\"mw-reflink-text\">[2]</span></a></span></p>",
--
To view, visit https://gerrit.wikimedia.org/r/386398
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I4c05656c02a9addab424cc8c45ee85add11a749b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/services/mobileapps
Gerrit-Branch: master
Gerrit-Owner: Mholloway <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits