Mholloway has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/394610 )

Change subject: Hygiene: Add media selector unit tests
......................................................................

Hygiene: Add media selector unit tests

Bug: T177430
Change-Id: I96fe3b9ea38d5721f8f85cb887935bd31a58fd21
---
M lib/media.js
M routes/media.js
M test/lib/media/media-test.js
3 files changed, 33 insertions(+), 16 deletions(-)


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

diff --git a/lib/media.js b/lib/media.js
index 2905177..4ec1c41 100644
--- a/lib/media.js
+++ b/lib/media.js
@@ -1,5 +1,6 @@
 'use strict';
 
+const domino = require('domino');
 const api = require('./api-util');
 
 const MIN_IMAGE_SIZE = 64;
@@ -57,11 +58,14 @@
 
 /**
  * Get file page titles from a NodeList of media elements from Parsoid HTML
- * @param {!NodeList} selection NodeList containing media items from Parsoid 
HTML
+ * @param {!NodeList} html raw Parsoid HTML
  * @return {!Array} array containing the information on the media items on the 
page, in order of
  *          appearance
  */
-function getMediaItemInfoFromPage(selection) {
+function getMediaItemInfoFromPage(html) {
+    const doc = domino.createDocument(html);
+    // todo: handle Mathoid-rendered math images
+    const selection = doc.querySelectorAll(SELECTORS.join(','));
     return [].map.call(selection, (elem) => {
         const mediaType = getMediaType(elem.getAttribute('typeof'));
         const resourceElem = elem.querySelector(mediaType.resourceSelector);
diff --git a/routes/media.js b/routes/media.js
index b4ec043..769b4b0 100644
--- a/routes/media.js
+++ b/routes/media.js
@@ -1,7 +1,6 @@
 'use strict';
 
 const BBPromise = require('bluebird');
-const domino = require('domino');
 const mUtil = require('../lib/mobile-util');
 const parsoid = require('../lib/parsoid-access');
 const sUtil = require('../lib/util');
@@ -19,14 +18,11 @@
 router.get('/media/:title/:revision?/:tid?', (req, res) => {
     return parsoid.getParsoidHtml(app, req).then((response) => {
         const headers = response.headers;
-        const doc = domino.createDocument(response.body);
-        // todo: handle Mathoid-rendered math images
-        const selection = doc.querySelectorAll(media.SELECTORS.join(','));
-        if (!selection) {
+        const mediaList = media.getMediaItemInfoFromPage(response.body);
+        if (!mediaList.length) {
             res.send({ items: [] });
             return;
         }
-        const mediaList = media.getMediaItemInfoFromPage(selection);
         const titles = mUtil.deduplicate(mediaList.map(item => item.title));
         return BBPromise.props({
             metadata: media.getMetadataFromApi(app, req, titles),
diff --git a/test/lib/media/media-test.js b/test/lib/media/media-test.js
index efba835..55d2e5a 100644
--- a/test/lib/media/media-test.js
+++ b/test/lib/media/media-test.js
@@ -1,5 +1,8 @@
 'use strict';
 
+const assert = require('../../utils/assert');
+const media = require('../../../lib/media');
+
 const imageFigure = '<figure typeof="mw:Image" resource="./File:Foo"/>';
 const imageSpan = '<span typeof="mw:Image" resource="./File:Foo"/>';
 const imageFigureInline = '<figure-inline typeof="mw:Image" 
resource="./File:Foo"/>';
@@ -7,14 +10,6 @@
 const imageThumbFigure = '<figure typeof="mw:Image/Thumb" 
resource="./File:Foo"/>';
 const imageThumbSpan = '<span typeof="mw:Image/Thumb" resource="./File:Foo"/>';
 const imageThumbFigureInline = '<figure-inline typeof="mw:Image/Thumb" 
resource="./File:Foo"/>';
-
-const imageFrameFigure = '<figure typeof="mw:Image/Frame" 
resource="./File:Foo"/>';
-const imageFrameSpan = '<span typeof="mw:Image/Frame" resource="./File:Foo"/>';
-const imageFrameFigureInline = '<figure-inline typeof="mw:Image/Frame" 
resource="./File:Foo"/>';
-
-const imageFramelessFigure = '<figure typeof="mw:Image/Frameless" 
resource="./File:Foo"/>';
-const imageFramelessSpan = '<span typeof="mw:Image/Frameless" 
resource="./File:Foo"/>';
-const imageFramelessFigureInline = '<figure-inline typeof="mw:Image/Frameless" 
resource="./File:Foo"/>';
 
 const videoFigure = '<figure typeof="mw:Video" resource="./File:Foo"/>';
 const videoSpan = '<span typeof="mw:Video" resource="./File:Foo"/>';
@@ -31,3 +26,25 @@
 const noTypeOfFigure = '<figure resource="./File:Foo"/>';
 const noTypeOfSpan = '<span resource="./File:Foo"/>';
 const noTypeOfFigureInline = '<figure-inline resource="./File:Foo"/>';
+
+const validItems = [imageFigure, imageSpan, imageFigureInline, 
imageThumbFigure, imageThumbSpan,
+    imageThumbFigureInline, videoFigure, videoSpan, videoFigureInline, 
videoThumbFigure,
+    videoThumbSpan, videoThumbFigureInline, audioFigure, audioSpan, 
audioFigureInline];
+
+const invalidItems = [noTypeOfFigure, noTypeOfSpan, noTypeOfFigureInline];
+
+describe('lib:media', () => {
+
+    it('items should be found for expected selectors', () => {
+        const page = validItems.join('');
+        const result = media.getMediaItemInfoFromPage(page);
+        assert.deepEqual(result.length, validItems.length);
+    });
+
+    it('items should not be found for other selectors', () => {
+        const page = invalidItems.join('');
+        const result = media.getMediaItemInfoFromPage(page);
+        assert.deepEqual(result.length, 0);
+    });
+
+});

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I96fe3b9ea38d5721f8f85cb887935bd31a58fd21
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