const assert = require('chai').assert; import { ConfigParams, IdGenerator, RandomArray, RandomFloat, RandomInteger } from 'pip-services3-commons-nodex'; import { Descriptor } from 'pip-services3-commons-nodex'; import { References } from 'pip-services3-commons-nodex'; import { FireMapMemoryPersistence } from '../../src/persistence/FireMapMemoryPersistence'; import { FireMapController } from '../../src/logic/FireMapController'; import { FireMapUpdateV1 } from '../../src/data/version1/FireMapUpdateV1'; import { FireMapUpdateTypeV1 } from '../../src/data/version1/FireMapUpdateTypeV1'; import { LocationV1 } from '../../src/data/version1'; import { FireMapUtil } from '../../src/map_utils/FireMapUtil'; suite('FireMapController', () => { let persistence: FireMapMemoryPersistence; let controller: FireMapController; setup(async () => { persistence = new FireMapMemoryPersistence(); persistence.configure(new ConfigParams()); controller = new FireMapController(); controller.configure(new ConfigParams()); let references = References.fromTuples( new Descriptor('eic-stopfires-services-firemap', 'persistence', 'memory', 'default', '1.0'), persistence, new Descriptor('eic-stopfires-services-firemap', 'controller', 'default', 'default', '1.0'), controller ); controller.setReferences(references); await persistence.open(null); await persistence.clear(null); }); teardown(async () => { await persistence.close(null); }); test('Test Get and Update Tiles', async () => { let updates: FireMapUpdateV1[] = []; // generate updates for (let i = 0; i < 10; i++) { updates.push({ type: RandomArray.pick(Object.values(FireMapUpdateTypeV1)), time: new Date(), drone_id: IdGenerator.nextLong(), long: RandomFloat.nextFloat(-180, 180), lat: RandomFloat.nextFloat(-90, 90), people: RandomInteger.nextInteger(0, 15) }); } await controller.updateTiles(null, updates); let tiles = await controller.getTiles(null, null, null, 3); assert.isNotNull(tiles); assert.isTrue(tiles.length > 0); // test filters let from: LocationV1 = { lat: -10, long: -50 }; let to: LocationV1 = { lat: 45, long: 50 }; tiles = await controller.getTiles(null, from, to, 2); for (let tile of tiles) { assert.equal(tile.zoom, 2); assert.isTrue(from.lat <= tile.flat && tile.flat <= to.lat); assert.isTrue(from.long <= tile.flng && tile.flng <= to.long); assert.isTrue(from.lat <= tile.tlat && tile.tlat <= to.lat); assert.isTrue(from.long <= tile.tlng && tile.tlng <= to.long); } // update created tiles let update: FireMapUpdateV1 = updates[0]; update.people = 150; let zoom = 0; let locator = FireMapUtil.getLocator({lat: update.lat, long: update.long}); locator = FireMapUtil.composeTileLocByZoom(locator, zoom); await controller.updateTiles(null, [update]); tiles = await controller.getTiles(null, null, null, zoom); assert.isTrue(tiles.length > 0); let tile = tiles.find(t => t.id == locator); assert.equal(tile.id, locator); assert.equal(tile.people_count, 150); }); });