91 lines
2.4 KiB
JavaScript
91 lines
2.4 KiB
JavaScript
import { module, test } from 'qunit';
|
|
import { setupTest } from 'marco/tests/helpers';
|
|
|
|
module('Unit | Service | photon', function (hooks) {
|
|
setupTest(hooks);
|
|
|
|
test('it exists', function (assert) {
|
|
let service = this.owner.lookup('service:photon');
|
|
assert.ok(service);
|
|
});
|
|
|
|
test('search handles successful response', async function (assert) {
|
|
let service = this.owner.lookup('service:photon');
|
|
|
|
// Mock fetch
|
|
const originalFetch = window.fetch;
|
|
window.fetch = async () => {
|
|
return {
|
|
ok: true,
|
|
json: async () => ({
|
|
features: [
|
|
{
|
|
properties: {
|
|
name: 'Test Place',
|
|
osm_id: 123,
|
|
osm_type: 'N',
|
|
city: 'Test City',
|
|
country: 'Test Country',
|
|
},
|
|
geometry: {
|
|
coordinates: [13.4, 52.5], // lon, lat
|
|
},
|
|
},
|
|
],
|
|
}),
|
|
};
|
|
};
|
|
|
|
try {
|
|
const results = await service.search('Test', 52.5, 13.4);
|
|
assert.strictEqual(results.length, 1);
|
|
assert.strictEqual(results[0].title, 'Test Place');
|
|
assert.strictEqual(results[0].lat, 52.5);
|
|
assert.strictEqual(results[0].lon, 13.4);
|
|
assert.strictEqual(results[0].description, 'Test City, Test Country');
|
|
} finally {
|
|
window.fetch = originalFetch;
|
|
}
|
|
});
|
|
|
|
test('search handles empty response', async function (assert) {
|
|
let service = this.owner.lookup('service:photon');
|
|
|
|
// Mock fetch
|
|
const originalFetch = window.fetch;
|
|
window.fetch = async () => {
|
|
return {
|
|
ok: true,
|
|
json: async () => ({ features: [] }),
|
|
};
|
|
};
|
|
|
|
try {
|
|
const results = await service.search('Nonexistent', 52.5, 13.4);
|
|
assert.strictEqual(results.length, 0);
|
|
} finally {
|
|
window.fetch = originalFetch;
|
|
}
|
|
});
|
|
|
|
test('normalizeFeature handles missing properties', function (assert) {
|
|
let service = this.owner.lookup('service:photon');
|
|
|
|
const feature = {
|
|
properties: {
|
|
street: 'Main St',
|
|
housenumber: '123',
|
|
city: 'Metropolis',
|
|
},
|
|
geometry: {
|
|
coordinates: [10, 20],
|
|
},
|
|
};
|
|
|
|
const result = service.normalizeFeature(feature);
|
|
assert.strictEqual(result.title, 'Main St 123, Metropolis'); // Fallback to address description
|
|
assert.strictEqual(result.lat, 20);
|
|
assert.strictEqual(result.lon, 10);
|
|
});
|
|
});
|