Mholloway has uploaded a new change for review. (
https://gerrit.wikimedia.org/r/403575 )
Change subject: Guard against unexpected ImageDescription extmetadata values
......................................................................
Guard against unexpected ImageDescription extmetadata values
ImageDescription, like all extmetadata fields, can contain anything.
It's a mistake to assume that it will take the form of a key-value
object.
This guards against unexpected input.
Bug: T184669
Change-Id: I502a2b03109686d6a23c124b814eff92b75bb8c1
---
M lib/feed/featured-image.js
M test/features/featured-image/pagecontent.js
2 files changed, 26 insertions(+), 2 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/services/mobileapps
refs/changes/75/403575/1
diff --git a/lib/feed/featured-image.js b/lib/feed/featured-image.js
index fd04030..79ee550 100644
--- a/lib/feed/featured-image.js
+++ b/lib/feed/featured-image.js
@@ -87,6 +87,18 @@
return Object.keys(descriptions)[0];
}
+/**
+ * Resolved description language from the extmetadata ImageDescription field,
if
+ * available. Requires that the input be an object of the form
{"en":"foo","de":"bar"}.
+ * If not, will return undefined or false.
+ * @param {?Object} input extmetadata ImageDescription value (may be undefined)
+ * @param {!String} lang the request language
+ * @return {?String|Boolean} the description language to use
+ */
+function resolvedLangFromImageDescription(input, lang) {
+ return input && (typeof (input) === 'object' || undefined) &&
pickDescriptionLang(input, lang);
+}
+
function buildPayload(page, lang) {
if (!page || page.notfound) {
return undefined;
@@ -118,7 +130,7 @@
}
const descriptions = imageinfo.extmetadata.ImageDescription.value;
- const resolvedLang = descriptions && pickDescriptionLang(descriptions,
lang);
+ const resolvedLang = resolvedLangFromImageDescription(descriptions, lang);
if (resolvedLang) {
payload.description = new Description(resolvedLang,
descriptions[resolvedLang]);
}
@@ -210,5 +222,8 @@
}
module.exports = {
- promise
+ promise,
+ testing: {
+ resolvedLangFromImageDescription
+ }
};
diff --git a/test/features/featured-image/pagecontent.js
b/test/features/featured-image/pagecontent.js
index 4b7cfdd..a77e832 100644
--- a/test/features/featured-image/pagecontent.js
+++ b/test/features/featured-image/pagecontent.js
@@ -83,6 +83,15 @@
});
});
+ it('should return english description where ImageDescription value is
unexpected type', () => {
+ const uri =
`${server.config.uri}zh.wikipedia.org/v1/media/image/featured/2018/01/10`;
+ return preq.get({uri})
+ .then((res) => {
+ assert.contains(res.body.description.text, 'Motosacoche');
+ assert.deepEqual(res.body.description.lang, 'en');
+ });
+ });
+
it('featured image of an old date should return 404', () => {
const uri =
`${server.config.uri}en.wikipedia.org/v1/media/image/featured/1970/12/31`;
return preq.get({ uri })
--
To view, visit https://gerrit.wikimedia.org/r/403575
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I502a2b03109686d6a23c124b814eff92b75bb8c1
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