Draw outlines/areas for ways and relations on map
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { module, test } from 'qunit';
|
||||
import { setupTest } from 'marco/tests/helpers';
|
||||
import Service from '@ember/service';
|
||||
|
||||
module('Unit | Route | place', function (hooks) {
|
||||
setupTest(hooks);
|
||||
@@ -8,4 +9,120 @@ module('Unit | Route | place', function (hooks) {
|
||||
let route = this.owner.lookup('route:place');
|
||||
assert.ok(route);
|
||||
});
|
||||
|
||||
test('afterModel enriches model with missing geometry', async function (assert) {
|
||||
let route = this.owner.lookup('route:place');
|
||||
|
||||
// Mock Services
|
||||
let fetchCalled = false;
|
||||
let selectPlaceCalled = false;
|
||||
|
||||
class OsmStub extends Service {
|
||||
async fetchOsmObject(id, type) {
|
||||
fetchCalled = true;
|
||||
assert.strictEqual(id, '123', 'Correct ID passed');
|
||||
assert.strictEqual(type, 'way', 'Correct Type passed');
|
||||
return {
|
||||
osmId: '123',
|
||||
osmType: 'way',
|
||||
geojson: { type: 'Polygon', coordinates: [] },
|
||||
tags: { updated: 'true' },
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
class MapUiStub extends Service {
|
||||
selectPlace(place) {
|
||||
selectPlaceCalled = true;
|
||||
}
|
||||
stopSearch() {}
|
||||
}
|
||||
|
||||
this.owner.register('service:osm', OsmStub);
|
||||
this.owner.register('service:map-ui', MapUiStub);
|
||||
|
||||
// Initial partial model (from search)
|
||||
let model = {
|
||||
osmId: '123',
|
||||
osmType: 'way',
|
||||
title: 'Partial Place',
|
||||
// No geojson
|
||||
};
|
||||
|
||||
await route.afterModel(model);
|
||||
|
||||
assert.ok(fetchCalled, 'fetchOsmObject should be called');
|
||||
assert.ok(selectPlaceCalled, 'selectPlace should be called');
|
||||
assert.ok(model.geojson, 'Model should now have geojson');
|
||||
assert.strictEqual(
|
||||
model.tags.updated,
|
||||
'true',
|
||||
'Model should have updated tags'
|
||||
);
|
||||
});
|
||||
|
||||
test('afterModel skips fetch if geometry exists', async function (assert) {
|
||||
let route = this.owner.lookup('route:place');
|
||||
|
||||
let fetchCalled = false;
|
||||
|
||||
class OsmStub extends Service {
|
||||
async fetchOsmObject() {
|
||||
fetchCalled = true;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class MapUiStub extends Service {
|
||||
selectPlace() {}
|
||||
stopSearch() {}
|
||||
}
|
||||
|
||||
this.owner.register('service:osm', OsmStub);
|
||||
this.owner.register('service:map-ui', MapUiStub);
|
||||
|
||||
let model = {
|
||||
osmId: '456',
|
||||
osmType: 'relation',
|
||||
geojson: { type: 'MultiLineString' },
|
||||
};
|
||||
|
||||
await route.afterModel(model);
|
||||
|
||||
assert.notOk(
|
||||
fetchCalled,
|
||||
'fetchOsmObject should NOT be called if geojson exists'
|
||||
);
|
||||
});
|
||||
|
||||
test('afterModel skips fetch for nodes even if geometry is missing', async function (assert) {
|
||||
let route = this.owner.lookup('route:place');
|
||||
|
||||
let fetchCalled = false;
|
||||
|
||||
class OsmStub extends Service {
|
||||
async fetchOsmObject() {
|
||||
fetchCalled = true;
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class MapUiStub extends Service {
|
||||
selectPlace() {}
|
||||
stopSearch() {}
|
||||
}
|
||||
|
||||
this.owner.register('service:osm', OsmStub);
|
||||
this.owner.register('service:map-ui', MapUiStub);
|
||||
|
||||
let model = {
|
||||
osmId: '789',
|
||||
osmType: 'node',
|
||||
// No geojson, but it's a node
|
||||
};
|
||||
|
||||
await route.afterModel(model);
|
||||
|
||||
assert.notOk(fetchCalled, 'fetchOsmObject should NOT be called for nodes');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user