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&amp;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

Reply via email to