mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-16 18:52:57 +00:00
1. All services are disabled in testing now to prevent network accesses 2. Only services are enabled when needed to test something 3. Many changes throughout code to allow iD to run with services disabled (e.g. check for osm service instead of assuming context.connection() will work) 4. Actually export the services so we can disable and enable them
151 lines
6.0 KiB
JavaScript
151 lines
6.0 KiB
JavaScript
describe('iD.uiFieldWikipedia', function() {
|
|
var entity, context, selection, field;
|
|
|
|
function changeTags(changed) {
|
|
var e = context.entity(entity.id),
|
|
annotation = 'Changed tags.',
|
|
tags = _.clone(e.tags);
|
|
|
|
_.forEach(changed, function(v, k) {
|
|
if (v !== undefined || tags.hasOwnProperty(k)) {
|
|
tags[k] = v;
|
|
}
|
|
});
|
|
|
|
if (!_.isEqual(e.tags, tags)) {
|
|
context.perform(iD.actionChangeTags(e.id, tags), annotation);
|
|
}
|
|
}
|
|
|
|
before(function() {
|
|
iD.services.wikipedia = iD.serviceWikipedia;
|
|
iD.services.wikidata = iD.serviceWikidata;
|
|
});
|
|
|
|
after(function() {
|
|
delete iD.services.wikipedia;
|
|
delete iD.services.wikidata;
|
|
});
|
|
|
|
beforeEach(function() {
|
|
entity = iD.Node({id: 'n12345'});
|
|
context = iD.Context();
|
|
context.history().merge([entity]);
|
|
selection = d3.select(document.createElement('div'));
|
|
field = context.presets().field('wikipedia');
|
|
window.JSONP_DELAY = 0;
|
|
window.JSONP_FIX = {
|
|
entities: {
|
|
Q216353: { id: 'Q216353' }
|
|
}
|
|
};
|
|
});
|
|
|
|
afterEach(function() {
|
|
window.JSONP_FIX = undefined;
|
|
});
|
|
|
|
it('recognizes lang:title format', function() {
|
|
var wikipedia = iD.uiFieldWikipedia(field, context);
|
|
selection.call(wikipedia);
|
|
wikipedia.tags({wikipedia: 'en:Title'});
|
|
|
|
expect(iD.utilGetSetValue(selection.selectAll('.wiki-lang'))).to.equal('English');
|
|
expect(iD.utilGetSetValue(selection.selectAll('.wiki-title'))).to.equal('Title');
|
|
});
|
|
|
|
it('sets language, value', function() {
|
|
var wikipedia = iD.uiFieldWikipedia(field, context).entity(entity);
|
|
wikipedia.on('change', changeTags);
|
|
selection.call(wikipedia);
|
|
|
|
var spy = sinon.spy();
|
|
wikipedia.on('change.spy', spy);
|
|
|
|
iD.utilGetSetValue(selection.selectAll('.wiki-lang'), 'Deutsch');
|
|
happen.once(selection.selectAll('.wiki-lang').node(), { type: 'change' });
|
|
happen.once(selection.selectAll('.wiki-lang').node(), { type: 'blur' });
|
|
|
|
iD.utilGetSetValue(selection.selectAll('.wiki-title'), 'Title');
|
|
happen.once(selection.selectAll('.wiki-title').node(), { type: 'change' });
|
|
happen.once(selection.selectAll('.wiki-title').node(), { type: 'blur' });
|
|
|
|
expect(spy.callCount).to.equal(4);
|
|
expect(spy.getCall(0)).to.have.been.calledWith({ wikipedia: undefined, wikidata: undefined }); // lang on change
|
|
expect(spy.getCall(1)).to.have.been.calledWith({ wikipedia: undefined, wikidata: undefined }); // lang on blur
|
|
expect(spy.getCall(2)).to.have.been.calledWith({ wikipedia: 'de:Title' }); // title on change
|
|
expect(spy.getCall(3)).to.have.been.calledWith({ wikipedia: 'de:Title' }); // title on blur
|
|
});
|
|
|
|
it('recognizes pasted URLs', function() {
|
|
var wikipedia = iD.uiFieldWikipedia(field, context).entity(entity);
|
|
wikipedia.on('change', changeTags);
|
|
selection.call(wikipedia);
|
|
|
|
iD.utilGetSetValue(selection.selectAll('.wiki-title'), 'http://de.wikipedia.org/wiki/Title');
|
|
happen.once(selection.selectAll('.wiki-title').node(), { type: 'change' });
|
|
|
|
expect(iD.utilGetSetValue(selection.selectAll('.wiki-lang'))).to.equal('Deutsch');
|
|
expect(iD.utilGetSetValue(selection.selectAll('.wiki-title'))).to.equal('Title');
|
|
});
|
|
|
|
it('preserves existing language', function() {
|
|
selection.call(iD.uiFieldWikipedia(field, context));
|
|
iD.utilGetSetValue(selection.selectAll('.wiki-lang'), 'Deutsch');
|
|
|
|
var wikipedia = iD.uiFieldWikipedia(field, context);
|
|
selection.call(wikipedia);
|
|
wikipedia.tags({});
|
|
|
|
expect(iD.utilGetSetValue(selection.selectAll('.wiki-lang'))).to.equal('Deutsch');
|
|
});
|
|
|
|
it('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);
|
|
window.JSONP_DELAY = 60;
|
|
|
|
var spy = sinon.spy();
|
|
wikipedia.on('change.spy', spy);
|
|
|
|
// Set title to "Skip"
|
|
iD.utilGetSetValue(selection.selectAll('.wiki-lang'), 'Deutsch');
|
|
iD.utilGetSetValue(selection.selectAll('.wiki-title'), 'Skip');
|
|
happen.once(selection.selectAll('.wiki-title').node(), { type: 'change' });
|
|
happen.once(selection.selectAll('.wiki-title').node(), { type: 'blur' });
|
|
|
|
// t0
|
|
expect(context.entity(entity.id).tags.wikidata).to.be.undefined;
|
|
|
|
// t30: graph change - Set title to "Title"
|
|
window.setTimeout(function() {
|
|
iD.utilGetSetValue(selection.selectAll('.wiki-title'), 'Title');
|
|
happen.once(selection.selectAll('.wiki-title').node(), { type: 'change' });
|
|
happen.once(selection.selectAll('.wiki-title').node(), { type: 'blur' });
|
|
}, 30);
|
|
|
|
// t60: at t0 + 60ms (JSONP_DELAY), wikidata SHOULD NOT be set because graph has changed.
|
|
|
|
// t70: check that wikidata unchanged
|
|
window.setTimeout(function() {
|
|
expect(context.entity(entity.id).tags.wikidata).to.be.undefined;
|
|
}, 70);
|
|
|
|
// t90: at t30 + 60ms (JSONP_DELAY), wikidata SHOULD be set because graph is unchanged.
|
|
|
|
// t100: check that wikidata has changed
|
|
window.setTimeout(function() {
|
|
expect(context.entity(entity.id).tags.wikidata).to.equal('Q216353');
|
|
|
|
expect(spy.callCount).to.equal(4);
|
|
expect(spy.getCall(0)).to.have.been.calledWith({ wikipedia: 'de:Skip' }); // 'Skip' on change
|
|
expect(spy.getCall(1)).to.have.been.calledWith({ wikipedia: 'de:Skip' }); // 'Skip' on blur
|
|
expect(spy.getCall(2)).to.have.been.calledWith({ wikipedia: 'de:Title' }); // 'Title' on change +10ms
|
|
expect(spy.getCall(3)).to.have.been.calledWith({ wikipedia: 'de:Title' }); // 'Title' on blur +10ms
|
|
done();
|
|
}, 100);
|
|
|
|
});
|
|
});
|