mirror of
https://github.com/FoggedLens/iD.git
synced 2026-02-13 17:23:02 +00:00
@@ -33,12 +33,16 @@ iD.taginfo = function() {
|
||||
return _.omit(parameters, 'geometry');
|
||||
}
|
||||
|
||||
function popular(parameters) {
|
||||
var pop_field = 'fraction';
|
||||
if (parameters) pop_field = 'count_' + parameters.filter + '_fraction';
|
||||
function popularKeys(parameters) {
|
||||
var pop_field = 'count_all_fraction';
|
||||
if (parameters.filter) pop_field = 'count_' + parameters.filter + '_fraction';
|
||||
return function(d) { return parseFloat(d[pop_field]) > 0.01; };
|
||||
}
|
||||
|
||||
function popularValues(parameters) {
|
||||
return function(d) { return parseFloat(d['fraction']) > 0.01; };
|
||||
}
|
||||
|
||||
function valKey(d) { return { value: d.key }; }
|
||||
|
||||
function valKeyDescription(d) {
|
||||
@@ -58,7 +62,7 @@ iD.taginfo = function() {
|
||||
page: 1
|
||||
}, parameters)), function(err, d) {
|
||||
if (err) return callback(err);
|
||||
callback(null, d.data.filter(popular(parameters)).map(valKey));
|
||||
callback(null, d.data.filter(popularKeys(parameters)).map(valKey));
|
||||
});
|
||||
};
|
||||
|
||||
@@ -72,7 +76,7 @@ iD.taginfo = function() {
|
||||
page: 1
|
||||
}, parameters)), function(err, d) {
|
||||
if (err) return callback(err);
|
||||
callback(null, d.data.filter(popular()).map(valKeyDescription));
|
||||
callback(null, d.data.filter(popularValues()).map(valKeyDescription));
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
describe("iD.taginfo", function() {
|
||||
var server;
|
||||
var server, taginfo;
|
||||
|
||||
beforeEach(function() {
|
||||
server = sinon.fakeServer.create();
|
||||
taginfo = iD.taginfo();
|
||||
});
|
||||
|
||||
afterEach(function() {
|
||||
@@ -15,46 +16,81 @@ describe("iD.taginfo", function() {
|
||||
|
||||
describe("#keys", function() {
|
||||
it("calls the given callback with the results of the keys query", function() {
|
||||
var taginfo = iD.taginfo(),
|
||||
callback = sinon.spy();
|
||||
|
||||
var callback = sinon.spy();
|
||||
taginfo.keys({query: "amen"}, callback);
|
||||
|
||||
server.respondWith("GET", new RegExp("http://taginfo.openstreetmap.org/api/4/keys/all"),
|
||||
[200, { "Content-Type": "application/json" },
|
||||
'{"data":[{"count_all":5190337,"key":"amenity"}]}']);
|
||||
'{"data":[{"count_all":5190337,"key":"amenity","count_all_fraction":1.0}]}']);
|
||||
server.respond();
|
||||
|
||||
expect(query(server.requests[0].url)).to.eql(
|
||||
{query: "amen", page: "1", rp: "6", sortname: "count_all", sortorder: "desc"});
|
||||
expect(callback).to.have.been.calledWith(null,
|
||||
{"data":[{"count_all":5190337,"key":"amenity"}]});
|
||||
expect(callback).to.have.been.calledWith(null, [{"value":"amenity"}]);
|
||||
});
|
||||
|
||||
it("filters only popular nodes", function() {
|
||||
var callback = sinon.spy();
|
||||
taginfo.keys({query: "amen"}, callback);
|
||||
|
||||
server.respondWith("GET", new RegExp("http://taginfo.openstreetmap.org/api/4/keys/all"),
|
||||
[200, { "Content-Type": "application/json" },
|
||||
'{"data":[{"count_all":5190337,"key":"amenity","count_all_fraction":1.0, "count_nodes_fraction":1.0},\
|
||||
{"count_all":1,"key":"amenityother","count_all_fraction":0.0, "count_nodes_fraction":0.0}]}']);
|
||||
server.respond();
|
||||
|
||||
expect(callback).to.have.been.calledWith(null, [{"value":"amenity"}]);
|
||||
});
|
||||
|
||||
it("filters only popular nodes with an entity type filter", function() {
|
||||
var callback = sinon.spy();
|
||||
|
||||
taginfo.keys({query: "amen", filter: "nodes"}, callback);
|
||||
|
||||
server.respondWith("GET", new RegExp("http://taginfo.openstreetmap.org/api/4/keys/all"),
|
||||
[200, { "Content-Type": "application/json" },
|
||||
'{"data":[{"count_all":5190337,"key":"amenity","count_all_fraction":1.0, "count_nodes_fraction":1.0},\
|
||||
{"count_all":1,"key":"amenityother","count_all_fraction":0.0, "count_nodes_fraction":1.0}]}']);
|
||||
server.respond();
|
||||
|
||||
expect(callback).to.have.been.calledWith(null, [{"value":"amenity"},{"value":"amenityother"}]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("#values", function() {
|
||||
it("calls the given callback with the results of the values query", function() {
|
||||
var taginfo = iD.taginfo(),
|
||||
callback = sinon.spy();
|
||||
var callback = sinon.spy();
|
||||
|
||||
taginfo.values({key: "amenity", query: "par"}, callback);
|
||||
|
||||
server.respondWith("GET", new RegExp("http://taginfo.openstreetmap.org/api/4/key/values"),
|
||||
[200, { "Content-Type": "application/json" },
|
||||
'{"data":[{"value":"parking","description":"A place for parking cars"}]}']);
|
||||
'{"data":[{"value":"parking","description":"A place for parking cars", "fraction":0.1}]}']);
|
||||
server.respond();
|
||||
|
||||
expect(query(server.requests[0].url)).to.eql(
|
||||
{key: "amenity", query: "par", page: "1", rp: "20", sortname: 'count_all', sortorder: 'desc'});
|
||||
expect(callback).to.have.been.calledWith(null,
|
||||
{"data":[{"value":"parking","description":"A place for parking cars"}]});
|
||||
expect(callback).to.have.been.calledWith(null, [{"value":"parking","title":"A place for parking cars"}]);
|
||||
});
|
||||
|
||||
it("filters popular values", function() {
|
||||
var callback = sinon.spy();
|
||||
|
||||
taginfo.values({key: "amenity", query: "par"}, callback);
|
||||
|
||||
server.respondWith("GET", new RegExp("http://taginfo.openstreetmap.org/api/4/key/values"),
|
||||
[200, { "Content-Type": "application/json" },
|
||||
'{"data":[{"value":"parking","description":"A place for parking cars", "fraction":1.0},\
|
||||
{"value":"party","description":"A place for partying", "fraction":0.0}]}']);
|
||||
server.respond();
|
||||
|
||||
expect(callback).to.have.been.calledWith(null, [{"value":"parking","title":"A place for parking cars"}]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("#docs", function() {
|
||||
it("calls the given callback with the results of the docs query", function() {
|
||||
var taginfo = iD.taginfo(),
|
||||
callback = sinon.spy();
|
||||
var callback = sinon.spy();
|
||||
|
||||
taginfo.docs({key: "amenity", value: "parking"}, callback);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user