Fix language fallback processing, caching bug.

This commit is contained in:
Yuri Astrakhan
2018-12-23 01:04:35 -05:00
parent 8b931f3e6c
commit 9f7f4aa3fc
3 changed files with 278 additions and 260 deletions
+241 -229
View File
@@ -24,226 +24,239 @@ describe('iD.serviceOsmWikibase', function () {
return iD.utilStringQs(url.substring(url.indexOf('?') + 1));
}
var keyData = {
pageid: 205725,
ns: 120,
title: 'Item:Q61',
lastrevid: 1721242,
modified: '2018-12-18T07:00:43Z',
type: 'item',
id: 'Q61',
labels: {
en: {language: 'en', value: 'amenity'}
},
descriptions: {
en: {language: 'en', value: 'For describing useful and important facilities for visitors and residents.'}
},
aliases: {},
claims: {
P2: [ // instance of
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q7'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'normal'
}
],
P16: [
{
mainsnak: {
snaktype: 'value',
datatype: 'string',
datavalue: {value: 'amenity', type: 'string'}
},
type: 'statement',
rank: 'normal'
}
],
P25: [
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q4679'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'normal'
}
],
P9: [
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q8'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'normal'
}
],
P6: [
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q15'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'preferred'
},
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q14'}, type: 'wikibase-entityid'}
},
type: 'statement',
qualifiers: {
P26: [
{
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q6994'}, type: 'wikibase-entityid'}
}
]
},
rank: 'normal'
}
],
P28: [
{
mainsnak: {
snaktype: 'value',
datatype: 'string',
datavalue: {value: 'Mapping-Features-Parking-Lot.png', type: 'string'}
},
type: 'statement',
rank: 'normal'
}
]
},
sitelinks: {
wiki: {
site: 'wiki',
title: 'Key:amenity',
badges: []
function adjust(params, data) {
if (params) {
if (params.norm) {
data.description = data.descriptions.fr.value;
data.label = data.labels.fr.value;
}
}
};
return data;
}
var tagData = {
pageid: 210934,
ns: 120,
title: 'Item:Q4904',
lastrevid: 1718041,
modified: '2018-12-18T03:51:05Z',
type: 'item',
id: 'Q4904',
labels: {
en: {language: 'en', value: 'amenity=parking'}
},
descriptions: {
en: {language: 'en', value: 'A place for parking cars'},
fr: {language: 'fr', value: 'Un lieu pour garer des voitures'}
},
aliases: {},
claims: {
P2: [ // instance of = Q2 (tag)
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q2'}, type: 'wikibase-entityid'}
function keyData(params) {
return adjust(params, {
pageid: 205725,
ns: 120,
title: 'Item:Q42',
lastrevid: 1721242,
modified: '2018-12-18T07:00:43Z',
type: 'item',
id: 'Q42',
labels: {
fr: {language: 'en', value: 'amenity', 'for-language': 'fr'}
},
descriptions: {
fr: {language: 'en', value: 'English description', 'for-language': 'fr'}
},
aliases: {},
claims: {
P2: [ // instance of
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q7'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'normal'
}
],
P16: [
{
mainsnak: {
snaktype: 'value',
datatype: 'string',
datavalue: {value: 'amenity', type: 'string'}
},
type: 'statement',
rank: 'normal'
}
],
P25: [
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q4679'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'normal'
}
],
P9: [
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q8'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'normal'
}
],
P6: [
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q15'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'preferred'
},
type: 'statement',
rank: 'normal'
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q14'}, type: 'wikibase-entityid'}
},
type: 'statement',
qualifiers: {
P26: [
{
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q6994'}, type: 'wikibase-entityid'}
}
]
},
rank: 'normal'
}
],
P28: [
{
mainsnak: {
snaktype: 'value',
datatype: 'string',
datavalue: {value: 'Mapping-Features-Parking-Lot.png', type: 'string'}
},
type: 'statement',
rank: 'normal'
}
]
},
sitelinks: {
wiki: {
site: 'wiki',
title: 'Key:amenity',
badges: []
}
],
P19: [
{
mainsnak: {
snaktype: 'value',
datatype: 'string',
datavalue: {value: 'amenity=parking', type: 'string'}
},
type: 'statement',
rank: 'normal'
}
],
P10: [
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q61'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'normal'
}
],
P4: [
{
mainsnak: {
snaktype: 'value',
datatype: 'commonsMedia',
datavalue: {value: 'Primary image.jpg', type: 'string'}
},
type: 'statement',
rank: 'preferred'
}
],
P6: [
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q14'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'preferred'
},
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q13'}, type: 'wikibase-entityid'}
},
type: 'statement',
qualifiers: {
P26: [
{
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q6994'}, type: 'wikibase-entityid'}
}
]
},
rank: 'normal'
}
],
P25: [
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q4679'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'normal'
}
]
},
sitelinks: {
wiki: {
site: 'wiki',
title: 'Tag:amenity=parking',
badges: []
}
}
};
});
}
function tagData(params) {
return adjust(params, {
pageid: 210934,
ns: 120,
title: 'Item:Q13',
lastrevid: 1718041,
modified: '2018-12-18T03:51:05Z',
type: 'item',
id: 'Q13',
labels: {
fr: {language: 'en', value: 'amenity=parking', 'for-language': 'fr'}
},
descriptions: {
fr: {language: 'fr', value: 'French description'}
},
aliases: {},
claims: {
P2: [ // instance of = Q2 (tag)
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q2'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'normal'
}
],
P19: [
{
mainsnak: {
snaktype: 'value',
datatype: 'string',
datavalue: {value: 'amenity=parking', type: 'string'}
},
type: 'statement',
rank: 'normal'
}
],
P10: [
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q42'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'normal'
}
],
P4: [
{
mainsnak: {
snaktype: 'value',
datatype: 'commonsMedia',
datavalue: {value: 'Primary image.jpg', type: 'string'}
},
type: 'statement',
rank: 'preferred'
}
],
P6: [
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q14'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'preferred'
},
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q13'}, type: 'wikibase-entityid'}
},
type: 'statement',
qualifiers: {
P26: [
{
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q6994'}, type: 'wikibase-entityid'}
}
]
},
rank: 'normal'
}
],
P25: [
{
mainsnak: {
snaktype: 'value',
datatype: 'wikibase-item',
datavalue: {value: {'entity-type': 'item', id: 'Q4679'}, type: 'wikibase-entityid'}
},
type: 'statement',
rank: 'normal'
}
]
},
sitelinks: {
wiki: {
site: 'wiki',
title: 'Tag:amenity=parking',
badges: []
}
}
});
}
var localeData = {
@@ -259,8 +272,8 @@ describe('iD.serviceOsmWikibase', function () {
server.respondWith('GET', /action=wbgetentities/,
[200, {'Content-Type': 'application/json'}, JSON.stringify({
entities: {
Q61: keyData,
Q4904: tagData,
Q42: keyData(),
Q13: tagData(),
Q7792: localeData,
},
success: 1
@@ -271,14 +284,18 @@ describe('iD.serviceOsmWikibase', function () {
expect(query(server.requests[0].url)).to.eql(
{
action: 'wbgetentities',
format: 'json',
languages: 'en|fr',
origin: '*',
sites: 'wiki',
titles: 'Locale:fr|Key:amenity|Tag:amenity=parking',
languages: 'fr',
languagefallback: '1',
origin: '*',
format: 'json',
}
);
expect(callback).to.have.been.calledWith(null, {key: keyData, tag: tagData});
expect(callback).to.have.been.calledWith(null, {
key: keyData({norm: true}),
tag: tagData({norm: true})
});
});
});
@@ -296,15 +313,10 @@ describe('iD.serviceOsmWikibase', function () {
it('gets correct value from entity', function () {
wikibase.addLocale('de', 'Q6994');
wikibase.addLocale('fr', 'Q7792');
expect(wikibase.claimToValue(tagData, 'P4', 'en')).to.eql('Primary image.jpg');
expect(wikibase.claimToValue(keyData, 'P6', 'en')).to.eql('Q15');
expect(wikibase.claimToValue(keyData, 'P6', 'fr')).to.eql('Q15');
expect(wikibase.claimToValue(keyData, 'P6', 'de')).to.eql('Q14');
});
it('gets correct description from entity', function () {
expect(wikibase.getDescription(tagData)).to.eql('Un lieu pour garer des voitures');
expect(wikibase.getDescription(keyData)).to.eql('For describing useful and important facilities for visitors and residents.');
expect(wikibase.claimToValue(tagData(), 'P4', 'en')).to.eql('Primary image.jpg');
expect(wikibase.claimToValue(keyData(), 'P6', 'en')).to.eql('Q15');
expect(wikibase.claimToValue(keyData(), 'P6', 'fr')).to.eql('Q15');
expect(wikibase.claimToValue(keyData(), 'P6', 'de')).to.eql('Q14');
});
});