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