From 1e971352458e744481191e4a883a32599b09025a Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Sun, 10 Apr 2016 16:00:39 -0400 Subject: [PATCH] Update tests for mapillary service, blacklist Null Island data --- test/spec/services/mapillary.js | 106 +++++++++++++++++++++++--------- 1 file changed, 78 insertions(+), 28 deletions(-) diff --git a/test/spec/services/mapillary.js b/test/spec/services/mapillary.js index 787c54295..04cf224c9 100644 --- a/test/spec/services/mapillary.js +++ b/test/spec/services/mapillary.js @@ -5,6 +5,7 @@ describe('iD.services.mapillary', function() { beforeEach(function() { context = iD().assetPath('../dist/'); context.projection.scale(667544.214430109); // z14 + context.projection.translate([-116508, 0]); // 10,0 server = sinon.fakeServer.create(); mapillary = iD.services.mapillary(); @@ -29,11 +30,32 @@ describe('iD.services.mapillary', function() { }); describe('#loadImages', function() { - it('fires loadedImages when images are loaded', function() { + it('fires loadedImages when images are loaded', function() { var spy = sinon.spy(); mapillary.on('loadedImages', spy); mapillary.loadImages(context.projection, dimensions); + var match = /search\/im\/geojson/, + features = [{ + type: 'Feature', + geometry: { type: 'Point', coordinates: [10,0] }, + properties: { ca: 90, key: '0' } + }], + response = { type: 'FeatureCollection', features: features }; + + server.respondWith('GET', match, + [200, { 'Content-Type': 'application/json' }, JSON.stringify(response) ]); + server.respond(); + + expect(spy).to.have.been.calledOnce; + }); + + it('does not load images around null island', function() { + var spy = sinon.spy(); + context.projection.translate([0,0]); + mapillary.on('loadedImages', spy); + mapillary.loadImages(context.projection, dimensions); + var match = /search\/im\/geojson/, features = [{ type: 'Feature', @@ -46,7 +68,7 @@ describe('iD.services.mapillary', function() { [200, { 'Content-Type': 'application/json' }, JSON.stringify(response) ]); server.respond(); - expect(spy).to.have.been.calledOnce; + expect(spy).to.have.been.not.called; }); it('loads multiple pages of image results', function() { @@ -61,14 +83,14 @@ describe('iD.services.mapillary', function() { for (i = 0; i < 1000; i++) { features0.push({ type: 'Feature', - geometry: { type: 'Point', coordinates: [0,0] }, + geometry: { type: 'Point', coordinates: [10,0] }, properties: { ca: 90, key: String(i) } }); } for (i = 0; i < 500; i++) { features1.push({ type: 'Feature', - geometry: { type: 'Point', coordinates: [0,0] }, + geometry: { type: 'Point', coordinates: [10,0] }, properties: { ca: 90, key: String(1000 + i) } }); } @@ -135,7 +157,7 @@ describe('iD.services.mapillary', function() { }], features = [{ type: 'Feature', - geometry: { type: 'Point', coordinates: [0,0] }, + geometry: { type: 'Point', coordinates: [10,0] }, properties: { rects: rects, key: '0' } }], response = { type: 'FeatureCollection', features: features }; @@ -147,6 +169,34 @@ describe('iD.services.mapillary', function() { expect(spy).to.have.been.calledOnce; }); + it('does not load signs around null island', function() { + var spy = sinon.spy(); + context.projection.translate([0,0]); + mapillary.on('loadedSigns', spy); + mapillary.loadSigns(context, context.projection, dimensions); + + var match = /search\/im\/geojson\/or/, + rects = [{ + 'package': 'trafficsign_us_3.0', + rect: [ 0.805, 0.463, 0.833, 0.502 ], + length: 4, + score: '1.27', + type: 'regulatory--maximum-speed-limit-65--us' + }], + features = [{ + type: 'Feature', + geometry: { type: 'Point', coordinates: [0,0] }, + properties: { rects: rects, key: '0' } + }], + response = { type: 'FeatureCollection', features: features }; + + server.respondWith('GET', match, + [200, { 'Content-Type': 'application/json' }, JSON.stringify(response) ]); + server.respond(); + + expect(spy).to.have.been.not.called; + }); + it('loads multiple pages of signs results', function() { var spy = sinon.spy(); mapillary.on('loadedSigns', spy); @@ -166,14 +216,14 @@ describe('iD.services.mapillary', function() { for (i = 0; i < 1000; i++) { features0.push({ type: 'Feature', - geometry: { type: 'Point', coordinates: [0,0] }, + geometry: { type: 'Point', coordinates: [10,0] }, properties: { rects: rects, key: String(i) } }); } for (i = 0; i < 500; i++) { features1.push({ type: 'Feature', - geometry: { type: 'Point', coordinates: [0,0] }, + geometry: { type: 'Point', coordinates: [10,0] }, properties: { rects: rects, key: String(1000 + i) } }); } @@ -197,27 +247,27 @@ describe('iD.services.mapillary', function() { describe('#images', function() { it('returns images in the visible map area', function() { var features = [ - [0, 0, 0, 0, { key: '0', loc: [0,0], ca: 90 }], - [0, 0, 0, 0, { key: '1', loc: [0,0], ca: 90 }], - [0, 1, 0, 1, { key: '2', loc: [0,1], ca: 90 }] + [10, 0, 10, 0, { key: '0', loc: [10,0], ca: 90 }], + [10, 0, 10, 0, { key: '1', loc: [10,0], ca: 90 }], + [10, 1, 10, 1, { key: '2', loc: [10,1], ca: 90 }] ]; iD.services.mapillary.cache.images.rtree.load(features); var res = mapillary.images(context.projection, dimensions); expect(res).to.deep.eql([ - { key: '0', loc: [0,0], ca: 90 }, - { key: '1', loc: [0,0], ca: 90 } + { key: '0', loc: [10,0], ca: 90 }, + { key: '1', loc: [10,0], ca: 90 } ]); }); it('limits results no more than 3 stacked images in one spot', function() { var features = [ - [0, 0, 0, 0, { key: '0', loc: [0,0], ca: 90 }], - [0, 0, 0, 0, { key: '1', loc: [0,0], ca: 90 }], - [0, 0, 0, 0, { key: '2', loc: [0,0], ca: 90 }], - [0, 0, 0, 0, { key: '3', loc: [0,0], ca: 90 }], - [0, 0, 0, 0, { key: '4', loc: [0,0], ca: 90 }] + [10, 0, 10, 0, { key: '0', loc: [10,0], ca: 90 }], + [10, 0, 10, 0, { key: '1', loc: [10,0], ca: 90 }], + [10, 0, 10, 0, { key: '2', loc: [10,0], ca: 90 }], + [10, 0, 10, 0, { key: '3', loc: [10,0], ca: 90 }], + [10, 0, 10, 0, { key: '4', loc: [10,0], ca: 90 }] ]; iD.services.mapillary.cache.images.rtree.load(features); @@ -236,17 +286,17 @@ describe('iD.services.mapillary', function() { type: 'regulatory--maximum-speed-limit-65--us' }], features = [ - [0, 0, 0, 0, { key: '0', loc: [0,0], signs: signs }], - [0, 0, 0, 0, { key: '1', loc: [0,0], signs: signs }], - [0, 1, 0, 1, { key: '2', loc: [0,1], signs: signs }] + [10, 0, 10, 0, { key: '0', loc: [10,0], signs: signs }], + [10, 0, 10, 0, { key: '1', loc: [10,0], signs: signs }], + [10, 1, 10, 1, { key: '2', loc: [10,1], signs: signs }] ]; iD.services.mapillary.cache.signs.rtree.load(features); var res = mapillary.signs(context.projection, dimensions); expect(res).to.deep.eql([ - { key: '0', loc: [0,0], signs: signs }, - { key: '1', loc: [0,0], signs: signs } + { key: '0', loc: [10,0], signs: signs }, + { key: '1', loc: [10,0], signs: signs } ]); }); @@ -259,11 +309,11 @@ describe('iD.services.mapillary', function() { type: 'regulatory--maximum-speed-limit-65--us' }], features = [ - [0, 0, 0, 0, { key: '0', loc: [0,0], signs: signs }], - [0, 0, 0, 0, { key: '1', loc: [0,0], signs: signs }], - [0, 0, 0, 0, { key: '2', loc: [0,0], signs: signs }], - [0, 0, 0, 0, { key: '3', loc: [0,0], signs: signs }], - [0, 0, 0, 0, { key: '4', loc: [0,0], signs: signs }] + [10, 0, 10, 0, { key: '0', loc: [10,0], signs: signs }], + [10, 0, 10, 0, { key: '1', loc: [10,0], signs: signs }], + [10, 0, 10, 0, { key: '2', loc: [10,0], signs: signs }], + [10, 0, 10, 0, { key: '3', loc: [10,0], signs: signs }], + [10, 0, 10, 0, { key: '4', loc: [10,0], signs: signs }] ]; iD.services.mapillary.cache.signs.rtree.load(features); @@ -296,7 +346,7 @@ describe('iD.services.mapillary', function() { var signdata = { key: '0', - loc: [0,0], + loc: [10,0], signs: [{ 'package': 'trafficsign_us_3.0', rect: [ 0.805, 0.463, 0.833, 0.502 ],