mirror of
https://github.com/FoggedLens/iD.git
synced 2026-05-24 09:04:02 +02:00
Merge branch 'master' into validation
# Conflicts: # data/core.yaml # dist/locales/en.json # modules/ui/commit_warnings.js # modules/ui/entity_editor.js # modules/util/index.js # modules/util/util.js # modules/validations/index.js # modules/validations/many_deletions.js # modules/validations/missing_tag.js
This commit is contained in:
@@ -110,6 +110,7 @@
|
||||
<script src='spec/services/nominatim.js'></script>
|
||||
<script src='spec/services/openstreetcam.js'></script>
|
||||
<script src='spec/services/osm.js'></script>
|
||||
<script src='spec/services/osm_wikibase.js'></script>
|
||||
<script src='spec/services/streetside.js'></script>
|
||||
<script src='spec/services/taginfo.js'></script>
|
||||
|
||||
|
||||
@@ -0,0 +1,322 @@
|
||||
describe('iD.serviceOsmWikibase', function () {
|
||||
var server, wikibase;
|
||||
|
||||
before(function () {
|
||||
iD.services.osmWikibase = iD.serviceOsmWikibase;
|
||||
});
|
||||
|
||||
after(function () {
|
||||
delete iD.services.osmWikibase;
|
||||
});
|
||||
|
||||
beforeEach(function () {
|
||||
wikibase = iD.services.osmWikibase;
|
||||
wikibase.init();
|
||||
server = sinon.fakeServer.create();
|
||||
});
|
||||
|
||||
afterEach(function () {
|
||||
server.restore();
|
||||
});
|
||||
|
||||
|
||||
function query(url) {
|
||||
return iD.utilStringQs(url.substring(url.indexOf('?') + 1));
|
||||
}
|
||||
|
||||
function adjust(params, data) {
|
||||
if (params) {
|
||||
if (params.norm) {
|
||||
data.description = data.descriptions.fr.value;
|
||||
data.label = data.labels.fr.value;
|
||||
}
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
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'
|
||||
},
|
||||
{
|
||||
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 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 = {
|
||||
id: 'Q7792',
|
||||
sitelinks: {wiki: {site: 'wiki', title: 'Locale:fr'}}
|
||||
};
|
||||
|
||||
describe('#getEntity', function () {
|
||||
it('calls the given callback with the results of the getEntity data item query', function () {
|
||||
var callback = sinon.spy();
|
||||
wikibase.getEntity({key: 'amenity', value: 'parking', langCode: 'fr'}, callback);
|
||||
|
||||
server.respondWith('GET', /action=wbgetentities/,
|
||||
[200, {'Content-Type': 'application/json'}, JSON.stringify({
|
||||
entities: {
|
||||
Q42: keyData(),
|
||||
Q13: tagData(),
|
||||
Q7792: localeData,
|
||||
},
|
||||
success: 1
|
||||
})]
|
||||
);
|
||||
server.respond();
|
||||
|
||||
expect(query(server.requests[0].url)).to.eql(
|
||||
{
|
||||
action: 'wbgetentities',
|
||||
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({norm: true}),
|
||||
tag: tagData({norm: true})
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
it('creates correct sitelinks', function () {
|
||||
expect(wikibase.toSitelink('amenity')).to.eql('Key:amenity');
|
||||
expect(wikibase.toSitelink('amenity_')).to.eql('Key:amenity');
|
||||
expect(wikibase.toSitelink('_amenity_')).to.eql('Key: amenity');
|
||||
expect(wikibase.toSitelink('amenity or_not_')).to.eql('Key:amenity or not');
|
||||
expect(wikibase.toSitelink('amenity', 'parking')).to.eql('Tag:amenity=parking');
|
||||
expect(wikibase.toSitelink(' amenity_', '_parking_')).to.eql('Tag: amenity = parking');
|
||||
expect(wikibase.toSitelink('amenity or_not', '_park ing_')).to.eql('Tag:amenity or not= park ing');
|
||||
});
|
||||
|
||||
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');
|
||||
});
|
||||
|
||||
});
|
||||
@@ -26,17 +26,18 @@ describe('iD.svgLayers', function () {
|
||||
it('creates default data layers', function () {
|
||||
container.call(iD.svgLayers(projection, context));
|
||||
var nodes = container.selectAll('svg .data-layer').nodes();
|
||||
expect(nodes.length).to.eql(10);
|
||||
expect(nodes.length).to.eql(11);
|
||||
expect(d3.select(nodes[0]).classed('osm')).to.be.true;
|
||||
expect(d3.select(nodes[1]).classed('notes')).to.be.true;
|
||||
expect(d3.select(nodes[2]).classed('data')).to.be.true;
|
||||
expect(d3.select(nodes[3]).classed('streetside')).to.be.true;
|
||||
expect(d3.select(nodes[4]).classed('mapillary-images')).to.be.true;
|
||||
expect(d3.select(nodes[5]).classed('mapillary-signs')).to.be.true;
|
||||
expect(d3.select(nodes[6]).classed('openstreetcam-images')).to.be.true;
|
||||
expect(d3.select(nodes[7]).classed('debug')).to.be.true;
|
||||
expect(d3.select(nodes[8]).classed('geolocate')).to.be.true;
|
||||
expect(d3.select(nodes[9]).classed('touch')).to.be.true;
|
||||
expect(d3.select(nodes[3]).classed('keepRight')).to.be.true;
|
||||
expect(d3.select(nodes[4]).classed('streetside')).to.be.true;
|
||||
expect(d3.select(nodes[5]).classed('mapillary-images')).to.be.true;
|
||||
expect(d3.select(nodes[6]).classed('mapillary-signs')).to.be.true;
|
||||
expect(d3.select(nodes[7]).classed('openstreetcam-images')).to.be.true;
|
||||
expect(d3.select(nodes[8]).classed('debug')).to.be.true;
|
||||
expect(d3.select(nodes[9]).classed('geolocate')).to.be.true;
|
||||
expect(d3.select(nodes[10]).classed('touch')).to.be.true;
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
@@ -110,7 +110,7 @@ describe('iD.uiFieldWikipedia', function() {
|
||||
expect(iD.utilGetSetValue(selection.selectAll('.wiki-lang'))).to.equal('Deutsch');
|
||||
});
|
||||
|
||||
it('does not set delayed wikidata tag if graph has changed', function(done) {
|
||||
it.skip('does not set delayed wikidata tag if graph has changed', function(done) {
|
||||
var wikipedia = iD.uiFieldWikipedia(field, context).entity(entity);
|
||||
wikipedia.on('change', changeTags);
|
||||
selection.call(wikipedia);
|
||||
|
||||
Reference in New Issue
Block a user