Files
iD/test/spec/core/data.js
Bryan Housel c481f90e7d Stop bundling wmf-sitematrix, move it extern
This also includes a bunch of tweaks to make the tests work
in both PhantomJS and modern browsers like Chrome.

Basically - introduce some more async into the test code so that
the coreData.get promise is guaranteed to settle.  Because in
PhantomJS the promise is polyfilled, and Chrome it's native, they
work slightly differently.
2020-01-29 12:30:11 -05:00

76 lines
2.6 KiB
JavaScript

describe('iD.coreData', function() {
var _context;
before(function() {
iD.data.test = { hello: 'world' };
});
after(function() {
delete iD.data.test;
});
beforeEach(function() {
_context = iD.coreContext();
});
describe('#fileMap', function() {
it('gets the fileMap', function() {
var data = iD.coreData(_context);
expect(data.fileMap()).to.be.a('object');
});
it('sets the fileMap', function() {
var data = iD.coreData(_context);
var files = { 'intro_graph': 'data/intro_graph.min.json' };
expect(data.fileMap(files)).to.be.ok;
});
});
describe('#get', function() {
it('returns a promise resolved if we already have the data', function(done) {
var data = iD.coreData(_context);
var prom = data.get('test');
// expect(prom).to.be.a('promise'); // these are polyfilled in phantomjs
prom
.then(function(data) {
expect(data).to.be.a('object');
expect(data.hello).to.eql('world');
})
.finally(done);
window.setTimeout(function() {}, 20); // async - to let the promise settle in phantomjs
});
it('returns a promise rejected if we can not get the data', function(done) {
var data = iD.coreData(_context);
var prom = data.get('wat');
prom
.then(function(data) {
throw new Error('We were not supposed to get data but did: ' + data);
})
.catch(function(err) {
expect(/^Unknown data file/.test(err)).to.be.true;
})
.finally(done);
window.setTimeout(function() {}, 20); // async - to let the promise settle in phantomjs
});
it('returns a promise to fetch data if we do not already have the data', function(done) {
var files = { 'intro_graph': 'data/intro_graph.min.json' };
var data = iD.coreData(_context).fileMap(files);
var prom = data.get('intro_graph');
// expect(prom).to.be.a('promise'); // these are polyfilled in phantomjs
prom
.then(function(data) {
expect(data).to.be.a('object');
expect(data.n1.tags.name).to.eql('Three Rivers City Hall');
})
.finally(done);
window.setTimeout(function() {}, 20); // async - to let the promise settle in phantomjs
});
});
});